'use client'; import { useCallback, useMemo, useState } from 'react'; import { IconMoveDown, IconMoveUp, IconRemove } from '@/components/Icons'; import SelectOperation from '@/components/select/SelectOperation'; import DataTable, { createColumnHelper } from '@/components/ui/DataTable'; import MiniButton from '@/components/ui/MiniButton'; import NoData from '@/components/ui/NoData'; import { IOperation, OperationID } from '@/models/oss'; interface PickMultiOperationProps { rows?: number; items: IOperation[]; selected: OperationID[]; setSelected: React.Dispatch>; } const columnHelper = createColumnHelper(); function PickMultiOperation({ rows, items, selected, setSelected }: PickMultiOperationProps) { const selectedItems = useMemo( () => selected.map(itemID => items.find(item => item.id === itemID)!), [items, selected] ); const nonSelectedItems = useMemo(() => items.filter(item => !selected.includes(item.id)), [items, selected]); const [lastSelected, setLastSelected] = useState(undefined); const handleDelete = useCallback( (operation: OperationID) => setSelected(prev => prev.filter(item => item !== operation)), [setSelected] ); const handleSelect = useCallback( (operation?: IOperation) => { if (operation) { setLastSelected(operation); setSelected(prev => [...prev, operation.id]); setTimeout(() => setLastSelected(undefined), 1000); } }, [setSelected] ); const handleMoveUp = useCallback( (operation: OperationID) => { const index = selected.indexOf(operation); if (index > 0) { setSelected(prev => { const newSelected = [...prev]; newSelected[index] = newSelected[index - 1]; newSelected[index - 1] = operation; return newSelected; }); } }, [setSelected, selected] ); const handleMoveDown = useCallback( (operation: OperationID) => { const index = selected.indexOf(operation); if (index < selected.length - 1) { setSelected(prev => { const newSelected = [...prev]; newSelected[index] = newSelected[index + 1]; newSelected[index + 1] = operation; return newSelected; }); } }, [setSelected, selected] ); const columns = useMemo( () => [ columnHelper.accessor('alias', { id: 'alias', header: 'Шифр', size: 300, minSize: 150, maxSize: 300 }), columnHelper.accessor('title', { id: 'title', header: 'Название', size: 1200, minSize: 300, maxSize: 1200, cell: props =>
{props.getValue()}
}), columnHelper.display({ id: 'actions', size: 0, cell: props => (
} onClick={() => handleDelete(props.row.original.id)} /> } onClick={() => handleMoveUp(props.row.original.id)} /> } onClick={() => handleMoveDown(props.row.original.id)} />
) }) ], [handleDelete, handleMoveUp, handleMoveDown] ); return (

Список пуст

} />
); } export default PickMultiOperation;