editableTable
unknown
plain_text
3 years ago
2.0 kB
21
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...