import { useMemo } from 'react'; import { useQuery } from '@tanstack/react-query'; import { Checkbox } from '@/components/ui/checkbox'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Table, Link2 } from 'lucide-react'; import { apiRequest } from '@/lib/queryClient'; import type { DataTableSubdirectory } from '@shared/schema'; interface FormFieldTable { id?: number; type: string; allowMultiple?: boolean; options?: Record; } interface SubdirectoryFieldConfigProps { field: FormFieldTable; index: number; tablesData?: { tables: Array<{ id: number; name: string; columns: any[] }> }; updateField: (index: number, updates: Partial) => void; } export default function SubdirectoryFieldConfig({ field, index, tablesData, updateField, }: SubdirectoryFieldConfigProps) { const tableId = field.options?.tableId as number | undefined; const { data: subdirectoriesData } = useQuery<{ subdirectories: DataTableSubdirectory[] }>({ queryKey: ['/api/directories', tableId, 'subdirectories'], queryFn: async () => { const res = await apiRequest('GET', `/api/directories/${tableId}/subdirectories`); return res.json(); }, enabled: !!tableId, staleTime: 60 * 1000, }); const subdirectories = subdirectoriesData?.subdirectories || []; const showSubdirectory = !!field.options?.showSubdirectory; const selectedTable = useMemo(() => { return tablesData?.tables?.find((t) => t.id === tableId); }, [tablesData, tableId]); const handleTableChange = (value: string) => { if (value === 'none') { updateField(index, { options: { ...field.options, tableId: undefined, displayColumn: undefined, showSubdirectory: undefined, }, }); return; } const newTableId = parseInt(value); const newSelectedTable = tablesData?.tables?.find((t) => t.id === newTableId); updateField(index, { options: { ...field.options, tableId: newTableId, displayColumn: newSelectedTable?.columns?.[0]?.name || undefined, showSubdirectory: undefined, }, }); }; const handleShowSubdirectoryChange = (checked: boolean) => { updateField(index, { options: { ...field.options, showSubdirectory: checked, }, }); }; return (
updateField(index, { allowMultiple: !!checked })} data-testid={`checkbox-field-table-allow-multiple-${index}`} />
{tableId && (
)}
{tableId && (
{showSubdirectory && (

При выборе строки родительского справочника будет показан подсправочник, привязанный к этой строке. {subdirectories.length > 0 ? ` Найдено подсправочников: ${subdirectories.length}.` : ' Нет привязанных подсправочников.'}

)}
)}
); }