editableTable
unknown
plain_text
2 years ago
2.0 kB
16
Indexable
import { DataGrid, GridCellModes, GridCellModesModel, GridCellParams, GridColumns, } from '@mui/x-data-grid'; import { KeypersonNeedsAnalyses, SuretyshipNeedsAnalyses } from '../common/types/analyses'; import { SetStateAction, useCallback, useState } from 'react'; const EditableTable = ({ rows, columns, height, }: { rows?: SuretyshipNeedsAnalyses[] | KeypersonNeedsAnalyses[]; columns?: GridColumns<SuretyshipNeedsAnalyses> | GridColumns<KeypersonNeedsAnalyses>; height: number; }) => { const [cellModesModel, setCellModesModel] = useState<GridCellModesModel>({}); const handleCellClick = useCallback((parameters: GridCellParams) => { setCellModesModel((previousModel_: GridCellModesModel) => { return { ...Object.fromEntries( Object.keys(previousModel_).map((id) => [ id, Object.fromEntries( Object.keys(previousModel_[id]).map((field) => [field, { mode: GridCellModes.View }]), ), ]), ), [parameters.id]: { ...Object.fromEntries( Object.keys(previousModel_[parameters.id] || {}).map((field) => [ field, { mode: GridCellModes.View }, ]), ), [parameters.field]: { mode: GridCellModes.Edit }, }, }; }); }, []); const handleCellModesModelChange = useCallback((newModel: SetStateAction<GridCellModesModel>) => { setCellModesModel(newModel); }, []); return ( <DataGrid sx={{ mb: 3, p: 3 }} autoHeight disableSelectionOnClick rows={rows} columns={columns} hideFooter checkboxSelection disableColumnMenu rowHeight={height} headerHeight={54} cellModesModel={cellModesModel} onCellModesModelChange={handleCellModesModelChange} onCellClick={handleCellClick} experimentalFeatures={{ newEditingApi: true }} /> ); }; export default EditableTable;
Editor is loading...