Skip to content

Commit 57a4c95

Browse files
committed
feat: add custom paginatino
1 parent ddfc141 commit 57a4c95

File tree

5 files changed

+19
-3
lines changed

5 files changed

+19
-3
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,22 @@ 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, usePaginationVM, useTexts } from "../model/hooks/injection-hooks";
6+
import {
7+
useCustomPagination,
8+
useDatagridConfig,
9+
usePaginationConfig,
10+
usePaginationVM,
11+
useTexts
12+
} from "../model/hooks/injection-hooks";
713
import { Pagination } from "./Pagination";
814

915
export const WidgetFooter = observer(function WidgetFooter(): ReactElement {
1016
const config = useDatagridConfig();
17+
const pgConfig = usePaginationConfig();
1118
const paging = usePaginationVM();
1219
const { loadMoreButtonCaption } = useTexts();
1320
const selectionCounterVM = useSelectionCounterViewModel();
21+
const customPagination = useCustomPagination();
1422

1523
return (
1624
<div className="widget-datagrid-footer table-footer">
@@ -35,6 +43,7 @@ export const WidgetFooter = observer(function WidgetFooter(): ReactElement {
3543
<If condition={config.pagingPosition !== "top"}>
3644
<Pagination />
3745
</If>
46+
<If condition={pgConfig.customPaginationEnabled}>{customPagination.get()}</If>
3847
</div>
3948
</div>
4049
</div>

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export interface PaginationConfig {
1010
isLimitBased: boolean;
1111
dynamicPageSizeEnabled: boolean;
1212
dynamicPageEnabled: boolean;
13+
customPaginationEnabled: boolean;
1314
}
1415

1516
export type PaginationKind = `${PaginationEnum}.${ShowPagingButtonsEnum}` | "custom";
@@ -23,7 +24,8 @@ export function paginationConfig(props: MainGateProps): PaginationConfig {
2324
isLimitBased: isLimitBased(props),
2425
paginationKind: paginationKind(props),
2526
dynamicPageSizeEnabled: dynamicPageSizeEnabled(props),
26-
dynamicPageEnabled: dynamicPageEnabled(props)
27+
dynamicPageEnabled: dynamicPageEnabled(props),
28+
customPaginationEnabled: props.useCustomPagination
2729
};
2830

2931
return Object.freeze(config);

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { EmptyPlaceholderViewModel } from "../../features/empty-message/EmptyPla
2525
import { DynamicPaginationFeature } from "../../features/pagination/DynamicPagination.feature";
2626
import { PageControlService } from "../../features/pagination/PageControl.service";
2727
import { paginationConfig } from "../../features/pagination/pagination.config";
28-
import { dynamicPageAtom, dynamicPageSizeAtom } from "../../features/pagination/pagination.model";
28+
import { customPaginationAtom, dynamicPageAtom, dynamicPageSizeAtom } from "../../features/pagination/pagination.model";
2929
import { PaginationViewModel } from "../../features/pagination/Pagination.viewModel";
3030
import { createCellEventsController } from "../../features/row-interaction/CellEventsController";
3131
import { creteCheckboxEventsController } from "../../features/row-interaction/CheckboxEventsController";
@@ -66,6 +66,7 @@ injected(
6666
CORE.atoms.totalCount,
6767
DG.pageControl
6868
);
69+
injected(customPaginationAtom, CORE.mainGate);
6970

7071
// loader
7172
injected(DerivedLoaderController, DG.query, DG.exportProgressService, CORE.columnsStore, DG.loaderConfig);
@@ -137,6 +138,7 @@ export class DatagridContainer extends Container {
137138

138139
/** Pagination **/
139140
this.bind(DG.currentPage).toInstance(currentPageAtom).inTransientScope();
141+
this.bind(DG.customPagination).toInstance(customPaginationAtom).inTransientScope();
140142
this.bind(DG.dynamicPage).toInstance(dynamicPageAtom).inTransientScope();
141143
this.bind(DG.dynamicPageSize).toInstance(dynamicPageSizeAtom).inTransientScope();
142144
this.bind(DG.dynamicPagination).toInstance(DynamicPaginationFeature).inSingletonScope();

packages/pluggableWidgets/datagrid-web/src/model/hooks/injection-hooks.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,5 @@ export const [useClickActionHelper] = createInjectionHooks(DG.clickActionHelper)
2424
export const [useFocusService] = createInjectionHooks(DG.focusService);
2525
export const [useCheckboxEventsHandler] = createInjectionHooks(DG.checkboxEventsHandler);
2626
export const [useCellEventsHandler] = createInjectionHooks(DG.cellEventsHandler);
27+
export const [useCustomPagination] = createInjectionHooks(DG.customPagination);
28+
export const [usePaginationConfig] = createInjectionHooks(DG.paginationConfig);

packages/pluggableWidgets/datagrid-web/src/model/tokens.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ export const DG_TOKENS = {
105105
loaderVM: token<DerivedLoaderController>("DatagridLoaderViewModel"),
106106

107107
currentPage: token<ComputedAtom<number>>("@computed:currentPage"),
108+
customPagination: token<ComputedAtom<ReactNode>>("@computed:customPagination"),
108109
dynamicPage: token<ComputedAtom<number>>("@computed:dynamicPage"),
109110
dynamicPageSize: token<ComputedAtom<number>>("@computed:dynamicPageSize"),
110111
dynamicPagination: token<DynamicPaginationFeature>("@feature:DynamicPaginationFeature"),

0 commit comments

Comments
 (0)