import * as React from 'react' import type { StoryObj, Meta } from '@storybook/react-webpack5' import { GridEditorComboboxTree } from '.' import { Grid } from '../../grids' import { GridCellDefault } from '../../components' import { PlusCircle } from '@planview/pv-icons' import type { GridConfirmPayload } from '../../types' import type { InputType } from '@storybook/csf' import type { ComboboxTreeOption } from '@planview/pv-uikit' const hideControl: InputType = { control: false } export default { title: 'pv-grid/Components/Editors/GridEditorComboboxTree', component: GridEditorComboboxTree, parameters: { controls: { exclude: ['label', 'mode', 'rowId', 'columnId'], }, }, argTypes: { columnId: hideControl, rowId: hideControl, tabIndex: hideControl, value: hideControl, icon: { options: ['no icon', 'with custom icon'], mapping: { 'no icon': undefined, 'with custom icon': , }, control: { type: 'radio', }, }, }, } satisfies Meta const LANES: ComboboxTreeOption[] = [ { label: 'Inbox', value: '1' }, { label: 'Backlog', value: '2', children: [ { label: 'Activities', value: '2-1' }, { label: 'Design', value: '2-2' }, { label: 'Development', value: '2-3' }, ], }, { label: 'Up next', value: '3', children: [ { label: 'Activities', value: '3-1' }, { label: 'Design', value: '3-2' }, { label: 'Development', value: '3-3' }, ], }, { label: 'Working', value: '4', children: [ { label: 'Design', value: '4-1', children: [ { label: 'Working', value: '4-1-1' }, { label: 'Needs review with a really long label that will most likely ellipse', value: '4-1-2', }, { label: 'Reviewing', value: '4-1-3' }, { label: 'Finalizing', value: '4-1-4' }, ], }, { label: 'Development', value: '4-2', children: [ { label: 'Working', value: '4-2-1' }, { label: 'Needs review', value: '4-2-2' }, { label: 'Reviewing', value: '4-2-3' }, { label: 'Finalizing', value: '4-2-4' }, ], }, ], }, { label: 'Finished', value: '5', children: [ { label: 'Activities', value: '5-1' }, { label: 'Finished as planned', value: '5-2' }, { label: 'Discarded requests / ideas', value: '5-3' }, { label: 'Discussed / No immediate action', value: '5-4' }, ], }, ] as const type LaneRow = { id: string lane: ComboboxTreeOption | null } export const Default: StoryObj = { render: function Component(args) { const [rows, setRows] = React.useState([ { id: '1', lane: LANES[0] }, { id: '2', lane: LANES[1].children?.[0] || null }, { id: '3', lane: LANES[0] }, ]) return ( ) }, Editor(props) { return ( ) }, }, }, ]} rows={rows} onCellChange={( confirm: GridConfirmPayload< LaneRow, 'lane', ComboboxTreeOption | null > ) => { setRows((r) => r.map((row) => { console.log(confirm) if (row.id === confirm.rowId) { return { ...row, lane: confirm.nextValue || null, } } return row }) ) }} /> ) }, }