Skip to content

Commit e1ae30d

Browse files
committed
feat: change pagination config
1 parent 431cfa2 commit e1ae30d

File tree

8 files changed

+25
-31
lines changed

8 files changed

+25
-31
lines changed

packages/pluggableWidgets/datagrid-web/src/components/WidgetFooter.tsx

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,10 @@ import { observer } from "mobx-react-lite";
33
import { ReactElement } from "react";
44
import { SelectionCounter } from "../features/selection-counter/SelectionCounter";
55
import { useSelectionCounterViewModel } from "../features/selection-counter/injection-hooks";
6-
import {
7-
useCustomPagination,
8-
useDatagridConfig,
9-
usePaginationConfig,
10-
usePaginationVM,
11-
useTexts
12-
} from "../model/hooks/injection-hooks";
6+
import { useCustomPagination, usePaginationConfig, usePaginationVM, useTexts } from "../model/hooks/injection-hooks";
137
import { Pagination } from "./Pagination";
148

159
export const WidgetFooter = observer(function WidgetFooter(): ReactElement {
16-
const config = useDatagridConfig();
1710
const pgConfig = usePaginationConfig();
1811
const paging = usePaginationVM();
1912
const { loadMoreButtonCaption } = useTexts();
@@ -40,7 +33,7 @@ export const WidgetFooter = observer(function WidgetFooter(): ReactElement {
4033
</div>
4134
</If>
4235
<div className="widget-datagrid-pb-end">
43-
<If condition={config.pagingPosition !== "top"}>
36+
<If condition={pgConfig.pagingPosition !== "top"}>
4437
<Pagination />
4538
</If>
4639
<If condition={pgConfig.customPaginationEnabled}>{customPagination.get()}</If>

packages/pluggableWidgets/datagrid-web/src/components/WidgetTopBar.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import { observer } from "mobx-react-lite";
33
import { ReactElement } from "react";
44
import { SelectionCounter } from "../features/selection-counter/SelectionCounter";
55
import { useSelectionCounterViewModel } from "../features/selection-counter/injection-hooks";
6-
import { useDatagridConfig } from "../model/hooks/injection-hooks";
6+
import { usePaginationConfig } from "../model/hooks/injection-hooks";
77
import { Pagination } from "./Pagination";
88

99
export const WidgetTopBar = observer(function WidgetTopBar(): ReactElement {
10-
const config = useDatagridConfig();
10+
const pgConfig = usePaginationConfig();
1111
const selectionCounter = useSelectionCounterViewModel();
1212

1313
return (
@@ -19,7 +19,7 @@ export const WidgetTopBar = observer(function WidgetTopBar(): ReactElement {
1919
</If>
2020
</div>
2121
<div className="widget-datagrid-tb-end">
22-
<If condition={config.pagingPosition !== "bottom"}>
22+
<If condition={pgConfig.pagingPosition !== "bottom"}>
2323
<Pagination />
2424
</If>
2525
</div>

packages/pluggableWidgets/datagrid-web/src/features/pagination/pagination.config.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
import { PaginationEnum, ShowPagingButtonsEnum } from "../../../typings/DatagridProps";
1+
import { PaginationEnum, PagingPositionEnum, ShowPagingButtonsEnum } from "../../../typings/DatagridProps";
22
import { MainGateProps } from "../../../typings/MainGateProps";
33

44
export interface PaginationConfig {
55
pagination: PaginationEnum;
6+
pagingPosition: PagingPositionEnum;
67
paginationKind: PaginationKind;
78
showPagingButtons: ShowPagingButtonsEnum;
89
showNumberOfRows: boolean;
9-
pageSize: number;
10+
constPageSize: number;
1011
isLimitBased: boolean;
1112
dynamicPageSizeEnabled: boolean;
1213
dynamicPageEnabled: boolean;
1314
customPaginationEnabled: boolean;
15+
requestTotalCount: boolean;
1416
}
1517

1618
export type PaginationKind = `${PaginationEnum}.${ShowPagingButtonsEnum}` | "custom";
@@ -20,12 +22,14 @@ export function paginationConfig(props: MainGateProps): PaginationConfig {
2022
pagination: props.pagination,
2123
showPagingButtons: props.showPagingButtons,
2224
showNumberOfRows: props.showNumberOfRows,
23-
pageSize: props.pageSize,
25+
constPageSize: props.pageSize,
2426
isLimitBased: isLimitBased(props),
2527
paginationKind: paginationKind(props),
2628
dynamicPageSizeEnabled: dynamicPageSizeEnabled(props),
2729
dynamicPageEnabled: dynamicPageEnabled(props),
28-
customPaginationEnabled: props.useCustomPagination
30+
customPaginationEnabled: props.useCustomPagination,
31+
pagingPosition: props.pagingPosition,
32+
requestTotalCount: requestTotalCount(props)
2933
};
3034

3135
return Object.freeze(config);
@@ -50,3 +54,7 @@ export function dynamicPageEnabled(props: MainGateProps): boolean {
5054
function isLimitBased(props: MainGateProps): boolean {
5155
return props.pagination === "virtualScrolling" || props.pagination === "loadMore";
5256
}
57+
58+
function requestTotalCount(props: MainGateProps): boolean {
59+
return props.pagination === "buttons" || props.showNumberOfRows;
60+
}

packages/pluggableWidgets/datagrid-web/src/model/configs/Datagrid.config.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { SelectionMode, SelectionType } from "@mendix/widget-plugin-grid/selection";
22
import { generateUUID } from "@mendix/widget-plugin-platform/framework/generate-uuid";
3-
import { DatagridContainerProps, LoadingTypeEnum, PagingPositionEnum } from "../../../typings/DatagridProps";
3+
import { DatagridContainerProps, LoadingTypeEnum } from "../../../typings/DatagridProps";
44
import { type SelectionMethod } from "../../features/row-interaction/base";
55

66
/** Config for static values that don't change at runtime. */
@@ -19,7 +19,6 @@ export interface DatagridConfig {
1919
settingsStorageEnabled: boolean;
2020
enableSelectAll: boolean;
2121
keepSelection: boolean;
22-
pagingPosition: PagingPositionEnum;
2322
multiselectable: true | undefined;
2423
loadingType: LoadingTypeEnum;
2524
columnsDraggable: boolean;
@@ -28,8 +27,6 @@ export interface DatagridConfig {
2827
columnsResizable: boolean;
2928
columnsSortable: boolean;
3029
isInteractive: boolean;
31-
requestTotalCount: boolean;
32-
constPageSize: number;
3330
}
3431

3532
export function datagridConfig(props: DatagridContainerProps): DatagridConfig {
@@ -50,17 +47,14 @@ export function datagridConfig(props: DatagridContainerProps): DatagridConfig {
5047
settingsStorageEnabled: isSettingsStorageEnabled(props),
5148
enableSelectAll: props.enableSelectAll,
5249
keepSelection: props.keepSelection,
53-
pagingPosition: props.pagingPosition,
5450
multiselectable: isMultiselectable(props),
5551
loadingType: props.loadingType,
5652
columnsHidable: props.columnsHidable,
5753
columnsDraggable: props.columnsDraggable,
5854
columnsFilterable: props.columnsFilterable,
5955
columnsResizable: props.columnsResizable,
6056
columnsSortable: props.columnsSortable,
61-
isInteractive: isInteractive(props),
62-
requestTotalCount: requestTotalCount(props),
63-
constPageSize: props.pageSize
57+
isInteractive: isInteractive(props)
6458
};
6559

6660
return Object.freeze(config);
@@ -97,7 +91,3 @@ function selectionType(props: DatagridContainerProps): SelectionType {
9791
function selectionMethod(props: DatagridContainerProps): SelectionMethod {
9892
return props.itemSelection ? props.itemSelectionMethod : "none";
9993
}
100-
101-
function requestTotalCount(props: DatagridContainerProps): boolean {
102-
return props.pagination === "buttons" || props.showNumberOfRows;
103-
}

packages/pluggableWidgets/datagrid-web/src/model/configs/__tests__/config.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ describe("datagridConfig", () => {
2020
loadingType: "spinner",
2121
multiselectable: undefined,
2222
name: "datagrid2_1",
23-
pagingPosition: "bottom",
2423
refreshIntervalMs: 0,
2524
selectAllCheckboxEnabled: true,
2625
selectionEnabled: false,

packages/pluggableWidgets/datagrid-web/src/model/containers/Datagrid.container.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,9 @@ export class DatagridContainer extends Container {
242242
this.get(DG.dynamicPagination); // Enable dynamic pagination feature
243243

244244
const query = this.get(DG.query);
245-
query.requestTotalCount(config.requestTotalCount);
246-
query.setBaseLimit(config.constPageSize);
245+
const pgConfig = this.get(DG.paginationConfig);
246+
query.requestTotalCount(pgConfig.requestTotalCount);
247+
query.setBaseLimit(pgConfig.constPageSize);
247248

248249
if (config.settingsStorageEnabled) {
249250
this.get(DG.personalizationService);

packages/pluggableWidgets/datagrid-web/src/utils/test-utils.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ export function mockContainerProps(overrides?: Partial<DatagridContainerProps>):
8484
selectAllText: dynamic("Select all items"),
8585
selectAllTemplate: dynamic("Select all %d items"),
8686
allSelectedText: dynamic("All items selected"),
87+
useCustomPagination: false,
88+
customPagination: undefined,
8789
...overrides
8890
};
8991
}

packages/pluggableWidgets/datagrid-web/typings/MainGateProps.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export type MainGateProps = Pick<
2727
| "onSelectionChange"
2828
| "pageSize"
2929
| "pagination"
30+
| "pagingPosition"
3031
| "refreshIndicator"
3132
| "refreshInterval"
3233
| "rowClass"

0 commit comments

Comments
 (0)