import { Link, useForm } from '@inertiajs/react'; import InvestmentCoordinates from '@/components/investment-coordinates'; import { TerritoryLevel, type TerritoryOption, } from '@/components/investment-territory'; import { useState } from 'react'; import { Management, Field, button, control, states } from './shared'; type Values = Record; type Entry = Record & { id: number }; const opportunityFields = { reference: 'Referência', title: 'Título', slug: 'Slug (endereço)', summary: 'Resumo', description: 'Descrição', promoter_name: 'Promotor', promoter_type: 'Tipo de promotor', estimated_investment_amount: 'Investimento estimado', estimated_investment_currency: 'Moeda (código de três letras)', financing_modality: 'Modalidade de financiamento', expected_impact: 'Impacto esperado', }; const sectorFields = { name: 'Nome', slug: 'Slug (endereço)', short_description: 'Descrição curta', description: 'Descrição', sort_order: 'Ordem de apresentação', }; const maturities = [ 'Ideia identificada', 'Pré-estudo disponível', 'Estudo de viabilidade em curso', 'Projecto estruturado', 'Pronto para investimento', 'Em negociação ou implementação', ]; export default function Editor({ resource, record, sectors, territoryPath = [], }: { resource: 'sectors' | 'opportunities'; record: Entry | null; sectors: { id: number; name: string }[]; territoryPath?: TerritoryOption[]; }) { const isSector = resource === 'sectors'; const fields = isSector ? sectorFields : opportunityFields; const initial: Values = Object.fromEntries( Object.keys(fields).map((key) => [ key, String( record?.[key] ?? (key === 'estimated_investment_currency' ? 'USD' : key === 'sort_order' ? '0' : ''), ), ]), ); if (isSector) { initial.is_active = Boolean(record?.is_active ?? true); initial.editorial_published = Boolean(record?.published_at); } else { initial.sector_id = String(record?.sector_id ?? ''); initial.maturity_level = String(record?.maturity_level ?? ''); initial.status = String(record?.status ?? 'draft'); initial.is_featured = Boolean(record?.is_featured ?? false); initial.geography_scope = String( record?.geography_scope ?? 'unspecified', ); initial.territory_version = String(record?.territory_version ?? 0); ['province_id', 'district_id', 'admin_post_id', 'locality_id'].forEach( (field, index) => { initial[field] = territoryPath[index]?.id ?? ''; }, ); } const form = useForm(initial); const [creationPath, setCreationPath] = useState(territoryPath); return ( {!isSector && record && ( Gerir clusters, corredores, projectos, educação e necessidades )}
{ event.preventDefault(); if (record) form.put(`/management/${resource}/${record.id}`); else form.post(`/management/${resource}`); }} >
{!isSector && (
{( [ 'province_id', 'district_id', 'admin_post_id', 'locality_id', ] as const ).map((key, index) => ( { const path = [ ...creationPath.slice(0, index), ...(value ? [value] : []), ]; setCreationPath(path); form.setData((data) => ({ ...data, province_id: path[0]?.id ?? '', district_id: path[1]?.id ?? '', admin_post_id: path[2]?.id ?? '', locality_id: path[3]?.id ?? '', })); }} /> ))}
)} {isSector && (

Desmarque para retirar do catálogo, conservando o cadastro e as relações.

)} {Object.entries(fields).map(([key, label]) => ( {[ 'description', 'summary', 'short_description', 'expected_impact', ].includes(key) ? (