diff --git a/packages/base/components/ODataGridBase.tsx b/packages/base/components/ODataGridBase.tsx index d77434f..cdf93cf 100644 --- a/packages/base/components/ODataGridBase.tsx +++ b/packages/base/components/ODataGridBase.tsx @@ -11,6 +11,7 @@ import { ExpandToQuery, Flatten, GroupArrayBy, GetPageNumber, GetPageSizeOrDefau import { defaultPageSize } from "../constants"; import { SerialisedGroup, QueryStringCollection, FilterParameters } from "../FilterBuilder/types"; +import { GridColumnVisibilityModel } from "@mui/x-data-grid"; const ODataGridBase = { - if (onColumnVisibilityChange) { - onColumnVisibilityChange(params, event, details); - } - - setColumnVisibilityOverride((visibility) => ({ ...visibility, [params.field]: params.isVisible })); - - if (params.isVisible) { - setVisibleColumns((visible) => [...visible, params.field]); - } else { - setVisibleColumns((visible) => visible.filter(c => c !== params.field)); - } - }, [onColumnVisibilityChange]); + const { onColumnVisibilityModelChange, onSortModelChange } = props; const handleSortModelChange = useCallback((model: SortModel, details) => { if (onSortModelChange) { @@ -373,6 +360,28 @@ const ODataGridBase = { + if (onColumnVisibilityModelChange) { + onColumnVisibilityModelChange(model, details); + } + + // find the field which has been changed + const column = Object.keys(model).find((key) => visibility[key] !== model[key]); + if (column) { + const visible = model[column]; + + setColumnVisibilityOverride((v) => ({ ...v, [column]: visible })); + if (visible) { + setVisibleColumns((v) => [...v, column]); + } + else { + setVisibleColumns((v) => v.filter(c => c !== column)); + } + } + }, [onColumnVisibilityModelChange, visibility]); + + const gridColumns = useMemo(() => props.columns.filter(c => c.filterOnly !== true), [props.columns]); + const GridComponent = props.component; return ( @@ -395,7 +404,7 @@ const ODataGridBase = = T; export type IGridProps = { - onColumnVisibilityChange?: any, + onColumnVisibilityModelChange?: any, columnVisibilityModel?: ColumnVisibilityModel, onSortModelChange?: any } \ No newline at end of file diff --git a/packages/o-data-grid-pro/package.json b/packages/o-data-grid-pro/package.json index 8f366a6..b6bef74 100644 --- a/packages/o-data-grid-pro/package.json +++ b/packages/o-data-grid-pro/package.json @@ -1,6 +1,6 @@ { "name": "o-data-grid-pro", - "version": "1.1.0", + "version": "1.1.1", "description": "A React Data Grid and Query Builder for OData APIs. Based on the Material-UI DataGridPro.", "main": "build/o-data-grid-pro-cjs.js", "module": "build/o-data-grid-pro-esm.js", diff --git a/packages/o-data-grid/package.json b/packages/o-data-grid/package.json index 195e4d4..c73c7ab 100644 --- a/packages/o-data-grid/package.json +++ b/packages/o-data-grid/package.json @@ -1,6 +1,6 @@ { "name": "o-data-grid", - "version": "1.1.0", + "version": "1.1.1", "description": "A React Data Grid and Query Builder for OData APIs. Based on the Material-UI DataGrid.", "main": "build/o-data-grid-cjs.js", "module": "build/o-data-grid-esm.js",