'use client'; import { useState } from 'react'; import { MiniButton } from '@/components/control'; import { createColumnHelper, DataTable } from '@/components/data-table'; import { IconMoveDown, IconMoveUp, IconRemove } from '@/components/icons'; import { ComboBox } from '@/components/input/combo-box'; import { type Styling } from '@/components/props'; import { cn } from '@/components/utils'; import { NoData } from '@/components/view'; import { labelOssItem } from '../labels'; import { type IBlock, type IOperation, type IOperationSchema } from '../models/oss'; import { isOperation } from '../models/oss-api'; const SELECTION_CLEAR_TIMEOUT = 1000; interface PickMultiOperationProps extends Styling { value: number[]; onChange: (newValue: number[]) => void; schema: IOperationSchema; rows?: number; disallowBlocks?: boolean; } const columnHelper = createColumnHelper(); export function PickContents({ rows, schema, value, disallowBlocks, onChange, className, ...restProps }: PickMultiOperationProps) { const selectedItems = value .map(itemID => (itemID > 0 ? schema.operationByID.get(itemID) : schema.blockByID.get(-itemID))) .filter(item => item !== undefined); const [lastSelected, setLastSelected] = useState(null); const items = [ ...schema.operations.filter(item => !value.includes(item.id)), ...(disallowBlocks ? [] : schema.blocks.filter(item => !value.includes(-item.id))) ]; function handleDelete(operation: number) { onChange(value.filter(item => item !== operation)); } function handleSelect(target: IOperation | IBlock | null) { if (target) { setLastSelected(target); onChange([...value, isOperation(target) ? target.id : -target.id]); setTimeout(() => setLastSelected(null), SELECTION_CLEAR_TIMEOUT); } } function handleMoveUp(operation: number) { const index = value.indexOf(operation); if (index > 0) { const newSelected = [...value]; newSelected[index] = newSelected[index - 1]; newSelected[index - 1] = operation; onChange(newSelected); } } function handleMoveDown(operation: number) { const index = value.indexOf(operation); if (index < value.length - 1) { const newSelected = [...value]; newSelected[index] = newSelected[index + 1]; newSelected[index + 1] = operation; onChange(newSelected); } } const columns = [ columnHelper.accessor(item => isOperation(item), { id: 'type', header: 'Тип', size: 150, minSize: 150, maxSize: 150, cell: props =>
{isOperation(props.row.original) ? 'Операция' : 'Блок'}
}), 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)} />
) }) ]; return (
String(item.id)} labelValueFunc={item => labelOssItem(item)} labelOptionFunc={item => labelOssItem(item)} onChange={handleSelect} />

Список пуст

} />
); }