@wavemaker/react-runtime 11.14.1-15.6409
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/actions/base-action.js +32 -0
- package/actions/login-action.js +53 -0
- package/actions/logout-action.js +41 -0
- package/actions/navigation-action.js +145 -0
- package/actions/notification-action.js +147 -0
- package/actions/timer-action.js +164 -0
- package/actions/toast-provider.js +111 -0
- package/actions/toast.js +115 -0
- package/actions/toast.service.js +94 -0
- package/actions/types/index.js +11 -0
- package/components/advanced/carousel/index.js +456 -0
- package/components/advanced/carousel/props.js +5 -0
- package/components/advanced/carousel/template.js +72 -0
- package/components/advanced/login/index.js +307 -0
- package/components/advanced/login/props.js +5 -0
- package/components/advanced/marquee/index.js +158 -0
- package/components/advanced/marquee/props.js +5 -0
- package/components/basic/anchor/index.js +239 -0
- package/components/basic/anchor/props.js +5 -0
- package/components/basic/audio/index.js +61 -0
- package/components/basic/html/index.js +158 -0
- package/components/basic/icon/index.js +85 -0
- package/components/basic/iframe/iframe.utils.js +10 -0
- package/components/basic/iframe/index.js +95 -0
- package/components/basic/label/index.js +139 -0
- package/components/basic/message/index.js +120 -0
- package/components/basic/message/props.js +5 -0
- package/components/basic/picture/index.js +117 -0
- package/components/basic/picture/props.js +5 -0
- package/components/basic/progress-bar/index.js +168 -0
- package/components/basic/progress-bar/props.js +18 -0
- package/components/basic/progress-circle/index.js +196 -0
- package/components/basic/progress-circle/props.js +16 -0
- package/components/basic/richtexteditor/index.js +533 -0
- package/components/basic/richtexteditor/props.js +5 -0
- package/components/basic/search/index.js +1023 -0
- package/components/basic/search/props.js +5 -0
- package/components/basic/search/providers.js +350 -0
- package/components/basic/spinner/index.js +202 -0
- package/components/basic/spinner/props.js +12 -0
- package/components/basic/tile/index.js +91 -0
- package/components/basic/tree/Components/TreeNodeComponent.js +142 -0
- package/components/basic/tree/index.js +503 -0
- package/components/basic/tree/props.js +5 -0
- package/components/basic/tree/utils.js +154 -0
- package/components/basic/video/index.js +85 -0
- package/components/basic/video/props.js +5 -0
- package/components/chart/components/barColumnChart/index.js +132 -0
- package/components/chart/components/barColumnChart/props.js +5 -0
- package/components/chart/components/bubbleChart/index.js +176 -0
- package/components/chart/components/bubbleChart/props.js +5 -0
- package/components/chart/components/chartLegend/components/ClassicLegendItem.js +39 -0
- package/components/chart/components/chartLegend/components/FuriousLegendItem.js +81 -0
- package/components/chart/components/chartLegend/index.js +69 -0
- package/components/chart/components/chartLegend/props.js +5 -0
- package/components/chart/components/chartLegend/utils.js +31 -0
- package/components/chart/components/chartTooltip/index.js +53 -0
- package/components/chart/components/chartTooltip/styles.js +37 -0
- package/components/chart/components/chartTooltip/utils.js +23 -0
- package/components/chart/components/cumulativeLineChart/index.js +113 -0
- package/components/chart/components/cumulativeLineChart/props.js +5 -0
- package/components/chart/components/cumulativeLineChart/utils.js +34 -0
- package/components/chart/components/index.js +40 -0
- package/components/chart/components/lineAreaChart/index.js +140 -0
- package/components/chart/components/lineAreaChart/props.js +5 -0
- package/components/chart/components/noDataMessage/index.js +27 -0
- package/components/chart/components/pieDonutChart/index.js +171 -0
- package/components/chart/components/pieDonutChart/props.js +5 -0
- package/components/chart/constant.js +72 -0
- package/components/chart/index.js +930 -0
- package/components/chart/props.js +5 -0
- package/components/chart/utils.js +691 -0
- package/components/common/AppSpinner.js +36 -0
- package/components/common/app-spinner.js +26 -0
- package/components/common/index.js +12 -0
- package/components/constants.js +1208 -0
- package/components/container/accordion/accordion-pane/index.js +108 -0
- package/components/container/accordion/accordion-pane/props.js +11 -0
- package/components/container/accordion/index.js +232 -0
- package/components/container/accordion/props.js +13 -0
- package/components/container/alignment-utils.js +183 -0
- package/components/container/index.js +188 -0
- package/components/container/layout-grid/grid-column/index.js +34 -0
- package/components/container/layout-grid/grid-row/index.js +24 -0
- package/components/container/layout-grid/index.js +33 -0
- package/components/container/linear-layout/index.js +72 -0
- package/components/container/linear-layout/linear-layout-item/index.js +43 -0
- package/components/container/panel/components/panel-header/index.js +144 -0
- package/components/container/panel/components/panel-header/props.js +5 -0
- package/components/container/panel/hooks.js +144 -0
- package/components/container/panel/index.js +286 -0
- package/components/container/panel/props.js +5 -0
- package/components/container/props.js +5 -0
- package/components/container/tabs/index.js +379 -0
- package/components/container/tabs/props.js +20 -0
- package/components/container/tabs/tab-pane/index.js +42 -0
- package/components/container/tabs/tab-pane/props.js +5 -0
- package/components/container/wizard/WizardContext.js +16 -0
- package/components/container/wizard/components/StepComponents.js +100 -0
- package/components/container/wizard/components/WizardStep.js +89 -0
- package/components/container/wizard/index.js +710 -0
- package/components/container/wizard/props.js +5 -0
- package/components/container/wizard/utils.js +133 -0
- package/components/container/wizard/wizard-action/index.js +22 -0
- package/components/container/wizard/wizard-step/index.js +94 -0
- package/components/data/card/card-actions/index.js +24 -0
- package/components/data/card/card-content/index.js +38 -0
- package/components/data/card/card-footer/index.js +24 -0
- package/components/data/card/index.js +246 -0
- package/components/data/card/props.js +5 -0
- package/components/data/form/base-form/constant.js +39 -0
- package/components/data/form/base-form/index.js +460 -0
- package/components/data/form/base-form/props.js +29 -0
- package/components/data/form/base-form/utils.js +42 -0
- package/components/data/form/dynamic-fields/index.js +196 -0
- package/components/data/form/dynamic-fields/props.js +5 -0
- package/components/data/form/dynamic-fields/utils.js +237 -0
- package/components/data/form/form-action/index.js +71 -0
- package/components/data/form/form-body/index.js +26 -0
- package/components/data/form/form-context.js +34 -0
- package/components/data/form/form-controller/props.js +19 -0
- package/components/data/form/form-controller/validation-contrustor.js +313 -0
- package/components/data/form/form-controller/withFormController.js +320 -0
- package/components/data/form/form-field/base-field.js +138 -0
- package/components/data/form/form-field/index.js +36 -0
- package/components/data/form/form-field/props.js +5 -0
- package/components/data/form/form-footer/index.js +26 -0
- package/components/data/form/form-header/index.js +56 -0
- package/components/data/form/index.js +39 -0
- package/components/data/form/props.js +5 -0
- package/components/data/list/components/GroupHeader.js +35 -0
- package/components/data/list/components/GroupedListItems.js +98 -0
- package/components/data/list/components/ListContainer.js +27 -0
- package/components/data/list/components/ListDND.js +241 -0
- package/components/data/list/components/ListHeader.js +59 -0
- package/components/data/list/components/ListItem.js +148 -0
- package/components/data/list/components/ListItemWithTemplate.js +59 -0
- package/components/data/list/components/ListItems.js +231 -0
- package/components/data/list/components/ListPagination.js +165 -0
- package/components/data/list/components/LoadMoreButton.js +39 -0
- package/components/data/list/components/NoDataMessage.js +22 -0
- package/components/data/list/components/StandardListItems.js +84 -0
- package/components/data/list/components/index.js +119 -0
- package/components/data/list/components/props.js +5 -0
- package/components/data/list/hooks/index.js +75 -0
- package/components/data/list/hooks/props.js +5 -0
- package/components/data/list/hooks/useCurrentPageItems.js +48 -0
- package/components/data/list/hooks/useGroupedData.js +37 -0
- package/components/data/list/hooks/useListData.js +60 -0
- package/components/data/list/hooks/useListEffects.js +285 -0
- package/components/data/list/hooks/useListEventHandlers.js +291 -0
- package/components/data/list/hooks/useListPagination.js +168 -0
- package/components/data/list/hooks/useListState.js +98 -0
- package/components/data/list/hooks/useListStateManager.js +195 -0
- package/components/data/list/hooks/usePaginatedGroupedData.js +121 -0
- package/components/data/list/index.js +611 -0
- package/components/data/list/props.js +5 -0
- package/components/data/list/templates/media-template.js +53 -0
- package/components/data/list/utils/constants.js +81 -0
- package/components/data/list/utils/list-helpers.js +173 -0
- package/components/data/list/utils/list-widget-methods.js +114 -0
- package/components/data/live-filter/index.js +279 -0
- package/components/data/live-filter/props.js +12 -0
- package/components/data/live-form/index.js +93 -0
- package/components/data/live-form/props.js +16 -0
- package/components/data/pagination/components/BasicPagination.js +77 -0
- package/components/data/pagination/components/ClassicPagination.js +191 -0
- package/components/data/pagination/components/InlinePagination.js +99 -0
- package/components/data/pagination/components/LoadingComponent.js +31 -0
- package/components/data/pagination/components/PageSizeSelector.js +175 -0
- package/components/data/pagination/components/PagerNavigation.js +105 -0
- package/components/data/pagination/components/TotalRecords.js +52 -0
- package/components/data/pagination/components/index.js +47 -0
- package/components/data/pagination/components/props.js +5 -0
- package/components/data/pagination/hooks/index.js +19 -0
- package/components/data/pagination/hooks/props.js +5 -0
- package/components/data/pagination/hooks/useNavigationSize.js +44 -0
- package/components/data/pagination/hooks/usePagination.js +796 -0
- package/components/data/pagination/index.js +322 -0
- package/components/data/table/components/AddNewRow.js +190 -0
- package/components/data/table/components/EditableCell.js +91 -0
- package/components/data/table/components/FieldValidationError.js +24 -0
- package/components/data/table/components/RowExpansionButton.js +74 -0
- package/components/data/table/components/TableBody.js +279 -0
- package/components/data/table/components/TableFilters.js +325 -0
- package/components/data/table/components/TableFooterActions.js +48 -0
- package/components/data/table/components/TableHeader.js +174 -0
- package/components/data/table/components/TablePanelHeading.js +68 -0
- package/components/data/table/components/index.js +74 -0
- package/components/data/table/hooks/index.js +219 -0
- package/components/data/table/hooks/useCellState.js +117 -0
- package/components/data/table/hooks/useDynamicColumns.js +85 -0
- package/components/data/table/hooks/useEditingState.js +47 -0
- package/components/data/table/hooks/useFormWidget.js +184 -0
- package/components/data/table/hooks/usePaginationState.js +60 -0
- package/components/data/table/hooks/usePanelStructure.js +40 -0
- package/components/data/table/hooks/useResponsiveColumns.js +34 -0
- package/components/data/table/hooks/useRowExpansion.js +110 -0
- package/components/data/table/hooks/useRowHandlers.js +38 -0
- package/components/data/table/hooks/useRowSelection.js +213 -0
- package/components/data/table/hooks/useServerSideSorting.js +165 -0
- package/components/data/table/hooks/useTableColumns.js +263 -0
- package/components/data/table/hooks/useTableData.js +154 -0
- package/components/data/table/hooks/useTableEdit.js +467 -0
- package/components/data/table/hooks/useTableEffects.js +139 -0
- package/components/data/table/hooks/useTableFilter.js +389 -0
- package/components/data/table/hooks/useTableInitialization.js +103 -0
- package/components/data/table/hooks/useTableState.js +69 -0
- package/components/data/table/hooks/useTableStateManager.js +558 -0
- package/components/data/table/index.js +1295 -0
- package/components/data/table/live-table/index.js +232 -0
- package/components/data/table/props.js +5 -0
- package/components/data/table/table-action/index.js +78 -0
- package/components/data/table/table-column/index.js +35 -0
- package/components/data/table/table-row/index.js +49 -0
- package/components/data/table/table-row-action/index.js +74 -0
- package/components/data/table/utils/buildSelectionColumns.js +173 -0
- package/components/data/table/utils/columnBuilder.js +209 -0
- package/components/data/table/utils/columnProxy.js +48 -0
- package/components/data/table/utils/columnWidthDistribution.js +98 -0
- package/components/data/table/utils/constants.js +80 -0
- package/components/data/table/utils/crud-handlers.js +518 -0
- package/components/data/table/utils/dynamic-columns.js +118 -0
- package/components/data/table/utils/index.js +607 -0
- package/components/data/table/utils/renderDisplayCell.js +183 -0
- package/components/data/table/utils/selectionUtils.js +166 -0
- package/components/data/table/utils/table-helpers.js +100 -0
- package/components/data/table/utils/validation.js +124 -0
- package/components/data/types.js +113 -0
- package/components/data/utils/field-data-utils.js +66 -0
- package/components/data/utils/filter-field-util.js +81 -0
- package/components/data/utils/index.js +216 -0
- package/components/dialogs/alert-dialog/index.js +80 -0
- package/components/dialogs/confirm-dialog/index.js +105 -0
- package/components/dialogs/dialog/index.js +56 -0
- package/components/dialogs/dialog-actions/index.js +18 -0
- package/components/dialogs/dialog-body/index.js +21 -0
- package/components/dialogs/dialog-content/index.js +30 -0
- package/components/dialogs/dialog-header/index.js +93 -0
- package/components/dialogs/iframe-dialog/index.js +114 -0
- package/components/dialogs/index.js +129 -0
- package/components/dialogs/login-dialog/index.js +369 -0
- package/components/dialogs/login-dialog/props.js +5 -0
- package/components/dialogs/page-dialog/index.js +96 -0
- package/components/dialogs/withDialogWrapper.js +108 -0
- package/components/form/button/index.js +216 -0
- package/components/form/button-group/index.js +60 -0
- package/components/input/calendar/index.js +546 -0
- package/components/input/calendar/props.js +5 -0
- package/components/input/calendar/utils.js +340 -0
- package/components/input/chips/SortableChip/index.js +115 -0
- package/components/input/chips/SortableChip/props.js +5 -0
- package/components/input/chips/index.js +488 -0
- package/components/input/chips/props.js +5 -0
- package/components/input/chips/utils.js +259 -0
- package/components/input/color-picker/index.js +678 -0
- package/components/input/color-picker/props.js +5 -0
- package/components/input/composite/index.js +137 -0
- package/components/input/currency/index.js +263 -0
- package/components/input/currency/props.js +5 -0
- package/components/input/default/checkbox/index.js +230 -0
- package/components/input/default/checkbox/props.js +5 -0
- package/components/input/default/checkboxset/index.js +476 -0
- package/components/input/default/checkboxset/props.js +5 -0
- package/components/input/default/radioset/index.js +379 -0
- package/components/input/default/radioset/props.js +5 -0
- package/components/input/default/switch/index.js +490 -0
- package/components/input/default/switch/prop.js +5 -0
- package/components/input/epoch/date/components/DatePickerPopover.js +220 -0
- package/components/input/epoch/date/index.js +520 -0
- package/components/input/epoch/date/props.js +5 -0
- package/components/input/epoch/date/styled.js +70 -0
- package/components/input/epoch/date/utils.js +108 -0
- package/components/input/epoch/datetime/index.js +656 -0
- package/components/input/epoch/datetime/props.js +5 -0
- package/components/input/epoch/datetime/styled.js +90 -0
- package/components/input/epoch/datetime/utils.js +244 -0
- package/components/input/epoch/time/index.js +412 -0
- package/components/input/epoch/time/props.js +5 -0
- package/components/input/epoch/time/utils.js +209 -0
- package/components/input/fileupload/Utils.js +134 -0
- package/components/input/fileupload/components/ListItems.js +140 -0
- package/components/input/fileupload/components/MultiUpload.js +85 -0
- package/components/input/fileupload/components/SingleUpload.js +65 -0
- package/components/input/fileupload/index.js +170 -0
- package/components/input/fileupload/props.js +5 -0
- package/components/input/fileupload/useFileUpload.js +400 -0
- package/components/input/number/index.js +295 -0
- package/components/input/number/props.js +5 -0
- package/components/input/rating/index.js +368 -0
- package/components/input/rating/props.js +5 -0
- package/components/input/select/index.js +344 -0
- package/components/input/select/props.js +5 -0
- package/components/input/slider/index.js +167 -0
- package/components/input/slider/props.js +5 -0
- package/components/input/text/index.js +434 -0
- package/components/input/text/props.js +5 -0
- package/components/input/text/util.js +179 -0
- package/components/input/textarea/index.js +347 -0
- package/components/input/textarea/props.js +5 -0
- package/components/layout/footer/index.js +30 -0
- package/components/layout/header/index.js +30 -0
- package/components/layout/leftnav/index.js +44 -0
- package/components/layout/rightnav/index.js +32 -0
- package/components/layout/topnav/index.js +34 -0
- package/components/navbar/index.js +41 -0
- package/components/navbar/nav/index.js +102 -0
- package/components/navbar/nav/props.js +5 -0
- package/components/navbar/nav-item/index.js +44 -0
- package/components/navigation/breadcrumb/index.js +56 -0
- package/components/navigation/breadcrumb/props.js +5 -0
- package/components/navigation/menu/components/ListItems.js +66 -0
- package/components/navigation/menu/constants.js +101 -0
- package/components/navigation/menu/index.js +807 -0
- package/components/navigation/menu/props.js +5 -0
- package/components/navigation/popover/index.js +209 -0
- package/components/navigation/popover/props.js +15 -0
- package/components/page/content/index.js +28 -0
- package/components/page/error-boundary/index.js +108 -0
- package/components/page/index.js +137 -0
- package/components/page/page-content/index.js +23 -0
- package/components/page/partial/index.js +36 -0
- package/components/page/partial-container/index.js +48 -0
- package/components/page/props.js +5 -0
- package/components/page/toast-container/index.js +33 -0
- package/components/prefab/container/index.js +46 -0
- package/components/prefab/index.js +67 -0
- package/context/AppContext.js +25 -0
- package/context/AppSpinnerProvider.js +43 -0
- package/context/LocalizationProvider.js +79 -0
- package/context/PrefabContext.js +66 -0
- package/context/WidgetProvider.js +187 -0
- package/core/app-config.js +1 -0
- package/core/app.service.js +357 -0
- package/core/appVariablesStore.js +20 -0
- package/core/appstore.js +88 -0
- package/core/constants/currency-constant.js +1071 -0
- package/core/constants/events.js +34 -0
- package/core/constants/index.js +27 -0
- package/core/dialog.service.js +76 -0
- package/core/event-notifier.js +151 -0
- package/core/formatter/date-formatters.js +222 -0
- package/core/formatter/index.js +131 -0
- package/core/formatter/number-formatters.js +142 -0
- package/core/formatter/security-formatters.js +323 -0
- package/core/formatter/string-formatters.js +52 -0
- package/core/formatter/types.js +18 -0
- package/core/formatters.js +24 -0
- package/core/proxy-service.js +412 -0
- package/core/script-registry.js +63 -0
- package/core/security.service.js +11 -0
- package/core/util/common.js +33 -0
- package/core/util/dom.js +107 -0
- package/core/util/index.js +136 -0
- package/core/util/security.js +184 -0
- package/core/util/utils.js +189 -0
- package/core/widget-observer.js +98 -0
- package/higherOrder/BaseApp.js +430 -0
- package/higherOrder/BaseAppProps.js +5 -0
- package/higherOrder/BaseDateTime.js +251 -0
- package/higherOrder/BasePage.js +715 -0
- package/higherOrder/BasePartial.js +124 -0
- package/higherOrder/BasePrefab.js +145 -0
- package/higherOrder/DataNav.js +377 -0
- package/higherOrder/helper.js +43 -0
- package/higherOrder/props.js +5 -0
- package/higherOrder/withBaseWrapper.js +183 -0
- package/hooks/useAccess.js +308 -0
- package/hooks/useAppConfig.js +42 -0
- package/hooks/useAuth.js +562 -0
- package/hooks/useDataSourceSubscription.js +125 -0
- package/hooks/useDebounce.js +76 -0
- package/hooks/useDeviceVisibility.js +49 -0
- package/hooks/useHttp.js +338 -0
- package/libs/index.js +20 -0
- package/mui-config/theme-provider.js +17 -0
- package/mui-config/theme.js +371 -0
- package/package-lock.json +10177 -0
- package/package.json +95 -0
- package/store/index.js +33 -0
- package/store/middleware/navigationMiddleware.js +48 -0
- package/store/slices/appConfigSlice.js +103 -0
- package/store/slices/authSlice.js +508 -0
- package/store/slices/i18nSlice.js +206 -0
- package/types/index.js +15 -0
- package/utils/dataset-util.js +174 -0
- package/utils/eval-expression.js +32 -0
- package/utils/form-state.util.js +140 -0
- package/utils/form-utils.js +187 -0
- package/utils/format-util.js +260 -0
- package/utils/page-params-util.js +24 -0
- package/utils/resource-url.js +27 -0
- package/utils/state-persistance.js +343 -0
- package/utils/style-utils.js +73 -0
- package/utils/transformedDataset-utils.js +633 -0
- package/utils/widget-cleanup-util.js +84 -0
- package/utils/widgets.js +99 -0
- package/variables/base-variable.js +173 -0
- package/variables/constants.js +27 -0
- package/variables/live-variable.js +166 -0
- package/variables/model-variable.js +77 -0
- package/variables/service-variable.js +307 -0
|
@@ -0,0 +1,796 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.usePagination = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _react = require("react");
|
|
11
|
+
var _lodash = require("lodash");
|
|
12
|
+
var _utils = require("../../table/utils");
|
|
13
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
14
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
15
|
+
// Utility function to check if the datasource has paging capability
|
|
16
|
+
var isDataSourceHasPaging = function isDataSourceHasPaging(datasource) {
|
|
17
|
+
return datasource && typeof datasource.execute === "function" && datasource.execute("IS_PAGEABLE");
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
// Utility function to calculate paging values
|
|
21
|
+
var calculatePagingValues = function calculatePagingValues(dataSize, maxResults) {
|
|
22
|
+
return dataSize > maxResults ? Math.ceil(dataSize / maxResults) : dataSize < 0 ? 0 : 1;
|
|
23
|
+
};
|
|
24
|
+
var usePagination = exports.usePagination = function usePagination(_ref) {
|
|
25
|
+
var _listener$Widgets;
|
|
26
|
+
var dataset = _ref.dataset,
|
|
27
|
+
_ref$maxResults = _ref.maxResults,
|
|
28
|
+
maxResults = _ref$maxResults === void 0 ? 10 : _ref$maxResults,
|
|
29
|
+
initialPage = _ref.currentPage,
|
|
30
|
+
navigation = _ref.navigation,
|
|
31
|
+
name = _ref.name,
|
|
32
|
+
listener = _ref.listener,
|
|
33
|
+
onPaginationChange = _ref.onPaginationChange,
|
|
34
|
+
onSetRecord = _ref.onSetRecord,
|
|
35
|
+
onPageSizeChange = _ref.onPageSizeChange,
|
|
36
|
+
paginationMeta = _ref.paginationMeta,
|
|
37
|
+
totalItems = _ref.totalItems,
|
|
38
|
+
datasource = _ref.datasource,
|
|
39
|
+
setIsLoadingMore = _ref.setIsLoadingMore,
|
|
40
|
+
_ref$isServerSidePagi = _ref.isServerSidePagination,
|
|
41
|
+
isServerSidePagination = _ref$isServerSidePagi === void 0 ? false : _ref$isServerSidePagi,
|
|
42
|
+
datasourceInvokeOptions = _ref.datasourceInvokeOptions;
|
|
43
|
+
// Extract onPageSizeChange from listener if not provided directly
|
|
44
|
+
var pageSizeChangeHandler = onPageSizeChange || (listener === null || listener === void 0 ? void 0 : listener.onPageSizeChange);
|
|
45
|
+
var widgetInstance = listener === null || listener === void 0 || (_listener$Widgets = listener.Widgets) === null || _listener$Widgets === void 0 ? void 0 : _listener$Widgets[name];
|
|
46
|
+
// Consolidated pagination state
|
|
47
|
+
var _useState = (0, _react.useState)({
|
|
48
|
+
currentPage: initialPage || 1,
|
|
49
|
+
pageCount: 0,
|
|
50
|
+
dataSize: 0,
|
|
51
|
+
currentMaxResults: (paginationMeta === null || paginationMeta === void 0 ? void 0 : paginationMeta.size) || maxResults,
|
|
52
|
+
error: null
|
|
53
|
+
}),
|
|
54
|
+
paginationState = _useState[0],
|
|
55
|
+
setPaginationState = _useState[1];
|
|
56
|
+
|
|
57
|
+
// Data state
|
|
58
|
+
var _useState2 = (0, _react.useState)({
|
|
59
|
+
fullData: [],
|
|
60
|
+
result: []
|
|
61
|
+
}),
|
|
62
|
+
dataState = _useState2[0],
|
|
63
|
+
setDataState = _useState2[1];
|
|
64
|
+
|
|
65
|
+
// Infinite scroll state
|
|
66
|
+
var _useState3 = (0, _react.useState)({
|
|
67
|
+
accumulatedData: [],
|
|
68
|
+
lastLoadedPage: 0,
|
|
69
|
+
isAccumulating: navigation === "Scroll",
|
|
70
|
+
isInitialized: false
|
|
71
|
+
}),
|
|
72
|
+
infiniteScrollState = _useState3[0],
|
|
73
|
+
setInfiniteScrollState = _useState3[1];
|
|
74
|
+
|
|
75
|
+
// Navigation disable states - consolidated for better performance
|
|
76
|
+
var _useState4 = (0, _react.useState)({
|
|
77
|
+
isDisableNext: true,
|
|
78
|
+
isDisablePrevious: true,
|
|
79
|
+
isDisableFirst: true,
|
|
80
|
+
isDisableLast: true,
|
|
81
|
+
isDisableCurrent: false,
|
|
82
|
+
isDisableCount: false
|
|
83
|
+
}),
|
|
84
|
+
disableStates = _useState4[0],
|
|
85
|
+
setDisableStates = _useState4[1];
|
|
86
|
+
var isFetchingRef = (0, _react.useRef)(false);
|
|
87
|
+
|
|
88
|
+
// Refs for infinite scroll
|
|
89
|
+
var observerRef = (0, _react.useRef)(null);
|
|
90
|
+
var sentinelRef = (0, _react.useRef)(null);
|
|
91
|
+
var infiniteScrollStateRef = (0, _react.useRef)(infiniteScrollState);
|
|
92
|
+
|
|
93
|
+
// Keep ref in sync with state
|
|
94
|
+
(0, _react.useEffect)(function () {
|
|
95
|
+
infiniteScrollStateRef.current = infiniteScrollState;
|
|
96
|
+
}, [infiniteScrollState]);
|
|
97
|
+
|
|
98
|
+
// Memoized computed values for better performance
|
|
99
|
+
var isFirstPage = (0, _react.useMemo)(function () {
|
|
100
|
+
// First check pagination metadata if available
|
|
101
|
+
if (paginationMeta && paginationMeta.first !== undefined) {
|
|
102
|
+
return paginationMeta.first;
|
|
103
|
+
}
|
|
104
|
+
// Fall back to calculation
|
|
105
|
+
return paginationState.currentPage === 1 || !paginationState.currentPage;
|
|
106
|
+
}, [paginationState.currentPage, paginationMeta]);
|
|
107
|
+
var isLastPage = (0, _react.useMemo)(function () {
|
|
108
|
+
// First check pagination metadata if available
|
|
109
|
+
if (paginationMeta && paginationMeta.last !== undefined) {
|
|
110
|
+
return paginationMeta.last;
|
|
111
|
+
}
|
|
112
|
+
// Fall back to calculation
|
|
113
|
+
return paginationState.currentPage === paginationState.pageCount;
|
|
114
|
+
}, [paginationState.currentPage, paginationState.pageCount, paginationMeta]);
|
|
115
|
+
|
|
116
|
+
// Navigation controls
|
|
117
|
+
var allowedNavControls = ["Basic", "Classic", "Pager", "Scroll"];
|
|
118
|
+
var getValidNavControl = function getValidNavControl(nav) {
|
|
119
|
+
return allowedNavControls.includes(nav) ? nav : "Basic";
|
|
120
|
+
};
|
|
121
|
+
var _useState5 = (0, _react.useState)(getValidNavControl(navigation)),
|
|
122
|
+
navcontrols = _useState5[0],
|
|
123
|
+
setNavcontrols = _useState5[1];
|
|
124
|
+
|
|
125
|
+
// Function to invoke datasource for API-based pagination
|
|
126
|
+
var datasourceInvoke = (0, _react.useCallback)(function (page, size) {
|
|
127
|
+
var isScrollMode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
128
|
+
// Only invoke datasource if server-side pagination is enabled
|
|
129
|
+
if (isServerSidePagination && datasource && typeof datasource.invoke === "function") {
|
|
130
|
+
// Prevent concurrent requests
|
|
131
|
+
if (isFetchingRef.current) {
|
|
132
|
+
return Promise.resolve();
|
|
133
|
+
}
|
|
134
|
+
isFetchingRef.current = true;
|
|
135
|
+
setPaginationState(function (prev) {
|
|
136
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
137
|
+
error: null
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
try {
|
|
141
|
+
// Prepare invoke options with page and optionally size
|
|
142
|
+
var invokeOptions = {
|
|
143
|
+
page: page
|
|
144
|
+
};
|
|
145
|
+
if (size !== undefined) {
|
|
146
|
+
invokeOptions.size = size;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Include additional invoke options if provided (for table sorting/filtering)
|
|
150
|
+
if (datasourceInvokeOptions) {
|
|
151
|
+
// Merge the additional options with page/size
|
|
152
|
+
Object.assign(invokeOptions, datasourceInvokeOptions);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Wrap the result in Promise.resolve to handle cases where invoke doesn't return a Promise
|
|
156
|
+
var result = datasource.invoke(invokeOptions);
|
|
157
|
+
return Promise.resolve(result).then(function (response) {
|
|
158
|
+
isFetchingRef.current = false;
|
|
159
|
+
|
|
160
|
+
// For scroll mode, we need to accumulate data instead of replacing
|
|
161
|
+
if (isScrollMode && response && response.data) {
|
|
162
|
+
// Get the new accumulated data using ref to avoid circular dependency
|
|
163
|
+
var currentAccumulatedData = infiniteScrollStateRef.current.accumulatedData;
|
|
164
|
+
|
|
165
|
+
// Ensure unique row IDs using the existing utility
|
|
166
|
+
var newDataWithIds = (0, _utils.addUniqueRowIds)(response.data);
|
|
167
|
+
var newAccumulatedData = [].concat((0, _toConsumableArray2["default"])(currentAccumulatedData), (0, _toConsumableArray2["default"])(newDataWithIds));
|
|
168
|
+
setInfiniteScrollState(function (prev) {
|
|
169
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
170
|
+
accumulatedData: newAccumulatedData,
|
|
171
|
+
lastLoadedPage: page
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
// Immediately update the data state with accumulated data
|
|
176
|
+
setDataState(function (prev) {
|
|
177
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
178
|
+
fullData: newAccumulatedData,
|
|
179
|
+
result: newAccumulatedData
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
return response;
|
|
184
|
+
})["catch"](function (error) {
|
|
185
|
+
isFetchingRef.current = false;
|
|
186
|
+
console.error("Error fetching page data:", error);
|
|
187
|
+
setPaginationState(function (prev) {
|
|
188
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
189
|
+
error: error.message || "Failed to fetch page data"
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
return Promise.reject(error);
|
|
193
|
+
});
|
|
194
|
+
} catch (error) {
|
|
195
|
+
isFetchingRef.current = false;
|
|
196
|
+
console.error("Error invoking datasource:", error);
|
|
197
|
+
setPaginationState(function (prev) {
|
|
198
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
199
|
+
error: error.message || "Failed to invoke datasource"
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
return Promise.reject(error);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return Promise.resolve();
|
|
206
|
+
}, [datasource, isServerSidePagination, datasourceInvokeOptions]);
|
|
207
|
+
|
|
208
|
+
// Function to load more data for infinite scroll
|
|
209
|
+
var loadMoreData = (0, _react.useCallback)(function () {
|
|
210
|
+
if (navigation !== "Scroll" || !isServerSidePagination || isLastPage || isFetchingRef.current) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
var nextPage = infiniteScrollStateRef.current.lastLoadedPage + 1;
|
|
214
|
+
if (setIsLoadingMore) {
|
|
215
|
+
setIsLoadingMore(true);
|
|
216
|
+
}
|
|
217
|
+
datasourceInvoke(nextPage, paginationState.currentMaxResults, true).then(function () {
|
|
218
|
+
setPaginationState(function (prev) {
|
|
219
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
220
|
+
currentPage: nextPage
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
if (onPaginationChange) {
|
|
224
|
+
onPaginationChange(null, widgetInstance, nextPage);
|
|
225
|
+
}
|
|
226
|
+
if (setIsLoadingMore) {
|
|
227
|
+
setIsLoadingMore(false);
|
|
228
|
+
}
|
|
229
|
+
})["catch"](function () {
|
|
230
|
+
if (setIsLoadingMore) {
|
|
231
|
+
setIsLoadingMore(false);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
}, [navigation, isServerSidePagination, isLastPage, setIsLoadingMore, datasourceInvoke, paginationState.currentMaxResults, onPaginationChange, widgetInstance]);
|
|
235
|
+
|
|
236
|
+
// Set up intersection observer for infinite scroll
|
|
237
|
+
var setupInfiniteScrollObserver = (0, _react.useCallback)(function (sentinel) {
|
|
238
|
+
// Clean up existing observer
|
|
239
|
+
if (observerRef.current) {
|
|
240
|
+
observerRef.current.disconnect();
|
|
241
|
+
observerRef.current = null;
|
|
242
|
+
}
|
|
243
|
+
if (!sentinel || navigation !== "Scroll" || !infiniteScrollStateRef.current.isInitialized) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Create new observer
|
|
248
|
+
observerRef.current = new IntersectionObserver(function (entries) {
|
|
249
|
+
var entry = entries[0];
|
|
250
|
+
// Only trigger if initialized, intersecting, not last page, and not already fetching
|
|
251
|
+
if (entry.isIntersecting && infiniteScrollStateRef.current.isInitialized && !isLastPage && !isFetchingRef.current) {
|
|
252
|
+
loadMoreData();
|
|
253
|
+
}
|
|
254
|
+
}, {
|
|
255
|
+
root: null,
|
|
256
|
+
rootMargin: "100px",
|
|
257
|
+
// Start loading 100px before reaching the bottom
|
|
258
|
+
threshold: 0.1
|
|
259
|
+
});
|
|
260
|
+
observerRef.current.observe(sentinel);
|
|
261
|
+
}, [navigation, isLastPage, loadMoreData]);
|
|
262
|
+
|
|
263
|
+
// Function to reset the paging values to default
|
|
264
|
+
|
|
265
|
+
// Function to calculate the paging values
|
|
266
|
+
|
|
267
|
+
// Function to set default values to the paging parameters
|
|
268
|
+
var setDefaultPagingValues = (0, _react.useCallback)(function (newDataSize, newMaxResults, currentPage) {
|
|
269
|
+
setPaginationState(function (prev) {
|
|
270
|
+
// If neither 'dataSize' nor 'maxResults' is set, then set default values to the paging parameters
|
|
271
|
+
if (!newDataSize && !newMaxResults) {
|
|
272
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
273
|
+
pageCount: 1,
|
|
274
|
+
dataSize: newDataSize,
|
|
275
|
+
currentPage: currentPage !== undefined ? currentPage : prev.currentPage
|
|
276
|
+
});
|
|
277
|
+
} else {
|
|
278
|
+
// Else, set the specified values and recalculate paging parameters
|
|
279
|
+
var updatedMaxResults = newMaxResults || prev.currentMaxResults;
|
|
280
|
+
var updatedDataSize = newDataSize !== undefined ? newDataSize : prev.dataSize;
|
|
281
|
+
var updatedCurrentPage = currentPage !== undefined ? currentPage : prev.currentPage;
|
|
282
|
+
|
|
283
|
+
// Calculate page count based on updated values
|
|
284
|
+
// Use paginationMeta.totalPages if available
|
|
285
|
+
var newPageCount = (paginationMeta === null || paginationMeta === void 0 ? void 0 : paginationMeta.totalPages) !== undefined ? paginationMeta.totalPages : updatedDataSize > updatedMaxResults ? Math.ceil(updatedDataSize / updatedMaxResults) : updatedDataSize < 0 ? 0 : 1;
|
|
286
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
287
|
+
currentPage: updatedCurrentPage,
|
|
288
|
+
dataSize: updatedDataSize,
|
|
289
|
+
pageCount: newPageCount
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}, [paginationMeta]);
|
|
294
|
+
|
|
295
|
+
// Function to disable navigation based on the current and total pages
|
|
296
|
+
var disableNavigation = (0, _react.useCallback)(function () {
|
|
297
|
+
setDisableStates({
|
|
298
|
+
isDisableFirst: isFirstPage,
|
|
299
|
+
isDisablePrevious: isFirstPage,
|
|
300
|
+
isDisableNext: isLastPage,
|
|
301
|
+
isDisableLast: isLastPage,
|
|
302
|
+
isDisableCurrent: isFirstPage && isLastPage,
|
|
303
|
+
isDisableCount: false
|
|
304
|
+
});
|
|
305
|
+
}, [isFirstPage, isLastPage]);
|
|
306
|
+
|
|
307
|
+
// Set non-pageable data
|
|
308
|
+
var setNonPageableData = (0, _react.useCallback)(function (newVal) {
|
|
309
|
+
var newDataSize, newMaxResults, currentPage, startIndex;
|
|
310
|
+
newDataSize = (0, _lodash.isArray)(newVal) ? newVal.length : (0, _lodash.isEmpty)(newVal) ? 0 : 1;
|
|
311
|
+
newMaxResults = paginationState.currentMaxResults || newDataSize;
|
|
312
|
+
// Don't default to 1 if currentPage exists
|
|
313
|
+
currentPage = paginationState.currentPage;
|
|
314
|
+
setDefaultPagingValues(newDataSize, newMaxResults, currentPage);
|
|
315
|
+
disableNavigation();
|
|
316
|
+
startIndex = (currentPage - 1) * newMaxResults;
|
|
317
|
+
setDataState(function (prev) {
|
|
318
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
319
|
+
result: (0, _lodash.isArray)(newVal) ? newVal.slice(startIndex, startIndex + newMaxResults) : newVal
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
}, [paginationState.currentPage, paginationState.currentMaxResults, disableNavigation, setDefaultPagingValues]);
|
|
323
|
+
|
|
324
|
+
// Set pagination values
|
|
325
|
+
var setPagingValues = (0, _react.useCallback)(function (newVal) {
|
|
326
|
+
// For scroll mode with server-side pagination, special handling
|
|
327
|
+
if (navigation === "Scroll" && isServerSidePagination) {
|
|
328
|
+
// Use ref to check accumulated data to avoid circular dependency
|
|
329
|
+
var currentAccumulatedData = infiniteScrollStateRef.current.accumulatedData;
|
|
330
|
+
|
|
331
|
+
// Only update on initial load (when accumulated data is empty)
|
|
332
|
+
if (currentAccumulatedData.length === 0 && (0, _lodash.isArray)(newVal)) {
|
|
333
|
+
// Ensure initial data has unique IDs using the existing utility
|
|
334
|
+
var initialDataWithIds = (0, _utils.addUniqueRowIds)(newVal);
|
|
335
|
+
setInfiniteScrollState(function (prev) {
|
|
336
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
337
|
+
accumulatedData: initialDataWithIds,
|
|
338
|
+
lastLoadedPage: 1,
|
|
339
|
+
isInitialized: true
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
setDataState(function (prev) {
|
|
343
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
344
|
+
fullData: initialDataWithIds,
|
|
345
|
+
result: initialDataWithIds
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
} else if (currentAccumulatedData.length > 0) {
|
|
349
|
+
// For subsequent updates in scroll mode, always use accumulated data
|
|
350
|
+
setDataState(function (prev) {
|
|
351
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
352
|
+
fullData: currentAccumulatedData,
|
|
353
|
+
result: currentAccumulatedData
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
// Always return early for scroll mode to prevent normal pagination logic
|
|
358
|
+
return;
|
|
359
|
+
} else {
|
|
360
|
+
// Store the data in fullData. This is used for client side searching without modifying the actual dataset
|
|
361
|
+
setDataState(function (prev) {
|
|
362
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
363
|
+
fullData: (0, _lodash.isArray)(newVal) ? newVal : []
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
if (newVal && !(0, _lodash.isArray)(newVal)) {
|
|
367
|
+
setNonPageableData(newVal);
|
|
368
|
+
} else if (newVal) {
|
|
369
|
+
setNonPageableData(newVal);
|
|
370
|
+
} else {
|
|
371
|
+
setDataState(function (prev) {
|
|
372
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
373
|
+
result: newVal
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
// Don't reset page navigation when dataset is empty - just update counts
|
|
377
|
+
setPaginationState(function (prev) {
|
|
378
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
379
|
+
pageCount: 0,
|
|
380
|
+
dataSize: 0
|
|
381
|
+
});
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}, [setNonPageableData, navigation, isServerSidePagination]);
|
|
386
|
+
|
|
387
|
+
// Validate current page
|
|
388
|
+
var validateCurrentPage = (0, _react.useCallback)(function (event) {
|
|
389
|
+
var currentPage = paginationState.currentPage,
|
|
390
|
+
pageCount = paginationState.pageCount;
|
|
391
|
+
// If the value entered is greater than the last page number or invalid value, then update the page
|
|
392
|
+
if (event && (isNaN(currentPage) || currentPage <= 0 || pageCount && (currentPage > pageCount || (0, _lodash.isNull)(currentPage)))) {
|
|
393
|
+
if (currentPage <= 0) {
|
|
394
|
+
setPaginationState(function (prev) {
|
|
395
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
396
|
+
currentPage: 1
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
} else if (currentPage > pageCount) {
|
|
400
|
+
setPaginationState(function (prev) {
|
|
401
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
402
|
+
currentPage: pageCount
|
|
403
|
+
});
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
return true;
|
|
409
|
+
}, [paginationState]);
|
|
410
|
+
|
|
411
|
+
// Go to page
|
|
412
|
+
var goToPage = (0, _react.useCallback)(function () {
|
|
413
|
+
var currentPage = paginationState.currentPage,
|
|
414
|
+
currentMaxResults = paginationState.currentMaxResults;
|
|
415
|
+
var fullData = dataState.fullData;
|
|
416
|
+
var firstRow = (currentPage - 1) * currentMaxResults;
|
|
417
|
+
var startIndex = firstRow;
|
|
418
|
+
var data = (0, _lodash.isArray)(fullData) ? fullData.slice(startIndex, startIndex + currentMaxResults) : fullData;
|
|
419
|
+
setDataState(function (prev) {
|
|
420
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
421
|
+
result: data
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
disableNavigation();
|
|
425
|
+
}, [paginationState, dataState.fullData, disableNavigation]);
|
|
426
|
+
|
|
427
|
+
// Shared function for common pagination logic
|
|
428
|
+
var performPageNavigation = (0, _react.useCallback)(function (newPage, previousPage) {
|
|
429
|
+
// Set loading state if available
|
|
430
|
+
if (setIsLoadingMore) {
|
|
431
|
+
setIsLoadingMore(true);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// Always update the current page immediately for better UX
|
|
435
|
+
setPaginationState(function (prev) {
|
|
436
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
437
|
+
currentPage: newPage
|
|
438
|
+
});
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
// If server-side pagination is enabled, use API-based pagination
|
|
442
|
+
if (isServerSidePagination) {
|
|
443
|
+
datasourceInvoke(newPage).then(function () {
|
|
444
|
+
// Only trigger callbacks on successful data fetch
|
|
445
|
+
if (onPaginationChange) {
|
|
446
|
+
onPaginationChange(null, widgetInstance, newPage);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// Call onSetRecord with the new page data
|
|
450
|
+
if (onSetRecord) {
|
|
451
|
+
var firstRow = (newPage - 1) * paginationState.currentMaxResults;
|
|
452
|
+
var startIndex = firstRow;
|
|
453
|
+
var data = (0, _lodash.isArray)(dataState.fullData) ? dataState.fullData.slice(startIndex, startIndex + paginationState.currentMaxResults) : dataState.fullData;
|
|
454
|
+
onSetRecord(null, widgetInstance, newPage, data);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// Clear loading state immediately for better UX
|
|
458
|
+
if (setIsLoadingMore) {
|
|
459
|
+
setIsLoadingMore(false);
|
|
460
|
+
}
|
|
461
|
+
})["catch"](function () {
|
|
462
|
+
// If the data fetch fails, revert to the previous page
|
|
463
|
+
setPaginationState(function (prev) {
|
|
464
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
465
|
+
currentPage: previousPage || paginationState.currentPage
|
|
466
|
+
});
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
// Clear loading state
|
|
470
|
+
if (setIsLoadingMore) {
|
|
471
|
+
setIsLoadingMore(false);
|
|
472
|
+
}
|
|
473
|
+
});
|
|
474
|
+
} else {
|
|
475
|
+
// Client-side pagination - no API call needed
|
|
476
|
+
// Just trigger the callbacks directly
|
|
477
|
+
if (onPaginationChange) {
|
|
478
|
+
onPaginationChange(null, widgetInstance, newPage);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
// Call onSetRecord with the new page data
|
|
482
|
+
if (onSetRecord) {
|
|
483
|
+
var firstRow = (newPage - 1) * paginationState.currentMaxResults;
|
|
484
|
+
var startIndex = firstRow;
|
|
485
|
+
var data = (0, _lodash.isArray)(dataState.fullData) ? dataState.fullData.slice(startIndex, startIndex + paginationState.currentMaxResults) : dataState.fullData;
|
|
486
|
+
onSetRecord(null, widgetInstance, newPage, data);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
// Clear loading state immediately - no delay needed for client-side pagination
|
|
490
|
+
if (setIsLoadingMore) {
|
|
491
|
+
setIsLoadingMore(false);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}, [isServerSidePagination, datasourceInvoke, onPaginationChange, onSetRecord, widgetInstance, paginationState, dataState.fullData, setIsLoadingMore]);
|
|
495
|
+
|
|
496
|
+
// Navigate to page
|
|
497
|
+
var navigatePage = (0, _react.useCallback)(function (index, event) {
|
|
498
|
+
var isRefresh = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
499
|
+
// Convert the current page to a valid page number
|
|
500
|
+
var currentPage = +paginationState.currentPage;
|
|
501
|
+
var newPage = currentPage;
|
|
502
|
+
switch (index) {
|
|
503
|
+
case "first":
|
|
504
|
+
if (!isFirstPage) {
|
|
505
|
+
newPage = 1;
|
|
506
|
+
} else if (isRefresh) {
|
|
507
|
+
goToPage();
|
|
508
|
+
return;
|
|
509
|
+
} else {
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
break;
|
|
513
|
+
case "prev":
|
|
514
|
+
// Return if already on the first page or invalid page
|
|
515
|
+
if (isFirstPage || !validateCurrentPage(event)) {
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
// Decrement the current page by 1
|
|
519
|
+
newPage = currentPage - 1;
|
|
520
|
+
break;
|
|
521
|
+
case "next":
|
|
522
|
+
// Return if already on the last page or invalid page
|
|
523
|
+
if (isLastPage || !validateCurrentPage(event)) {
|
|
524
|
+
return;
|
|
525
|
+
}
|
|
526
|
+
// Increment the current page by 1
|
|
527
|
+
newPage = currentPage + 1;
|
|
528
|
+
break;
|
|
529
|
+
case "last":
|
|
530
|
+
if (!isLastPage) {
|
|
531
|
+
newPage = paginationState.pageCount;
|
|
532
|
+
} else if (isRefresh) {
|
|
533
|
+
goToPage();
|
|
534
|
+
return;
|
|
535
|
+
} else {
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
break;
|
|
539
|
+
default:
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
// Call handlers only when page actually changes
|
|
544
|
+
if (newPage !== currentPage) {
|
|
545
|
+
performPageNavigation(newPage, currentPage);
|
|
546
|
+
}
|
|
547
|
+
}, [paginationState, isFirstPage, isLastPage, validateCurrentPage, goToPage, performPageNavigation]);
|
|
548
|
+
|
|
549
|
+
// Handle page change for basic pagination
|
|
550
|
+
var handlePageChange = (0, _react.useCallback)(function (event, page) {
|
|
551
|
+
// Do not call goToPage if page has not changed
|
|
552
|
+
if (page !== paginationState.currentPage) {
|
|
553
|
+
// Save current page to restore in case of error
|
|
554
|
+
var previousPage = paginationState.currentPage;
|
|
555
|
+
performPageNavigation(page, previousPage);
|
|
556
|
+
}
|
|
557
|
+
}, [paginationState.currentPage, performPageNavigation]);
|
|
558
|
+
|
|
559
|
+
// Handle input change for classic pagination
|
|
560
|
+
var handleInputChange = (0, _react.useCallback)(function (event) {
|
|
561
|
+
var value = parseInt(event.target.value, 10);
|
|
562
|
+
if (!isNaN(value)) {
|
|
563
|
+
setPaginationState(function (prev) {
|
|
564
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
565
|
+
currentPage: value
|
|
566
|
+
});
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
}, []);
|
|
570
|
+
|
|
571
|
+
// Handle model change
|
|
572
|
+
var onModelChange = (0, _react.useCallback)(function (event) {
|
|
573
|
+
if (!validateCurrentPage(event)) {
|
|
574
|
+
return;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
// Call onSetRecord with the current page data
|
|
578
|
+
if (onSetRecord) {
|
|
579
|
+
var currentPage = paginationState.currentPage,
|
|
580
|
+
currentMaxResults = paginationState.currentMaxResults;
|
|
581
|
+
var fullData = dataState.fullData;
|
|
582
|
+
var firstRow = (currentPage - 1) * currentMaxResults;
|
|
583
|
+
var startIndex = firstRow;
|
|
584
|
+
var data = (0, _lodash.isArray)(fullData) ? fullData.slice(startIndex, startIndex + currentMaxResults) : fullData;
|
|
585
|
+
onSetRecord(null, widgetInstance, currentPage, data);
|
|
586
|
+
}
|
|
587
|
+
goToPage();
|
|
588
|
+
}, [goToPage, validateCurrentPage, onSetRecord, paginationState, dataState.fullData, widgetInstance]);
|
|
589
|
+
|
|
590
|
+
// Handle key down
|
|
591
|
+
var onKeyDown = (0, _react.useCallback)(function (event) {
|
|
592
|
+
if (event.code === "KeyE") {
|
|
593
|
+
event.currentTarget.classList.add("ng-invalid");
|
|
594
|
+
return false;
|
|
595
|
+
}
|
|
596
|
+
event.currentTarget.classList.remove("ng-invalid");
|
|
597
|
+
return true;
|
|
598
|
+
}, []);
|
|
599
|
+
|
|
600
|
+
// Handle page size change
|
|
601
|
+
var handlePageSizeChange = (0, _react.useCallback)(function (event, pageSize) {
|
|
602
|
+
var oldPageSize = paginationState.currentMaxResults,
|
|
603
|
+
oldPage = paginationState.currentPage,
|
|
604
|
+
dataSize = paginationState.dataSize;
|
|
605
|
+
|
|
606
|
+
// Store actualPageSize (the previous page size) similar to Angular
|
|
607
|
+
var actualPageSize = oldPageSize;
|
|
608
|
+
|
|
609
|
+
// Update datasource maxResults if datasource has paging capability
|
|
610
|
+
if (isDataSourceHasPaging(datasource) && datasource) {
|
|
611
|
+
datasource.maxResults = pageSize;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
// Update page size and reset to first page (similar to Angular behavior)
|
|
615
|
+
setPaginationState(function (prev) {
|
|
616
|
+
// Calculate new page count
|
|
617
|
+
var newPageCount = calculatePagingValues(dataSize, pageSize);
|
|
618
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
619
|
+
currentMaxResults: pageSize,
|
|
620
|
+
currentPage: 1,
|
|
621
|
+
// Always go to first page like Angular
|
|
622
|
+
pageCount: newPageCount
|
|
623
|
+
});
|
|
624
|
+
});
|
|
625
|
+
|
|
626
|
+
// Set loading state if available
|
|
627
|
+
if (setIsLoadingMore) {
|
|
628
|
+
setIsLoadingMore(true);
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
// Call the external handler if provided
|
|
632
|
+
if (pageSizeChangeHandler) {
|
|
633
|
+
pageSizeChangeHandler(pageSize);
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
// Invoke datasource with new page size for server-side pagination
|
|
637
|
+
if (isServerSidePagination) {
|
|
638
|
+
datasourceInvoke(1, pageSize).then(function () {
|
|
639
|
+
// Trigger paginationchange event
|
|
640
|
+
if (onPaginationChange) {
|
|
641
|
+
onPaginationChange(null, widgetInstance, 1);
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
// Call onSetRecord with the new page data
|
|
645
|
+
if (onSetRecord) {
|
|
646
|
+
var data = (0, _lodash.isArray)(dataState.fullData) ? dataState.fullData.slice(0, pageSize) : dataState.fullData;
|
|
647
|
+
onSetRecord(null, widgetInstance, 1, data);
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
// Clear loading state
|
|
651
|
+
if (setIsLoadingMore) {
|
|
652
|
+
setIsLoadingMore(false);
|
|
653
|
+
}
|
|
654
|
+
})["catch"](function () {
|
|
655
|
+
// Clear loading state on error
|
|
656
|
+
if (setIsLoadingMore) {
|
|
657
|
+
setIsLoadingMore(false);
|
|
658
|
+
}
|
|
659
|
+
});
|
|
660
|
+
} else {
|
|
661
|
+
// For client-side pagination, navigate to first page
|
|
662
|
+
setTimeout(function () {
|
|
663
|
+
navigatePage("first", event, true);
|
|
664
|
+
}, 0);
|
|
665
|
+
|
|
666
|
+
// Clear loading state immediately for client-side pagination
|
|
667
|
+
if (setIsLoadingMore) {
|
|
668
|
+
setIsLoadingMore(false);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
}, [pageSizeChangeHandler, navigatePage, datasource, paginationState, isServerSidePagination, datasourceInvoke, onPaginationChange, onSetRecord, widgetInstance, dataState.fullData, setIsLoadingMore]);
|
|
672
|
+
|
|
673
|
+
// Effect for navigation controls
|
|
674
|
+
(0, _react.useEffect)(function () {
|
|
675
|
+
setNavcontrols(getValidNavControl(navigation));
|
|
676
|
+
|
|
677
|
+
// Reset infinite scroll state when navigation changes
|
|
678
|
+
if (navigation === "Scroll") {
|
|
679
|
+
setInfiniteScrollState({
|
|
680
|
+
accumulatedData: [],
|
|
681
|
+
lastLoadedPage: 0,
|
|
682
|
+
isAccumulating: true,
|
|
683
|
+
isInitialized: false
|
|
684
|
+
});
|
|
685
|
+
}
|
|
686
|
+
}, [navigation]);
|
|
687
|
+
|
|
688
|
+
// for dataset changes
|
|
689
|
+
(0, _react.useEffect)(function () {
|
|
690
|
+
if (dataset !== undefined) {
|
|
691
|
+
setPagingValues(dataset);
|
|
692
|
+
}
|
|
693
|
+
}, [dataset, setPagingValues]);
|
|
694
|
+
|
|
695
|
+
// For server-side pagination, update dataSize and pageCount based on metadata
|
|
696
|
+
(0, _react.useEffect)(function () {
|
|
697
|
+
if (isServerSidePagination) {
|
|
698
|
+
// Handle totalItems/totalElements
|
|
699
|
+
var totalCount = totalItems !== null && totalItems !== void 0 ? totalItems : paginationMeta === null || paginationMeta === void 0 ? void 0 : paginationMeta.totalElements;
|
|
700
|
+
if (totalCount !== undefined && totalCount >= 0) {
|
|
701
|
+
setPaginationState(function (prev) {
|
|
702
|
+
var updates = {
|
|
703
|
+
dataSize: totalCount
|
|
704
|
+
};
|
|
705
|
+
|
|
706
|
+
// If totalPages not provided, calculate it
|
|
707
|
+
if ((paginationMeta === null || paginationMeta === void 0 ? void 0 : paginationMeta.totalPages) !== undefined) {
|
|
708
|
+
updates.pageCount = paginationMeta.totalPages;
|
|
709
|
+
} else if (prev.currentMaxResults > 0) {
|
|
710
|
+
updates.pageCount = Math.ceil(totalCount / prev.currentMaxResults) || 1;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
// Handle edge case: current page is out of range
|
|
714
|
+
if (paginationMeta !== null && paginationMeta !== void 0 && paginationMeta.totalPages && prev.currentPage > paginationMeta.totalPages) {
|
|
715
|
+
updates.currentPage = Math.max(1, paginationMeta.totalPages);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
// Handle empty results
|
|
719
|
+
if (totalCount === 0) {
|
|
720
|
+
updates.pageCount = 1; // Show at least one page for empty results
|
|
721
|
+
updates.currentPage = 1;
|
|
722
|
+
}
|
|
723
|
+
return _objectSpread(_objectSpread({}, prev), updates);
|
|
724
|
+
});
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
}, [isServerSidePagination, totalItems, paginationMeta]);
|
|
728
|
+
|
|
729
|
+
// Sync internal state with currentPage prop changes (for controlled pagination)
|
|
730
|
+
(0, _react.useEffect)(function () {
|
|
731
|
+
if (initialPage !== undefined && initialPage !== paginationState.currentPage) {
|
|
732
|
+
setPaginationState(function (prev) {
|
|
733
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
734
|
+
currentPage: initialPage
|
|
735
|
+
});
|
|
736
|
+
});
|
|
737
|
+
// Update navigation buttons when page changes
|
|
738
|
+
disableNavigation();
|
|
739
|
+
}
|
|
740
|
+
}, [initialPage, paginationState.currentPage, disableNavigation]);
|
|
741
|
+
|
|
742
|
+
// Re-setup observer when initialization state changes
|
|
743
|
+
(0, _react.useEffect)(function () {
|
|
744
|
+
if (infiniteScrollState.isInitialized && sentinelRef.current && navigation === "Scroll") {
|
|
745
|
+
setupInfiniteScrollObserver(sentinelRef.current);
|
|
746
|
+
}
|
|
747
|
+
}, [infiniteScrollState.isInitialized, navigation, setupInfiniteScrollObserver]);
|
|
748
|
+
|
|
749
|
+
// Cleanup observer on unmount
|
|
750
|
+
(0, _react.useEffect)(function () {
|
|
751
|
+
return function () {
|
|
752
|
+
if (observerRef.current) {
|
|
753
|
+
observerRef.current.disconnect();
|
|
754
|
+
observerRef.current = null;
|
|
755
|
+
}
|
|
756
|
+
};
|
|
757
|
+
}, []);
|
|
758
|
+
return {
|
|
759
|
+
// State
|
|
760
|
+
currentPage: paginationState.currentPage,
|
|
761
|
+
pageCount: paginationState.pageCount,
|
|
762
|
+
dataSize: paginationState.dataSize,
|
|
763
|
+
result: dataState.result,
|
|
764
|
+
navcontrols: navcontrols,
|
|
765
|
+
currentMaxResults: paginationState.currentMaxResults,
|
|
766
|
+
error: paginationState.error,
|
|
767
|
+
// Disable states
|
|
768
|
+
isDisableNext: disableStates.isDisableNext,
|
|
769
|
+
isDisablePrevious: disableStates.isDisablePrevious,
|
|
770
|
+
isDisableFirst: disableStates.isDisableFirst,
|
|
771
|
+
isDisableLast: disableStates.isDisableLast,
|
|
772
|
+
isDisableCurrent: disableStates.isDisableCurrent,
|
|
773
|
+
isDisableCount: disableStates.isDisableCount,
|
|
774
|
+
// Actions
|
|
775
|
+
navigatePage: navigatePage,
|
|
776
|
+
handlePageChange: handlePageChange,
|
|
777
|
+
handleInputChange: handleInputChange,
|
|
778
|
+
onModelChange: onModelChange,
|
|
779
|
+
onKeyDown: onKeyDown,
|
|
780
|
+
setDn: function setDn(value) {
|
|
781
|
+
return setPaginationState(function (prev) {
|
|
782
|
+
return _objectSpread(_objectSpread({}, prev), value);
|
|
783
|
+
});
|
|
784
|
+
},
|
|
785
|
+
handlePageSizeChange: handlePageSizeChange,
|
|
786
|
+
// Utilities
|
|
787
|
+
isFirstPage: isFirstPage,
|
|
788
|
+
isLastPage: isLastPage,
|
|
789
|
+
isFetching: isFetchingRef.current,
|
|
790
|
+
// Infinite scroll specific
|
|
791
|
+
setupInfiniteScrollObserver: setupInfiniteScrollObserver,
|
|
792
|
+
sentinelRef: sentinelRef,
|
|
793
|
+
isLoadingMore: isFetchingRef.current && navigation === "Scroll" && infiniteScrollStateRef.current.lastLoadedPage > 1,
|
|
794
|
+
hasMoreData: !isLastPage && navigation === "Scroll"
|
|
795
|
+
};
|
|
796
|
+
};
|