import { useForm } from '@inertiajs/react'; import { Field, button, control } from '../management/shared'; import type { Chain } from './types'; export type ChainLink = { id: string; origin: string; destination: string; link_type: string; }; export type Gap = { id: string; value_chain_id: string; title: string; location: string; required_capacity: string; rationale: string; status: string; call_to_action: string; }; const linkTypes: Record = { supplies: 'Fornece a', processes: 'Transforma para', distributes: 'Distribui para', supports: 'Apoia', }; const gapStates: Record = { identified: 'Identificada', in_review: 'Em análise', resolved: 'Resolvida', withdrawn: 'Retirada', }; function RemoveLink({ clusterId, link, }: { clusterId: string; link: ChainLink; }) { const form = useForm({}); return (
  • {link.origin} → {linkTypes[link.link_type]} → {link.destination}
  • ); } function GapForm({ clusterId, chains, gap, }: { clusterId: string; chains: Chain[]; gap?: Gap; }) { const form = useForm({ value_chain_id: gap?.value_chain_id ?? '', title: gap?.title ?? '', location: gap?.location ?? '', required_capacity: gap?.required_capacity ?? '', rationale: gap?.rationale ?? '', status: gap?.status ?? 'identified', call_to_action: gap?.call_to_action ?? '', }); const textFields = { title: 'Título da lacuna', location: 'Localização', required_capacity: 'Capacidade necessária', rationale: 'Justificação', call_to_action: 'Chamada para acção', } as const; return (
    { e.preventDefault(); const url = `/management/clusters/${clusterId}/gaps`; if (gap) form.put(`${url}/${gap.id}`, { preserveScroll: true }); else form.post(url, { preserveScroll: true, onSuccess: () => form.reset(), }); }} >

    {gap ? gap.title : 'Nova lacuna'}

    {(Object.keys(textFields) as (keyof typeof textFields)[]).map( (field) => (