'use client'; import { useCallback, useMemo, useState } from 'react'; import BadgeConstituenta from '@/components/info/BadgeConstituenta'; import SelectConstituenta from '@/components/select/SelectConstituenta'; import DataTable, { createColumnHelper } from '@/components/ui/DataTable'; import MiniButton from '@/components/ui/MiniButton'; import { useConceptOptions } from '@/context/ConceptOptionsContext'; import { LibraryItemID } from '@/models/library'; import { ICstSubstitute, IMultiSubstitution, IOperation } from '@/models/oss'; import { ConstituentaID, IConstituenta, IRSForm } from '@/models/rsform'; import { IconKeepAliasOff, IconKeepAliasOn, IconKeepTermOff, IconKeepTermOn, IconPageLast, IconPageRight, IconRemove, IconReplace } from '../Icons'; import NoData from '../ui/NoData'; import SelectOperation from './SelectOperation'; function SubstitutionIcon({ item, className }: { item: IMultiSubstitution; className?: string }) { if (!item.transfer_term) { return ; } else { return ; } } interface PickSubstitutionsProps { prefixID: string; rows?: number; operations: IOperation[]; getSchema: (id: LibraryItemID) => IRSForm | undefined; getConstituenta: (id: ConstituentaID) => IConstituenta | undefined; getSchemaByCst: (id: ConstituentaID) => IRSForm | undefined; substitutions: ICstSubstitute[]; setSubstitutions: React.Dispatch>; } const columnHelper = createColumnHelper(); function PickSubstitutions({ prefixID, rows, operations, getSchema, getConstituenta, getSchemaByCst, substitutions, setSubstitutions }: PickSubstitutionsProps) { const { colors } = useConceptOptions(); const [leftArgument, setLeftArgument] = useState(undefined); const [rightArgument, setRightArgument] = useState(undefined); const leftSchema = useMemo( () => (leftArgument?.result ? getSchema(leftArgument.result) : undefined), [leftArgument, getSchema] ); const rightSchema = useMemo( () => (rightArgument?.result ? getSchema(rightArgument.result) : undefined), [rightArgument, getSchema] ); const [leftCst, setLeftCst] = useState(undefined); const [rightCst, setRightCst] = useState(undefined); const [deleteRight, setDeleteRight] = useState(true); const [takeLeftTerm, setTakeLeftTerm] = useState(true); const operationByConstituenta = useCallback( (cst: ConstituentaID): IOperation | undefined => { const schema = getSchemaByCst(cst); if (!schema) { return undefined; } const cstOperations = operations.filter(item => item.result === schema.id); return cstOperations.length === 1 ? cstOperations[0] : undefined; }, [getSchemaByCst, operations] ); const substitutionData: IMultiSubstitution[] = useMemo( () => substitutions.map(item => ({ original_operation: operationByConstituenta(item.original), original: getConstituenta(item.original), substitution: getConstituenta(item.substitution), substitution_operation: operationByConstituenta(item.substitution), transfer_term: item.transfer_term })), [getConstituenta, operationByConstituenta, substitutions] ); const toggleDelete = () => setDeleteRight(prev => !prev); const toggleTerm = () => setTakeLeftTerm(prev => !prev); function addSubstitution() { if (!leftCst || !rightCst) { return; } const newSubstitution: ICstSubstitute = { original: deleteRight ? rightCst.id : leftCst.id, substitution: deleteRight ? leftCst.id : rightCst.id, transfer_term: deleteRight != takeLeftTerm }; setSubstitutions(prev => [...prev, newSubstitution]); setLeftCst(undefined); setRightCst(undefined); } const handleDeleteRow = useCallback( (row: number) => { setSubstitutions(prev => { const newItems: ICstSubstitute[] = []; prev.forEach((item, index) => { if (index !== row) { newItems.push(item); } }); return newItems; }); }, [setSubstitutions] ); const columns = useMemo( () => [ columnHelper.accessor(item => item.substitution_operation?.alias ?? 'N/A', { id: 'left_schema', header: 'Операция', size: 100, cell: props =>
{props.getValue()}
}), columnHelper.accessor(item => item.substitution?.alias ?? 'N/A', { id: 'left_alias', header: () => Имя, size: 65, cell: props => props.row.original.substitution ? ( ) : ( 'N/A' ) }), columnHelper.display({ id: 'status', header: '', size: 40, cell: props => }), columnHelper.accessor(item => item.original?.alias ?? 'N/A', { id: 'right_alias', header: () => Имя, size: 65, cell: props => props.row.original.original ? ( ) : ( 'N/A' ) }), columnHelper.accessor(item => item.original_operation?.alias ?? 'N/A', { id: 'right_schema', header: 'Операция', size: 100, cell: props =>
{props.getValue()}
}), columnHelper.display({ id: 'actions', cell: props => (
} onClick={() => handleDeleteRow(props.row.index)} />
) }) ], [handleDeleteRow, colors, prefixID] ); return (
) : ( ) } /> ) : ( ) } />
item.id !== rightArgument?.id)} value={leftArgument} onSelectValue={setLeftArgument} /> !substitutions.find(item => item.original === cst.id))} value={leftCst} onSelectValue={setLeftCst} />
} disabled={!leftCst || !rightCst || leftCst === rightCst} onClick={addSubstitution} />
) : ( ) } /> ) : ( ) } />
item.id !== leftArgument?.id)} value={rightArgument} onSelectValue={setRightArgument} /> !substitutions.find(item => item.original === cst.id))} value={rightCst} onSelectValue={setRightCst} />

Список пуст

Добавьте отождествление

} />
); } export default PickSubstitutions;