@mui/x-data-grid 7.0.0-beta.5 → 7.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +252 -50
- package/DataGrid/DataGrid.js +44 -0
- package/DataGrid/useDataGridComponent.js +3 -0
- package/DataGrid/useDataGridProps.js +3 -2
- package/components/GridColumnHeaders.d.ts +1 -2
- package/components/GridColumnHeaders.js +6 -17
- package/components/GridHeaders.js +1 -4
- package/components/GridPagination.js +2 -7
- package/components/GridPinnedRows.d.ts +1 -2
- package/components/GridRow.d.ts +1 -1
- package/components/GridRow.js +9 -26
- package/components/GridScrollArea.d.ts +10 -0
- package/components/GridScrollArea.js +150 -0
- package/components/cell/GridCell.d.ts +7 -2
- package/components/cell/GridCell.js +14 -10
- package/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
- package/components/columnHeaders/GridColumnGroupHeader.d.ts +5 -0
- package/components/columnHeaders/GridColumnGroupHeader.js +18 -8
- package/components/columnHeaders/GridColumnHeaderItem.d.ts +5 -0
- package/components/columnHeaders/GridColumnHeaderItem.js +21 -6
- package/components/columnHeaders/GridGenericColumnHeaderItem.d.ts +1 -0
- package/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
- package/components/containers/GridRootStyles.js +12 -22
- package/components/virtualization/GridVirtualScrollbar.js +4 -0
- package/components/virtualization/GridVirtualScroller.js +11 -4
- package/components/virtualization/GridVirtualScrollerFiller.js +2 -1
- package/constants/gridClasses.d.ts +6 -32
- package/constants/gridClasses.js +1 -1
- package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +5 -1
- package/hooks/core/pipeProcessing/useGridPipeProcessing.js +22 -20
- package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +23 -7
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +186 -99
- package/hooks/features/columnResize/columnResizeSelector.d.ts +3 -0
- package/hooks/features/columnResize/columnResizeSelector.js +3 -0
- package/hooks/features/columnResize/columnResizeState.d.ts +3 -0
- package/hooks/features/columnResize/columnResizeState.js +1 -0
- package/hooks/features/columnResize/gridColumnResizeApi.d.ts +44 -0
- package/hooks/features/columnResize/gridColumnResizeApi.js +10 -0
- package/hooks/features/columnResize/index.d.ts +3 -0
- package/hooks/features/columnResize/index.js +3 -0
- package/hooks/features/columnResize/useGridColumnResize.d.ts +10 -0
- package/hooks/features/columnResize/useGridColumnResize.js +563 -0
- package/hooks/features/columns/gridColumnsUtils.js +4 -1
- package/hooks/features/dimensions/useGridDimensions.js +5 -5
- package/hooks/features/editing/useGridCellEditing.js +21 -2
- package/hooks/features/export/useGridPrintExport.js +8 -7
- package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.d.ts +1 -0
- package/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +6 -0
- package/hooks/features/headerFiltering/useGridHeaderFiltering.js +30 -7
- package/hooks/features/index.d.ts +1 -0
- package/hooks/features/index.js +1 -0
- package/hooks/features/pagination/gridPaginationInterfaces.d.ts +19 -2
- package/hooks/features/pagination/gridPaginationSelector.d.ts +5 -0
- package/hooks/features/pagination/gridPaginationSelector.js +8 -2
- package/hooks/features/pagination/useGridPagination.d.ts +1 -6
- package/hooks/features/pagination/useGridPagination.js +9 -157
- package/hooks/features/pagination/useGridPaginationModel.d.ts +11 -0
- package/hooks/features/pagination/useGridPaginationModel.js +170 -0
- package/hooks/features/pagination/useGridRowCount.d.ts +8 -0
- package/hooks/features/pagination/useGridRowCount.js +97 -0
- package/hooks/features/rows/useGridParamsApi.js +6 -10
- package/hooks/features/scroll/useGridScroll.js +1 -1
- package/hooks/features/sorting/useGridSorting.js +2 -2
- package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +4 -4
- package/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +2 -2
- package/hooks/features/virtualization/useGridVirtualScroller.js +6 -0
- package/hooks/utils/useLazyRef.d.ts +1 -2
- package/hooks/utils/useLazyRef.js +1 -11
- package/hooks/utils/useOnMount.d.ts +1 -2
- package/hooks/utils/useOnMount.js +1 -7
- package/hooks/utils/useTimeout.d.ts +1 -11
- package/hooks/utils/useTimeout.js +1 -36
- package/index.js +1 -1
- package/internals/index.d.ts +2 -2
- package/internals/index.js +2 -2
- package/internals/utils/getPinnedCellOffset.d.ts +3 -0
- package/internals/utils/getPinnedCellOffset.js +17 -0
- package/joy/joySlots.js +13 -52
- package/locales/jaJP.js +3 -4
- package/material/index.js +0 -2
- package/models/api/gridApiCommon.d.ts +2 -1
- package/models/api/gridCoreApi.d.ts +1 -5
- package/models/api/gridInfiniteLoaderApi.d.ts +6 -0
- package/models/api/gridInfiniteLoaderApi.js +1 -0
- package/models/events/gridEventLookup.d.ts +6 -0
- package/models/gridHeaderFilteringModel.d.ts +1 -0
- package/models/gridSlotsComponent.d.ts +0 -5
- package/models/gridStateCommunity.d.ts +2 -0
- package/models/params/gridScrollParams.d.ts +5 -3
- package/models/props/DataGridProps.d.ts +35 -1
- package/modern/DataGrid/DataGrid.js +44 -0
- package/modern/DataGrid/useDataGridComponent.js +3 -0
- package/modern/DataGrid/useDataGridProps.js +3 -2
- package/modern/components/GridColumnHeaders.js +6 -17
- package/modern/components/GridHeaders.js +1 -4
- package/modern/components/GridPagination.js +2 -4
- package/modern/components/GridRow.js +9 -26
- package/modern/components/GridScrollArea.js +150 -0
- package/modern/components/cell/GridCell.js +14 -10
- package/modern/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
- package/modern/components/columnHeaders/GridColumnGroupHeader.js +18 -8
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +21 -6
- package/modern/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
- package/modern/components/containers/GridRootStyles.js +12 -22
- package/modern/components/virtualization/GridVirtualScrollbar.js +4 -0
- package/modern/components/virtualization/GridVirtualScroller.js +11 -4
- package/modern/components/virtualization/GridVirtualScrollerFiller.js +2 -1
- package/modern/constants/gridClasses.js +1 -1
- package/modern/hooks/core/pipeProcessing/useGridPipeProcessing.js +22 -20
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +184 -97
- package/modern/hooks/features/columnResize/columnResizeSelector.js +3 -0
- package/modern/hooks/features/columnResize/columnResizeState.js +1 -0
- package/modern/hooks/features/columnResize/gridColumnResizeApi.js +10 -0
- package/modern/hooks/features/columnResize/index.js +3 -0
- package/modern/hooks/features/columnResize/useGridColumnResize.js +553 -0
- package/modern/hooks/features/columns/gridColumnsUtils.js +4 -1
- package/modern/hooks/features/dimensions/useGridDimensions.js +5 -5
- package/modern/hooks/features/editing/useGridCellEditing.js +21 -2
- package/modern/hooks/features/export/useGridPrintExport.js +8 -7
- package/modern/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +3 -0
- package/modern/hooks/features/headerFiltering/useGridHeaderFiltering.js +21 -2
- package/modern/hooks/features/index.js +1 -0
- package/modern/hooks/features/pagination/gridPaginationSelector.js +8 -2
- package/modern/hooks/features/pagination/useGridPagination.js +8 -149
- package/modern/hooks/features/pagination/useGridPaginationModel.js +165 -0
- package/modern/hooks/features/pagination/useGridRowCount.js +94 -0
- package/modern/hooks/features/rows/useGridParamsApi.js +6 -10
- package/modern/hooks/features/scroll/useGridScroll.js +1 -1
- package/modern/hooks/features/sorting/useGridSorting.js +2 -2
- package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +5 -0
- package/modern/hooks/utils/useLazyRef.js +1 -11
- package/modern/hooks/utils/useOnMount.js +1 -7
- package/modern/hooks/utils/useTimeout.js +1 -36
- package/modern/index.js +1 -1
- package/modern/internals/index.js +2 -2
- package/modern/internals/utils/getPinnedCellOffset.js +17 -0
- package/modern/joy/joySlots.js +11 -50
- package/modern/locales/jaJP.js +3 -4
- package/modern/material/index.js +0 -2
- package/modern/models/api/gridInfiniteLoaderApi.js +1 -0
- package/modern/utils/cellBorderUtils.js +8 -0
- package/modern/utils/createSelector.js +12 -20
- package/modern/utils/domUtils.js +144 -0
- package/node/DataGrid/DataGrid.js +44 -0
- package/node/DataGrid/useDataGridComponent.js +3 -0
- package/node/DataGrid/useDataGridProps.js +3 -2
- package/node/components/GridColumnHeaders.js +6 -16
- package/node/components/GridHeaders.js +1 -4
- package/node/components/GridPagination.js +1 -3
- package/node/components/GridRow.js +8 -25
- package/node/components/GridScrollArea.js +158 -0
- package/node/components/cell/GridCell.js +15 -11
- package/node/components/columnHeaders/GridBaseColumnHeaders.js +1 -0
- package/node/components/columnHeaders/GridColumnGroupHeader.js +18 -8
- package/node/components/columnHeaders/GridColumnHeaderItem.js +21 -6
- package/node/components/columnHeaders/GridGenericColumnHeaderItem.js +6 -5
- package/node/components/containers/GridRootStyles.js +12 -22
- package/node/components/virtualization/GridVirtualScrollbar.js +4 -0
- package/node/components/virtualization/GridVirtualScroller.js +11 -4
- package/node/components/virtualization/GridVirtualScrollerFiller.js +2 -1
- package/node/constants/gridClasses.js +1 -1
- package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +22 -20
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +190 -103
- package/node/hooks/features/columnResize/columnResizeSelector.js +10 -0
- package/node/hooks/features/columnResize/columnResizeState.js +5 -0
- package/node/hooks/features/columnResize/gridColumnResizeApi.js +16 -0
- package/node/hooks/features/columnResize/index.js +38 -0
- package/node/hooks/features/columnResize/useGridColumnResize.js +564 -0
- package/node/hooks/features/columns/gridColumnsUtils.js +4 -1
- package/node/hooks/features/dimensions/useGridDimensions.js +5 -5
- package/node/hooks/features/editing/useGridCellEditing.js +21 -2
- package/node/hooks/features/export/useGridPrintExport.js +8 -7
- package/node/hooks/features/headerFiltering/gridHeaderFilteringSelectors.js +4 -1
- package/node/hooks/features/headerFiltering/useGridHeaderFiltering.js +21 -2
- package/node/hooks/features/index.js +11 -0
- package/node/hooks/features/pagination/gridPaginationSelector.js +8 -2
- package/node/hooks/features/pagination/useGridPagination.js +9 -153
- package/node/hooks/features/pagination/useGridPaginationModel.js +176 -0
- package/node/hooks/features/pagination/useGridRowCount.js +103 -0
- package/node/hooks/features/rows/useGridParamsApi.js +6 -10
- package/node/hooks/features/scroll/useGridScroll.js +1 -1
- package/node/hooks/features/sorting/useGridSorting.js +2 -2
- package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -2
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +5 -0
- package/node/hooks/utils/useLazyRef.js +7 -13
- package/node/hooks/utils/useOnMount.js +8 -10
- package/node/hooks/utils/useTimeout.js +7 -37
- package/node/index.js +1 -1
- package/node/internals/index.js +15 -15
- package/node/internals/utils/getPinnedCellOffset.js +24 -0
- package/node/joy/joySlots.js +11 -50
- package/node/locales/jaJP.js +3 -4
- package/node/material/index.js +0 -2
- package/node/models/api/gridInfiniteLoaderApi.js +5 -0
- package/node/utils/cellBorderUtils.js +16 -0
- package/node/utils/createSelector.js +14 -23
- package/node/utils/domUtils.js +155 -0
- package/package.json +2 -2
- package/utils/cellBorderUtils.d.ts +3 -0
- package/utils/cellBorderUtils.js +8 -0
- package/utils/createSelector.d.ts +0 -1
- package/utils/createSelector.js +12 -22
- package/utils/domUtils.d.ts +14 -1
- package/utils/domUtils.js +147 -0
- package/components/columnHeaders/GridColumnHeadersInner.d.ts +0 -8
- package/components/columnHeaders/GridColumnHeadersInner.js +0 -58
- package/modern/components/columnHeaders/GridColumnHeadersInner.js +0 -58
- package/node/components/columnHeaders/GridColumnHeadersInner.js +0 -67
|
@@ -15,7 +15,7 @@ var _gridClasses = require("../../../constants/gridClasses");
|
|
|
15
15
|
var _useGridApiMethod = require("../../utils/useGridApiMethod");
|
|
16
16
|
var _gridRowsMetaSelector = require("../rows/gridRowsMetaSelector");
|
|
17
17
|
var _utils2 = require("./utils");
|
|
18
|
-
var
|
|
18
|
+
var _useGridPaginationModel = require("../pagination/useGridPaginationModel");
|
|
19
19
|
var _pipeProcessing = require("../../core/pipeProcessing");
|
|
20
20
|
var _GridToolbarExport = require("../../../components/toolbar/GridToolbarExport");
|
|
21
21
|
var _gridColumnsUtils = require("../columns/gridColumnsUtils");
|
|
@@ -104,9 +104,6 @@ const useGridPrintExport = (apiRef, props) => {
|
|
|
104
104
|
|
|
105
105
|
// See https://support.google.com/chrome/thread/191619088?hl=en&msgid=193009642
|
|
106
106
|
gridClone.style.contain = 'size';
|
|
107
|
-
const columnHeaders = gridClone.querySelector(`.${_gridClasses.gridClasses.columnHeaders}`);
|
|
108
|
-
const columnHeadersInner = columnHeaders.querySelector(`.${_gridClasses.gridClasses.columnHeadersInner}`);
|
|
109
|
-
columnHeadersInner.style.width = '100%';
|
|
110
107
|
let gridToolbarElementHeight = gridRootElement.querySelector(`.${_gridClasses.gridClasses.toolbarContainer}`)?.offsetHeight || 0;
|
|
111
108
|
let gridFooterElementHeight = gridRootElement.querySelector(`.${_gridClasses.gridClasses.footerContainer}`)?.offsetHeight || 0;
|
|
112
109
|
if (normalizeOptions.hideToolbar) {
|
|
@@ -227,9 +224,13 @@ const useGridPrintExport = (apiRef, props) => {
|
|
|
227
224
|
page: 0,
|
|
228
225
|
pageSize: visibleRowCount
|
|
229
226
|
};
|
|
230
|
-
apiRef.current.
|
|
231
|
-
|
|
232
|
-
|
|
227
|
+
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
228
|
+
pagination: (0, _extends2.default)({}, state.pagination, {
|
|
229
|
+
paginationModel: (0, _useGridPaginationModel.getDerivedPaginationModel)(state.pagination,
|
|
230
|
+
// Using signature `DataGridPro` to allow more than 100 rows in the print export
|
|
231
|
+
'DataGridPro', paginationModel)
|
|
232
|
+
})
|
|
233
|
+
}));
|
|
233
234
|
apiRef.current.forceUpdate();
|
|
234
235
|
}
|
|
235
236
|
await updateGridColumnsForPrint(options?.fields, options?.allColumns, options?.includeCheckboxes);
|
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.gridHeaderFilteringStateSelector = exports.gridHeaderFilteringMenuSelector = exports.gridHeaderFilteringEditFieldSelector = void 0;
|
|
6
|
+
exports.gridHeaderFilteringStateSelector = exports.gridHeaderFilteringMenuSelector = exports.gridHeaderFilteringEnabledSelector = exports.gridHeaderFilteringEditFieldSelector = void 0;
|
|
7
7
|
var _createSelector = require("../../../utils/createSelector");
|
|
8
8
|
const gridHeaderFilteringStateSelector = state => state.headerFiltering;
|
|
9
9
|
exports.gridHeaderFilteringStateSelector = gridHeaderFilteringStateSelector;
|
|
10
|
+
const gridHeaderFilteringEnabledSelector = exports.gridHeaderFilteringEnabledSelector = (0, _createSelector.createSelector)(gridHeaderFilteringStateSelector,
|
|
11
|
+
// No initialization in MIT, so we need to default to false to be used by `getTotalHeaderHeight`
|
|
12
|
+
headerFilteringState => headerFilteringState?.enabled ?? false);
|
|
10
13
|
const gridHeaderFilteringEditFieldSelector = exports.gridHeaderFilteringEditFieldSelector = (0, _createSelector.createSelector)(gridHeaderFilteringStateSelector, headerFilteringState => headerFilteringState.editing);
|
|
11
14
|
const gridHeaderFilteringMenuSelector = exports.gridHeaderFilteringMenuSelector = (0, _createSelector.createSelector)(gridHeaderFilteringStateSelector, headerFilteringState => headerFilteringState.menuOpen);
|
|
@@ -12,8 +12,10 @@ var _utils = require("../../utils");
|
|
|
12
12
|
var _gridColumnsSelector = require("../columns/gridColumnsSelector");
|
|
13
13
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
14
14
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
15
|
-
const headerFilteringStateInitializer = state => (0, _extends2.default)({}, state, {
|
|
15
|
+
const headerFilteringStateInitializer = (state, props) => (0, _extends2.default)({}, state, {
|
|
16
|
+
// @ts-expect-error Access `Pro` prop in MIT
|
|
16
17
|
headerFiltering: {
|
|
18
|
+
enabled: props.headerFilters ?? false,
|
|
17
19
|
editing: null,
|
|
18
20
|
menuOpen: null
|
|
19
21
|
}
|
|
@@ -21,6 +23,8 @@ const headerFilteringStateInitializer = state => (0, _extends2.default)({}, stat
|
|
|
21
23
|
exports.headerFilteringStateInitializer = headerFilteringStateInitializer;
|
|
22
24
|
const useGridHeaderFiltering = (apiRef, props) => {
|
|
23
25
|
const logger = (0, _utils.useGridLogger)(apiRef, 'useGridHeaderFiltering');
|
|
26
|
+
// @ts-expect-error Access `Pro` prop in MIT
|
|
27
|
+
const isHeaderFilteringEnabled = props.headerFilters ?? false;
|
|
24
28
|
const setHeaderFilterState = React.useCallback(headerFilterState => {
|
|
25
29
|
apiRef.current.setState(state => {
|
|
26
30
|
// Safety check to avoid MIT users from using it
|
|
@@ -30,13 +34,14 @@ const useGridHeaderFiltering = (apiRef, props) => {
|
|
|
30
34
|
}
|
|
31
35
|
return (0, _extends2.default)({}, state, {
|
|
32
36
|
headerFiltering: {
|
|
37
|
+
enabled: isHeaderFilteringEnabled ?? false,
|
|
33
38
|
editing: headerFilterState.editing ?? null,
|
|
34
39
|
menuOpen: headerFilterState.menuOpen ?? null
|
|
35
40
|
}
|
|
36
41
|
});
|
|
37
42
|
});
|
|
38
43
|
apiRef.current.forceUpdate();
|
|
39
|
-
}, [apiRef, props.signature]);
|
|
44
|
+
}, [apiRef, props.signature, isHeaderFilteringEnabled]);
|
|
40
45
|
const startHeaderFilterEditMode = React.useCallback(field => {
|
|
41
46
|
logger.debug(`Starting edit mode on header filter for field: ${field}`);
|
|
42
47
|
apiRef.current.setHeaderFilterState({
|
|
@@ -97,5 +102,19 @@ const useGridHeaderFiltering = (apiRef, props) => {
|
|
|
97
102
|
};
|
|
98
103
|
(0, _useGridApiMethod.useGridApiMethod)(apiRef, headerFilterApi, 'public');
|
|
99
104
|
(0, _useGridApiMethod.useGridApiMethod)(apiRef, headerFilterPrivateApi, 'private');
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* EFFECTS
|
|
108
|
+
*/
|
|
109
|
+
const isFirstRender = React.useRef(true);
|
|
110
|
+
React.useEffect(() => {
|
|
111
|
+
if (isFirstRender.current) {
|
|
112
|
+
isFirstRender.current = false;
|
|
113
|
+
} else {
|
|
114
|
+
apiRef.current.setHeaderFilterState({
|
|
115
|
+
enabled: isHeaderFilteringEnabled
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}, [apiRef, isHeaderFilteringEnabled]);
|
|
100
119
|
};
|
|
101
120
|
exports.useGridHeaderFiltering = useGridHeaderFiltering;
|
|
@@ -36,6 +36,17 @@ Object.keys(_columnGrouping).forEach(function (key) {
|
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
38
|
});
|
|
39
|
+
var _columnResize = require("./columnResize");
|
|
40
|
+
Object.keys(_columnResize).forEach(function (key) {
|
|
41
|
+
if (key === "default" || key === "__esModule") return;
|
|
42
|
+
if (key in exports && exports[key] === _columnResize[key]) return;
|
|
43
|
+
Object.defineProperty(exports, key, {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () {
|
|
46
|
+
return _columnResize[key];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
39
50
|
var _density = require("./density");
|
|
40
51
|
Object.keys(_density).forEach(function (key) {
|
|
41
52
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.gridPaginationSelector = exports.gridPaginationRowRangeSelector = exports.gridPaginationModelSelector = exports.gridPaginatedVisibleSortedGridRowIdsSelector = exports.gridPaginatedVisibleSortedGridRowEntriesSelector = exports.gridPageSizeSelector = exports.gridPageSelector = exports.gridPageCountSelector = void 0;
|
|
6
|
+
exports.gridPaginationSelector = exports.gridPaginationRowRangeSelector = exports.gridPaginationRowCountSelector = exports.gridPaginationModelSelector = exports.gridPaginatedVisibleSortedGridRowIdsSelector = exports.gridPaginatedVisibleSortedGridRowEntriesSelector = exports.gridPageSizeSelector = exports.gridPageSelector = exports.gridPageCountSelector = void 0;
|
|
7
7
|
var _createSelector = require("../../../utils/createSelector");
|
|
8
8
|
var _gridFilterSelector = require("../filter/gridFilterSelector");
|
|
9
9
|
var _gridRowsSelector = require("../rows/gridRowsSelector");
|
|
@@ -21,6 +21,12 @@ const gridPaginationSelector = state => state.pagination;
|
|
|
21
21
|
exports.gridPaginationSelector = gridPaginationSelector;
|
|
22
22
|
const gridPaginationModelSelector = exports.gridPaginationModelSelector = (0, _createSelector.createSelector)(gridPaginationSelector, pagination => pagination.paginationModel);
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Get the row count
|
|
26
|
+
* @category Pagination
|
|
27
|
+
*/
|
|
28
|
+
const gridPaginationRowCountSelector = exports.gridPaginationRowCountSelector = (0, _createSelector.createSelector)(gridPaginationSelector, pagination => pagination.rowCount);
|
|
29
|
+
|
|
24
30
|
/**
|
|
25
31
|
* Get the index of the page to render if the pagination is enabled
|
|
26
32
|
* @category Pagination
|
|
@@ -37,7 +43,7 @@ const gridPageSizeSelector = exports.gridPageSizeSelector = (0, _createSelector.
|
|
|
37
43
|
* Get the amount of pages needed to display all the rows if the pagination is enabled
|
|
38
44
|
* @category Pagination
|
|
39
45
|
*/
|
|
40
|
-
const gridPageCountSelector = exports.gridPageCountSelector = (0, _createSelector.createSelector)(
|
|
46
|
+
const gridPageCountSelector = exports.gridPageCountSelector = (0, _createSelector.createSelector)(gridPageSizeSelector, gridPaginationRowCountSelector, (pageSize, rowCount) => (0, _gridPaginationUtils.getPageCount)(rowCount, pageSize));
|
|
41
47
|
|
|
42
48
|
/**
|
|
43
49
|
* Get the index of the first and the last row to include in the current page if the pagination is enabled.
|
|
@@ -4,174 +4,30 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.useGridPagination = exports.paginationStateInitializer =
|
|
7
|
+
exports.useGridPagination = exports.paginationStateInitializer = void 0;
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
-
var React = _interopRequireWildcard(require("react"));
|
|
10
|
-
var _filter = require("../filter");
|
|
11
|
-
var _density = require("../density");
|
|
12
|
-
var _utils = require("../../utils");
|
|
13
|
-
var _pipeProcessing = require("../../core/pipeProcessing");
|
|
14
|
-
var _gridPaginationSelector = require("./gridPaginationSelector");
|
|
15
9
|
var _gridPaginationUtils = require("./gridPaginationUtils");
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
var _useGridPaginationModel = require("./useGridPaginationModel");
|
|
11
|
+
var _useGridRowCount = require("./useGridRowCount");
|
|
18
12
|
const paginationStateInitializer = (state, props) => {
|
|
19
13
|
const paginationModel = (0, _extends2.default)({}, (0, _gridPaginationUtils.getDefaultGridPaginationModel)(props.autoPageSize), props.paginationModel ?? props.initialState?.pagination?.paginationModel);
|
|
20
14
|
(0, _gridPaginationUtils.throwIfPageSizeExceedsTheLimit)(paginationModel.pageSize, props.signature);
|
|
15
|
+
const rowCount = props.rowCount ?? props.initialState?.pagination?.rowCount;
|
|
21
16
|
return (0, _extends2.default)({}, state, {
|
|
22
17
|
pagination: {
|
|
23
|
-
paginationModel
|
|
18
|
+
paginationModel,
|
|
19
|
+
rowCount
|
|
24
20
|
}
|
|
25
21
|
});
|
|
26
22
|
};
|
|
27
|
-
exports.paginationStateInitializer = paginationStateInitializer;
|
|
28
|
-
const mergeStateWithPaginationModel = (rowCount, signature, paginationModelProp) => paginationState => {
|
|
29
|
-
let paginationModel = paginationState.paginationModel;
|
|
30
|
-
const pageSize = paginationModelProp?.pageSize ?? paginationModel.pageSize;
|
|
31
|
-
const pageCount = (0, _gridPaginationUtils.getPageCount)(rowCount, pageSize);
|
|
32
|
-
if (paginationModelProp && (paginationModelProp?.page !== paginationModel.page || paginationModelProp?.pageSize !== paginationModel.pageSize)) {
|
|
33
|
-
paginationModel = paginationModelProp;
|
|
34
|
-
}
|
|
35
|
-
const validPage = (0, _gridPaginationUtils.getValidPage)(paginationModel.page, pageCount);
|
|
36
|
-
if (validPage !== paginationModel.page) {
|
|
37
|
-
paginationModel = (0, _extends2.default)({}, paginationModel, {
|
|
38
|
-
page: validPage
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
(0, _gridPaginationUtils.throwIfPageSizeExceedsTheLimit)(paginationModel.pageSize, signature);
|
|
42
|
-
return {
|
|
43
|
-
paginationModel
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
23
|
|
|
47
24
|
/**
|
|
48
25
|
* @requires useGridFilter (state)
|
|
49
26
|
* @requires useGridDimensions (event) - can be after
|
|
50
27
|
*/
|
|
51
|
-
exports.
|
|
28
|
+
exports.paginationStateInitializer = paginationStateInitializer;
|
|
52
29
|
const useGridPagination = (apiRef, props) => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const densityFactor = (0, _utils.useGridSelector)(apiRef, _density.gridDensityFactorSelector);
|
|
56
|
-
const rowHeight = Math.floor(props.rowHeight * densityFactor);
|
|
57
|
-
apiRef.current.registerControlState({
|
|
58
|
-
stateId: 'pagination',
|
|
59
|
-
propModel: props.paginationModel,
|
|
60
|
-
propOnChange: props.onPaginationModelChange,
|
|
61
|
-
stateSelector: _gridPaginationSelector.gridPaginationModelSelector,
|
|
62
|
-
changeEvent: 'paginationModelChange'
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* API METHODS
|
|
67
|
-
*/
|
|
68
|
-
const setPage = React.useCallback(page => {
|
|
69
|
-
const currentModel = (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
70
|
-
if (page === currentModel.page) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
logger.debug(`Setting page to ${page}`);
|
|
74
|
-
apiRef.current.setPaginationModel({
|
|
75
|
-
page,
|
|
76
|
-
pageSize: currentModel.pageSize
|
|
77
|
-
});
|
|
78
|
-
}, [apiRef, logger]);
|
|
79
|
-
const setPageSize = React.useCallback(pageSize => {
|
|
80
|
-
const currentModel = (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
81
|
-
if (pageSize === currentModel.pageSize) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
logger.debug(`Setting page size to ${pageSize}`);
|
|
85
|
-
apiRef.current.setPaginationModel({
|
|
86
|
-
pageSize,
|
|
87
|
-
page: currentModel.page
|
|
88
|
-
});
|
|
89
|
-
}, [apiRef, logger]);
|
|
90
|
-
const setPaginationModel = React.useCallback(paginationModel => {
|
|
91
|
-
const currentModel = (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
92
|
-
if (paginationModel === currentModel) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
logger.debug("Setting 'paginationModel' to", paginationModel);
|
|
96
|
-
apiRef.current.updateControlState('pagination', mergeStateWithPaginationModel(props.rowCount ?? visibleTopLevelRowCount, props.signature, paginationModel), 'setPaginationModel');
|
|
97
|
-
apiRef.current.forceUpdate();
|
|
98
|
-
}, [apiRef, logger, props.rowCount, props.signature, visibleTopLevelRowCount]);
|
|
99
|
-
const pageApi = {
|
|
100
|
-
setPage,
|
|
101
|
-
setPageSize,
|
|
102
|
-
setPaginationModel
|
|
103
|
-
};
|
|
104
|
-
(0, _utils.useGridApiMethod)(apiRef, pageApi, 'public');
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* PRE-PROCESSING
|
|
108
|
-
*/
|
|
109
|
-
const stateExportPreProcessing = React.useCallback((prevState, context) => {
|
|
110
|
-
const paginationModel = (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
111
|
-
const shouldExportPaginationModel =
|
|
112
|
-
// Always export if the `exportOnlyDirtyModels` property is not activated
|
|
113
|
-
!context.exportOnlyDirtyModels ||
|
|
114
|
-
// Always export if the `paginationModel` is controlled
|
|
115
|
-
props.paginationModel != null ||
|
|
116
|
-
// Always export if the `paginationModel` has been initialized
|
|
117
|
-
props.initialState?.pagination?.paginationModel != null ||
|
|
118
|
-
// Export if `page` or `pageSize` is not equal to the default value
|
|
119
|
-
paginationModel.page !== 0 && paginationModel.pageSize !== (0, _gridPaginationUtils.defaultPageSize)(props.autoPageSize);
|
|
120
|
-
if (!shouldExportPaginationModel) {
|
|
121
|
-
return prevState;
|
|
122
|
-
}
|
|
123
|
-
return (0, _extends2.default)({}, prevState, {
|
|
124
|
-
pagination: (0, _extends2.default)({}, prevState.pagination, {
|
|
125
|
-
paginationModel
|
|
126
|
-
})
|
|
127
|
-
});
|
|
128
|
-
}, [apiRef, props.paginationModel, props.initialState?.pagination?.paginationModel, props.autoPageSize]);
|
|
129
|
-
const stateRestorePreProcessing = React.useCallback((params, context) => {
|
|
130
|
-
const paginationModel = context.stateToRestore.pagination?.paginationModel ? (0, _extends2.default)({}, (0, _gridPaginationUtils.getDefaultGridPaginationModel)(props.autoPageSize), context.stateToRestore.pagination?.paginationModel) : (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
131
|
-
apiRef.current.updateControlState('pagination', mergeStateWithPaginationModel(props.rowCount ?? visibleTopLevelRowCount, props.signature, paginationModel), 'stateRestorePreProcessing');
|
|
132
|
-
return params;
|
|
133
|
-
}, [apiRef, props.autoPageSize, props.rowCount, props.signature, visibleTopLevelRowCount]);
|
|
134
|
-
(0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'exportState', stateExportPreProcessing);
|
|
135
|
-
(0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'restoreState', stateRestorePreProcessing);
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* EVENTS
|
|
139
|
-
*/
|
|
140
|
-
const handlePaginationModelChange = () => {
|
|
141
|
-
const paginationModel = (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
142
|
-
if (apiRef.current.virtualScrollerRef?.current) {
|
|
143
|
-
apiRef.current.scrollToIndexes({
|
|
144
|
-
rowIndex: paginationModel.page * paginationModel.pageSize
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
apiRef.current.forceUpdate();
|
|
148
|
-
};
|
|
149
|
-
const handleUpdateAutoPageSize = React.useCallback(() => {
|
|
150
|
-
if (!props.autoPageSize) {
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
const dimensions = apiRef.current.getRootDimensions();
|
|
154
|
-
const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
|
|
155
|
-
apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);
|
|
156
|
-
}, [apiRef, props.autoPageSize, rowHeight]);
|
|
157
|
-
(0, _utils.useGridApiEventHandler)(apiRef, 'viewportInnerSizeChange', handleUpdateAutoPageSize);
|
|
158
|
-
(0, _utils.useGridApiEventHandler)(apiRef, 'paginationModelChange', handlePaginationModelChange);
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* EFFECTS
|
|
162
|
-
*/
|
|
163
|
-
React.useEffect(() => {
|
|
164
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
165
|
-
if (props.paginationMode === 'server' && props.rowCount == null) {
|
|
166
|
-
(0, _gridPaginationUtils.noRowCountInServerMode)();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}, [props.rowCount, props.paginationMode]);
|
|
170
|
-
React.useEffect(() => {
|
|
171
|
-
apiRef.current.updateControlState('pagination', mergeStateWithPaginationModel(props.rowCount ?? visibleTopLevelRowCount, props.signature, props.paginationModel));
|
|
172
|
-
}, [apiRef, props.paginationModel, props.rowCount, props.paginationMode, visibleTopLevelRowCount, props.signature]);
|
|
173
|
-
React.useEffect(() => {
|
|
174
|
-
handleUpdateAutoPageSize();
|
|
175
|
-
}, [handleUpdateAutoPageSize]);
|
|
30
|
+
(0, _useGridPaginationModel.useGridPaginationModel)(apiRef, props);
|
|
31
|
+
(0, _useGridRowCount.useGridRowCount)(apiRef, props);
|
|
176
32
|
};
|
|
177
33
|
exports.useGridPagination = useGridPagination;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useGridPaginationModel = exports.getDerivedPaginationModel = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _density = require("../density");
|
|
11
|
+
var _utils = require("../../utils");
|
|
12
|
+
var _pipeProcessing = require("../../core/pipeProcessing");
|
|
13
|
+
var _gridPaginationSelector = require("./gridPaginationSelector");
|
|
14
|
+
var _gridPaginationUtils = require("./gridPaginationUtils");
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
|
+
const getDerivedPaginationModel = (paginationState, signature, paginationModelProp) => {
|
|
18
|
+
let paginationModel = paginationState.paginationModel;
|
|
19
|
+
const rowCount = paginationState.rowCount;
|
|
20
|
+
const pageSize = paginationModelProp?.pageSize ?? paginationModel.pageSize;
|
|
21
|
+
const pageCount = (0, _gridPaginationUtils.getPageCount)(rowCount, pageSize);
|
|
22
|
+
if (paginationModelProp && (paginationModelProp?.page !== paginationModel.page || paginationModelProp?.pageSize !== paginationModel.pageSize)) {
|
|
23
|
+
paginationModel = paginationModelProp;
|
|
24
|
+
}
|
|
25
|
+
const validPage = (0, _gridPaginationUtils.getValidPage)(paginationModel.page, pageCount);
|
|
26
|
+
if (validPage !== paginationModel.page) {
|
|
27
|
+
paginationModel = (0, _extends2.default)({}, paginationModel, {
|
|
28
|
+
page: validPage
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
(0, _gridPaginationUtils.throwIfPageSizeExceedsTheLimit)(paginationModel.pageSize, signature);
|
|
32
|
+
return paginationModel;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @requires useGridFilter (state)
|
|
37
|
+
* @requires useGridDimensions (event) - can be after
|
|
38
|
+
*/
|
|
39
|
+
exports.getDerivedPaginationModel = getDerivedPaginationModel;
|
|
40
|
+
const useGridPaginationModel = (apiRef, props) => {
|
|
41
|
+
const logger = (0, _utils.useGridLogger)(apiRef, 'useGridPaginationModel');
|
|
42
|
+
const densityFactor = (0, _utils.useGridSelector)(apiRef, _density.gridDensityFactorSelector);
|
|
43
|
+
const rowHeight = Math.floor(props.rowHeight * densityFactor);
|
|
44
|
+
apiRef.current.registerControlState({
|
|
45
|
+
stateId: 'paginationModel',
|
|
46
|
+
propModel: props.paginationModel,
|
|
47
|
+
propOnChange: props.onPaginationModelChange,
|
|
48
|
+
stateSelector: _gridPaginationSelector.gridPaginationModelSelector,
|
|
49
|
+
changeEvent: 'paginationModelChange'
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* API METHODS
|
|
54
|
+
*/
|
|
55
|
+
const setPage = React.useCallback(page => {
|
|
56
|
+
const currentModel = (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
57
|
+
if (page === currentModel.page) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
logger.debug(`Setting page to ${page}`);
|
|
61
|
+
apiRef.current.setPaginationModel({
|
|
62
|
+
page,
|
|
63
|
+
pageSize: currentModel.pageSize
|
|
64
|
+
});
|
|
65
|
+
}, [apiRef, logger]);
|
|
66
|
+
const setPageSize = React.useCallback(pageSize => {
|
|
67
|
+
const currentModel = (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
68
|
+
if (pageSize === currentModel.pageSize) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
logger.debug(`Setting page size to ${pageSize}`);
|
|
72
|
+
apiRef.current.setPaginationModel({
|
|
73
|
+
pageSize,
|
|
74
|
+
page: currentModel.page
|
|
75
|
+
});
|
|
76
|
+
}, [apiRef, logger]);
|
|
77
|
+
const setPaginationModel = React.useCallback(paginationModel => {
|
|
78
|
+
const currentModel = (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
79
|
+
if (paginationModel === currentModel) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
logger.debug("Setting 'paginationModel' to", paginationModel);
|
|
83
|
+
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
84
|
+
pagination: (0, _extends2.default)({}, state.pagination, {
|
|
85
|
+
paginationModel: getDerivedPaginationModel(state.pagination, props.signature, paginationModel)
|
|
86
|
+
})
|
|
87
|
+
}));
|
|
88
|
+
}, [apiRef, logger, props.signature]);
|
|
89
|
+
const paginationModelApi = {
|
|
90
|
+
setPage,
|
|
91
|
+
setPageSize,
|
|
92
|
+
setPaginationModel
|
|
93
|
+
};
|
|
94
|
+
(0, _utils.useGridApiMethod)(apiRef, paginationModelApi, 'public');
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* PRE-PROCESSING
|
|
98
|
+
*/
|
|
99
|
+
const stateExportPreProcessing = React.useCallback((prevState, context) => {
|
|
100
|
+
const paginationModel = (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
101
|
+
const shouldExportPaginationModel =
|
|
102
|
+
// Always export if the `exportOnlyDirtyModels` property is not activated
|
|
103
|
+
!context.exportOnlyDirtyModels ||
|
|
104
|
+
// Always export if the `paginationModel` is controlled
|
|
105
|
+
props.paginationModel != null ||
|
|
106
|
+
// Always export if the `paginationModel` has been initialized
|
|
107
|
+
props.initialState?.pagination?.paginationModel != null ||
|
|
108
|
+
// Export if `page` or `pageSize` is not equal to the default value
|
|
109
|
+
paginationModel.page !== 0 && paginationModel.pageSize !== (0, _gridPaginationUtils.defaultPageSize)(props.autoPageSize);
|
|
110
|
+
if (!shouldExportPaginationModel) {
|
|
111
|
+
return prevState;
|
|
112
|
+
}
|
|
113
|
+
return (0, _extends2.default)({}, prevState, {
|
|
114
|
+
pagination: (0, _extends2.default)({}, prevState.pagination, {
|
|
115
|
+
paginationModel
|
|
116
|
+
})
|
|
117
|
+
});
|
|
118
|
+
}, [apiRef, props.paginationModel, props.initialState?.pagination?.paginationModel, props.autoPageSize]);
|
|
119
|
+
const stateRestorePreProcessing = React.useCallback((params, context) => {
|
|
120
|
+
const paginationModel = context.stateToRestore.pagination?.paginationModel ? (0, _extends2.default)({}, (0, _gridPaginationUtils.getDefaultGridPaginationModel)(props.autoPageSize), context.stateToRestore.pagination?.paginationModel) : (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
121
|
+
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
122
|
+
pagination: (0, _extends2.default)({}, state.pagination, {
|
|
123
|
+
paginationModel: getDerivedPaginationModel(state.pagination, props.signature, paginationModel)
|
|
124
|
+
})
|
|
125
|
+
}));
|
|
126
|
+
return params;
|
|
127
|
+
}, [apiRef, props.autoPageSize, props.signature]);
|
|
128
|
+
(0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'exportState', stateExportPreProcessing);
|
|
129
|
+
(0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'restoreState', stateRestorePreProcessing);
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* EVENTS
|
|
133
|
+
*/
|
|
134
|
+
const handlePaginationModelChange = () => {
|
|
135
|
+
const paginationModel = (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
136
|
+
if (apiRef.current.virtualScrollerRef?.current) {
|
|
137
|
+
apiRef.current.scrollToIndexes({
|
|
138
|
+
rowIndex: paginationModel.page * paginationModel.pageSize
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
const handleUpdateAutoPageSize = React.useCallback(() => {
|
|
143
|
+
if (!props.autoPageSize) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const dimensions = apiRef.current.getRootDimensions();
|
|
147
|
+
const maximumPageSizeWithoutScrollBar = Math.floor(dimensions.viewportInnerSize.height / rowHeight);
|
|
148
|
+
apiRef.current.setPageSize(maximumPageSizeWithoutScrollBar);
|
|
149
|
+
}, [apiRef, props.autoPageSize, rowHeight]);
|
|
150
|
+
const handleRowCountChange = React.useCallback(newRowCount => {
|
|
151
|
+
if (newRowCount == null) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const paginationModel = (0, _gridPaginationSelector.gridPaginationModelSelector)(apiRef);
|
|
155
|
+
const pageCount = (0, _gridPaginationSelector.gridPageCountSelector)(apiRef);
|
|
156
|
+
if (paginationModel.page > pageCount - 1) {
|
|
157
|
+
apiRef.current.setPage(Math.max(0, pageCount - 1));
|
|
158
|
+
}
|
|
159
|
+
}, [apiRef]);
|
|
160
|
+
(0, _utils.useGridApiEventHandler)(apiRef, 'viewportInnerSizeChange', handleUpdateAutoPageSize);
|
|
161
|
+
(0, _utils.useGridApiEventHandler)(apiRef, 'paginationModelChange', handlePaginationModelChange);
|
|
162
|
+
(0, _utils.useGridApiEventHandler)(apiRef, 'rowCountChange', handleRowCountChange);
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* EFFECTS
|
|
166
|
+
*/
|
|
167
|
+
React.useEffect(() => {
|
|
168
|
+
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
169
|
+
pagination: (0, _extends2.default)({}, state.pagination, {
|
|
170
|
+
paginationModel: getDerivedPaginationModel(state.pagination, props.signature, props.paginationModel)
|
|
171
|
+
})
|
|
172
|
+
}));
|
|
173
|
+
}, [apiRef, props.paginationModel, props.paginationMode, props.signature]);
|
|
174
|
+
React.useEffect(handleUpdateAutoPageSize, [handleUpdateAutoPageSize]);
|
|
175
|
+
};
|
|
176
|
+
exports.useGridPaginationModel = useGridPaginationModel;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useGridRowCount = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _filter = require("../filter");
|
|
11
|
+
var _utils = require("../../utils");
|
|
12
|
+
var _pipeProcessing = require("../../core/pipeProcessing");
|
|
13
|
+
var _gridPaginationSelector = require("./gridPaginationSelector");
|
|
14
|
+
var _gridPaginationUtils = require("./gridPaginationUtils");
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
|
+
/**
|
|
18
|
+
* @requires useGridFilter (state)
|
|
19
|
+
* @requires useGridDimensions (event) - can be after
|
|
20
|
+
*/
|
|
21
|
+
const useGridRowCount = (apiRef, props) => {
|
|
22
|
+
const logger = (0, _utils.useGridLogger)(apiRef, 'useGridRowCount');
|
|
23
|
+
const visibleTopLevelRowCount = (0, _utils.useGridSelector)(apiRef, _filter.gridFilteredTopLevelRowCountSelector);
|
|
24
|
+
const rowCount = (0, _utils.useGridSelector)(apiRef, _gridPaginationSelector.gridPaginationRowCountSelector);
|
|
25
|
+
apiRef.current.registerControlState({
|
|
26
|
+
stateId: 'paginationRowCount',
|
|
27
|
+
propModel: props.rowCount,
|
|
28
|
+
propOnChange: props.onRowCountChange,
|
|
29
|
+
stateSelector: _gridPaginationSelector.gridPaginationRowCountSelector,
|
|
30
|
+
changeEvent: 'rowCountChange'
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* API METHODS
|
|
35
|
+
*/
|
|
36
|
+
const setRowCount = React.useCallback(newRowCount => {
|
|
37
|
+
if (rowCount === newRowCount) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
logger.debug("Setting 'rowCount' to", newRowCount);
|
|
41
|
+
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
42
|
+
pagination: (0, _extends2.default)({}, state.pagination, {
|
|
43
|
+
rowCount: newRowCount
|
|
44
|
+
})
|
|
45
|
+
}));
|
|
46
|
+
}, [apiRef, logger, rowCount]);
|
|
47
|
+
const paginationRowCountApi = {
|
|
48
|
+
setRowCount
|
|
49
|
+
};
|
|
50
|
+
(0, _utils.useGridApiMethod)(apiRef, paginationRowCountApi, 'public');
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* PRE-PROCESSING
|
|
54
|
+
*/
|
|
55
|
+
const stateExportPreProcessing = React.useCallback((prevState, context) => {
|
|
56
|
+
const exportedRowCount = (0, _gridPaginationSelector.gridPaginationRowCountSelector)(apiRef);
|
|
57
|
+
const shouldExportRowCount =
|
|
58
|
+
// Always export if the `exportOnlyDirtyModels` property is not activated
|
|
59
|
+
!context.exportOnlyDirtyModels ||
|
|
60
|
+
// Always export if the `rowCount` is controlled
|
|
61
|
+
props.rowCount != null ||
|
|
62
|
+
// Always export if the `rowCount` has been initialized
|
|
63
|
+
props.initialState?.pagination?.rowCount != null;
|
|
64
|
+
if (!shouldExportRowCount) {
|
|
65
|
+
return prevState;
|
|
66
|
+
}
|
|
67
|
+
return (0, _extends2.default)({}, prevState, {
|
|
68
|
+
pagination: (0, _extends2.default)({}, prevState.pagination, {
|
|
69
|
+
rowCount: exportedRowCount
|
|
70
|
+
})
|
|
71
|
+
});
|
|
72
|
+
}, [apiRef, props.rowCount, props.initialState?.pagination?.rowCount]);
|
|
73
|
+
const stateRestorePreProcessing = React.useCallback((params, context) => {
|
|
74
|
+
const restoredRowCount = context.stateToRestore.pagination?.rowCount ? context.stateToRestore.pagination.rowCount : (0, _gridPaginationSelector.gridPaginationRowCountSelector)(apiRef);
|
|
75
|
+
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
76
|
+
pagination: (0, _extends2.default)({}, state.pagination, {
|
|
77
|
+
rowCount: restoredRowCount
|
|
78
|
+
})
|
|
79
|
+
}));
|
|
80
|
+
return params;
|
|
81
|
+
}, [apiRef]);
|
|
82
|
+
(0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'exportState', stateExportPreProcessing);
|
|
83
|
+
(0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'restoreState', stateRestorePreProcessing);
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* EFFECTS
|
|
87
|
+
*/
|
|
88
|
+
React.useEffect(() => {
|
|
89
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
90
|
+
if (props.paginationMode === 'server' && props.rowCount == null) {
|
|
91
|
+
(0, _gridPaginationUtils.noRowCountInServerMode)();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}, [props.rowCount, props.paginationMode]);
|
|
95
|
+
React.useEffect(() => {
|
|
96
|
+
if (props.paginationMode === 'client') {
|
|
97
|
+
apiRef.current.setRowCount(visibleTopLevelRowCount);
|
|
98
|
+
} else if (props.rowCount != null) {
|
|
99
|
+
apiRef.current.setRowCount(props.rowCount);
|
|
100
|
+
}
|
|
101
|
+
}, [apiRef, visibleTopLevelRowCount, props.paginationMode, props.rowCount]);
|
|
102
|
+
};
|
|
103
|
+
exports.useGridRowCount = useGridRowCount;
|
|
@@ -41,12 +41,13 @@ function useGridParamsApi(apiRef) {
|
|
|
41
41
|
}, [apiRef]);
|
|
42
42
|
const getCellParams = React.useCallback((id, field) => {
|
|
43
43
|
const colDef = apiRef.current.getColumn(field);
|
|
44
|
-
const value = apiRef.current.getCellValue(id, field);
|
|
45
44
|
const row = apiRef.current.getRow(id);
|
|
46
45
|
const rowNode = apiRef.current.getRowNode(id);
|
|
47
46
|
if (!row || !rowNode) {
|
|
48
47
|
throw new MissingRowIdError(`No row with id #${id} found`);
|
|
49
48
|
}
|
|
49
|
+
const rawValue = row[field];
|
|
50
|
+
const value = colDef?.valueGetter ? colDef.valueGetter(rawValue, row, colDef, apiRef) : rawValue;
|
|
50
51
|
const cellFocus = (0, _gridFocusStateSelector.gridFocusCellSelector)(apiRef);
|
|
51
52
|
const cellTabIndex = (0, _gridFocusStateSelector.gridTabIndexCellSelector)(apiRef);
|
|
52
53
|
const params = {
|
|
@@ -70,19 +71,14 @@ function useGridParamsApi(apiRef) {
|
|
|
70
71
|
}, [apiRef]);
|
|
71
72
|
const getCellValue = React.useCallback((id, field) => {
|
|
72
73
|
const colDef = apiRef.current.getColumn(field);
|
|
73
|
-
if (!colDef || !colDef.valueGetter) {
|
|
74
|
-
const rowModel = apiRef.current.getRow(id);
|
|
75
|
-
if (!rowModel) {
|
|
76
|
-
throw new MissingRowIdError(`No row with id #${id} found`);
|
|
77
|
-
}
|
|
78
|
-
return rowModel[field];
|
|
79
|
-
}
|
|
80
74
|
const row = apiRef.current.getRow(id);
|
|
81
75
|
if (!row) {
|
|
82
76
|
throw new MissingRowIdError(`No row with id #${id} found`);
|
|
83
77
|
}
|
|
84
|
-
|
|
85
|
-
|
|
78
|
+
if (!colDef || !colDef.valueGetter) {
|
|
79
|
+
return row[field];
|
|
80
|
+
}
|
|
81
|
+
return colDef.valueGetter(row[colDef.field], row, colDef, apiRef);
|
|
86
82
|
}, [apiRef]);
|
|
87
83
|
const getRowValue = React.useCallback((row, colDef) => {
|
|
88
84
|
const field = colDef.field;
|