@wavemaker/react-runtime 11.14.1-16.6404
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,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useTableState = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var useTableState = exports.useTableState = function useTableState(_ref) {
|
|
9
|
+
var _ref$editMode = _ref.editMode,
|
|
10
|
+
editMode = _ref$editMode === void 0 ? "none" : _ref$editMode,
|
|
11
|
+
_ref$radioselect = _ref.radioselect,
|
|
12
|
+
radioselect = _ref$radioselect === void 0 ? false : _ref$radioselect,
|
|
13
|
+
_ref$multiselect = _ref.multiselect,
|
|
14
|
+
multiselect = _ref$multiselect === void 0 ? false : _ref$multiselect;
|
|
15
|
+
// State to track active rows - now supports multiple rows
|
|
16
|
+
var _useState = (0, _react.useState)([]),
|
|
17
|
+
activeRowIds = _useState[0],
|
|
18
|
+
setActiveRowIds = _useState[1];
|
|
19
|
+
|
|
20
|
+
// Handle row click for active state
|
|
21
|
+
var handleRowActiveClick = (0, _react.useCallback)(function (rowId, isSelectionHandled, isEditingOrAdding) {
|
|
22
|
+
// Don't change active row if currently editing a row or adding new row
|
|
23
|
+
if (isEditingOrAdding) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// For multiselect, active state is synced with selection state
|
|
28
|
+
// so we don't need to manually toggle here
|
|
29
|
+
if (multiselect) {
|
|
30
|
+
// Active state will be synced via the useEffect in the main table component
|
|
31
|
+
return;
|
|
32
|
+
} else {
|
|
33
|
+
// For single selection or no selection, replace with single row
|
|
34
|
+
setActiveRowIds([rowId]);
|
|
35
|
+
}
|
|
36
|
+
}, [multiselect]);
|
|
37
|
+
|
|
38
|
+
// Check if a row is active
|
|
39
|
+
var isRowActive = (0, _react.useCallback)(function (rowId, isSelected) {
|
|
40
|
+
// Check if the row is in the active rows array
|
|
41
|
+
return activeRowIds.includes(rowId);
|
|
42
|
+
}, [activeRowIds]);
|
|
43
|
+
|
|
44
|
+
// Clear active rows
|
|
45
|
+
var clearActiveRow = (0, _react.useCallback)(function () {
|
|
46
|
+
setActiveRowIds([]);
|
|
47
|
+
}, []);
|
|
48
|
+
|
|
49
|
+
// Set active rows directly - now accepts string, array, or null
|
|
50
|
+
var setActiveRow = (0, _react.useCallback)(function (rowIds) {
|
|
51
|
+
if (rowIds === null) {
|
|
52
|
+
setActiveRowIds([]);
|
|
53
|
+
} else if (typeof rowIds === "string") {
|
|
54
|
+
setActiveRowIds([rowIds]);
|
|
55
|
+
} else {
|
|
56
|
+
setActiveRowIds(rowIds);
|
|
57
|
+
}
|
|
58
|
+
}, []);
|
|
59
|
+
|
|
60
|
+
// For backwards compatibility, provide activeRowId as the first active row
|
|
61
|
+
var activeRowId = activeRowIds.length > 0 ? activeRowIds[0] : null;
|
|
62
|
+
return {
|
|
63
|
+
activeRowIds: activeRowIds,
|
|
64
|
+
setActiveRow: setActiveRow,
|
|
65
|
+
clearActiveRow: clearActiveRow,
|
|
66
|
+
handleRowActiveClick: handleRowActiveClick,
|
|
67
|
+
isRowActive: isRowActive
|
|
68
|
+
};
|
|
69
|
+
};
|
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useTableStateManager = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _tableHelpers = require("../utils/table-helpers");
|
|
11
|
+
var _lodashEs = require("lodash-es");
|
|
12
|
+
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; }
|
|
13
|
+
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; }
|
|
14
|
+
// Unsupported navigation types for state persistence
|
|
15
|
+
var UNSUPPORTED_STATE_PERSISTENCE_TYPES = ["Scroll", "On-Demand", "Inline"];
|
|
16
|
+
var useTableStateManager = exports.useTableStateManager = function useTableStateManager(props) {
|
|
17
|
+
var name = props.name,
|
|
18
|
+
storage = props.storage,
|
|
19
|
+
currentPage = props.currentPage,
|
|
20
|
+
currentPageSize = props.currentPageSize,
|
|
21
|
+
selectedRowId = props.selectedRowId,
|
|
22
|
+
selectedRowIds = props.selectedRowIds,
|
|
23
|
+
internalDataset = props.internalDataset,
|
|
24
|
+
initialActualPageSize = props.initialActualPageSize,
|
|
25
|
+
datasource = props.datasource,
|
|
26
|
+
multiselect = props.multiselect,
|
|
27
|
+
filterData = props.filterData,
|
|
28
|
+
sortData = props.sortData,
|
|
29
|
+
_props$navigation = props.navigation,
|
|
30
|
+
navigation = _props$navigation === void 0 ? "Pager" : _props$navigation,
|
|
31
|
+
_props$isStateConfigu = props.isStateConfigured,
|
|
32
|
+
isStateConfigured = _props$isStateConfigu === void 0 ? false : _props$isStateConfigu,
|
|
33
|
+
defaultPageSize = props.defaultPageSize,
|
|
34
|
+
initialSortState = props.initialSortState,
|
|
35
|
+
initialFilterState = props.initialFilterState;
|
|
36
|
+
|
|
37
|
+
// Track previous state to return when loading
|
|
38
|
+
var prevStateRef = (0, _react.useRef)({});
|
|
39
|
+
|
|
40
|
+
// Track if we've already calculated state after loading
|
|
41
|
+
var hasCalculatedAfterLoadingRef = (0, _react.useRef)(false);
|
|
42
|
+
|
|
43
|
+
// Track the previous loading state
|
|
44
|
+
var wasLoadingRef = (0, _react.useRef)(false);
|
|
45
|
+
|
|
46
|
+
// Track complete selection state with page info for multiselect
|
|
47
|
+
var selectionStateRef = (0, _react.useRef)([]);
|
|
48
|
+
|
|
49
|
+
// Track previous filter data to detect changes
|
|
50
|
+
var prevFilterDataRef = (0, _react.useRef)(undefined);
|
|
51
|
+
|
|
52
|
+
// Track if filter state has been persisted after a change
|
|
53
|
+
var filterStatePersistenceTriggeredRef = (0, _react.useRef)(false);
|
|
54
|
+
|
|
55
|
+
// Track previous sort data to detect changes
|
|
56
|
+
var prevSortDataRef = (0, _react.useRef)(undefined);
|
|
57
|
+
|
|
58
|
+
// Build the current state object
|
|
59
|
+
var currentState = (0, _react.useMemo)(function () {
|
|
60
|
+
var isLoading = !!(datasource !== null && datasource !== void 0 && datasource.loading);
|
|
61
|
+
|
|
62
|
+
// Detect first calculation after loading becomes false
|
|
63
|
+
var isFirstCalculationAfterLoading = wasLoadingRef.current && !isLoading && !hasCalculatedAfterLoadingRef.current;
|
|
64
|
+
|
|
65
|
+
// If loading just started, reset the flag for next time
|
|
66
|
+
if (isLoading && !wasLoadingRef.current) {
|
|
67
|
+
hasCalculatedAfterLoadingRef.current = false;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Update the loading state tracker
|
|
71
|
+
wasLoadingRef.current = isLoading;
|
|
72
|
+
|
|
73
|
+
// If datasource is loading, return the previous state without any calculations
|
|
74
|
+
if (isLoading) {
|
|
75
|
+
return prevStateRef.current;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// If this is the first calculation after loading, mark as calculated and return minimal state
|
|
79
|
+
if (isFirstCalculationAfterLoading) {
|
|
80
|
+
hasCalculatedAfterLoadingRef.current = true;
|
|
81
|
+
// Clear selection state ref for fresh start after loading
|
|
82
|
+
if (multiselect) {
|
|
83
|
+
selectionStateRef.current = [];
|
|
84
|
+
}
|
|
85
|
+
// Return minimal state for first calculation after loading to avoid stale data
|
|
86
|
+
return {
|
|
87
|
+
pagination: currentPage
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Otherwise, calculate the new state
|
|
92
|
+
var state = {};
|
|
93
|
+
|
|
94
|
+
// Check if filtering is active and different from initial
|
|
95
|
+
var hasActiveFilter = filterData !== undefined && filterData.length > 0 && JSON.stringify(filterData) !== JSON.stringify(initialFilterState || []);
|
|
96
|
+
|
|
97
|
+
// Include actualPageSize if it's provided (should be persisted once and never change)
|
|
98
|
+
if (initialActualPageSize !== undefined) {
|
|
99
|
+
state.actualpagesize = initialActualPageSize;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Include search/filter state if it differs from initial
|
|
103
|
+
if (hasActiveFilter) {
|
|
104
|
+
state.search = filterData;
|
|
105
|
+
|
|
106
|
+
// Include sort state if it differs from initial (even when filtering)
|
|
107
|
+
var _isSortChanged = sortData && JSON.stringify(sortData) !== JSON.stringify(initialSortState);
|
|
108
|
+
if (_isSortChanged) {
|
|
109
|
+
state.sort = sortData;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// When filtering is active, don't include pagination or selectedItem at all
|
|
113
|
+
// They should be completely removed from state
|
|
114
|
+
// Save the calculated state for next time
|
|
115
|
+
prevStateRef.current = state;
|
|
116
|
+
return state;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Include sort state if it differs from initial
|
|
120
|
+
var isSortChanged = sortData && JSON.stringify(sortData) !== JSON.stringify(initialSortState);
|
|
121
|
+
if (isSortChanged) {
|
|
122
|
+
state.sort = sortData;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Only include pagination if not on page 1 (default)
|
|
126
|
+
if (currentPage !== 1) {
|
|
127
|
+
state.pagination = currentPage;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Get selected items based on multiselect mode
|
|
131
|
+
var selectedIds = multiselect ? selectedRowIds || [] : selectedRowId ? [selectedRowId] : [];
|
|
132
|
+
if (multiselect) {
|
|
133
|
+
// For multiselect, we need to maintain selections across pages
|
|
134
|
+
// Get all currently selected IDs
|
|
135
|
+
var allSelectedIds = new Set(selectedIds);
|
|
136
|
+
|
|
137
|
+
// Build a map of items on the current page for quick lookup
|
|
138
|
+
var currentPageItemsMap = new Map();
|
|
139
|
+
internalDataset.forEach(function (item, index) {
|
|
140
|
+
if (item._wmRowId) {
|
|
141
|
+
currentPageItemsMap.set(item._wmRowId, index);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// Update selection state:
|
|
146
|
+
// 1. Keep selections from other pages if their IDs are still selected
|
|
147
|
+
// 2. Add/update selections from current page
|
|
148
|
+
var updatedSelections = [];
|
|
149
|
+
|
|
150
|
+
// Keep selections from other pages that are still selected
|
|
151
|
+
selectionStateRef.current.forEach(function (item) {
|
|
152
|
+
if (item.page !== currentPage && allSelectedIds.has(item.id)) {
|
|
153
|
+
updatedSelections.push(item);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// Add selections from current page
|
|
158
|
+
allSelectedIds.forEach(function (id) {
|
|
159
|
+
var index = currentPageItemsMap.get(id);
|
|
160
|
+
if (index !== undefined) {
|
|
161
|
+
updatedSelections.push({
|
|
162
|
+
page: currentPage,
|
|
163
|
+
index: index,
|
|
164
|
+
id: id
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
// Update the ref
|
|
170
|
+
selectionStateRef.current = updatedSelections;
|
|
171
|
+
|
|
172
|
+
// Only include selectedItem if there are selections
|
|
173
|
+
if (updatedSelections.length > 0) {
|
|
174
|
+
state.selectedItem = updatedSelections.map(function (_ref) {
|
|
175
|
+
var page = _ref.page,
|
|
176
|
+
index = _ref.index;
|
|
177
|
+
return {
|
|
178
|
+
page: page,
|
|
179
|
+
index: index
|
|
180
|
+
};
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
} else {
|
|
184
|
+
// For single select, just find the selected item in current dataset
|
|
185
|
+
var selectedIndices = [];
|
|
186
|
+
selectedIds.forEach(function (id) {
|
|
187
|
+
var index = internalDataset.findIndex(function (item) {
|
|
188
|
+
return item._wmRowId === id;
|
|
189
|
+
});
|
|
190
|
+
if (index >= 0) {
|
|
191
|
+
selectedIndices.push(index);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
// Only include selectedItem if there are selections
|
|
196
|
+
if (selectedIndices.length > 0) {
|
|
197
|
+
// Build selected items with page info
|
|
198
|
+
var selectedItemsWithPage = selectedIndices.map(function (idx) {
|
|
199
|
+
return {
|
|
200
|
+
page: currentPage,
|
|
201
|
+
index: idx
|
|
202
|
+
};
|
|
203
|
+
});
|
|
204
|
+
state.selectedItem = selectedItemsWithPage;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Save the calculated state for next time
|
|
209
|
+
prevStateRef.current = state;
|
|
210
|
+
|
|
211
|
+
// Only include pagesize if it differs from default
|
|
212
|
+
if (defaultPageSize && currentPageSize !== defaultPageSize) {
|
|
213
|
+
state.pagesize = currentPageSize;
|
|
214
|
+
}
|
|
215
|
+
return state;
|
|
216
|
+
}, [currentPage, currentPageSize, selectedRowId, selectedRowIds, internalDataset, initialActualPageSize, multiselect, datasource === null || datasource === void 0 ? void 0 : datasource.loading, filterData, sortData, defaultPageSize, initialSortState, initialFilterState]);
|
|
217
|
+
|
|
218
|
+
// Get state for page size change
|
|
219
|
+
var getStateForPageSizeChange = (0, _react.useCallback)(function (newPageSize, existingSelectedItems, oldPageSize) {
|
|
220
|
+
// Check if filtering is currently active and different from initial
|
|
221
|
+
var hasActiveFilter = filterData !== undefined && filterData.length > 0 && JSON.stringify(filterData) !== JSON.stringify(initialFilterState || []);
|
|
222
|
+
var state = {};
|
|
223
|
+
|
|
224
|
+
// Always include pagesize in page size change state
|
|
225
|
+
// This ensures proper state management when changing page sizes
|
|
226
|
+
state.pagesize = newPageSize;
|
|
227
|
+
|
|
228
|
+
// Include actualPageSize if it's provided (should be persisted)
|
|
229
|
+
if (initialActualPageSize !== undefined) {
|
|
230
|
+
state.actualpagesize = initialActualPageSize;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// If filtering is active, maintain the filter but don't include pagination or selectedItem
|
|
234
|
+
if (hasActiveFilter) {
|
|
235
|
+
state.search = filterData;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Include sort if it differs from initial
|
|
239
|
+
var isSortChanged = sortData && JSON.stringify(sortData) !== JSON.stringify(initialSortState);
|
|
240
|
+
if (isSortChanged) {
|
|
241
|
+
state.sort = sortData;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// If filtering is active, don't include pagination or selectedItem
|
|
245
|
+
if (hasActiveFilter) {
|
|
246
|
+
return state;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Only handle pagination and selectedItem if no filter is active
|
|
250
|
+
var recalculatedItems = [];
|
|
251
|
+
if (existingSelectedItems && existingSelectedItems.length > 0 && oldPageSize) {
|
|
252
|
+
// Recalculate selected items positions based on new page size
|
|
253
|
+
recalculatedItems = existingSelectedItems.map(function (_ref2) {
|
|
254
|
+
var page = _ref2.page,
|
|
255
|
+
index = _ref2.index;
|
|
256
|
+
// Calculate absolute position using the OLD page size
|
|
257
|
+
var absoluteIndex = (page - 1) * oldPageSize + index;
|
|
258
|
+
|
|
259
|
+
// Calculate new page and index with the NEW page size
|
|
260
|
+
var newPage = Math.floor(absoluteIndex / newPageSize) + 1;
|
|
261
|
+
var newIndex = absoluteIndex % newPageSize;
|
|
262
|
+
return {
|
|
263
|
+
page: newPage,
|
|
264
|
+
index: newIndex
|
|
265
|
+
};
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Clear selection state ref when page size changes
|
|
270
|
+
if (multiselect) {
|
|
271
|
+
selectionStateRef.current = [];
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Don't include pagination if it's page 1 (default)
|
|
275
|
+
// state.pagination = 1; // Don't include this as it's the default
|
|
276
|
+
|
|
277
|
+
// Only include selectedItem if there are selections
|
|
278
|
+
if (recalculatedItems.length > 0) {
|
|
279
|
+
state.selectedItem = recalculatedItems;
|
|
280
|
+
}
|
|
281
|
+
return state;
|
|
282
|
+
}, [initialActualPageSize, multiselect, filterData, sortData, defaultPageSize, initialSortState, initialFilterState]);
|
|
283
|
+
|
|
284
|
+
// Check if current state is default (no need to persist)
|
|
285
|
+
var isDefaultState = (0, _react.useCallback)(function () {
|
|
286
|
+
var hasSelection = selectedRowId !== null && selectedRowId !== undefined || selectedRowIds && selectedRowIds.length > 0;
|
|
287
|
+
|
|
288
|
+
// Check if filter differs from initial
|
|
289
|
+
var hasFilterChange = filterData && filterData.length > 0 && JSON.stringify(filterData) !== JSON.stringify(initialFilterState || []);
|
|
290
|
+
|
|
291
|
+
// Check if sort differs from initial
|
|
292
|
+
var hasSortChange = sortData && JSON.stringify(sortData) !== JSON.stringify(initialSortState);
|
|
293
|
+
|
|
294
|
+
// Check if page size differs from default
|
|
295
|
+
var hasPageSizeChange = defaultPageSize && currentPageSize !== defaultPageSize;
|
|
296
|
+
|
|
297
|
+
// If nothing has changed from defaults, it's default state
|
|
298
|
+
return currentPage === 1 && !hasSelection && !hasFilterChange && !hasSortChange && !hasPageSizeChange;
|
|
299
|
+
}, [currentPage, currentPageSize, selectedRowId, selectedRowIds, filterData, sortData, defaultPageSize, initialSortState, initialFilterState]);
|
|
300
|
+
|
|
301
|
+
// Merge with existing state
|
|
302
|
+
var mergeWithExisting = (0, _react.useCallback)(function (newState, existingState) {
|
|
303
|
+
if (!existingState) {
|
|
304
|
+
return newState;
|
|
305
|
+
}
|
|
306
|
+
var merged = _objectSpread({}, newState);
|
|
307
|
+
|
|
308
|
+
// Check if filtering is active in the new state
|
|
309
|
+
var hasActiveFilter = newState.search !== undefined && newState.search.length > 0;
|
|
310
|
+
|
|
311
|
+
// If filtering is active, return only what's in newState plus preserved size properties
|
|
312
|
+
if (hasActiveFilter) {
|
|
313
|
+
// Start fresh with only what's in newState
|
|
314
|
+
var filteredMerged = _objectSpread({}, newState);
|
|
315
|
+
|
|
316
|
+
// Only preserve pagesize from existing if not in new state and it differs from default
|
|
317
|
+
if (!filteredMerged.pagesize && existingState.pagesize && (!defaultPageSize || existingState.pagesize !== defaultPageSize)) {
|
|
318
|
+
filteredMerged.pagesize = existingState.pagesize;
|
|
319
|
+
}
|
|
320
|
+
// Preserve actualPageSize from existing state if not in new state
|
|
321
|
+
if (!filteredMerged.actualpagesize && existingState.actualpagesize !== undefined) {
|
|
322
|
+
filteredMerged.actualpagesize = existingState.actualpagesize;
|
|
323
|
+
}
|
|
324
|
+
if (!filteredMerged.sort && existingState.sort) {
|
|
325
|
+
filteredMerged.sort = existingState.sort;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// Explicitly ensure pagination and selectedItem are not in the merged state
|
|
329
|
+
delete filteredMerged.pagination;
|
|
330
|
+
delete filteredMerged.selectedItem;
|
|
331
|
+
return filteredMerged;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// If no active filter, proceed with normal merging
|
|
335
|
+
// Handle selected items based on multiselect mode
|
|
336
|
+
if (newState.selectedItem !== undefined) {
|
|
337
|
+
// For multiselect, the newState already contains all selections across pages
|
|
338
|
+
// For single select, use the new selection if available, otherwise keep existing
|
|
339
|
+
if (multiselect || newState.selectedItem.length > 0) {
|
|
340
|
+
merged.selectedItem = newState.selectedItem;
|
|
341
|
+
} else if (existingState.selectedItem) {
|
|
342
|
+
// For single select with no current selection, keep existing
|
|
343
|
+
merged.selectedItem = existingState.selectedItem;
|
|
344
|
+
}
|
|
345
|
+
} else if (existingState.selectedItem && !hasActiveFilter) {
|
|
346
|
+
// Preserve existing selectedItem if not in new state and no filter
|
|
347
|
+
merged.selectedItem = existingState.selectedItem;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Preserve pagesize if not in new state and it differs from default
|
|
351
|
+
if (!merged.pagesize && existingState.pagesize && (!defaultPageSize || existingState.pagesize !== defaultPageSize)) {
|
|
352
|
+
merged.pagesize = existingState.pagesize;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// Preserve actualPageSize from existing state if not in new state
|
|
356
|
+
if (!merged.actualpagesize && existingState.actualpagesize !== undefined) {
|
|
357
|
+
merged.actualpagesize = existingState.actualpagesize;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// Preserve pagination if not in new state and no filter AND not on page 1
|
|
361
|
+
if (!merged.pagination && existingState.pagination && !hasActiveFilter && existingState.pagination !== 1) {
|
|
362
|
+
merged.pagination = existingState.pagination;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Preserve sort if not in new state
|
|
366
|
+
if (!merged.sort && existingState.sort) {
|
|
367
|
+
merged.sort = existingState.sort;
|
|
368
|
+
}
|
|
369
|
+
return merged;
|
|
370
|
+
}, [multiselect, defaultPageSize]);
|
|
371
|
+
|
|
372
|
+
// Handle filter state changes
|
|
373
|
+
var handleFilterStateChange = (0, _react.useCallback)(function () {
|
|
374
|
+
// Check if state persistence is supported for this navigation type
|
|
375
|
+
if (!isStateConfigured || storage === "none" || UNSUPPORTED_STATE_PERSISTENCE_TYPES.includes(navigation)) {
|
|
376
|
+
if (navigation && UNSUPPORTED_STATE_PERSISTENCE_TYPES.includes(navigation)) {
|
|
377
|
+
console.warn("Retain State handling on Widget ".concat(name, " is not supported for ").concat(navigation, " navigation type."));
|
|
378
|
+
}
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// Check if filter data is different from initial
|
|
383
|
+
var hasFilterData = (0, _lodashEs.isArray)(filterData) && filterData.length > 0;
|
|
384
|
+
var isFilterChanged = hasFilterData && JSON.stringify(filterData) !== JSON.stringify(initialFilterState || []);
|
|
385
|
+
if (isFilterChanged) {
|
|
386
|
+
// When filter is applied, we need to save a state that explicitly excludes pagination and selectedItem
|
|
387
|
+
// Get the current full state
|
|
388
|
+
var currentFullState = (0, _tableHelpers.getTableState)(name, storage);
|
|
389
|
+
|
|
390
|
+
// Build new state with only the properties we want to keep
|
|
391
|
+
var newState = {
|
|
392
|
+
search: filterData
|
|
393
|
+
};
|
|
394
|
+
|
|
395
|
+
// Include actualPageSize if available
|
|
396
|
+
if ((currentFullState === null || currentFullState === void 0 ? void 0 : currentFullState.actualpagesize) !== undefined) {
|
|
397
|
+
newState.actualpagesize = currentFullState.actualpagesize;
|
|
398
|
+
} else if (initialActualPageSize !== undefined) {
|
|
399
|
+
newState.actualpagesize = initialActualPageSize;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Only include pagesize if it differs from default
|
|
403
|
+
if ((currentFullState === null || currentFullState === void 0 ? void 0 : currentFullState.pagesize) !== undefined && defaultPageSize && currentFullState.pagesize !== defaultPageSize) {
|
|
404
|
+
newState.pagesize = currentFullState.pagesize;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// Only include sort if it differs from initial
|
|
408
|
+
if ((currentFullState === null || currentFullState === void 0 ? void 0 : currentFullState.sort) !== undefined) {
|
|
409
|
+
var isSortChanged = JSON.stringify(currentFullState.sort) !== JSON.stringify(initialSortState);
|
|
410
|
+
if (isSortChanged) {
|
|
411
|
+
newState.sort = currentFullState.sort;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// Clear and save to ensure no merge happens
|
|
416
|
+
(0, _tableHelpers.clearTableState)(name, storage);
|
|
417
|
+
(0, _tableHelpers.saveTableState)(name, storage, newState);
|
|
418
|
+
|
|
419
|
+
// Clear the selection state ref for multiselect
|
|
420
|
+
if (multiselect) {
|
|
421
|
+
selectionStateRef.current = [];
|
|
422
|
+
}
|
|
423
|
+
} else if (!hasFilterData && initialFilterState && initialFilterState.length > 0) {
|
|
424
|
+
// When filter is cleared but there was an initial filter, we need to update state
|
|
425
|
+
var _currentFullState = (0, _tableHelpers.getTableState)(name, storage);
|
|
426
|
+
var _newState = {};
|
|
427
|
+
|
|
428
|
+
// Include actualPageSize if available
|
|
429
|
+
if ((_currentFullState === null || _currentFullState === void 0 ? void 0 : _currentFullState.actualpagesize) !== undefined) {
|
|
430
|
+
_newState.actualpagesize = _currentFullState.actualpagesize;
|
|
431
|
+
} else if (initialActualPageSize !== undefined) {
|
|
432
|
+
_newState.actualpagesize = initialActualPageSize;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// Only include pagesize if it differs from default
|
|
436
|
+
if ((_currentFullState === null || _currentFullState === void 0 ? void 0 : _currentFullState.pagesize) !== undefined && defaultPageSize && _currentFullState.pagesize !== defaultPageSize) {
|
|
437
|
+
_newState.pagesize = _currentFullState.pagesize;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
// Only include sort if it differs from initial
|
|
441
|
+
if ((_currentFullState === null || _currentFullState === void 0 ? void 0 : _currentFullState.sort) !== undefined) {
|
|
442
|
+
var _isSortChanged2 = JSON.stringify(_currentFullState.sort) !== JSON.stringify(initialSortState);
|
|
443
|
+
if (_isSortChanged2) {
|
|
444
|
+
_newState.sort = _currentFullState.sort;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
// Clear and save if there's anything to save
|
|
449
|
+
if (Object.keys(_newState).length > 0) {
|
|
450
|
+
(0, _tableHelpers.clearTableState)(name, storage);
|
|
451
|
+
(0, _tableHelpers.saveTableState)(name, storage, _newState);
|
|
452
|
+
} else {
|
|
453
|
+
(0, _tableHelpers.clearTableState)(name, storage);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
// Clear the selection state ref for multiselect
|
|
457
|
+
if (multiselect) {
|
|
458
|
+
selectionStateRef.current = [];
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}, [filterData, isStateConfigured, storage, navigation, name, multiselect, defaultPageSize, initialSortState, initialFilterState]);
|
|
462
|
+
|
|
463
|
+
// Handle sort state changes
|
|
464
|
+
var handleSortStateChange = (0, _react.useCallback)(function () {
|
|
465
|
+
// Check if state persistence is supported for this navigation type
|
|
466
|
+
if (!isStateConfigured || storage === "none" || UNSUPPORTED_STATE_PERSISTENCE_TYPES.includes(navigation)) {
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// Check if sort actually changed from initial
|
|
471
|
+
var hasSortChanged = sortData && JSON.stringify(sortData) !== JSON.stringify(initialSortState);
|
|
472
|
+
var isSortReset = !sortData && initialSortState;
|
|
473
|
+
if (hasSortChanged || isSortReset) {
|
|
474
|
+
// If we're in default state after this change, clear everything
|
|
475
|
+
if (isDefaultState()) {
|
|
476
|
+
(0, _tableHelpers.clearTableState)(name, storage);
|
|
477
|
+
} else {
|
|
478
|
+
// Build a clean state with only non-default values
|
|
479
|
+
var newState = {};
|
|
480
|
+
|
|
481
|
+
// Include actualPageSize if available
|
|
482
|
+
if (initialActualPageSize !== undefined) {
|
|
483
|
+
newState.actualpagesize = initialActualPageSize;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
// Only include sort if it changed from initial
|
|
487
|
+
if (hasSortChanged) {
|
|
488
|
+
newState.sort = sortData;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
// Only include pagination if not on page 1
|
|
492
|
+
if (currentPage !== 1) {
|
|
493
|
+
newState.pagination = currentPage;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// Only include pagesize if it differs from default
|
|
497
|
+
if (defaultPageSize && currentPageSize !== defaultPageSize) {
|
|
498
|
+
newState.pagesize = currentPageSize;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
// Only include search if it differs from initial
|
|
502
|
+
var hasActiveFilter = filterData && filterData.length > 0 && JSON.stringify(filterData) !== JSON.stringify(initialFilterState || []);
|
|
503
|
+
if (hasActiveFilter) {
|
|
504
|
+
newState.search = filterData;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
// Only include selectedItem if there are selections
|
|
508
|
+
var hasSelection = selectedRowId !== null && selectedRowId !== undefined || selectedRowIds && selectedRowIds.length > 0;
|
|
509
|
+
if (hasSelection && currentState.selectedItem && currentState.selectedItem.length > 0) {
|
|
510
|
+
newState.selectedItem = currentState.selectedItem;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
// Clear and save to ensure clean state
|
|
514
|
+
(0, _tableHelpers.clearTableState)(name, storage);
|
|
515
|
+
if (Object.keys(newState).length > 0) {
|
|
516
|
+
(0, _tableHelpers.saveTableState)(name, storage, newState);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}, [sortData, isStateConfigured, storage, navigation, name, currentState, initialSortState, isDefaultState, currentPage, currentPageSize, defaultPageSize, filterData, initialFilterState, selectedRowId, selectedRowIds]);
|
|
521
|
+
|
|
522
|
+
// Detect filter data changes and handle state persistence
|
|
523
|
+
(0, _react.useEffect)(function () {
|
|
524
|
+
// Check if filter data has changed
|
|
525
|
+
var filterDataChanged = JSON.stringify(filterData) !== JSON.stringify(prevFilterDataRef.current);
|
|
526
|
+
if (filterDataChanged) {
|
|
527
|
+
// Reset the flag when filter data changes
|
|
528
|
+
filterStatePersistenceTriggeredRef.current = false;
|
|
529
|
+
|
|
530
|
+
// Handle the filter state change
|
|
531
|
+
handleFilterStateChange();
|
|
532
|
+
|
|
533
|
+
// Update the previous filter data reference
|
|
534
|
+
prevFilterDataRef.current = filterData;
|
|
535
|
+
}
|
|
536
|
+
}, [filterData, handleFilterStateChange]);
|
|
537
|
+
|
|
538
|
+
// Detect sort data changes and handle state persistence
|
|
539
|
+
(0, _react.useEffect)(function () {
|
|
540
|
+
// Check if sort data has changed
|
|
541
|
+
var sortDataChanged = JSON.stringify(sortData) !== JSON.stringify(prevSortDataRef.current);
|
|
542
|
+
if (sortDataChanged) {
|
|
543
|
+
// Handle the sort state change
|
|
544
|
+
handleSortStateChange();
|
|
545
|
+
|
|
546
|
+
// Update the previous sort data reference
|
|
547
|
+
prevSortDataRef.current = sortData;
|
|
548
|
+
}
|
|
549
|
+
}, [sortData, handleSortStateChange]);
|
|
550
|
+
return {
|
|
551
|
+
currentState: currentState,
|
|
552
|
+
getStateForPageSizeChange: getStateForPageSizeChange,
|
|
553
|
+
isDefaultState: isDefaultState,
|
|
554
|
+
mergeWithExisting: mergeWithExisting,
|
|
555
|
+
handleFilterStateChange: handleFilterStateChange,
|
|
556
|
+
handleSortStateChange: handleSortStateChange
|
|
557
|
+
};
|
|
558
|
+
};
|