'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 IOperationSchema, type IOssItem, NodeType } from '../models/oss'; const SELECTION_CLEAR_TIMEOUT = 1000; interface PickContentsProps extends Styling { value: IOssItem[]; onChange: (newValue: IOssItem[]) => void; schema: IOperationSchema; rows?: number; exclude?: IOssItem[]; disallowBlocks?: boolean; } const columnHelper = createColumnHelper(); export function PickContents({ rows, schema, exclude, value, disallowBlocks, onChange, className, ...restProps }: PickContentsProps) { const [lastSelected, setLastSelected] = useState(null); const items: IOssItem[] = [ ...(disallowBlocks ? [] : schema.blocks.filter(item => !value.includes(item) && !exclude?.includes(item))), ...schema.operations.filter(item => !value.includes(item) && !exclude?.includes(item)) ]; function handleDelete(target: IOssItem) { onChange(value.filter(item => item !== target)); } function handleSelect(target: IOssItem | null) { if (target) { setLastSelected(target); onChange([...value, target]); setTimeout(() => setLastSelected(null), SELECTION_CLEAR_TIMEOUT); } } function handleMoveUp(target: IOssItem) { const index = value.indexOf(target); if (index > 0) { const newSelected = [...value]; newSelected[index] = newSelected[index - 1]; newSelected[index - 1] = target; onChange(newSelected); } } function handleMoveDown(target: IOssItem) { const index = value.indexOf(target); if (index < value.length - 1) { const newSelected = [...value]; newSelected[index] = newSelected[index + 1]; newSelected[index + 1] = target; onChange(newSelected); } } const columns = [ columnHelper.accessor(item => item.nodeType === NodeType.OPERATION, { id: 'type', header: 'Тип', size: 150, minSize: 150, maxSize: 150, cell: props =>
{props.getValue() ? 'Операция' : 'Блок'}
}), 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)} /> } onClick={() => handleMoveUp(props.row.original)} /> } onClick={() => handleMoveDown(props.row.original)} />
) }) ]; return (
item.nodeID} labelValueFunc={item => labelOssItem(item)} labelOptionFunc={item => labelOssItem(item)} onChange={handleSelect} />

Список пуст

} />
); }