'use client'; import clsx from 'clsx'; import { useCallback, useLayoutEffect, useMemo, useState } from 'react'; import DataTable, { createColumnHelper, RowSelectionState } from '@/components/ui/DataTable'; import { useConceptTheme } from '@/context/ThemeContext'; import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform'; import { describeConstituenta } from '@/utils/labels'; import ConstituentaBadge from '../info/ConstituentaBadge'; import Button from '../ui/Button'; import FlexColumn from '../ui/FlexColumn'; interface ConstituentaMultiPickerProps { id?: string; schema?: IRSForm; prefixID: string; rows?: number; selected: ConstituentaID[]; setSelected: React.Dispatch; } const columnHelper = createColumnHelper(); function ConstituentaMultiPicker({ id, schema, prefixID, rows, selected, setSelected }: ConstituentaMultiPickerProps) { const { colors } = useConceptTheme(); const [rowSelection, setRowSelection] = useState({}); useLayoutEffect(() => { if (!schema || selected.length === 0) { setRowSelection({}); } else { const newRowSelection: RowSelectionState = {}; schema.items.forEach((cst, index) => { newRowSelection[String(index)] = selected.includes(cst.id); }); setRowSelection(newRowSelection); } }, [selected, schema]); function handleRowSelection(updater: React.SetStateAction) { if (!schema) { setSelected([]); } else { const newRowSelection = typeof updater === 'function' ? updater(rowSelection) : updater; const newSelection: ConstituentaID[] = []; schema.items.forEach((cst, index) => { if (newRowSelection[String(index)] === true) { newSelection.push(cst.id); } }); setSelected(newSelection); } } const selectBasis = useCallback(() => { if (!schema || selected.length === 0) { return; } const addition = schema.graph.expandInputs(selected).filter(id => !selected.includes(id)); if (addition.length > 0) { setSelected([...selected, ...addition]); } }, [schema, selected, setSelected]); const selectDependant = useCallback(() => { if (!schema || selected.length === 0) { return; } const addition = schema.graph.expandOutputs(selected).filter(id => !selected.includes(id)); if (addition.length > 0) { setSelected([...selected, ...addition]); } }, [schema, selected, setSelected]); const columns = useMemo( () => [ columnHelper.accessor('alias', { id: 'alias', header: 'Имя', size: 65, cell: props => }), columnHelper.accessor(cst => describeConstituenta(cst), { id: 'description', size: 1000, header: 'Описание' }) ], [colors, prefixID] ); return (
Выбраны {selected.length} из {schema?.items.length ?? 0}

Список пуст

} />
); } export default ConstituentaMultiPicker;