'use client'; import clsx from 'clsx'; import { useLayoutEffect, useMemo, useState } from 'react'; import DataTable, { createColumnHelper, RowSelectionState } from '@/components/ui/DataTable'; import { useConceptOptions } from '@/context/ConceptOptionsContext'; import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform'; import { isBasicConcept } from '@/models/rsformAPI'; import { describeConstituenta } from '@/utils/labels'; import BadgeConstituenta from '../info/BadgeConstituenta'; import NoData from '../ui/NoData'; import ToolbarGraphSelection from './ToolbarGraphSelection'; interface PickMultiConstituentaProps { id?: string; schema?: IRSForm; prefixID: string; rows?: number; selected: ConstituentaID[]; setSelected: React.Dispatch>; } const columnHelper = createColumnHelper(); function PickMultiConstituenta({ id, schema, prefixID, rows, selected, setSelected }: PickMultiConstituentaProps) { const { colors } = useConceptOptions(); 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 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} {schema ? ( isBasicConcept(schema.cstByID.get(cstID)?.cst_type)} isOwned={cstID => !schema.cstByID.get(cstID)?.is_inherited} setSelected={setSelected} emptySelection={selected.length === 0} className='w-full ml-8' /> ) : null}

Список пуст

} />
); } export default PickMultiConstituenta;