@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.
Files changed (402) hide show
  1. package/actions/base-action.js +32 -0
  2. package/actions/login-action.js +53 -0
  3. package/actions/logout-action.js +41 -0
  4. package/actions/navigation-action.js +145 -0
  5. package/actions/notification-action.js +147 -0
  6. package/actions/timer-action.js +164 -0
  7. package/actions/toast-provider.js +111 -0
  8. package/actions/toast.js +115 -0
  9. package/actions/toast.service.js +94 -0
  10. package/actions/types/index.js +11 -0
  11. package/components/advanced/carousel/index.js +456 -0
  12. package/components/advanced/carousel/props.js +5 -0
  13. package/components/advanced/carousel/template.js +72 -0
  14. package/components/advanced/login/index.js +307 -0
  15. package/components/advanced/login/props.js +5 -0
  16. package/components/advanced/marquee/index.js +158 -0
  17. package/components/advanced/marquee/props.js +5 -0
  18. package/components/basic/anchor/index.js +239 -0
  19. package/components/basic/anchor/props.js +5 -0
  20. package/components/basic/audio/index.js +61 -0
  21. package/components/basic/html/index.js +158 -0
  22. package/components/basic/icon/index.js +85 -0
  23. package/components/basic/iframe/iframe.utils.js +10 -0
  24. package/components/basic/iframe/index.js +95 -0
  25. package/components/basic/label/index.js +139 -0
  26. package/components/basic/message/index.js +120 -0
  27. package/components/basic/message/props.js +5 -0
  28. package/components/basic/picture/index.js +117 -0
  29. package/components/basic/picture/props.js +5 -0
  30. package/components/basic/progress-bar/index.js +168 -0
  31. package/components/basic/progress-bar/props.js +18 -0
  32. package/components/basic/progress-circle/index.js +196 -0
  33. package/components/basic/progress-circle/props.js +16 -0
  34. package/components/basic/richtexteditor/index.js +533 -0
  35. package/components/basic/richtexteditor/props.js +5 -0
  36. package/components/basic/search/index.js +1023 -0
  37. package/components/basic/search/props.js +5 -0
  38. package/components/basic/search/providers.js +350 -0
  39. package/components/basic/spinner/index.js +202 -0
  40. package/components/basic/spinner/props.js +12 -0
  41. package/components/basic/tile/index.js +91 -0
  42. package/components/basic/tree/Components/TreeNodeComponent.js +142 -0
  43. package/components/basic/tree/index.js +503 -0
  44. package/components/basic/tree/props.js +5 -0
  45. package/components/basic/tree/utils.js +154 -0
  46. package/components/basic/video/index.js +85 -0
  47. package/components/basic/video/props.js +5 -0
  48. package/components/chart/components/barColumnChart/index.js +132 -0
  49. package/components/chart/components/barColumnChart/props.js +5 -0
  50. package/components/chart/components/bubbleChart/index.js +176 -0
  51. package/components/chart/components/bubbleChart/props.js +5 -0
  52. package/components/chart/components/chartLegend/components/ClassicLegendItem.js +39 -0
  53. package/components/chart/components/chartLegend/components/FuriousLegendItem.js +81 -0
  54. package/components/chart/components/chartLegend/index.js +69 -0
  55. package/components/chart/components/chartLegend/props.js +5 -0
  56. package/components/chart/components/chartLegend/utils.js +31 -0
  57. package/components/chart/components/chartTooltip/index.js +53 -0
  58. package/components/chart/components/chartTooltip/styles.js +37 -0
  59. package/components/chart/components/chartTooltip/utils.js +23 -0
  60. package/components/chart/components/cumulativeLineChart/index.js +113 -0
  61. package/components/chart/components/cumulativeLineChart/props.js +5 -0
  62. package/components/chart/components/cumulativeLineChart/utils.js +34 -0
  63. package/components/chart/components/index.js +40 -0
  64. package/components/chart/components/lineAreaChart/index.js +140 -0
  65. package/components/chart/components/lineAreaChart/props.js +5 -0
  66. package/components/chart/components/noDataMessage/index.js +27 -0
  67. package/components/chart/components/pieDonutChart/index.js +171 -0
  68. package/components/chart/components/pieDonutChart/props.js +5 -0
  69. package/components/chart/constant.js +72 -0
  70. package/components/chart/index.js +930 -0
  71. package/components/chart/props.js +5 -0
  72. package/components/chart/utils.js +691 -0
  73. package/components/common/AppSpinner.js +36 -0
  74. package/components/common/app-spinner.js +26 -0
  75. package/components/common/index.js +12 -0
  76. package/components/constants.js +1208 -0
  77. package/components/container/accordion/accordion-pane/index.js +108 -0
  78. package/components/container/accordion/accordion-pane/props.js +11 -0
  79. package/components/container/accordion/index.js +232 -0
  80. package/components/container/accordion/props.js +13 -0
  81. package/components/container/alignment-utils.js +183 -0
  82. package/components/container/index.js +188 -0
  83. package/components/container/layout-grid/grid-column/index.js +34 -0
  84. package/components/container/layout-grid/grid-row/index.js +24 -0
  85. package/components/container/layout-grid/index.js +33 -0
  86. package/components/container/linear-layout/index.js +72 -0
  87. package/components/container/linear-layout/linear-layout-item/index.js +43 -0
  88. package/components/container/panel/components/panel-header/index.js +144 -0
  89. package/components/container/panel/components/panel-header/props.js +5 -0
  90. package/components/container/panel/hooks.js +144 -0
  91. package/components/container/panel/index.js +286 -0
  92. package/components/container/panel/props.js +5 -0
  93. package/components/container/props.js +5 -0
  94. package/components/container/tabs/index.js +379 -0
  95. package/components/container/tabs/props.js +20 -0
  96. package/components/container/tabs/tab-pane/index.js +42 -0
  97. package/components/container/tabs/tab-pane/props.js +5 -0
  98. package/components/container/wizard/WizardContext.js +16 -0
  99. package/components/container/wizard/components/StepComponents.js +100 -0
  100. package/components/container/wizard/components/WizardStep.js +89 -0
  101. package/components/container/wizard/index.js +710 -0
  102. package/components/container/wizard/props.js +5 -0
  103. package/components/container/wizard/utils.js +133 -0
  104. package/components/container/wizard/wizard-action/index.js +22 -0
  105. package/components/container/wizard/wizard-step/index.js +94 -0
  106. package/components/data/card/card-actions/index.js +24 -0
  107. package/components/data/card/card-content/index.js +38 -0
  108. package/components/data/card/card-footer/index.js +24 -0
  109. package/components/data/card/index.js +246 -0
  110. package/components/data/card/props.js +5 -0
  111. package/components/data/form/base-form/constant.js +39 -0
  112. package/components/data/form/base-form/index.js +460 -0
  113. package/components/data/form/base-form/props.js +29 -0
  114. package/components/data/form/base-form/utils.js +42 -0
  115. package/components/data/form/dynamic-fields/index.js +196 -0
  116. package/components/data/form/dynamic-fields/props.js +5 -0
  117. package/components/data/form/dynamic-fields/utils.js +237 -0
  118. package/components/data/form/form-action/index.js +71 -0
  119. package/components/data/form/form-body/index.js +26 -0
  120. package/components/data/form/form-context.js +34 -0
  121. package/components/data/form/form-controller/props.js +19 -0
  122. package/components/data/form/form-controller/validation-contrustor.js +313 -0
  123. package/components/data/form/form-controller/withFormController.js +320 -0
  124. package/components/data/form/form-field/base-field.js +138 -0
  125. package/components/data/form/form-field/index.js +36 -0
  126. package/components/data/form/form-field/props.js +5 -0
  127. package/components/data/form/form-footer/index.js +26 -0
  128. package/components/data/form/form-header/index.js +56 -0
  129. package/components/data/form/index.js +39 -0
  130. package/components/data/form/props.js +5 -0
  131. package/components/data/list/components/GroupHeader.js +35 -0
  132. package/components/data/list/components/GroupedListItems.js +98 -0
  133. package/components/data/list/components/ListContainer.js +27 -0
  134. package/components/data/list/components/ListDND.js +241 -0
  135. package/components/data/list/components/ListHeader.js +59 -0
  136. package/components/data/list/components/ListItem.js +148 -0
  137. package/components/data/list/components/ListItemWithTemplate.js +59 -0
  138. package/components/data/list/components/ListItems.js +231 -0
  139. package/components/data/list/components/ListPagination.js +165 -0
  140. package/components/data/list/components/LoadMoreButton.js +39 -0
  141. package/components/data/list/components/NoDataMessage.js +22 -0
  142. package/components/data/list/components/StandardListItems.js +84 -0
  143. package/components/data/list/components/index.js +119 -0
  144. package/components/data/list/components/props.js +5 -0
  145. package/components/data/list/hooks/index.js +75 -0
  146. package/components/data/list/hooks/props.js +5 -0
  147. package/components/data/list/hooks/useCurrentPageItems.js +48 -0
  148. package/components/data/list/hooks/useGroupedData.js +37 -0
  149. package/components/data/list/hooks/useListData.js +60 -0
  150. package/components/data/list/hooks/useListEffects.js +285 -0
  151. package/components/data/list/hooks/useListEventHandlers.js +291 -0
  152. package/components/data/list/hooks/useListPagination.js +168 -0
  153. package/components/data/list/hooks/useListState.js +98 -0
  154. package/components/data/list/hooks/useListStateManager.js +195 -0
  155. package/components/data/list/hooks/usePaginatedGroupedData.js +121 -0
  156. package/components/data/list/index.js +611 -0
  157. package/components/data/list/props.js +5 -0
  158. package/components/data/list/templates/media-template.js +53 -0
  159. package/components/data/list/utils/constants.js +81 -0
  160. package/components/data/list/utils/list-helpers.js +173 -0
  161. package/components/data/list/utils/list-widget-methods.js +114 -0
  162. package/components/data/live-filter/index.js +279 -0
  163. package/components/data/live-filter/props.js +12 -0
  164. package/components/data/live-form/index.js +93 -0
  165. package/components/data/live-form/props.js +16 -0
  166. package/components/data/pagination/components/BasicPagination.js +77 -0
  167. package/components/data/pagination/components/ClassicPagination.js +191 -0
  168. package/components/data/pagination/components/InlinePagination.js +99 -0
  169. package/components/data/pagination/components/LoadingComponent.js +31 -0
  170. package/components/data/pagination/components/PageSizeSelector.js +175 -0
  171. package/components/data/pagination/components/PagerNavigation.js +105 -0
  172. package/components/data/pagination/components/TotalRecords.js +52 -0
  173. package/components/data/pagination/components/index.js +47 -0
  174. package/components/data/pagination/components/props.js +5 -0
  175. package/components/data/pagination/hooks/index.js +19 -0
  176. package/components/data/pagination/hooks/props.js +5 -0
  177. package/components/data/pagination/hooks/useNavigationSize.js +44 -0
  178. package/components/data/pagination/hooks/usePagination.js +796 -0
  179. package/components/data/pagination/index.js +322 -0
  180. package/components/data/table/components/AddNewRow.js +190 -0
  181. package/components/data/table/components/EditableCell.js +91 -0
  182. package/components/data/table/components/FieldValidationError.js +24 -0
  183. package/components/data/table/components/RowExpansionButton.js +74 -0
  184. package/components/data/table/components/TableBody.js +279 -0
  185. package/components/data/table/components/TableFilters.js +325 -0
  186. package/components/data/table/components/TableFooterActions.js +48 -0
  187. package/components/data/table/components/TableHeader.js +174 -0
  188. package/components/data/table/components/TablePanelHeading.js +68 -0
  189. package/components/data/table/components/index.js +74 -0
  190. package/components/data/table/hooks/index.js +219 -0
  191. package/components/data/table/hooks/useCellState.js +117 -0
  192. package/components/data/table/hooks/useDynamicColumns.js +85 -0
  193. package/components/data/table/hooks/useEditingState.js +47 -0
  194. package/components/data/table/hooks/useFormWidget.js +184 -0
  195. package/components/data/table/hooks/usePaginationState.js +60 -0
  196. package/components/data/table/hooks/usePanelStructure.js +40 -0
  197. package/components/data/table/hooks/useResponsiveColumns.js +34 -0
  198. package/components/data/table/hooks/useRowExpansion.js +110 -0
  199. package/components/data/table/hooks/useRowHandlers.js +38 -0
  200. package/components/data/table/hooks/useRowSelection.js +213 -0
  201. package/components/data/table/hooks/useServerSideSorting.js +165 -0
  202. package/components/data/table/hooks/useTableColumns.js +263 -0
  203. package/components/data/table/hooks/useTableData.js +154 -0
  204. package/components/data/table/hooks/useTableEdit.js +467 -0
  205. package/components/data/table/hooks/useTableEffects.js +139 -0
  206. package/components/data/table/hooks/useTableFilter.js +389 -0
  207. package/components/data/table/hooks/useTableInitialization.js +103 -0
  208. package/components/data/table/hooks/useTableState.js +69 -0
  209. package/components/data/table/hooks/useTableStateManager.js +558 -0
  210. package/components/data/table/index.js +1295 -0
  211. package/components/data/table/live-table/index.js +232 -0
  212. package/components/data/table/props.js +5 -0
  213. package/components/data/table/table-action/index.js +78 -0
  214. package/components/data/table/table-column/index.js +35 -0
  215. package/components/data/table/table-row/index.js +49 -0
  216. package/components/data/table/table-row-action/index.js +74 -0
  217. package/components/data/table/utils/buildSelectionColumns.js +173 -0
  218. package/components/data/table/utils/columnBuilder.js +209 -0
  219. package/components/data/table/utils/columnProxy.js +48 -0
  220. package/components/data/table/utils/columnWidthDistribution.js +98 -0
  221. package/components/data/table/utils/constants.js +80 -0
  222. package/components/data/table/utils/crud-handlers.js +518 -0
  223. package/components/data/table/utils/dynamic-columns.js +118 -0
  224. package/components/data/table/utils/index.js +607 -0
  225. package/components/data/table/utils/renderDisplayCell.js +183 -0
  226. package/components/data/table/utils/selectionUtils.js +166 -0
  227. package/components/data/table/utils/table-helpers.js +100 -0
  228. package/components/data/table/utils/validation.js +124 -0
  229. package/components/data/types.js +113 -0
  230. package/components/data/utils/field-data-utils.js +66 -0
  231. package/components/data/utils/filter-field-util.js +81 -0
  232. package/components/data/utils/index.js +216 -0
  233. package/components/dialogs/alert-dialog/index.js +80 -0
  234. package/components/dialogs/confirm-dialog/index.js +105 -0
  235. package/components/dialogs/dialog/index.js +56 -0
  236. package/components/dialogs/dialog-actions/index.js +18 -0
  237. package/components/dialogs/dialog-body/index.js +21 -0
  238. package/components/dialogs/dialog-content/index.js +30 -0
  239. package/components/dialogs/dialog-header/index.js +93 -0
  240. package/components/dialogs/iframe-dialog/index.js +114 -0
  241. package/components/dialogs/index.js +129 -0
  242. package/components/dialogs/login-dialog/index.js +369 -0
  243. package/components/dialogs/login-dialog/props.js +5 -0
  244. package/components/dialogs/page-dialog/index.js +96 -0
  245. package/components/dialogs/withDialogWrapper.js +108 -0
  246. package/components/form/button/index.js +216 -0
  247. package/components/form/button-group/index.js +60 -0
  248. package/components/input/calendar/index.js +546 -0
  249. package/components/input/calendar/props.js +5 -0
  250. package/components/input/calendar/utils.js +340 -0
  251. package/components/input/chips/SortableChip/index.js +115 -0
  252. package/components/input/chips/SortableChip/props.js +5 -0
  253. package/components/input/chips/index.js +488 -0
  254. package/components/input/chips/props.js +5 -0
  255. package/components/input/chips/utils.js +259 -0
  256. package/components/input/color-picker/index.js +678 -0
  257. package/components/input/color-picker/props.js +5 -0
  258. package/components/input/composite/index.js +137 -0
  259. package/components/input/currency/index.js +263 -0
  260. package/components/input/currency/props.js +5 -0
  261. package/components/input/default/checkbox/index.js +230 -0
  262. package/components/input/default/checkbox/props.js +5 -0
  263. package/components/input/default/checkboxset/index.js +476 -0
  264. package/components/input/default/checkboxset/props.js +5 -0
  265. package/components/input/default/radioset/index.js +379 -0
  266. package/components/input/default/radioset/props.js +5 -0
  267. package/components/input/default/switch/index.js +490 -0
  268. package/components/input/default/switch/prop.js +5 -0
  269. package/components/input/epoch/date/components/DatePickerPopover.js +220 -0
  270. package/components/input/epoch/date/index.js +520 -0
  271. package/components/input/epoch/date/props.js +5 -0
  272. package/components/input/epoch/date/styled.js +70 -0
  273. package/components/input/epoch/date/utils.js +108 -0
  274. package/components/input/epoch/datetime/index.js +656 -0
  275. package/components/input/epoch/datetime/props.js +5 -0
  276. package/components/input/epoch/datetime/styled.js +90 -0
  277. package/components/input/epoch/datetime/utils.js +244 -0
  278. package/components/input/epoch/time/index.js +412 -0
  279. package/components/input/epoch/time/props.js +5 -0
  280. package/components/input/epoch/time/utils.js +209 -0
  281. package/components/input/fileupload/Utils.js +134 -0
  282. package/components/input/fileupload/components/ListItems.js +140 -0
  283. package/components/input/fileupload/components/MultiUpload.js +85 -0
  284. package/components/input/fileupload/components/SingleUpload.js +65 -0
  285. package/components/input/fileupload/index.js +170 -0
  286. package/components/input/fileupload/props.js +5 -0
  287. package/components/input/fileupload/useFileUpload.js +400 -0
  288. package/components/input/number/index.js +295 -0
  289. package/components/input/number/props.js +5 -0
  290. package/components/input/rating/index.js +368 -0
  291. package/components/input/rating/props.js +5 -0
  292. package/components/input/select/index.js +344 -0
  293. package/components/input/select/props.js +5 -0
  294. package/components/input/slider/index.js +167 -0
  295. package/components/input/slider/props.js +5 -0
  296. package/components/input/text/index.js +434 -0
  297. package/components/input/text/props.js +5 -0
  298. package/components/input/text/util.js +179 -0
  299. package/components/input/textarea/index.js +347 -0
  300. package/components/input/textarea/props.js +5 -0
  301. package/components/layout/footer/index.js +30 -0
  302. package/components/layout/header/index.js +30 -0
  303. package/components/layout/leftnav/index.js +44 -0
  304. package/components/layout/rightnav/index.js +32 -0
  305. package/components/layout/topnav/index.js +34 -0
  306. package/components/navbar/index.js +41 -0
  307. package/components/navbar/nav/index.js +102 -0
  308. package/components/navbar/nav/props.js +5 -0
  309. package/components/navbar/nav-item/index.js +44 -0
  310. package/components/navigation/breadcrumb/index.js +56 -0
  311. package/components/navigation/breadcrumb/props.js +5 -0
  312. package/components/navigation/menu/components/ListItems.js +66 -0
  313. package/components/navigation/menu/constants.js +101 -0
  314. package/components/navigation/menu/index.js +807 -0
  315. package/components/navigation/menu/props.js +5 -0
  316. package/components/navigation/popover/index.js +209 -0
  317. package/components/navigation/popover/props.js +15 -0
  318. package/components/page/content/index.js +28 -0
  319. package/components/page/error-boundary/index.js +108 -0
  320. package/components/page/index.js +137 -0
  321. package/components/page/page-content/index.js +23 -0
  322. package/components/page/partial/index.js +36 -0
  323. package/components/page/partial-container/index.js +48 -0
  324. package/components/page/props.js +5 -0
  325. package/components/page/toast-container/index.js +33 -0
  326. package/components/prefab/container/index.js +46 -0
  327. package/components/prefab/index.js +67 -0
  328. package/context/AppContext.js +25 -0
  329. package/context/AppSpinnerProvider.js +43 -0
  330. package/context/LocalizationProvider.js +79 -0
  331. package/context/PrefabContext.js +66 -0
  332. package/context/WidgetProvider.js +187 -0
  333. package/core/app-config.js +1 -0
  334. package/core/app.service.js +357 -0
  335. package/core/appVariablesStore.js +20 -0
  336. package/core/appstore.js +88 -0
  337. package/core/constants/currency-constant.js +1071 -0
  338. package/core/constants/events.js +34 -0
  339. package/core/constants/index.js +27 -0
  340. package/core/dialog.service.js +76 -0
  341. package/core/event-notifier.js +151 -0
  342. package/core/formatter/date-formatters.js +222 -0
  343. package/core/formatter/index.js +131 -0
  344. package/core/formatter/number-formatters.js +142 -0
  345. package/core/formatter/security-formatters.js +323 -0
  346. package/core/formatter/string-formatters.js +52 -0
  347. package/core/formatter/types.js +18 -0
  348. package/core/formatters.js +24 -0
  349. package/core/proxy-service.js +412 -0
  350. package/core/script-registry.js +63 -0
  351. package/core/security.service.js +11 -0
  352. package/core/util/common.js +33 -0
  353. package/core/util/dom.js +107 -0
  354. package/core/util/index.js +136 -0
  355. package/core/util/security.js +184 -0
  356. package/core/util/utils.js +189 -0
  357. package/core/widget-observer.js +98 -0
  358. package/higherOrder/BaseApp.js +430 -0
  359. package/higherOrder/BaseAppProps.js +5 -0
  360. package/higherOrder/BaseDateTime.js +251 -0
  361. package/higherOrder/BasePage.js +715 -0
  362. package/higherOrder/BasePartial.js +124 -0
  363. package/higherOrder/BasePrefab.js +145 -0
  364. package/higherOrder/DataNav.js +377 -0
  365. package/higherOrder/helper.js +43 -0
  366. package/higherOrder/props.js +5 -0
  367. package/higherOrder/withBaseWrapper.js +183 -0
  368. package/hooks/useAccess.js +308 -0
  369. package/hooks/useAppConfig.js +42 -0
  370. package/hooks/useAuth.js +562 -0
  371. package/hooks/useDataSourceSubscription.js +125 -0
  372. package/hooks/useDebounce.js +76 -0
  373. package/hooks/useDeviceVisibility.js +49 -0
  374. package/hooks/useHttp.js +338 -0
  375. package/libs/index.js +20 -0
  376. package/mui-config/theme-provider.js +17 -0
  377. package/mui-config/theme.js +371 -0
  378. package/package-lock.json +10177 -0
  379. package/package.json +95 -0
  380. package/store/index.js +33 -0
  381. package/store/middleware/navigationMiddleware.js +48 -0
  382. package/store/slices/appConfigSlice.js +103 -0
  383. package/store/slices/authSlice.js +508 -0
  384. package/store/slices/i18nSlice.js +206 -0
  385. package/types/index.js +15 -0
  386. package/utils/dataset-util.js +174 -0
  387. package/utils/eval-expression.js +32 -0
  388. package/utils/form-state.util.js +140 -0
  389. package/utils/form-utils.js +187 -0
  390. package/utils/format-util.js +260 -0
  391. package/utils/page-params-util.js +24 -0
  392. package/utils/resource-url.js +27 -0
  393. package/utils/state-persistance.js +343 -0
  394. package/utils/style-utils.js +73 -0
  395. package/utils/transformedDataset-utils.js +633 -0
  396. package/utils/widget-cleanup-util.js +84 -0
  397. package/utils/widgets.js +99 -0
  398. package/variables/base-variable.js +173 -0
  399. package/variables/constants.js +27 -0
  400. package/variables/live-variable.js +166 -0
  401. package/variables/model-variable.js +77 -0
  402. 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
+ };