import * as React from 'react' import type { StoryObj, StoryFn, Meta } from '@storybook/react-webpack5' import { GridEditorSwitch } from '.' import { Grid } from '../grids' import type { Column, GridConfirmPayload } from '../types' import type { InputType } from '@storybook/csf' const hideControl: InputType = { control: false } export default { title: 'pv-grid/Components/Editors/GridEditorSwitch', component: GridEditorSwitch, parameters: { controls: { exclude: ['label', 'mode', 'rowId'], }, }, argTypes: { columnId: hideControl, rowId: hideControl, tabIndex: hideControl, value: hideControl, }, } satisfies Meta type Team = { id: string title: string enabled: boolean } export const Default: StoryObj = { render: function Component() { const [rows, setRows] = React.useState([ { id: '1', title: 'All users team', enabled: true }, { id: '2', title: 'Developer team', enabled: false }, { id: '3', title: 'Quality Assurance Team', enabled: true }, ]) return ( ) => { setRows((r) => r.map((row) => { if (row.id === confirm.rowId) { return { ...row, [confirm.columnId]: confirm.nextValue, } } return row }) ) }} /> ) }, parameters: { docs: { source: { code: ` const [rows, setRows] = React.useState([ { id: '1', title: 'All users team', enabled: true }, { id: '2', title: 'Developer team', enabled: false }, { id: '3', title: 'Quality Assurance Team', enabled: true }, ]) return ( ) => { setRows((r) => r.map((row) => { if (row.id === confirm.rowId) { return { ...row, [confirm.columnId]: confirm.nextValue, } } return row }) ) }} /> ) `, }, }, }, } export const Disabled: StoryFn = () => { const [rows, setRows] = React.useState([ { id: '1', title: 'All users team', enabled: true }, { id: '2', title: 'Developer team', enabled: false }, { id: '3', title: 'Quality Assurance Team', enabled: true }, ]) const columns: Column[] = React.useMemo( () => [ { id: 'title', label: 'Team', width: 300, cell: { editable: true, }, }, { id: 'enabled', label: 'Enabled', width: 70, cell: { editable: ({ row }) => row.id !== '2', hybridEditor: 'always', Editor: GridEditorSwitch, }, }, ], [] ) return ( ) => { setRows((r) => r.map((row) => { if (row.id === confirm.rowId) { return { ...row, [confirm.columnId]: confirm.nextValue, } } return row }) ) }} /> ) }