@wavemaker-ai/react-runtime 1.0.0-rc.312 → 1.0.0-rc.317

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 (593) hide show
  1. package/.npmignore +4 -0
  2. package/actions/base-action.js +12 -29
  3. package/actions/login-action.js +35 -52
  4. package/actions/logout-action.js +21 -38
  5. package/actions/navigation-action.d.ts +1 -0
  6. package/actions/navigation-action.js +275 -345
  7. package/actions/notification-action.js +121 -149
  8. package/actions/timer-action.js +95 -151
  9. package/actions/toast-provider.js +62 -76
  10. package/actions/toast.js +95 -91
  11. package/actions/toast.service.js +59 -79
  12. package/actions/types/index.js +6 -9
  13. package/components/advanced/carousel/index.js +358 -366
  14. package/components/advanced/carousel/props.js +0 -5
  15. package/components/advanced/carousel/template.js +102 -80
  16. package/components/advanced/login/index.js +227 -285
  17. package/components/advanced/login/props.js +0 -5
  18. package/components/advanced/marquee/index.js +169 -163
  19. package/components/advanced/marquee/props.js +0 -5
  20. package/components/auth/RoleAuthGuard.d.ts +6 -0
  21. package/components/auth/RoleAuthGuard.js +65 -0
  22. package/components/basic/anchor/index.js +207 -187
  23. package/components/basic/anchor/props.js +0 -5
  24. package/components/basic/audio/index.js +110 -72
  25. package/components/basic/audio/props.js +0 -5
  26. package/components/basic/html/index.js +163 -203
  27. package/components/basic/html/props.js +0 -5
  28. package/components/basic/html/utils.js +30 -28
  29. package/components/basic/icon/index.js +98 -84
  30. package/components/basic/icon/props.js +0 -5
  31. package/components/basic/iframe/iframe.utils.js +7 -16
  32. package/components/basic/iframe/index.js +97 -103
  33. package/components/basic/iframe/props.js +0 -5
  34. package/components/basic/label/index.js +156 -134
  35. package/components/basic/label/props.js +0 -5
  36. package/components/basic/message/index.js +129 -113
  37. package/components/basic/message/props.js +0 -5
  38. package/components/basic/picture/index.js +156 -127
  39. package/components/basic/picture/props.js +0 -5
  40. package/components/basic/progress-bar/index.js +240 -176
  41. package/components/basic/progress-bar/props.js +5 -31
  42. package/components/basic/progress-circle/index.js +166 -183
  43. package/components/basic/progress-circle/props.js +14 -34
  44. package/components/basic/richtexteditor/index.js +430 -396
  45. package/components/basic/richtexteditor/props.js +0 -5
  46. package/components/basic/search/index.js +813 -931
  47. package/components/basic/search/props.js +0 -5
  48. package/components/basic/search/providers.js +233 -380
  49. package/components/basic/spinner/index.js +210 -200
  50. package/components/basic/spinner/props.js +4 -22
  51. package/components/basic/tile/index.js +73 -81
  52. package/components/basic/tile/props.js +0 -5
  53. package/components/basic/tree/Components/TreeNodeComponent.d.ts +1 -1
  54. package/components/basic/tree/Components/TreeNodeComponent.js +244 -170
  55. package/components/basic/tree/hooks/useTreePartialNodeApi.js +143 -135
  56. package/components/basic/tree/hooks/useTreePersistedState.d.ts +3 -0
  57. package/components/basic/tree/hooks/useTreePersistedState.js +38 -0
  58. package/components/basic/tree/index.d.ts +1 -0
  59. package/components/basic/tree/index.js +453 -454
  60. package/components/basic/tree/props.d.ts +18 -1
  61. package/components/basic/tree/props.js +0 -5
  62. package/components/basic/tree/utils.d.ts +16 -1
  63. package/components/basic/tree/utils.js +240 -185
  64. package/components/basic/video/index.js +161 -107
  65. package/components/basic/video/props.js +0 -5
  66. package/components/chart/index.js +42 -50
  67. package/components/chart/props.js +31 -37
  68. package/components/chart/src/ChartRenderer.js +172 -154
  69. package/components/chart/src/chart.js +391 -213
  70. package/components/chart/src/chartStyles.generated.js +6 -14
  71. package/components/chart/src/chartUtils.js +228 -272
  72. package/components/chart/src/constants.d.ts +13 -0
  73. package/components/chart/src/constants.js +316 -90
  74. package/components/chart/src/d3Setup.js +11 -30
  75. package/components/chart/src/dataUtils.js +363 -447
  76. package/components/chart/src/formatUtils.js +47 -38
  77. package/components/chart/src/index.js +11 -19
  78. package/components/chart/src/nvd3Source.generated.js +5 -13
  79. package/components/chart/src/pieDonutResponsiveLayout.d.ts +5 -0
  80. package/components/chart/src/pieDonutResponsiveLayout.js +76 -96
  81. package/components/chart/src/types.js +0 -5
  82. package/components/common/AppSpinner.js +17 -33
  83. package/components/common/app-spinner.js +11 -22
  84. package/components/common/customTemplate/index.d.ts +3 -0
  85. package/components/common/customTemplate/index.js +6 -0
  86. package/components/common/customTemplate/props.d.ts +20 -0
  87. package/components/common/customTemplate/props.js +0 -0
  88. package/components/common/customTemplate/template.d.ts +3 -0
  89. package/components/common/customTemplate/template.js +27 -0
  90. package/components/common/customTemplate/useCustomTemplate.d.ts +8 -0
  91. package/components/common/customTemplate/useCustomTemplate.js +17 -0
  92. package/components/common/customTemplate/utils.d.ts +6 -0
  93. package/components/common/customTemplate/utils.js +12 -0
  94. package/components/common/index.js +4 -12
  95. package/components/constants.js +81 -77
  96. package/components/container/accordion/accordion-pane/index.js +105 -118
  97. package/components/container/accordion/accordion-pane/props.js +5 -21
  98. package/components/container/accordion/index.js +225 -243
  99. package/components/container/accordion/props.js +5 -16
  100. package/components/container/index.js +210 -155
  101. package/components/container/layout-grid/grid-column/index.js +69 -43
  102. package/components/container/layout-grid/grid-column/props.js +0 -5
  103. package/components/container/layout-grid/grid-row/index.js +12 -29
  104. package/components/container/layout-grid/grid-row/props.js +0 -5
  105. package/components/container/layout-grid/index.js +53 -38
  106. package/components/container/layout-grid/props.js +0 -5
  107. package/components/container/linear-layout/index.js +56 -60
  108. package/components/container/linear-layout/linear-layout-item/index.js +43 -47
  109. package/components/container/linear-layout/linear-layout-item/props.js +0 -5
  110. package/components/container/linear-layout/props.js +0 -5
  111. package/components/container/panel/components/panel-content/index.js +7 -16
  112. package/components/container/panel/components/panel-header/index.js +166 -146
  113. package/components/container/panel/components/panel-header/props.js +0 -5
  114. package/components/container/panel/hooks.js +76 -102
  115. package/components/container/panel/index.js +289 -252
  116. package/components/container/panel/props.js +0 -5
  117. package/components/container/props.js +0 -5
  118. package/components/container/repeat-template/index.js +65 -44
  119. package/components/container/repeat-template/props.js +0 -5
  120. package/components/container/tabs/index.js +517 -526
  121. package/components/container/tabs/props.js +5 -28
  122. package/components/container/tabs/tab-pane/index.js +105 -100
  123. package/components/container/tabs/tab-pane/props.js +0 -5
  124. package/components/container/tabs/utils.js +30 -35
  125. package/components/container/wizard/WizardContext.js +9 -11
  126. package/components/container/wizard/components/StepComponents.js +76 -99
  127. package/components/container/wizard/components/WizardStep.js +107 -85
  128. package/components/container/wizard/index.js +791 -921
  129. package/components/container/wizard/props.js +0 -5
  130. package/components/container/wizard/utils.js +97 -131
  131. package/components/container/wizard/wizard-action/index.js +41 -81
  132. package/components/container/wizard/wizard-step/index.js +140 -120
  133. package/components/data/card/card-actions/index.js +13 -31
  134. package/components/data/card/card-content/index.js +27 -36
  135. package/components/data/card/card-footer/index.js +13 -31
  136. package/components/data/card/index.js +192 -199
  137. package/components/data/card/props.js +0 -5
  138. package/components/data/form/base-form/constant.js +5 -8
  139. package/components/data/form/base-form/hooks/index.js +26 -77
  140. package/components/data/form/base-form/hooks/useFormDataSync.js +106 -212
  141. package/components/data/form/base-form/hooks/useFormOperations.js +109 -161
  142. package/components/data/form/base-form/hooks/useFormSubmission.js +220 -280
  143. package/components/data/form/base-form/hooks/useFormValidation.js +119 -168
  144. package/components/data/form/base-form/hooks/useParentFormRelationship.js +67 -103
  145. package/components/data/form/base-form/index.js +534 -647
  146. package/components/data/form/base-form/props.js +74 -151
  147. package/components/data/form/base-form/utils.js +210 -323
  148. package/components/data/form/dynamic-fields/constant.js +43 -53
  149. package/components/data/form/dynamic-fields/index.js +135 -144
  150. package/components/data/form/dynamic-fields/props.js +0 -5
  151. package/components/data/form/dynamic-fields/utils.js +99 -158
  152. package/components/data/form/form-action/index.js +107 -85
  153. package/components/data/form/form-body/index.js +52 -26
  154. package/components/data/form/form-context.js +43 -59
  155. package/components/data/form/form-controller/hooks/index.js +43 -57
  156. package/components/data/form/form-controller/props.js +5 -8
  157. package/components/data/form/form-controller/utils.js +54 -49
  158. package/components/data/form/form-controller/validation-contrustor.js +203 -426
  159. package/components/data/form/form-controller/withFormController.js +320 -274
  160. package/components/data/form/form-dynamic-section/index.js +47 -41
  161. package/components/data/form/form-dynamic-section/props.js +0 -5
  162. package/components/data/form/form-field/base-field.js +97 -109
  163. package/components/data/form/form-field/index.js +91 -82
  164. package/components/data/form/form-field/props.js +0 -5
  165. package/components/data/form/form-footer/index.js +52 -25
  166. package/components/data/form/form-header/index.js +61 -58
  167. package/components/data/form/index.js +95 -74
  168. package/components/data/form/props.js +0 -5
  169. package/components/data/list/components/GroupHeader.js +34 -33
  170. package/components/data/list/components/GroupedListItems.js +108 -104
  171. package/components/data/list/components/ListContainer.js +22 -27
  172. package/components/data/list/components/ListDND.js +193 -185
  173. package/components/data/list/components/ListHeader.js +32 -49
  174. package/components/data/list/components/ListItem.js +153 -146
  175. package/components/data/list/components/ListItemWithTemplate.js +87 -105
  176. package/components/data/list/components/ListItems.js +180 -194
  177. package/components/data/list/components/ListPagination.js +127 -153
  178. package/components/data/list/components/LoadMoreButton.js +25 -33
  179. package/components/data/list/components/NoDataMessage.js +9 -22
  180. package/components/data/list/components/StandardListItems.js +79 -85
  181. package/components/data/list/components/index.js +31 -119
  182. package/components/data/list/components/props.js +0 -5
  183. package/components/data/list/hooks/index.js +22 -75
  184. package/components/data/list/hooks/props.js +0 -5
  185. package/components/data/list/hooks/useCurrentPageItems.js +20 -38
  186. package/components/data/list/hooks/useGroupedData.js +19 -33
  187. package/components/data/list/hooks/useListData.js +17 -47
  188. package/components/data/list/hooks/useListEffects.js +168 -237
  189. package/components/data/list/hooks/useListEventHandlers.js +301 -285
  190. package/components/data/list/hooks/useListPagination.js +90 -136
  191. package/components/data/list/hooks/useListState.js +49 -91
  192. package/components/data/list/hooks/useListStateManager.js +104 -159
  193. package/components/data/list/hooks/usePaginatedGroupedData.js +74 -110
  194. package/components/data/list/index.d.ts +1 -0
  195. package/components/data/list/index.js +579 -621
  196. package/components/data/list/props.d.ts +4 -0
  197. package/components/data/list/props.js +0 -5
  198. package/components/data/list/templates/media-template.js +29 -50
  199. package/components/data/list/utils/constants.js +20 -32
  200. package/components/data/list/utils/list-helpers.d.ts +2 -1
  201. package/components/data/list/utils/list-helpers.js +71 -115
  202. package/components/data/list/utils/list-widget-methods.js +56 -76
  203. package/components/data/list/utils/widget-instance-utils.js +20 -57
  204. package/components/data/live-filter/index.js +219 -271
  205. package/components/data/live-filter/props.js +5 -12
  206. package/components/data/live-form/index.js +68 -91
  207. package/components/data/live-form/props.js +5 -12
  208. package/components/data/pagination/components/BasicPagination.js +124 -104
  209. package/components/data/pagination/components/ClassicPagination.js +167 -190
  210. package/components/data/pagination/components/InlinePagination.js +97 -98
  211. package/components/data/pagination/components/LoadingComponent.js +17 -30
  212. package/components/data/pagination/components/PageSizeSelector.js +176 -169
  213. package/components/data/pagination/components/PagerNavigation.js +84 -105
  214. package/components/data/pagination/components/TotalRecords.js +48 -47
  215. package/components/data/pagination/components/index.js +14 -47
  216. package/components/data/pagination/components/props.js +0 -5
  217. package/components/data/pagination/hooks/index.js +6 -19
  218. package/components/data/pagination/hooks/props.js +0 -5
  219. package/components/data/pagination/hooks/useNavigationSize.js +12 -21
  220. package/components/data/pagination/hooks/usePagination.js +701 -905
  221. package/components/data/pagination/index.js +336 -389
  222. package/components/data/table/components/AddNewRow.js +122 -154
  223. package/components/data/table/components/EditableCell.js +68 -75
  224. package/components/data/table/components/FieldValidationError.js +19 -20
  225. package/components/data/table/components/RowCells.js +97 -80
  226. package/components/data/table/components/RowExpansionButton.js +43 -39
  227. package/components/data/table/components/SummaryCell.js +54 -88
  228. package/components/data/table/components/SummaryRow.js +45 -52
  229. package/components/data/table/components/SummaryRowFooter.js +35 -42
  230. package/components/data/table/components/TableBody.js +222 -218
  231. package/components/data/table/components/TableDataRow.js +113 -106
  232. package/components/data/table/components/TableFilters.js +391 -390
  233. package/components/data/table/components/TableFooterActions.js +25 -32
  234. package/components/data/table/components/TableHeader.js +460 -435
  235. package/components/data/table/components/TablePanelHeading.js +157 -181
  236. package/components/data/table/components/index.js +27 -95
  237. package/components/data/table/hooks/index.js +21 -230
  238. package/components/data/table/hooks/use-edited-rows.js +59 -94
  239. package/components/data/table/hooks/useCellState.js +58 -83
  240. package/components/data/table/hooks/useCustomExpressionColumns.js +65 -86
  241. package/components/data/table/hooks/useDynamicColumns.js +59 -92
  242. package/components/data/table/hooks/useEditingState.js +30 -41
  243. package/components/data/table/hooks/useFormWidget.js +163 -172
  244. package/components/data/table/hooks/usePaginationState.js +67 -77
  245. package/components/data/table/hooks/usePanelStructure.js +47 -41
  246. package/components/data/table/hooks/useResponsiveColumns.js +14 -20
  247. package/components/data/table/hooks/useRowExpansion.js +131 -127
  248. package/components/data/table/hooks/useRowHandlers.js +56 -69
  249. package/components/data/table/hooks/useRowSelection.js +249 -329
  250. package/components/data/table/hooks/useServerSideSorting.js +109 -175
  251. package/components/data/table/hooks/useTableColumns.js +322 -331
  252. package/components/data/table/hooks/useTableData.js +111 -166
  253. package/components/data/table/hooks/useTableEdit.js +526 -564
  254. package/components/data/table/hooks/useTableEffects.js +60 -107
  255. package/components/data/table/hooks/useTableFilter.js +244 -237
  256. package/components/data/table/hooks/useTableInitialization.js +44 -76
  257. package/components/data/table/hooks/useTableState.js +39 -61
  258. package/components/data/table/hooks/useTableStateManager.js +295 -468
  259. package/components/data/table/index.js +1556 -1713
  260. package/components/data/table/live-table/index.js +157 -219
  261. package/components/data/table/props.js +0 -5
  262. package/components/data/table/table-action/index.js +97 -75
  263. package/components/data/table/table-column/index.js +48 -42
  264. package/components/data/table/table-group/index.js +7 -25
  265. package/components/data/table/table-row/index.js +63 -55
  266. package/components/data/table/table-row-action/index.js +102 -77
  267. package/components/data/table/utils/buildSelectionColumns.js +86 -137
  268. package/components/data/table/utils/columnBuilder.d.ts +1 -1
  269. package/components/data/table/utils/columnBuilder.js +121 -160
  270. package/components/data/table/utils/columnProxy.js +48 -66
  271. package/components/data/table/utils/columnWidthDistribution.js +40 -64
  272. package/components/data/table/utils/constants.js +92 -40
  273. package/components/data/table/utils/crud-handlers.js +292 -473
  274. package/components/data/table/utils/dynamic-columns.js +99 -144
  275. package/components/data/table/utils/groupHeaderUtils.js +36 -61
  276. package/components/data/table/utils/index.d.ts +17 -13
  277. package/components/data/table/utils/index.js +483 -639
  278. package/components/data/table/utils/renderDisplayCell.js +127 -169
  279. package/components/data/table/utils/script-page-size-broadcast.js +17 -29
  280. package/components/data/table/utils/selectionUtils.js +59 -113
  281. package/components/data/table/utils/table-helpers.js +38 -74
  282. package/components/data/table/utils/validation.js +35 -78
  283. package/components/data/table/utils/widgetMapping.d.ts +5 -0
  284. package/components/data/table/utils/widgetMapping.js +41 -0
  285. package/components/data/types.js +112 -112
  286. package/components/data/utils/field-data-utils.js +38 -42
  287. package/components/data/utils/filter-field-util.js +42 -44
  288. package/components/data/utils/index.js +112 -111
  289. package/components/dialogs/alert-dialog/index.js +83 -78
  290. package/components/dialogs/alert-dialog/props.js +0 -5
  291. package/components/dialogs/confirm-dialog/index.js +102 -92
  292. package/components/dialogs/confirm-dialog/props.js +0 -5
  293. package/components/dialogs/dialog/index.js +93 -69
  294. package/components/dialogs/dialog/props.js +0 -5
  295. package/components/dialogs/dialog-actions/index.js +12 -26
  296. package/components/dialogs/dialog-actions/props.js +0 -5
  297. package/components/dialogs/dialog-body/index.js +13 -30
  298. package/components/dialogs/dialog-body/props.js +0 -5
  299. package/components/dialogs/dialog-content/index.js +48 -41
  300. package/components/dialogs/dialog-content/props.js +0 -5
  301. package/components/dialogs/dialog-header/index.js +88 -101
  302. package/components/dialogs/dialog-header/props.js +0 -5
  303. package/components/dialogs/iframe-dialog/index.js +136 -128
  304. package/components/dialogs/iframe-dialog/props.js +0 -5
  305. package/components/dialogs/index.js +104 -101
  306. package/components/dialogs/login-dialog/index.js +285 -347
  307. package/components/dialogs/login-dialog/props.js +0 -5
  308. package/components/dialogs/page-dialog/index.js +95 -86
  309. package/components/dialogs/page-dialog/props.js +0 -5
  310. package/components/dialogs/props.js +0 -5
  311. package/components/dialogs/withDialogWrapper.js +110 -83
  312. package/components/form/button/index.js +296 -245
  313. package/components/form/button/props.js +0 -5
  314. package/components/form/button-group/index.js +80 -69
  315. package/components/form/button-group/props.js +0 -5
  316. package/components/input/calendar/index.js +409 -362
  317. package/components/input/calendar/props.js +0 -5
  318. package/components/input/calendar/utils.js +164 -172
  319. package/components/input/chips/SortableChip/index.js +109 -100
  320. package/components/input/chips/SortableChip/props.js +0 -5
  321. package/components/input/chips/index.js +663 -570
  322. package/components/input/chips/props.js +0 -5
  323. package/components/input/chips/utils.js +131 -122
  324. package/components/input/color-picker/index.js +536 -594
  325. package/components/input/color-picker/props.js +0 -5
  326. package/components/input/composite/index.js +71 -110
  327. package/components/input/composite/props.js +0 -5
  328. package/components/input/currency/index.js +277 -224
  329. package/components/input/currency/props.js +0 -5
  330. package/components/input/default/checkbox/index.js +329 -250
  331. package/components/input/default/checkbox/props.js +0 -5
  332. package/components/input/default/checkboxset/index.d.ts +2 -0
  333. package/components/input/default/checkboxset/index.js +529 -446
  334. package/components/input/default/checkboxset/props.d.ts +4 -0
  335. package/components/input/default/checkboxset/props.js +0 -5
  336. package/components/input/default/checkboxset/utils.js +15 -25
  337. package/components/input/default/radioset/index.d.ts +2 -0
  338. package/components/input/default/radioset/index.js +409 -350
  339. package/components/input/default/radioset/props.d.ts +6 -0
  340. package/components/input/default/radioset/props.js +0 -5
  341. package/components/input/default/switch/index.js +494 -458
  342. package/components/input/default/switch/prop.js +0 -5
  343. package/components/input/epoch/date/components/DatePickerPopover.js +242 -193
  344. package/components/input/epoch/date/index.js +638 -518
  345. package/components/input/epoch/date/props.js +0 -5
  346. package/components/input/epoch/date/styled.js +61 -70
  347. package/components/input/epoch/date/utils.js +67 -115
  348. package/components/input/epoch/datetime/index.js +758 -695
  349. package/components/input/epoch/datetime/props.js +0 -5
  350. package/components/input/epoch/datetime/utils.js +121 -186
  351. package/components/input/epoch/time/index.js +441 -415
  352. package/components/input/epoch/time/props.js +0 -5
  353. package/components/input/epoch/time/utils.js +101 -112
  354. package/components/input/fileupload/Utils.js +70 -97
  355. package/components/input/fileupload/components/ListItems.js +132 -130
  356. package/components/input/fileupload/components/MultiUpload.js +80 -77
  357. package/components/input/fileupload/components/SingleUpload.js +57 -57
  358. package/components/input/fileupload/index.js +253 -178
  359. package/components/input/fileupload/props.js +0 -5
  360. package/components/input/fileupload/useFileUpload.js +209 -258
  361. package/components/input/number/index.js +434 -393
  362. package/components/input/number/props.js +0 -5
  363. package/components/input/rating/index.js +401 -394
  364. package/components/input/rating/props.js +0 -5
  365. package/components/input/select/index.js +408 -463
  366. package/components/input/select/props.js +0 -5
  367. package/components/input/slider/index.js +339 -332
  368. package/components/input/slider/props.js +0 -5
  369. package/components/input/text/index.d.ts +3 -3
  370. package/components/input/text/index.js +438 -475
  371. package/components/input/text/props.d.ts +1 -1
  372. package/components/input/text/props.js +0 -5
  373. package/components/input/text/util.js +82 -222
  374. package/components/input/textarea/index.js +322 -358
  375. package/components/input/textarea/props.js +0 -5
  376. package/components/input/upload/index.js +135 -131
  377. package/components/input/upload/props.js +0 -5
  378. package/components/input/util/index.js +9 -11
  379. package/components/layout/footer/index.js +12 -35
  380. package/components/layout/footer/props.js +0 -5
  381. package/components/layout/header/index.js +12 -38
  382. package/components/layout/header/props.js +0 -5
  383. package/components/layout/leftnav/index.js +57 -44
  384. package/components/layout/leftnav/props.d.ts +9 -0
  385. package/components/layout/leftnav/props.js +0 -5
  386. package/components/layout/leftnav/utils/page-class-util.d.ts +9 -0
  387. package/components/layout/leftnav/utils/page-class-util.js +28 -0
  388. package/components/layout/rightnav/index.js +12 -36
  389. package/components/layout/rightnav/props.js +0 -5
  390. package/components/layout/topnav/index.js +24 -38
  391. package/components/layout/topnav/props.js +0 -5
  392. package/components/navbar/index.js +119 -98
  393. package/components/navbar/nav/index.js +236 -232
  394. package/components/navbar/nav/props.js +0 -5
  395. package/components/navbar/nav-item/index.js +74 -65
  396. package/components/navbar/nav-item/props.js +0 -5
  397. package/components/navigation/breadcrumb/index.js +38 -61
  398. package/components/navigation/breadcrumb/props.js +0 -5
  399. package/components/navigation/menu/components/ListItems.js +76 -67
  400. package/components/navigation/menu/constants.js +27 -42
  401. package/components/navigation/menu/hooks/useHoverState.hook.js +20 -47
  402. package/components/navigation/menu/hooks/useKeyboardMovements.hook.js +34 -28
  403. package/components/navigation/menu/hooks/useTransformedDataset.hook.js +21 -14
  404. package/components/navigation/menu/index.js +911 -846
  405. package/components/navigation/menu/props.js +0 -5
  406. package/components/navigation/menu/utils/action-task.js +6 -9
  407. package/components/navigation/menu/utils/role-filter.js +41 -56
  408. package/components/navigation/popover/index.js +192 -205
  409. package/components/navigation/popover/props.js +5 -8
  410. package/components/page/content/index.js +9 -31
  411. package/components/page/content/props.js +0 -5
  412. package/components/page/error-boundary/index.js +115 -105
  413. package/components/page/error-boundary/props.js +0 -5
  414. package/components/page/index.js +100 -102
  415. package/components/page/page-content/index.js +21 -30
  416. package/components/page/page-content/props.js +0 -5
  417. package/components/page/page-context.d.ts +4 -0
  418. package/components/page/page-context.js +5 -0
  419. package/components/page/partial/index.js +50 -45
  420. package/components/page/partial/props.js +0 -5
  421. package/components/page/partial-container/index.js +78 -107
  422. package/components/page/partial-container/props.d.ts +1 -1
  423. package/components/page/partial-container/props.js +0 -5
  424. package/components/page/props.js +0 -5
  425. package/components/page/toast-container/index.js +20 -41
  426. package/components/page/toast-container/props.js +0 -5
  427. package/components/prefab/container/index.js +60 -53
  428. package/components/prefab/container/props.js +0 -5
  429. package/components/prefab/index.js +76 -61
  430. package/components/prefab/props.js +0 -5
  431. package/context/AppContext.d.ts +1 -1
  432. package/context/AppContext.js +17 -18
  433. package/context/AppSpinnerProvider.js +19 -34
  434. package/context/LayoutProvider.js +54 -57
  435. package/context/LocalizationProvider.js +34 -49
  436. package/context/PrefabContext.js +68 -119
  437. package/context/WidgetProvider.js +160 -166
  438. package/core/app-config.js +0 -1
  439. package/core/app.service.js +200 -327
  440. package/core/appVariablesStore.js +10 -15
  441. package/core/appstore.js +37 -53
  442. package/core/constants/currency-constant.js +81 -83
  443. package/core/constants/events.js +34 -44
  444. package/core/constants/index.js +21 -31
  445. package/core/dialog.service.js +52 -72
  446. package/core/event-notifier.js +94 -131
  447. package/core/formatter/array-formatters.js +18 -32
  448. package/core/formatter/date-formatters.js +140 -204
  449. package/core/formatter/index.js +64 -117
  450. package/core/formatter/number-formatters.js +115 -159
  451. package/core/formatter/security-formatters.js +233 -283
  452. package/core/formatter/string-formatters.js +23 -45
  453. package/core/formatter/types.js +12 -18
  454. package/core/formatters.js +6 -24
  455. package/core/proxy-service.js +242 -306
  456. package/core/script-registry.js +87 -134
  457. package/core/security.service.js +8 -11
  458. package/core/util/compare.js +13 -25
  459. package/core/util/dom.js +32 -63
  460. package/core/util/index.js +92 -98
  461. package/core/util/safe-is-equal.js +42 -94
  462. package/core/util/security.js +114 -153
  463. package/core/util/utils.d.ts +4 -1
  464. package/core/util/utils.js +88 -159
  465. package/core/widget-observer.js +34 -61
  466. package/higherOrder/BaseApp.js +328 -502
  467. package/higherOrder/BaseAppProps.d.ts +1 -0
  468. package/higherOrder/BaseAppProps.js +0 -5
  469. package/higherOrder/BaseDateTime.js +277 -231
  470. package/higherOrder/BasePage.js +474 -740
  471. package/higherOrder/BasePartial.js +87 -114
  472. package/higherOrder/BasePrefab.js +190 -206
  473. package/higherOrder/DataNav.js +287 -302
  474. package/higherOrder/helper.js +62 -48
  475. package/higherOrder/props.js +0 -5
  476. package/higherOrder/withBaseWrapper.js +123 -168
  477. package/higherOrder/withStandalone.js +28 -26
  478. package/hooks/useAccess.js +113 -289
  479. package/hooks/useAppConfig.js +15 -40
  480. package/hooks/useAuth.js +256 -495
  481. package/hooks/useDataSourceSubscription.d.ts +3 -3
  482. package/hooks/useDataSourceSubscription.js +99 -109
  483. package/hooks/useDebounce.js +28 -56
  484. package/hooks/useDeviceVisibility.js +14 -23
  485. package/hooks/useHttp.d.ts +1 -0
  486. package/hooks/useHttp.js +314 -493
  487. package/libs/index.js +4 -13
  488. package/libs/prefab/index.js +6 -20
  489. package/mui-config/theme-provider.js +9 -17
  490. package/mui-config/theme.js +6 -9
  491. package/package-lock.json +816 -3207
  492. package/package.json +3 -19
  493. package/providers/AppProviders.js +21 -24
  494. package/runtime-dynamic/App.js +65 -93
  495. package/runtime-dynamic/app-initializer.js +193 -411
  496. package/runtime-dynamic/components/ErrorBoundary.js +59 -76
  497. package/runtime-dynamic/components/PageWrapper.js +23 -35
  498. package/runtime-dynamic/components/PrefabPreview.js +40 -69
  499. package/runtime-dynamic/components/partial-content.d.ts +2 -3
  500. package/runtime-dynamic/components/partial-content.js +66 -45
  501. package/runtime-dynamic/components/prefab-content.js +37 -30
  502. package/runtime-dynamic/components/use-dynamic-component.js +55 -157
  503. package/runtime-dynamic/factories/build-base-page-like-component.d.ts +1 -1
  504. package/runtime-dynamic/factories/build-base-page-like-component.js +44 -58
  505. package/runtime-dynamic/factories/dynamic-component.d.ts +9 -0
  506. package/runtime-dynamic/factories/dynamic-component.js +91 -0
  507. package/runtime-dynamic/factories/prefab-factory.d.ts +1 -1
  508. package/runtime-dynamic/factories/prefab-factory.js +60 -81
  509. package/runtime-dynamic/factories/startup-info.js +12 -25
  510. package/runtime-dynamic/factories/utils.d.ts +2 -10
  511. package/runtime-dynamic/factories/utils.js +47 -129
  512. package/runtime-dynamic/index.js +56 -191
  513. package/runtime-dynamic/main.js +42 -70
  514. package/runtime-dynamic/preview-mode.js +14 -29
  515. package/runtime-dynamic/preview-navigation.js +21 -30
  516. package/runtime-dynamic/preview-path.d.ts +5 -0
  517. package/runtime-dynamic/preview-path.js +13 -0
  518. package/runtime-dynamic/preview-resource-base.js +15 -31
  519. package/runtime-dynamic/registry/component-registry.js +269 -334
  520. package/runtime-dynamic/registry/custom-widget-registry.js +11 -15
  521. package/runtime-dynamic/registry/index.js +24 -63
  522. package/runtime-dynamic/registry/store.d.ts +1 -0
  523. package/runtime-dynamic/registry/store.js +18 -23
  524. package/runtime-dynamic/routes.js +53 -81
  525. package/runtime-dynamic/services/app-extension-provider.js +17 -44
  526. package/runtime-dynamic/services/autolayout-inject.d.ts +4 -0
  527. package/runtime-dynamic/services/autolayout-inject.js +27 -0
  528. package/runtime-dynamic/services/compile-render.d.ts +9 -0
  529. package/runtime-dynamic/services/compile-render.js +142 -0
  530. package/runtime-dynamic/services/component-ref-provider.d.ts +18 -3
  531. package/runtime-dynamic/services/component-ref-provider.js +52 -129
  532. package/runtime-dynamic/services/css-scoping.js +23 -28
  533. package/runtime-dynamic/services/fragment-url.js +37 -50
  534. package/runtime-dynamic/services/index.d.ts +2 -3
  535. package/runtime-dynamic/services/index.js +31 -152
  536. package/runtime-dynamic/services/markup-transpiler.d.ts +2 -2
  537. package/runtime-dynamic/services/markup-transpiler.js +39 -231
  538. package/runtime-dynamic/services/prefab-resources.js +40 -118
  539. package/runtime-dynamic/services/resource-manager.d.ts +2 -2
  540. package/runtime-dynamic/services/resource-manager.js +24 -65
  541. package/runtime-dynamic/services/script-executor.js +46 -63
  542. package/runtime-dynamic/services/variable-factory.js +141 -184
  543. package/runtime-dynamic/services/variable-registry.js +65 -115
  544. package/runtime-dynamic/services/variable-transpiler.js +73 -103
  545. package/runtime-dynamic/shims/next-image.js +79 -50
  546. package/runtime-dynamic/shims/next-link.js +58 -32
  547. package/runtime-dynamic/shims/next-navigation.js +17 -34
  548. package/runtime-dynamic/utils/index.js +15 -30
  549. package/store/bindActions/i18nActions.js +16 -18
  550. package/store/index.js +29 -35
  551. package/store/middleware/navigationMiddleware.js +25 -45
  552. package/store/middleware/pendingTabNavigationIntentMiddleware.js +20 -25
  553. package/store/slices/appConfigSlice.js +65 -94
  554. package/store/slices/authSlice.js +317 -471
  555. package/store/slices/i18nSlice.js +169 -168
  556. package/store/slices/navigationSlice.js +22 -20
  557. package/store/util/resolve-path.d.ts +1 -0
  558. package/store/util/resolve-path.js +7 -0
  559. package/store/viewport.service.js +150 -194
  560. package/types/index.js +10 -15
  561. package/utils/attr.js +191 -41
  562. package/utils/custom-expression/index.js +58 -151
  563. package/utils/custom-expression/parser.js +108 -182
  564. package/utils/dataset-util.js +113 -154
  565. package/utils/eval-expression.js +10 -19
  566. package/utils/form-state.util.js +60 -118
  567. package/utils/form-utils.js +49 -190
  568. package/utils/format-util.js +113 -184
  569. package/utils/layoutsize-util.js +11 -17
  570. package/utils/lib-error-skipper.js +54 -52
  571. package/utils/page-params-util.js +50 -40
  572. package/utils/pending-tab-navigation-intent.js +7 -17
  573. package/utils/resource-url.js +8 -19
  574. package/utils/state-persistance.d.ts +1 -1
  575. package/utils/state-persistance.js +136 -253
  576. package/utils/style-utils.js +24 -78
  577. package/utils/transformedDataset-utils.js +353 -381
  578. package/utils/widget-cleanup-util.js +42 -74
  579. package/utils/widgets.js +19 -31
  580. package/variables/base-variable.js +117 -166
  581. package/variables/constants.js +5 -8
  582. package/variables/crud-variable.js +150 -181
  583. package/variables/live-variable.d.ts +1 -1
  584. package/variables/live-variable.js +140 -174
  585. package/variables/metadata.service.js +74 -116
  586. package/variables/model-variable.js +68 -78
  587. package/variables/service-variable.js +171 -285
  588. package/wm-namespace.js +11 -14
  589. package/components/chart/src/css.d.js +0 -1
  590. package/runtime-dynamic/services/cache.d.ts +0 -29
  591. package/runtime-dynamic/services/cache.js +0 -57
  592. package/tsconfig.declaration.tsbuildinfo +0 -1
  593. package/types/global.d.js +0 -3
@@ -1,1830 +1,1673 @@
1
- "use strict";
2
1
  "use client";
3
-
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
- var _typeof3 = require("@babel/runtime/helpers/typeof");
6
- Object.defineProperty(exports, "__esModule", {
7
- value: true
8
- });
9
- exports["default"] = exports.WmTableComponent = exports.WmTable = void 0;
10
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
13
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
- var _react = _interopRequireWildcard(require("react"));
18
- var _reactTable = require("@tanstack/react-table");
19
- var _material = require("@mui/material");
20
- var _lodashEs = require("lodash-es");
21
- var _withBaseWrapper = _interopRequireDefault(require("@wavemaker-ai/react-runtime/higherOrder/withBaseWrapper"));
22
- var _pagination = _interopRequireDefault(require("@wavemaker-ai/react-runtime/components/data/pagination"));
23
- var _hooks = require("./hooks");
24
- var _utils = require("./utils");
25
- var _groupHeaderUtils = require("./utils/groupHeaderUtils");
26
- var _components = require("./components");
27
- var _buildSelectionColumns = require("./utils/buildSelectionColumns");
28
- var _LoadingComponent = _interopRequireDefault(require("@wavemaker-ai/react-runtime/components/data/pagination/components/LoadingComponent"));
29
- var _columnProxy = require("./utils/columnProxy");
30
- var _useDataSourceSubscription = require("@wavemaker-ai/react-runtime/hooks/useDataSourceSubscription");
31
- var _crudHandlers = require("./utils/crud-handlers");
32
- var _types = require("@wavemaker-ai/react-runtime/components/data/types");
33
- var _useEditedRows = require("./hooks/use-edited-rows");
34
- var _scriptPageSizeBroadcast = require("./utils/script-page-size-broadcast");
35
- var _withStandalone = _interopRequireDefault(require("@wavemaker-ai/react-runtime/higherOrder/withStandalone"));
36
- var _excluded = ["name", "dataset", "navigation", "children", "listener", "pagesize", "navigationalign", "showrecordcount", "maxsize", "boundarylinks", "allowpagesizechange", "pagesizeoptions", "formposition", "editmode", "spacing", "title", "subheading", "iconclass", "exportOptions", "shownavigation", "onDemandLoad", "showrowindex", "showheader", "enablesort", "enablecolumnselection", "onColumnselect", "onColumndeselect", "radioselect", "radioselecttitle", "radioselectarialabel", "multiselect", "multiselecttitle", "multiselectarialabel", "gridfirstrowselect", "isrowselectable", "rowClass", "deleteoktext", "deletecanceltext", "confirmdelete", "errormessage", "nodatamessage", "loadingdatamsg", "insertmessage", "updatemessage", "deletemessage", "ondemandmessage", "viewlessmessage", "showviewlessbutton", "onRowDelete", "onRowUpdate", "datasource", "binddataset", "onSuccess", "onError", "onRowinsert", "onRowupdate", "onRowdelete", "onRowclick", "onSort", "onBeforerowdelete", "onBeforefilter", "onHeaderclick", "onRowselect", "onRowdeselect", "onSetrecord", "statehandler", "formName", "parentForm", "filtermode", "filteronkeypress", "searchlabel", "onBeforedatarender", "onDatarender", "className", "exportformat", "exportdatasize", "onBeforeexport", "onAfterexport", "styles"];
37
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
38
- var __jsx = _react["default"].createElement;
39
- 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; }
40
- 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; }
41
- var WmTableComponent = exports.WmTableComponent = /*#__PURE__*/(0, _react.memo)(function (props) {
42
- var _listener$App, _listener$Widgets2, _datasource$paginatio2, _table$getState$pagin, _datasource$paginatio4;
43
- var name = props.name,
44
- _props$dataset = props.dataset,
45
- dataset = _props$dataset === void 0 ? [] : _props$dataset,
46
- _props$navigation = props.navigation,
47
- navigation = _props$navigation === void 0 ? "Basic" : _props$navigation,
48
- children = props.children,
49
- listener = props.listener,
50
- _props$pagesize = props.pagesize,
51
- pagesize = _props$pagesize === void 0 ? 5 : _props$pagesize,
52
- _props$navigationalig = props.navigationalign,
53
- navigationalign = _props$navigationalig === void 0 ? "left" : _props$navigationalig,
54
- _props$showrecordcoun = props.showrecordcount,
55
- showrecordcount = _props$showrecordcoun === void 0 ? false : _props$showrecordcoun,
56
- _props$maxsize = props.maxsize,
57
- maxsize = _props$maxsize === void 0 ? 5 : _props$maxsize,
58
- _props$boundarylinks = props.boundarylinks,
59
- boundarylinks = _props$boundarylinks === void 0 ? false : _props$boundarylinks,
60
- _props$allowpagesizec = props.allowpagesizechange,
61
- allowpagesizechange = _props$allowpagesizec === void 0 ? false : _props$allowpagesizec,
62
- _props$pagesizeoption = props.pagesizeoptions,
63
- pagesizeoptions = _props$pagesizeoption === void 0 ? "5,10,20,50,100" : _props$pagesizeoption,
64
- _props$formposition = props.formposition,
65
- formposition = _props$formposition === void 0 ? "bottom" : _props$formposition,
66
- _props$editmode = props.editmode,
67
- editmode = _props$editmode === void 0 ? "none" : _props$editmode,
68
- _props$spacing = props.spacing,
69
- spacing = _props$spacing === void 0 ? "normal" : _props$spacing,
70
- title = props.title,
71
- subheading = props.subheading,
72
- iconclass = props.iconclass,
73
- _props$exportOptions = props.exportOptions,
74
- exportOptions = _props$exportOptions === void 0 ? [] : _props$exportOptions,
75
- _props$shownavigation = props.shownavigation,
76
- shownavigation = _props$shownavigation === void 0 ? true : _props$shownavigation,
77
- _props$onDemandLoad = props.onDemandLoad,
78
- onDemandLoad = _props$onDemandLoad === void 0 ? false : _props$onDemandLoad,
79
- _props$showrowindex = props.showrowindex,
80
- showrowindex = _props$showrowindex === void 0 ? false : _props$showrowindex,
81
- _props$showheader = props.showheader,
82
- showheader = _props$showheader === void 0 ? true : _props$showheader,
83
- _props$enablesort = props.enablesort,
84
- enablesort = _props$enablesort === void 0 ? true : _props$enablesort,
85
- _props$enablecolumnse = props.enablecolumnselection,
86
- enablecolumnselection = _props$enablecolumnse === void 0 ? false : _props$enablecolumnse,
87
- onColumnselect = props.onColumnselect,
88
- onColumndeselect = props.onColumndeselect,
89
- _props$radioselect = props.radioselect,
90
- radioselect = _props$radioselect === void 0 ? false : _props$radioselect,
91
- _props$radioselecttit = props.radioselecttitle,
92
- radioselecttitle = _props$radioselecttit === void 0 ? "" : _props$radioselecttit,
93
- _props$radioselectari = props.radioselectarialabel,
94
- radioselectarialabel = _props$radioselectari === void 0 ? _utils.TABLE_MESSAGES.radioSelectAriaLabel : _props$radioselectari,
95
- _props$multiselect = props.multiselect,
96
- multiselect = _props$multiselect === void 0 ? false : _props$multiselect,
97
- _props$multiselecttit = props.multiselecttitle,
98
- multiselecttitle = _props$multiselecttit === void 0 ? "" : _props$multiselecttit,
99
- _props$multiselectari = props.multiselectarialabel,
100
- multiselectarialabel = _props$multiselectari === void 0 ? _utils.TABLE_MESSAGES.multiSelectAriaLabel : _props$multiselectari,
101
- _props$gridfirstrowse = props.gridfirstrowselect,
102
- gridfirstrowselect = _props$gridfirstrowse === void 0 ? false : _props$gridfirstrowse,
103
- _props$isrowselectabl = props.isrowselectable,
104
- isrowselectable = _props$isrowselectabl === void 0 ? false : _props$isrowselectabl,
105
- _props$rowClass = props.rowClass,
106
- rowClass = _props$rowClass === void 0 ? "" : _props$rowClass,
107
- _props$deleteoktext = props.deleteoktext,
108
- deleteoktext = _props$deleteoktext === void 0 ? _utils.TABLE_MESSAGES.deleteOkText : _props$deleteoktext,
109
- _props$deletecancelte = props.deletecanceltext,
110
- deletecanceltext = _props$deletecancelte === void 0 ? _utils.TABLE_MESSAGES.deleteCancelText : _props$deletecancelte,
111
- _props$confirmdelete = props.confirmdelete,
112
- confirmdelete = _props$confirmdelete === void 0 ? _utils.TABLE_MESSAGES.deleteConfirmMessage : _props$confirmdelete,
113
- _props$errormessage = props.errormessage,
114
- errormessage = _props$errormessage === void 0 ? _utils.TABLE_MESSAGES.operationError : _props$errormessage,
115
- _props$nodatamessage = props.nodatamessage,
116
- nodatamessage = _props$nodatamessage === void 0 ? _utils.TABLE_MESSAGES.noDataMessage : _props$nodatamessage,
117
- _props$loadingdatamsg = props.loadingdatamsg,
118
- loadingdatamsg = _props$loadingdatamsg === void 0 ? _utils.TABLE_MESSAGES.loadingMessage : _props$loadingdatamsg,
119
- _props$insertmessage = props.insertmessage,
120
- insertmessage = _props$insertmessage === void 0 ? _utils.TABLE_MESSAGES.insertSuccess : _props$insertmessage,
121
- _props$updatemessage = props.updatemessage,
122
- updatemessage = _props$updatemessage === void 0 ? _utils.TABLE_MESSAGES.updateSuccess : _props$updatemessage,
123
- _props$deletemessage = props.deletemessage,
124
- deletemessage = _props$deletemessage === void 0 ? _utils.TABLE_MESSAGES.deleteSuccess : _props$deletemessage,
125
- _props$ondemandmessag = props.ondemandmessage,
126
- ondemandmessage = _props$ondemandmessag === void 0 ? "Load More" : _props$ondemandmessag,
127
- _props$viewlessmessag = props.viewlessmessage,
128
- viewlessmessage = _props$viewlessmessag === void 0 ? "View Less" : _props$viewlessmessag,
129
- _props$showviewlessbu = props.showviewlessbutton,
130
- showviewlessbutton = _props$showviewlessbu === void 0 ? false : _props$showviewlessbu,
131
- onRowDelete = props.onRowDelete,
132
- onRowUpdate = props.onRowUpdate,
133
- datasource = props.datasource,
134
- binddataset = props.binddataset,
135
- onSuccess = props.onSuccess,
136
- onError = props.onError,
137
- onRowinsert = props.onRowinsert,
138
- onRowupdate = props.onRowupdate,
139
- onRowdelete = props.onRowdelete,
140
- onRowclick = props.onRowclick,
141
- onSort = props.onSort,
142
- onBeforerowdelete = props.onBeforerowdelete,
143
- onBeforefilter = props.onBeforefilter,
144
- onHeaderclick = props.onHeaderclick,
145
- onRowselect = props.onRowselect,
146
- onRowdeselect = props.onRowdeselect,
147
- onSetrecord = props.onSetrecord,
148
- statehandler = props.statehandler,
149
- formName = props.formName,
150
- parentForm = props.parentForm,
151
- filtermode = props.filtermode,
152
- _props$filteronkeypre = props.filteronkeypress,
153
- filteronkeypress = _props$filteronkeypre === void 0 ? false : _props$filteronkeypre,
154
- _props$searchlabel = props.searchlabel,
155
- searchlabel = _props$searchlabel === void 0 ? "Search" : _props$searchlabel,
156
- onBeforedatarender = props.onBeforedatarender,
157
- onDatarender = props.onDatarender,
158
- className = props.className,
159
- exportformat = props.exportformat,
160
- exportdatasize = props.exportdatasize,
161
- onBeforeexport = props.onBeforeexport,
162
- onAfterexport = props.onAfterexport,
163
- styles = props.styles,
164
- rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
165
- // When same partial is used multiple times (e.g. in tabs), use unique storage key to prevent state collision
166
- var effectiveStorageKey = (0, _react.useMemo)(function () {
167
- return name + (listener !== null && listener !== void 0 && listener.partialName ? "__".concat(listener === null || listener === void 0 ? void 0 : listener.partialName) : "");
168
- }, [name, listener === null || listener === void 0 ? void 0 : listener.partialName]);
169
- var widgetRegistrationKey = props["item-id"] || name;
170
- var listenerRef = (0, _react.useRef)(listener);
171
- listenerRef.current = listener;
172
- var loading = (datasource === null || datasource === void 0 ? void 0 : datasource.loading) || false;
173
- var prevDatasetRef = (0, _react.useRef)(dataset);
174
- var prevSelectedRow = (0, _react.useRef)(null);
175
- var tableApisRegistered = (0, _react.useRef)(false);
176
-
177
- // State for accumulated data in Scroll and On-Demand navigation modes
178
- var _useState = (0, _react.useState)([]),
179
- accumulatedData = _useState[0],
180
- setAccumulatedData = _useState[1];
181
-
182
- // Callback to receive accumulated data from pagination (for Scroll and On-Demand)
183
- var handleAccumulatedDataUpdate = (0, _react.useCallback)(function (data) {
184
- // Only update if data has actually changed to prevent unnecessary re-renders
185
- setAccumulatedData(function (prevData) {
186
- // If lengths are different, it's definitely new data
187
- if (prevData.length !== data.length) {
188
- return data;
189
- }
190
- // Otherwise keep the previous reference to avoid re-render
191
- return prevData;
192
- });
193
- }, []);
194
-
195
- // Reset accumulated data when navigation changes
196
- (0, _react.useEffect)(function () {
197
- if (navigation !== "Scroll" && navigation !== "On-Demand") {
198
- setAccumulatedData([]);
199
- }
200
- }, [navigation]);
201
- var notifyApp = listener === null || listener === void 0 || (_listener$App = listener.App) === null || _listener$App === void 0 ? void 0 : _listener$App.notifyApp;
202
-
203
- // Create a centralized toast notification function
204
- var showToast = (0, _react.useCallback)(function (message, type) {
205
- if (notifyApp) {
206
- notifyApp(message, type);
207
- }
208
- }, [notifyApp]);
209
-
210
- // Determine if we're using server-side pagination
211
- // Check if datasource is API-aware (server-side) rather than checking runtime pagination data
212
- var isServerSidePagination = (0, _react.useCallback)(function () {
213
- if (navigation === "None") {
214
- return false;
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
215
17
  }
216
- return !!(datasource && datasource.execute && datasource.execute(_types.DataSource.Operation.IS_PAGEABLE));
217
- }, [datasource, navigation]);
218
-
219
- // Disable state management for Scroll navigation
220
- var effectiveStateHandler = navigation === "Scroll" ? "none" : statehandler;
221
-
222
- // Use datasource subscription for SSP state restoration - RUN FIRST
223
- // This hook must run before other hooks to ensure datasource state is properly initialized
224
- (0, _useDataSourceSubscription.useDataSourceSubscription)({
225
- datasource: datasource,
226
- statehandler: effectiveStateHandler,
227
- name: name,
228
- widgetType: "table",
229
- onPageRestored: function onPageRestored() {
230
- // This will be called when datasource loads with restored page
231
- // The page is already set in datasource options, so we don't need to do anything here
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __objRest = (source, exclude) => {
22
+ var target = {};
23
+ for (var prop in source)
24
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
+ target[prop] = source[prop];
26
+ if (source != null && __getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(source)) {
28
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
+ target[prop] = source[prop];
232
30
  }
233
- });
234
-
235
- // Use custom hooks for organized functionality
236
- var _useTableData = (0, _hooks.useTableData)({
237
- dataset: dataset,
238
- onRowDelete: onRowDelete,
239
- deleteoktext: deleteoktext,
240
- deletecanceltext: deletecanceltext,
241
- confirmdelete: confirmdelete,
242
- deletemessage: deletemessage,
243
- errormessage: errormessage,
244
- showToast: showToast,
245
- datasource: datasource,
246
- binddataset: binddataset,
247
- onSuccess: onSuccess,
248
- onError: onError,
249
- onRowdelete: onRowdelete,
250
- isServerSidePagination: isServerSidePagination(),
251
- listener: listener,
252
- widgetName: name
253
- }),
254
- internalDataset = _useTableData.internalDataset,
255
- setInternalDataset = _useTableData.setInternalDataset,
256
- _deleteRecord = _useTableData.deleteRecord,
257
- renderConfirmDialog = _useTableData.renderConfirmDialog;
258
- var _useFormWidget = (0, _hooks.useFormWidget)({
259
- listener: listener
260
- }),
261
- renderFormWidget = _useFormWidget.renderFormWidget;
262
-
263
- // Use generic cell state hook for managing cell values and selections
264
- // Use the table name as unique ID to prevent collisions between multiple tables
265
- var cellState = (0, _hooks.useCellState)(name);
266
-
267
- // Ref holding the "sync selectedItems" implementation, assigned each render after
268
- // tableApis is defined. A stable wrapper is passed to useRowSelection so it can
269
- // call the latest version without being in its dependency array.
270
- var syncSelectedItemsImplRef = (0, _react.useRef)(null);
271
- var onSyncSelectedItems = (0, _react.useCallback)(function (ids) {
272
- var _syncSelectedItemsImp;
273
- return (_syncSelectedItemsImp = syncSelectedItemsImplRef.current) === null || _syncSelectedItemsImp === void 0 ? void 0 : _syncSelectedItemsImp.call(syncSelectedItemsImplRef, ids);
274
- }, []);
275
-
276
- // ==================== STATE PERSISTENCE ====================
277
- // Restore persisted state before initializing table
278
- var _useMemo = (0, _react.useMemo)(function () {
279
- var _datasource$paginatio;
280
- // Skip state restoration for Scroll navigation
31
+ return target;
32
+ };
33
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
34
+ import React, {
35
+ memo,
36
+ useCallback,
37
+ useEffect,
38
+ useMemo,
39
+ useState,
40
+ useRef
41
+ } from "react";
42
+ import {
43
+ useReactTable,
44
+ getCoreRowModel,
45
+ getPaginationRowModel,
46
+ getSortedRowModel
47
+ } from "@tanstack/react-table";
48
+ import { Box, Table } from "@mui/material";
49
+ import { uniqueId, find, isEqual } from "lodash-es";
50
+ import withBaseWrapper from "../../../higherOrder/withBaseWrapper";
51
+ import WmPagination from "../pagination";
52
+ import {
53
+ useTableData,
54
+ useFormWidget,
55
+ usePanelStructure,
56
+ useTableEdit,
57
+ useTableColumns,
58
+ useRowSelection,
59
+ useTableState,
60
+ useCellState,
61
+ useRowHandlers,
62
+ usePaginationState,
63
+ useTableInitialization,
64
+ useRowExpansion,
65
+ useServerSideSorting,
66
+ useTableEffects,
67
+ useTableStateManager,
68
+ useTableFilter,
69
+ useDynamicColumns,
70
+ useCustomExpressionColumns
71
+ } from "./hooks";
72
+ import {
73
+ parseTableColumns,
74
+ parseTableStructureWithGroups,
75
+ flattenTableStructure,
76
+ parseTableRowActions,
77
+ parseTableActions,
78
+ parseTableRowExpansion,
79
+ getSpacingClasses,
80
+ TABLE_CSS_CLASSES,
81
+ TABLE_MESSAGES,
82
+ getTableState,
83
+ saveTableState,
84
+ clearTableState,
85
+ addUniqueRowIds,
86
+ cleanRowData
87
+ } from "./utils";
88
+ import { hasTableGroups } from "./utils/groupHeaderUtils";
89
+ import { handleNewRowNavigation } from "./utils";
90
+ import {
91
+ TablePanelHeading,
92
+ TableFooterActions,
93
+ TableBodyComponent,
94
+ TableHeaderComponent,
95
+ GlobalSearchFilter,
96
+ SummaryRowFooter
97
+ } from "./components";
98
+ import { buildSelectionColumns } from "./utils/buildSelectionColumns";
99
+ import LoadingComponent from "../pagination/components/LoadingComponent";
100
+ import { createColumnsProxy } from "./utils/columnProxy";
101
+ import { useDataSourceSubscription } from "../../../hooks/useDataSourceSubscription";
102
+ import { refreshDataSource } from "./utils/crud-handlers";
103
+ import { DataSource } from "../types";
104
+ import { EditedRowsProvider } from "./hooks/use-edited-rows";
105
+ import {
106
+ subscribeToScriptPageSizeBroadcast,
107
+ broadcastScriptPageSize
108
+ } from "./utils/script-page-size-broadcast";
109
+ import withStandalone from "../../../higherOrder/withStandalone";
110
+ const WmTableComponent = memo(
111
+ (props) => {
112
+ var _a, _b, _d, _e, _f, _g, _h, _i;
113
+ const _c = props, {
114
+ name,
115
+ dataset = [],
116
+ navigation = "Basic",
117
+ children,
118
+ listener,
119
+ pagesize = 5,
120
+ navigationalign = "left",
121
+ showrecordcount = false,
122
+ maxsize = 5,
123
+ boundarylinks = false,
124
+ allowpagesizechange = false,
125
+ pagesizeoptions = "5,10,20,50,100",
126
+ formposition = "bottom",
127
+ editmode = "none",
128
+ spacing = "normal",
129
+ title,
130
+ subheading,
131
+ iconclass,
132
+ exportOptions = [],
133
+ shownavigation = true,
134
+ onDemandLoad = false,
135
+ showrowindex = false,
136
+ showheader = true,
137
+ enablesort = true,
138
+ enablecolumnselection = false,
139
+ onColumnselect,
140
+ onColumndeselect,
141
+ radioselect = false,
142
+ radioselecttitle = "",
143
+ radioselectarialabel = (_a = TABLE_MESSAGES) == null ? void 0 : _a.radioSelectAriaLabel,
144
+ multiselect = false,
145
+ multiselecttitle = "",
146
+ multiselectarialabel = (_b = TABLE_MESSAGES) == null ? void 0 : _b.multiSelectAriaLabel,
147
+ gridfirstrowselect = false,
148
+ isrowselectable = false,
149
+ rowClass = "",
150
+ deleteoktext = TABLE_MESSAGES.deleteOkText,
151
+ deletecanceltext = TABLE_MESSAGES.deleteCancelText,
152
+ confirmdelete = TABLE_MESSAGES.deleteConfirmMessage,
153
+ errormessage = TABLE_MESSAGES.operationError,
154
+ nodatamessage = TABLE_MESSAGES.noDataMessage,
155
+ loadingdatamsg = TABLE_MESSAGES.loadingMessage,
156
+ insertmessage = TABLE_MESSAGES.insertSuccess,
157
+ updatemessage = TABLE_MESSAGES.updateSuccess,
158
+ deletemessage = TABLE_MESSAGES.deleteSuccess,
159
+ ondemandmessage = "Load More",
160
+ viewlessmessage = "View Less",
161
+ showviewlessbutton = false,
162
+ onRowDelete,
163
+ onRowUpdate,
164
+ datasource,
165
+ binddataset,
166
+ onSuccess,
167
+ onError,
168
+ onRowinsert,
169
+ onRowupdate,
170
+ onRowdelete,
171
+ onRowclick,
172
+ onSort,
173
+ onBeforerowdelete,
174
+ onBeforefilter,
175
+ onHeaderclick,
176
+ onRowselect,
177
+ onRowdeselect,
178
+ onSetrecord,
179
+ statehandler,
180
+ formName,
181
+ parentForm,
182
+ filtermode,
183
+ filteronkeypress = false,
184
+ searchlabel = "Search",
185
+ onBeforedatarender,
186
+ onDatarender,
187
+ className,
188
+ exportformat,
189
+ exportdatasize,
190
+ onBeforeexport,
191
+ onAfterexport,
192
+ styles
193
+ } = _c, rest = __objRest(_c, [
194
+ "name",
195
+ "dataset",
196
+ "navigation",
197
+ "children",
198
+ "listener",
199
+ "pagesize",
200
+ "navigationalign",
201
+ "showrecordcount",
202
+ "maxsize",
203
+ "boundarylinks",
204
+ "allowpagesizechange",
205
+ "pagesizeoptions",
206
+ "formposition",
207
+ "editmode",
208
+ "spacing",
209
+ "title",
210
+ "subheading",
211
+ "iconclass",
212
+ "exportOptions",
213
+ "shownavigation",
214
+ "onDemandLoad",
215
+ "showrowindex",
216
+ "showheader",
217
+ "enablesort",
218
+ "enablecolumnselection",
219
+ "onColumnselect",
220
+ "onColumndeselect",
221
+ "radioselect",
222
+ "radioselecttitle",
223
+ "radioselectarialabel",
224
+ "multiselect",
225
+ "multiselecttitle",
226
+ "multiselectarialabel",
227
+ "gridfirstrowselect",
228
+ "isrowselectable",
229
+ "rowClass",
230
+ "deleteoktext",
231
+ "deletecanceltext",
232
+ "confirmdelete",
233
+ "errormessage",
234
+ "nodatamessage",
235
+ "loadingdatamsg",
236
+ "insertmessage",
237
+ "updatemessage",
238
+ "deletemessage",
239
+ "ondemandmessage",
240
+ "viewlessmessage",
241
+ "showviewlessbutton",
242
+ "onRowDelete",
243
+ "onRowUpdate",
244
+ "datasource",
245
+ "binddataset",
246
+ "onSuccess",
247
+ "onError",
248
+ "onRowinsert",
249
+ "onRowupdate",
250
+ "onRowdelete",
251
+ "onRowclick",
252
+ "onSort",
253
+ "onBeforerowdelete",
254
+ "onBeforefilter",
255
+ "onHeaderclick",
256
+ "onRowselect",
257
+ "onRowdeselect",
258
+ "onSetrecord",
259
+ "statehandler",
260
+ "formName",
261
+ "parentForm",
262
+ "filtermode",
263
+ "filteronkeypress",
264
+ "searchlabel",
265
+ "onBeforedatarender",
266
+ "onDatarender",
267
+ "className",
268
+ "exportformat",
269
+ "exportdatasize",
270
+ "onBeforeexport",
271
+ "onAfterexport",
272
+ "styles"
273
+ ]);
274
+ const effectiveStorageKey = useMemo(
275
+ () => name + ((listener == null ? void 0 : listener.partialName) ? `__${listener == null ? void 0 : listener.partialName}` : ""),
276
+ [name, listener == null ? void 0 : listener.partialName]
277
+ );
278
+ const widgetRegistrationKey = props["item-id"] || name;
279
+ const listenerRef = useRef(listener);
280
+ listenerRef.current = listener;
281
+ const loading = (datasource == null ? void 0 : datasource.loading) || false;
282
+ const prevDatasetRef = useRef(dataset);
283
+ const prevSelectedRow = useRef(null);
284
+ const tableApisRegistered = useRef(false);
285
+ const [accumulatedData, setAccumulatedData] = useState([]);
286
+ const handleAccumulatedDataUpdate = useCallback((data) => {
287
+ setAccumulatedData((prevData) => {
288
+ if (prevData.length !== data.length) {
289
+ return data;
290
+ }
291
+ return prevData;
292
+ });
293
+ }, []);
294
+ useEffect(() => {
295
+ if (navigation !== "Scroll" && navigation !== "On-Demand") {
296
+ setAccumulatedData([]);
297
+ }
298
+ }, [navigation]);
299
+ const notifyApp = (_d = listener == null ? void 0 : listener.App) == null ? void 0 : _d.notifyApp;
300
+ const showToast = useCallback(
301
+ (message, type) => {
302
+ if (notifyApp) {
303
+ notifyApp(message, type);
304
+ }
305
+ },
306
+ [notifyApp]
307
+ );
308
+ const isServerSidePagination = useCallback(() => {
309
+ if (navigation === "None") {
310
+ return false;
311
+ }
312
+ return !!(datasource && datasource.execute && datasource.execute(DataSource.Operation.IS_PAGEABLE));
313
+ }, [datasource, navigation]);
314
+ const effectiveStateHandler = navigation === "Scroll" ? "none" : statehandler;
315
+ useDataSourceSubscription({
316
+ datasource,
317
+ statehandler: effectiveStateHandler,
318
+ name,
319
+ widgetType: "table",
320
+ onPageRestored: () => {
321
+ }
322
+ });
323
+ const { internalDataset, setInternalDataset, deleteRecord, renderConfirmDialog } = useTableData(
324
+ {
325
+ dataset,
326
+ onRowDelete,
327
+ deleteoktext,
328
+ deletecanceltext,
329
+ confirmdelete,
330
+ deletemessage,
331
+ errormessage,
332
+ showToast,
333
+ datasource,
334
+ binddataset,
335
+ onSuccess,
336
+ onError,
337
+ onRowdelete,
338
+ isServerSidePagination: isServerSidePagination(),
339
+ listener,
340
+ widgetName: name
341
+ }
342
+ );
343
+ const { renderFormWidget } = useFormWidget({
344
+ listener
345
+ });
346
+ const cellState = useCellState(name);
347
+ const syncSelectedItemsImplRef = useRef(null);
348
+ const onSyncSelectedItems = useCallback(
349
+ (ids) => {
350
+ var _a2;
351
+ return (_a2 = syncSelectedItemsImplRef.current) == null ? void 0 : _a2.call(syncSelectedItemsImplRef, ids);
352
+ },
353
+ []
354
+ );
355
+ const {
356
+ initialPage,
357
+ initialPageSize,
358
+ initialActualPageSize,
359
+ initialSearchState,
360
+ initialSortState
361
+ } = useMemo(() => {
362
+ var _a2;
281
363
  if (navigation === "Scroll") {
282
364
  return {
283
365
  initialPage: 1,
284
366
  initialPageSize: pagesize,
285
- initialActualPageSize: undefined,
286
- initialSearchState: undefined,
287
- initialSortState: undefined
367
+ initialActualPageSize: void 0,
368
+ initialSearchState: void 0,
369
+ initialSortState: void 0
288
370
  };
289
371
  }
290
- var persisted = (0, _utils.getTableState)(name, effectiveStateHandler);
291
- var sortedPageSizeOptions = (pagesizeoptions || "").split(",").map(function (v) {
292
- return Number(v.trim());
293
- }).filter(function (n) {
294
- return !Number.isNaN(n);
295
- }).sort(function (a, b) {
296
- return a - b;
297
- });
298
- var hasExplicitPersistedPageSize = persisted != null && persisted.pagesize !== undefined && persisted.pagesize !== null;
299
-
300
- // Align with Angular TableComponent.setDefaultPageSize: when allowpagesizechange is on
301
- // and there is no persisted pagesize, use the smallest pagesize option (not design-time pagesize).
302
- var defaultPageSizeFromOptions = allowpagesizechange && sortedPageSizeOptions.length > 0 && !hasExplicitPersistedPageSize ? sortedPageSizeOptions[0] : 20;
303
-
304
- // Determine the actual page size (original datasource page size)
305
- var actualPageSize;
306
- if ((persisted === null || persisted === void 0 ? void 0 : persisted.actualpagesize) !== undefined) {
307
- // If we have a persisted actualPageSize, use it (it should never change)
372
+ const persisted = getTableState(name, effectiveStateHandler);
373
+ const sortedPageSizeOptions = (pagesizeoptions || "").split(",").map((v) => Number(v.trim())).filter((n) => !Number.isNaN(n)).sort((a, b) => a - b);
374
+ const hasExplicitPersistedPageSize = persisted != null && persisted.pagesize !== void 0 && persisted.pagesize !== null;
375
+ const defaultPageSizeFromOptions = allowpagesizechange && sortedPageSizeOptions.length > 0 && !hasExplicitPersistedPageSize ? sortedPageSizeOptions[0] : 20;
376
+ let actualPageSize;
377
+ if ((persisted == null ? void 0 : persisted.actualpagesize) !== void 0) {
308
378
  actualPageSize = persisted.actualpagesize;
309
- } else if (datasource !== null && datasource !== void 0 && (_datasource$paginatio = datasource.pagination) !== null && _datasource$paginatio !== void 0 && _datasource$paginatio.size) {
310
- // Otherwise, if this is the first load, capture it from datasource
379
+ } else if ((_a2 = datasource == null ? void 0 : datasource.pagination) == null ? void 0 : _a2.size) {
311
380
  actualPageSize = datasource.pagination.size;
312
- } else if (datasource !== null && datasource !== void 0 && datasource.maxResults) {
313
- // Fallback to maxResults if available
381
+ } else if (datasource == null ? void 0 : datasource.maxResults) {
314
382
  actualPageSize = datasource.maxResults;
315
383
  }
316
384
  if (persisted) {
317
- // Check if there's an active filter/search state
318
- var hasActiveFilter = persisted.search && persisted.search.length > 0;
319
-
320
- // If there's an active filter, don't restore pagination - start from page 1
321
- // The server will return new filtered data, so old pagination is invalid
322
- var restoredPage = hasActiveFilter ? 1 : persisted.pagination || 1;
323
- var persistedPageSize = hasExplicitPersistedPageSize ? persisted.pagesize : defaultPageSizeFromOptions !== null && defaultPageSizeFromOptions !== void 0 ? defaultPageSizeFromOptions : pagesize;
324
-
325
- // Set datasource maxResults if we have a persisted pageSize and datasource
326
- if (isServerSidePagination() && datasource && datasource.maxResults !== undefined && hasExplicitPersistedPageSize) {
385
+ const hasActiveFilter = persisted.search && persisted.search.length > 0;
386
+ const restoredPage = hasActiveFilter ? 1 : persisted.pagination || 1;
387
+ const persistedPageSize = hasExplicitPersistedPageSize ? persisted.pagesize : defaultPageSizeFromOptions != null ? defaultPageSizeFromOptions : pagesize;
388
+ if (isServerSidePagination() && datasource && datasource.maxResults !== void 0 && hasExplicitPersistedPageSize) {
327
389
  datasource.maxResults = persistedPageSize;
328
390
  }
329
391
  return {
330
392
  initialPage: restoredPage,
331
393
  initialPageSize: persistedPageSize,
332
394
  initialActualPageSize: actualPageSize,
333
- initialSearchState: persisted.search || undefined,
334
- initialSortState: persisted.sort || undefined
395
+ initialSearchState: persisted.search || void 0,
396
+ initialSortState: persisted.sort || void 0
335
397
  };
336
398
  }
337
- var initialPageSize = defaultPageSizeFromOptions !== undefined ? defaultPageSizeFromOptions : actualPageSize || pagesize;
399
+ const initialPageSize2 = allowpagesizechange ? defaultPageSizeFromOptions != null ? defaultPageSizeFromOptions : actualPageSize : pagesize;
338
400
  return {
339
401
  initialPage: 1,
340
- initialPageSize: initialPageSize,
402
+ initialPageSize: initialPageSize2,
341
403
  initialActualPageSize: pagesize,
342
- initialSearchState: undefined,
343
- initialSortState: undefined
404
+ initialSearchState: void 0,
405
+ initialSortState: void 0
344
406
  };
345
- }, [name, effectiveStateHandler, pagesize, isServerSidePagination(), datasource, navigation]),
346
- initialPage = _useMemo.initialPage,
347
- initialPageSize = _useMemo.initialPageSize,
348
- initialActualPageSize = _useMemo.initialActualPageSize,
349
- initialSearchState = _useMemo.initialSearchState,
350
- initialSortState = _useMemo.initialSortState;
351
-
352
- // Create a ref to hold the table instance
353
- var tableRef = _react["default"].useRef(null);
354
-
355
- // Create a ref to hold the table container DOM element
356
- var tableContainerRef = _react["default"].useRef(null);
357
-
358
- // Track previous page index to detect actual page changes
359
- var prevPageIndexRef = (0, _react.useRef)(-1);
360
-
361
- // Use pagination state hook - manages controlled pagination state
362
- var _usePaginationState = (0, _hooks.usePaginationState)({
363
- initialPage: initialPage,
364
- initialPageSize: initialPageSize,
365
- editmode: editmode,
366
- internalDataset: internalDataset,
367
- datasource: datasource,
407
+ }, [name, effectiveStateHandler, pagesize, isServerSidePagination(), datasource, navigation]);
408
+ const tableRef = React.useRef(null);
409
+ const tableContainerRef = React.useRef(null);
410
+ const prevPageIndexRef = useRef(-1);
411
+ const {
412
+ paginationState,
413
+ setPaginationState,
414
+ handlePaginationChange,
415
+ handlePageSizeChange: handlePageSizeChangeBase
416
+ } = usePaginationState({
417
+ initialPage,
418
+ initialPageSize,
419
+ editmode,
420
+ internalDataset,
421
+ datasource,
368
422
  isServerSidePagination: isServerSidePagination()
369
- }),
370
- paginationState = _usePaginationState.paginationState,
371
- setPaginationState = _usePaginationState.setPaginationState,
372
- handlePaginationChange = _usePaginationState.handlePaginationChange,
373
- handlePageSizeChangeBase = _usePaginationState.handlePageSizeChange;
374
-
375
- // Multiselect is only valid when editmode is "quickedit" or "inline"
376
- var effectiveMultiselect = multiselect;
377
-
378
- // Use row selection hook
379
- var _useRowSelection = (0, _hooks.useRowSelection)({
380
- radioselect: radioselect,
423
+ });
424
+ const effectiveMultiselect = multiselect;
425
+ const {
426
+ selectedRowIds,
427
+ useMultiSelect,
428
+ useRadioSelect,
429
+ handleRadioSelection,
430
+ handleMultiSelection,
431
+ handleSelectAll,
432
+ handleRowSelectionClick,
433
+ isRowSelected
434
+ } = useRowSelection({
435
+ radioselect,
381
436
  multiselect: effectiveMultiselect,
382
- gridfirstrowselect: gridfirstrowselect,
383
- internalDataset: internalDataset,
384
- cellState: cellState,
385
- name: name,
437
+ gridfirstrowselect,
438
+ internalDataset,
439
+ cellState,
440
+ name,
386
441
  statehandler: effectiveStateHandler,
387
- initialActualPageSize: initialActualPageSize,
388
- getTableState: function getTableState() {
389
- return tableRef.current ? {
390
- currentPage: tableRef.current.getState().pagination.pageIndex + 1,
391
- currentPageSize: tableRef.current.getState().pagination.pageSize
392
- } : {
393
- currentPage: 1,
394
- currentPageSize: initialPageSize
395
- };
396
- },
397
- onRowselect: onRowselect,
398
- onRowdeselect: onRowdeselect,
399
- listener: listener,
400
- navigation: navigation,
401
- onSyncSelectedItems: onSyncSelectedItems
402
- }),
403
- selectedRowIds = _useRowSelection.selectedRowIds,
404
- useMultiSelect = _useRowSelection.useMultiSelect,
405
- useRadioSelect = _useRowSelection.useRadioSelect,
406
- handleRadioSelection = _useRowSelection.handleRadioSelection,
407
- handleMultiSelection = _useRowSelection.handleMultiSelection,
408
- handleSelectAll = _useRowSelection.handleSelectAll,
409
- handleRowSelectionClick = _useRowSelection.handleRowSelectionClick,
410
- isRowSelected = _useRowSelection.isRowSelected;
411
-
412
- // Use table state hook
413
- var _useTableState = (0, _hooks.useTableState)({
442
+ initialActualPageSize,
443
+ getTableState: () => tableRef.current ? {
444
+ currentPage: tableRef.current.getState().pagination.pageIndex + 1,
445
+ currentPageSize: tableRef.current.getState().pagination.pageSize
446
+ } : { currentPage: 1, currentPageSize: initialPageSize },
447
+ onRowselect,
448
+ onRowdeselect,
449
+ listener,
450
+ navigation,
451
+ onSyncSelectedItems
452
+ });
453
+ const { activeRowIds, setActiveRow, handleRowActiveClick, isRowActive } = useTableState({
414
454
  editMode: editmode,
415
- radioselect: radioselect,
455
+ radioselect,
416
456
  multiselect: effectiveMultiselect
417
- }),
418
- activeRowIds = _useTableState.activeRowIds,
419
- setActiveRow = _useTableState.setActiveRow,
420
- handleRowActiveClick = _useTableState.handleRowActiveClick,
421
- isRowActive = _useTableState.isRowActive;
422
-
423
- // Sync activeRowIds with selectedRowIds when selection modes are active
424
- // This ensures that when rows are selected/deselected, the active state follows
425
- (0, _react.useEffect)(function () {
426
- if (useRadioSelect || useMultiSelect) {
427
- setActiveRow(selectedRowIds);
428
- }
429
- }, [selectedRowIds, useRadioSelect, useMultiSelect, setActiveRow]);
430
-
431
- // Use dynamic columns hook to generate columns from data when no children are provided.
432
- // Use the raw dataset prop (not internalDataset) so column structure (keys/schema) is
433
- // derived from the actual API response — even when all values are empty strings,
434
- // removeEmptyRecords would otherwise wipe out internalDataset and leave dynamicColumns empty.
435
- var _useDynamicColumns = (0, _hooks.useDynamicColumns)({
457
+ });
458
+ useEffect(() => {
459
+ if (useRadioSelect || useMultiSelect) {
460
+ setActiveRow(selectedRowIds);
461
+ }
462
+ }, [selectedRowIds, useRadioSelect, useMultiSelect, setActiveRow]);
463
+ const { dynamicColumns, isDynamicTable } = useDynamicColumns({
436
464
  dataset: dataset || [],
437
- children: children,
438
- listener: listener
439
- }),
440
- dynamicColumns = _useDynamicColumns.dynamicColumns,
441
- isDynamicTable = _useDynamicColumns.isDynamicTable;
442
-
443
- // Parse table structure from children using utilities
444
- var _useMemo2 = (0, _react.useMemo)(function () {
445
- var allTableActions = (0, _utils.parseTableActions)(children);
446
- var headerActions = allTableActions.filter(function (action) {
447
- var position = action.position || "footer";
465
+ children,
466
+ listener
467
+ });
468
+ const {
469
+ wmTableColumns,
470
+ tableStructure,
471
+ rowActions,
472
+ headerActions,
473
+ footerActions,
474
+ rowExpansionConfig
475
+ } = useMemo(() => {
476
+ const allTableActions = parseTableActions(children);
477
+ const headerActions2 = allTableActions.filter((action) => {
478
+ const position = action.position || "footer";
448
479
  return position === "header" || position.includes("header");
449
480
  });
450
- var footerActions = allTableActions.filter(function (action) {
451
- var position = action.position || "footer";
481
+ const footerActions2 = allTableActions.filter((action) => {
482
+ const position = action.position || "footer";
452
483
  return position === "footer" || position.includes("footer") || !action.position;
453
484
  });
454
-
455
- // Parse table structure with groups support
456
- var structure = (0, _utils.parseTableStructureWithGroups)(children);
457
- var flatColumns = (0, _utils.flattenTableStructure)(structure);
458
-
459
- // Get static columns from children
460
- var staticColumns = (0, _utils.parseTableColumns)(children, internalDataset);
461
-
462
- // Check if we have groups in the structure
463
- var hasGroups = structure.some(function (item) {
464
- return "isGroup" in item && item.isGroup;
465
- });
466
-
467
- // Determine final columns:
468
- // - If groups exist, use flatColumns (from structure) to preserve group structure
469
- // - Otherwise, prefer static columns, then dynamic columns, then flat columns from structure
470
- var finalColumns = hasGroups && flatColumns.length > 0 ? flatColumns : staticColumns.length > 0 ? staticColumns : isDynamicTable && dynamicColumns.length > 0 ? dynamicColumns : flatColumns;
485
+ const structure = parseTableStructureWithGroups(children);
486
+ const flatColumns = flattenTableStructure(structure);
487
+ const staticColumns = parseTableColumns(children, internalDataset);
488
+ const hasGroups = structure.some((item) => "isGroup" in item && item.isGroup);
489
+ const finalColumns = hasGroups && flatColumns.length > 0 ? flatColumns : staticColumns.length > 0 ? staticColumns : isDynamicTable && dynamicColumns.length > 0 ? dynamicColumns : flatColumns;
471
490
  return {
472
491
  wmTableColumns: finalColumns,
473
492
  tableStructure: structure,
474
- rowActions: (0, _utils.parseTableRowActions)(children),
493
+ rowActions: parseTableRowActions(children),
475
494
  tableActions: allTableActions,
476
- headerActions: headerActions,
477
- footerActions: footerActions,
478
- rowExpansionConfig: (0, _utils.parseTableRowExpansion)(children)
495
+ headerActions: headerActions2,
496
+ footerActions: footerActions2,
497
+ rowExpansionConfig: parseTableRowExpansion(children)
479
498
  };
480
- }, [children, internalDataset, isDynamicTable, dynamicColumns]),
481
- wmTableColumns = _useMemo2.wmTableColumns,
482
- tableStructure = _useMemo2.tableStructure,
483
- rowActions = _useMemo2.rowActions,
484
- headerActions = _useMemo2.headerActions,
485
- footerActions = _useMemo2.footerActions,
486
- rowExpansionConfig = _useMemo2.rowExpansionConfig;
487
- var _useState2 = (0, _react.useState)(0),
488
- columnsVersion = _useState2[0],
489
- setColumnsVersion = _useState2[1];
490
- var _useState3 = (0, _react.useState)({}),
491
- columnOverrides = _useState3[0],
492
- setColumnOverrides = _useState3[1];
493
- var applyOverride = (0, _react.useCallback)(function (field, key, value) {
494
- setColumnOverrides(function (prev) {
495
- return _objectSpread(_objectSpread({}, prev), {}, (0, _defineProperty2["default"])({}, field, _objectSpread(_objectSpread({}, prev[field] || {}), {}, (0, _defineProperty2["default"])({}, key, value))));
496
- });
497
- }, []);
498
-
499
- /** Merge script-driven overrides (e.g. onBeforedatarender) onto WM column defs.
500
- * Dynamic columns may be regenerated as new objects with default show:true while columnOverrides persist. */
501
- var wmTableColumnsWithOverrides = (0, _react.useMemo)(function () {
502
- return wmTableColumns.map(function (col) {
503
- var f = col === null || col === void 0 ? void 0 : col.field;
504
- if (!f) return col;
505
- var o = columnOverrides[f];
506
- if (!o || Object.keys(o).length === 0) return col;
507
- return _objectSpread(_objectSpread({}, col), o);
508
- });
509
- }, [wmTableColumns, columnOverrides]);
510
-
511
- // Use unified table edit functionality
512
- var _useTableEdit = (0, _hooks.useTableEdit)({
499
+ }, [children, internalDataset, isDynamicTable, dynamicColumns]);
500
+ const [columnsVersion, setColumnsVersion] = useState(0);
501
+ const [columnOverrides, setColumnOverrides] = useState(
502
+ {}
503
+ );
504
+ const applyOverride = useCallback((field, key, value) => {
505
+ setColumnOverrides((prev) => __spreadProps(__spreadValues({}, prev), {
506
+ [field]: __spreadProps(__spreadValues({}, prev[field] || {}), { [key]: value })
507
+ }));
508
+ }, []);
509
+ const wmTableColumnsWithOverrides = useMemo(
510
+ () => wmTableColumns.map((col) => {
511
+ const f = col == null ? void 0 : col.field;
512
+ if (!f) return col;
513
+ const o = columnOverrides[f];
514
+ if (!o || Object.keys(o).length === 0) return col;
515
+ return __spreadValues(__spreadValues({}, col), o);
516
+ }),
517
+ [wmTableColumns, columnOverrides]
518
+ );
519
+ const {
520
+ editingRowId,
521
+ isRowEditing,
522
+ startEditing,
523
+ cancelEditing,
524
+ saveEditing,
525
+ renderEditableCell,
526
+ isAddingNewRow,
527
+ handleAddNewRowClick,
528
+ renderAddNewRow,
529
+ handleRowClick: handleTableEditRowClick,
530
+ handleKeyDown: handleTableEditKeyDown
531
+ } = useTableEdit({
513
532
  editMode: editmode,
514
- internalDataset: internalDataset,
515
- setInternalDataset: setInternalDataset,
533
+ internalDataset,
534
+ setInternalDataset,
516
535
  wmTableColumns: wmTableColumnsWithOverrides,
517
- cellState: cellState,
518
- renderFormWidget: renderFormWidget,
519
- listener: listener,
520
- onRowUpdate: onRowUpdate,
521
- onRowDelete: onRowDelete,
522
- onNewRowAdded: function onNewRowAdded(newRecord) {
523
- // Use shared navigation utility function
524
- (0, _utils.handleNewRowNavigation)(tableRef, newRecord, internalDataset);
536
+ cellState,
537
+ renderFormWidget,
538
+ listener,
539
+ onRowUpdate,
540
+ onRowDelete,
541
+ onNewRowAdded: (newRecord) => {
542
+ handleNewRowNavigation(tableRef, newRecord, internalDataset);
525
543
  },
526
- showrowindex: showrowindex,
527
- radioselect: radioselect,
544
+ showrowindex,
545
+ radioselect,
528
546
  multiselect: effectiveMultiselect,
529
- rowActions: rowActions,
530
- formposition: formposition,
531
- insertmessage: insertmessage,
532
- updatemessage: updatemessage,
533
- errormessage: errormessage,
534
- showToast: showToast,
547
+ rowActions,
548
+ formposition,
549
+ insertmessage,
550
+ updatemessage,
551
+ errormessage,
552
+ showToast,
535
553
  hasRowExpansion: rowExpansionConfig ? rowExpansionConfig.show : false,
536
554
  expansionPosition: rowExpansionConfig ? parseInt(String(rowExpansionConfig.position || "0"), 10) : 0,
537
- datasource: datasource,
538
- binddataset: binddataset,
539
- onSuccess: onSuccess,
540
- onError: onError,
541
- onRowinsert: onRowinsert,
542
- onRowupdate: onRowupdate,
543
- onRowdelete: onRowdelete,
544
- tableRef: tableRef,
555
+ datasource,
556
+ binddataset,
557
+ onSuccess,
558
+ onError,
559
+ onRowinsert,
560
+ onRowupdate,
561
+ onRowdelete,
562
+ tableRef,
545
563
  isServerSidePagination: isServerSidePagination(),
546
564
  tableName: name
547
- }),
548
- editingRowId = _useTableEdit.editingRowId,
549
- isRowEditing = _useTableEdit.isRowEditing,
550
- startEditing = _useTableEdit.startEditing,
551
- cancelEditing = _useTableEdit.cancelEditing,
552
- saveEditing = _useTableEdit.saveEditing,
553
- renderEditableCell = _useTableEdit.renderEditableCell,
554
- isAddingNewRow = _useTableEdit.isAddingNewRow,
555
- handleAddNewRowClick = _useTableEdit.handleAddNewRowClick,
556
- renderAddNewRow = _useTableEdit.renderAddNewRow,
557
- handleTableEditRowClick = _useTableEdit.handleRowClick,
558
- handleTableEditKeyDown = _useTableEdit.handleKeyDown;
559
-
560
- // Use the row handlers hook
561
- var _useRowHandlers = (0, _hooks.useRowHandlers)({
562
- editingRowId: editingRowId,
563
- isAddingNewRow: isAddingNewRow,
564
- handleRowSelectionClick: handleRowSelectionClick,
565
- handleTableEditRowClick: handleTableEditRowClick,
566
- handleRowActiveClick: handleRowActiveClick,
567
- onRowclick: onRowclick,
568
- useRadioSelect: useRadioSelect,
569
- useMultiSelect: useMultiSelect,
570
- isrowselectable: isrowselectable,
571
- listener: listener,
572
- name: name
573
- }),
574
- handleRowClick = _useRowHandlers.handleRowClick;
575
-
576
- // Effect to cancel editing when page changes
577
- (0, _react.useEffect)(function () {
578
- var currentPage = paginationState.pageIndex;
579
- // Skip on initial render (when prevPageIndexRef is still -1)
580
- // The ref is initialized to -1 and only updated after first data render
581
- if (prevPageIndexRef.current !== -1 && currentPage !== prevPageIndexRef.current && isAddingNewRow) {
582
- cancelEditing();
583
- }
584
- // Don't update the ref here - it's updated in the data render effect
585
- }, [paginationState.pageIndex, isAddingNewRow, cancelEditing]);
586
-
587
- // Track sorting and column sizing states
588
- var _useState4 = (0, _react.useState)(function () {
589
- // Convert initialSortState to TanStack Table sorting format
565
+ });
566
+ const { handleRowClick } = useRowHandlers({
567
+ editingRowId,
568
+ isAddingNewRow,
569
+ handleRowSelectionClick,
570
+ handleTableEditRowClick,
571
+ handleRowActiveClick,
572
+ onRowclick,
573
+ useRadioSelect,
574
+ useMultiSelect,
575
+ isrowselectable,
576
+ listener,
577
+ name
578
+ });
579
+ useEffect(() => {
580
+ const currentPage = paginationState.pageIndex;
581
+ if (prevPageIndexRef.current !== -1 && currentPage !== prevPageIndexRef.current && isAddingNewRow) {
582
+ cancelEditing();
583
+ }
584
+ }, [paginationState.pageIndex, isAddingNewRow, cancelEditing]);
585
+ const [sorting, setSorting] = useState(() => {
590
586
  if (initialSortState) {
591
- return [{
592
- id: initialSortState.field,
593
- desc: initialSortState.direction === "desc"
594
- }];
587
+ return [
588
+ {
589
+ id: initialSortState.field,
590
+ desc: initialSortState.direction === "desc"
591
+ }
592
+ ];
595
593
  }
596
594
  return [];
597
- }),
598
- sorting = _useState4[0],
599
- setSorting = _useState4[1];
600
- var _useState5 = (0, _react.useState)({}),
601
- columnSizing = _useState5[0],
602
- setColumnSizing = _useState5[1];
603
- var _useState6 = (0, _react.useState)(false),
604
- isResizing = _useState6[0],
605
- setIsResizing = _useState6[1];
606
-
607
- // Column selection handlers - just call the external callbacks
608
- // The class toggling is handled directly in TableHeaderComponent
609
- var handleColumnSelect = (0, _react.useCallback)(function (event, columnId, colDef, columnData) {
610
- if (onColumnselect) {
611
- onColumnselect(event, {
612
- field: columnId,
613
- colDef: colDef,
614
- data: columnData
615
- });
616
- }
617
- }, [onColumnselect]);
618
- var handleColumnDeselect = (0, _react.useCallback)(function (event, columnId, colDef, columnData) {
619
- if (onColumndeselect) {
620
- onColumndeselect(event, {
621
- field: columnId,
622
- colDef: colDef,
623
- data: columnData
624
- });
625
- }
626
- }, [onColumndeselect]);
627
-
628
- // Custom sorting change handler that resets page to 1 when sorting changes
629
- var handleSortingChange = (0, _react.useCallback)(function (updaterOrValue) {
630
- var newSorting = typeof updaterOrValue === "function" ? updaterOrValue(sorting) : updaterOrValue;
631
- setSorting(updaterOrValue);
632
- // Reset to first page when sorting changes
633
- setPaginationState(function (prev) {
634
- return _objectSpread(_objectSpread({}, prev), {}, {
635
- pageIndex: 0
636
- });
637
595
  });
638
-
639
- // Trigger onSort callback if provided
640
- if (onSort && newSorting.length > 0) {
641
- var _listener$Widgets;
642
- var sortData = {
643
- field: newSorting[0].id,
644
- direction: newSorting[0].desc ? "desc" : "asc"
645
- };
646
- onSort(null, listener === null || listener === void 0 || (_listener$Widgets = listener.Widgets) === null || _listener$Widgets === void 0 ? void 0 : _listener$Widgets[name], sortData);
647
- }
648
- }, [sorting, name]);
649
-
650
- // Use row expansion hook
651
- var _useRowExpansion = (0, _hooks.useRowExpansion)({
652
- rowExpansionConfig: rowExpansionConfig,
653
- internalDataset: internalDataset
654
- }),
655
- expandedRows = _useRowExpansion.expandedRows,
656
- toggleRowExpansion = _useRowExpansion.toggleRowExpansion,
657
- isRowExpanded = _useRowExpansion.isRowExpanded,
658
- registerRowDefInstance = _useRowExpansion.registerRowDefInstance,
659
- rowDefInstances = _useRowExpansion.rowDefInstances;
660
- var handleToggleRowExpansion = (0, _react.useCallback)(function (rowId, rowData) {
661
- if (listener !== null && listener !== void 0 && listener.onChange) {
662
- var selecteditem = (0, _utils.cleanRowData)(rowData);
663
- if (!(0, _lodashEs.isEqual)(prevSelectedRow.current, selecteditem)) {
664
- prevSelectedRow.current = selecteditem;
665
- listener.onChange(widgetRegistrationKey, {
666
- selecteditem: selecteditem
667
- });
668
- }
669
- }
670
- setTimeout(function () {
671
- return toggleRowExpansion(rowId, rowData);
672
- }, 0);
673
- }, [name]);
674
-
675
- // Use table columns hook to get column definitions
676
- var _useTableColumns = (0, _hooks.useTableColumns)({
677
- wmTableColumns: wmTableColumnsWithOverrides,
678
- columnsVersion: columnsVersion,
679
- rowActions: rowActions,
680
- listener: listener,
681
- deleteRecord: function deleteRecord(rowData) {
682
- return _deleteRecord(rowData, tableRef.current);
596
+ const [columnSizing, setColumnSizing] = useState({});
597
+ const [isResizing, setIsResizing] = useState(false);
598
+ const handleColumnSelect = useCallback(
599
+ (event, columnId, colDef, columnData) => {
600
+ if (onColumnselect) {
601
+ onColumnselect(event, { field: columnId, colDef, data: columnData });
602
+ }
683
603
  },
684
- showrowindex: showrowindex,
685
- editmode: editmode,
686
- isDynamicTable: isDynamicTable,
687
- renderEditableCell: renderEditableCell,
688
- isRowEditing: isRowEditing,
689
- startEditing: startEditing,
690
- cancelEditing: cancelEditing,
691
- saveEditing: saveEditing,
692
- editingRowId: editingRowId,
693
- cellState: cellState,
694
- isResizing: isResizing,
695
- handleRowClick: handleRowClick,
696
- handleRadioSelection: handleRadioSelection,
697
- handleMultiSelection: handleMultiSelection,
698
- useRadioSelect: useRadioSelect,
699
- useMultiSelect: useMultiSelect,
700
- isRowSelected: isRowSelected
701
- }),
702
- baseColumns = _useTableColumns.columns;
703
-
704
- // Add radio select or multiselect column if enabled and memoize with stable references
705
- var columns = (0, _react.useMemo)(function () {
706
- var selectionColumn = (0, _buildSelectionColumns.buildSelectionColumns)({
707
- useRadioSelect: useRadioSelect,
708
- useMultiSelect: useMultiSelect,
709
- selectedRowIds: selectedRowIds,
710
- handleRadioSelection: handleRadioSelection,
711
- handleMultiSelection: handleMultiSelection,
712
- handleSelectAll: handleSelectAll,
713
- internalDataset: internalDataset,
714
- radioselecttitle: radioselecttitle,
715
- radioselectarialabel: radioselectarialabel,
716
- multiselecttitle: multiselecttitle,
717
- multiselectarialabel: multiselectarialabel,
718
- tableName: name
719
- });
720
- if (selectionColumn) {
721
- return [selectionColumn].concat((0, _toConsumableArray2["default"])(baseColumns));
722
- }
723
- return baseColumns;
724
- }, [baseColumns, useRadioSelect, useMultiSelect, selectedRowIds, internalDataset, handleRadioSelection, handleMultiSelection, handleSelectAll, radioselecttitle, radioselectarialabel, multiselecttitle, multiselectarialabel, name]);
725
-
726
- //column proxy changes
727
- var columnsStateRef = (0, _react.useRef)(columns);
728
- var parentFormColumns = (listener === null || listener === void 0 || (_listener$Widgets2 = listener.Widgets) === null || _listener$Widgets2 === void 0 || (_listener$Widgets2 = _listener$Widgets2[parentForm]) === null || _listener$Widgets2 === void 0 ? void 0 : _listener$Widgets2.dataoutput) || {};
729
- var _useState7 = (0, _react.useState)([]),
730
- summaryRowDefs = _useState7[0],
731
- setSummaryRowDefs = _useState7[1];
732
- var _useState8 = (0, _react.useState)(false),
733
- summaryRowEnabled = _useState8[0],
734
- setSummaryRowEnabled = _useState8[1];
735
- var _useState9 = (0, _react.useState)([]),
736
- summaryRowDefObjects = _useState9[0],
737
- setSummaryRowDefObjects = _useState9[1];
738
- // Store column show property for summary rows: [rowIndex][columnKey] => show boolean
739
- var _useState0 = (0, _react.useState)({}),
740
- summaryRowColumnShow = _useState0[0],
741
- setSummaryRowColumnShow = _useState0[1];
742
- var setSummaryRowDef = (0, _react.useCallback)(function (columnKey, data, rowIndex, refresh, show) {
743
- setSummaryRowDefs(function (prev) {
744
- var newDefs = (0, _toConsumableArray2["default"])(prev);
745
- newDefs[rowIndex] = _objectSpread(_objectSpread({}, newDefs[rowIndex]), {}, (0, _defineProperty2["default"])({}, columnKey, data));
746
- return newDefs;
747
- });
748
- setSummaryRowDefObjects(function (prev) {
749
- var newObjs = (0, _toConsumableArray2["default"])(prev);
750
- newObjs[rowIndex] = _objectSpread(_objectSpread({}, newObjs[rowIndex]), {}, (0, _defineProperty2["default"])({}, columnKey, data));
751
- return newObjs;
604
+ [onColumnselect]
605
+ );
606
+ const handleColumnDeselect = useCallback(
607
+ (event, columnId, colDef, columnData) => {
608
+ if (onColumndeselect) {
609
+ onColumndeselect(event, { field: columnId, colDef, data: columnData });
610
+ }
611
+ },
612
+ [onColumndeselect]
613
+ );
614
+ const handleSortingChange = useCallback(
615
+ (updaterOrValue) => {
616
+ var _a2;
617
+ const newSorting = typeof updaterOrValue === "function" ? updaterOrValue(sorting) : updaterOrValue;
618
+ setSorting(updaterOrValue);
619
+ setPaginationState((prev) => __spreadProps(__spreadValues({}, prev), { pageIndex: 0 }));
620
+ if (onSort && newSorting.length > 0) {
621
+ const sortData = {
622
+ field: newSorting[0].id,
623
+ direction: newSorting[0].desc ? "desc" : "asc"
624
+ };
625
+ onSort(null, (_a2 = listener == null ? void 0 : listener.Widgets) == null ? void 0 : _a2[name], sortData);
626
+ }
627
+ },
628
+ [sorting, name]
629
+ );
630
+ const {
631
+ expandedRows,
632
+ toggleRowExpansion,
633
+ isRowExpanded,
634
+ registerRowDefInstance,
635
+ rowDefInstances
636
+ } = useRowExpansion({
637
+ rowExpansionConfig,
638
+ internalDataset
752
639
  });
753
- // Store column's show property
754
- if (show !== undefined) {
755
- setSummaryRowColumnShow(function (prev) {
756
- var newShow = _objectSpread({}, prev);
757
- if (!newShow[rowIndex]) {
758
- newShow[rowIndex] = {};
640
+ const handleToggleRowExpansion = useCallback(
641
+ (rowId, rowData) => {
642
+ if (listener == null ? void 0 : listener.onChange) {
643
+ const selecteditem = cleanRowData(rowData);
644
+ if (!isEqual(prevSelectedRow.current, selecteditem)) {
645
+ prevSelectedRow.current = selecteditem;
646
+ listener.onChange(widgetRegistrationKey, { selecteditem });
647
+ }
759
648
  }
760
- newShow[rowIndex] = _objectSpread(_objectSpread({}, newShow[rowIndex]), {}, (0, _defineProperty2["default"])({}, columnKey, show));
761
- return newShow;
649
+ setTimeout(() => toggleRowExpansion(rowId, rowData), 0);
650
+ },
651
+ [name]
652
+ );
653
+ const { columns: baseColumns } = useTableColumns({
654
+ wmTableColumns: wmTableColumnsWithOverrides,
655
+ columnsVersion,
656
+ rowActions,
657
+ listener,
658
+ deleteRecord: (rowData) => deleteRecord(rowData, tableRef.current),
659
+ showrowindex,
660
+ editmode,
661
+ isDynamicTable,
662
+ renderEditableCell,
663
+ isRowEditing,
664
+ startEditing,
665
+ cancelEditing,
666
+ saveEditing,
667
+ editingRowId,
668
+ cellState,
669
+ isResizing,
670
+ handleRowClick,
671
+ handleRadioSelection,
672
+ handleMultiSelection,
673
+ useRadioSelect,
674
+ useMultiSelect,
675
+ isRowSelected
676
+ });
677
+ const columns = useMemo(() => {
678
+ const selectionColumn = buildSelectionColumns({
679
+ useRadioSelect,
680
+ useMultiSelect,
681
+ selectedRowIds,
682
+ handleRadioSelection,
683
+ handleMultiSelection,
684
+ handleSelectAll,
685
+ internalDataset,
686
+ radioselecttitle,
687
+ radioselectarialabel,
688
+ multiselecttitle,
689
+ multiselectarialabel,
690
+ tableName: name
762
691
  });
763
- }
764
- setSummaryRowEnabled(true);
765
- }, []);
766
- var columnsProxy = (0, _react.useMemo)(function () {
767
- return (0, _columnProxy.createColumnsProxy)(wmTableColumns, applyOverride, setColumnsVersion, setSummaryRowDef);
768
- }, [wmTableColumns, applyOverride, setColumnsVersion, setSummaryRowDef]);
769
- var _useCustomExpressionC = (0, _hooks.useCustomExpressionColumns)({
692
+ if (selectionColumn) {
693
+ return [selectionColumn, ...baseColumns];
694
+ }
695
+ return baseColumns;
696
+ }, [
697
+ baseColumns,
698
+ useRadioSelect,
699
+ useMultiSelect,
700
+ selectedRowIds,
701
+ internalDataset,
702
+ handleRadioSelection,
703
+ handleMultiSelection,
704
+ handleSelectAll,
705
+ radioselecttitle,
706
+ radioselectarialabel,
707
+ multiselecttitle,
708
+ multiselectarialabel,
709
+ name
710
+ ]);
711
+ const columnsStateRef = useRef(columns);
712
+ const parentFormColumns = ((_f = (_e = listener == null ? void 0 : listener.Widgets) == null ? void 0 : _e[parentForm]) == null ? void 0 : _f.dataoutput) || {};
713
+ const [summaryRowDefs, setSummaryRowDefs] = useState([]);
714
+ const [summaryRowEnabled, setSummaryRowEnabled] = useState(false);
715
+ const [summaryRowDefObjects, setSummaryRowDefObjects] = useState([]);
716
+ const [summaryRowColumnShow, setSummaryRowColumnShow] = useState({});
717
+ const setSummaryRowDef = useCallback(
718
+ (columnKey, data, rowIndex, refresh2, show) => {
719
+ setSummaryRowDefs((prev) => {
720
+ const newDefs = [...prev];
721
+ newDefs[rowIndex] = __spreadProps(__spreadValues({}, newDefs[rowIndex]), { [columnKey]: data });
722
+ return newDefs;
723
+ });
724
+ setSummaryRowDefObjects((prev) => {
725
+ const newObjs = [...prev];
726
+ newObjs[rowIndex] = __spreadProps(__spreadValues({}, newObjs[rowIndex]), { [columnKey]: data });
727
+ return newObjs;
728
+ });
729
+ if (show !== void 0) {
730
+ setSummaryRowColumnShow((prev) => {
731
+ const newShow = __spreadValues({}, prev);
732
+ if (!newShow[rowIndex]) {
733
+ newShow[rowIndex] = {};
734
+ }
735
+ newShow[rowIndex] = __spreadProps(__spreadValues({}, newShow[rowIndex]), { [columnKey]: show });
736
+ return newShow;
737
+ });
738
+ }
739
+ setSummaryRowEnabled(true);
740
+ },
741
+ []
742
+ );
743
+ const columnsProxy = useMemo(
744
+ () => createColumnsProxy(wmTableColumns, applyOverride, setColumnsVersion, setSummaryRowDef),
745
+ [wmTableColumns, applyOverride, setColumnsVersion, setSummaryRowDef]
746
+ );
747
+ const {
748
+ customColumns,
749
+ customColumnsRevision,
750
+ customExpressionSignature,
751
+ mergeParsedCustomColumns
752
+ } = useCustomExpressionColumns({
770
753
  columnSource: columnsProxy,
771
- listenerRef: listenerRef
772
- }),
773
- customColumns = _useCustomExpressionC.customColumns,
774
- customColumnsRevision = _useCustomExpressionC.customColumnsRevision,
775
- customExpressionSignature = _useCustomExpressionC.customExpressionSignature,
776
- mergeParsedCustomColumns = _useCustomExpressionC.mergeParsedCustomColumns;
777
- columnsStateRef.current = columns;
778
- var columnsForTable = (0, _react.useMemo)(function () {
779
- var base = columnsStateRef.current || [];
780
- return base.map(function (col) {
781
- var field = col.accessorKey || col.id;
782
- var override = field ? columnOverrides[field] || {} : {};
783
- return _objectSpread(_objectSpread(_objectSpread({}, col), override), Object.keys(override).length > 0 ? {
784
- meta: _objectSpread(_objectSpread({}, col.meta), override)
785
- } : {});
754
+ listenerRef
786
755
  });
787
- }, [columns, columnOverrides, columnsVersion, editingRowId]);
788
-
789
- // Compute class signature from columns meta.className to trigger header and body re-render on class updates
790
- var ColClassSignature = (0, _react.useMemo)(function () {
791
- try {
792
- return (columnsForTable || []).map(function (col) {
793
- var m = col === null || col === void 0 ? void 0 : col.meta;
794
- return [m === null || m === void 0 ? void 0 : m.className, m === null || m === void 0 ? void 0 : m.colClass].map(function (v) {
795
- return String(v !== null && v !== void 0 ? v : "");
796
- }).join(":");
797
- }).join("|");
798
- } catch (_unused) {
799
- return "";
800
- }
801
- }, [columnsForTable]);
802
-
803
- // Use filter hook for filtering functionality
804
- var _useTableFilter = (0, _hooks.useTableFilter)({
756
+ columnsStateRef.current = columns;
757
+ const columnsForTable = useMemo(() => {
758
+ const base = columnsStateRef.current || [];
759
+ return base.map((col) => {
760
+ const field = col.accessorKey || col.id;
761
+ const override = field ? columnOverrides[field] || {} : {};
762
+ return __spreadValues(__spreadValues(__spreadValues({}, col), override), Object.keys(override).length > 0 ? { meta: __spreadValues(__spreadValues({}, col.meta), override) } : {});
763
+ });
764
+ }, [columns, columnOverrides, columnsVersion, editingRowId]);
765
+ const ColClassSignature = useMemo(() => {
766
+ try {
767
+ return (columnsForTable || []).map((col) => {
768
+ const m = col == null ? void 0 : col.meta;
769
+ return [m == null ? void 0 : m.className, m == null ? void 0 : m.colClass].map((v) => String(v != null ? v : "")).join(":");
770
+ }).join("|");
771
+ } catch (e) {
772
+ return "";
773
+ }
774
+ }, [columnsForTable]);
775
+ const {
776
+ globalFilter,
777
+ setGlobalFilter: setGlobalFilterOriginal,
778
+ globalSearchColumn,
779
+ setGlobalSearchColumn,
780
+ columnFilters,
781
+ setColumnFilter: setColumnFilterOriginal,
782
+ filteredData,
783
+ getFilterFields,
784
+ transformFilterFields
785
+ } = useTableFilter({
805
786
  filterMode: filtermode,
806
787
  columns: columnsForTable,
807
788
  dataset: (navigation === "Scroll" || navigation === "On-Demand") && accumulatedData.length > 0 ? accumulatedData : internalDataset,
808
- initialSearchState: initialSearchState
809
- }),
810
- globalFilter = _useTableFilter.globalFilter,
811
- setGlobalFilterOriginal = _useTableFilter.setGlobalFilter,
812
- globalSearchColumn = _useTableFilter.globalSearchColumn,
813
- setGlobalSearchColumn = _useTableFilter.setGlobalSearchColumn,
814
- columnFilters = _useTableFilter.columnFilters,
815
- setColumnFilterOriginal = _useTableFilter.setColumnFilter,
816
- filteredData = _useTableFilter.filteredData,
817
- getFilterFields = _useTableFilter.getFilterFields,
818
- transformFilterFields = _useTableFilter.transformFilterFields;
819
-
820
- // Wrap filter setters to reset page when filters change
821
- var setGlobalFilter = (0, _react.useCallback)(function (value) {
822
- setGlobalFilterOriginal(value);
823
- // Reset to first page when filter changes
824
- setPaginationState(function (prev) {
825
- return _objectSpread(_objectSpread({}, prev), {}, {
826
- pageIndex: 0
827
- });
789
+ initialSearchState
828
790
  });
829
- }, [setGlobalFilterOriginal]);
830
- var setColumnFilter = (0, _react.useCallback)(function (columnId, value, matchMode) {
831
- setColumnFilterOriginal(columnId, value, matchMode);
832
- // Reset to first page when filter changes
833
- setPaginationState(function (prev) {
834
- return _objectSpread(_objectSpread({}, prev), {}, {
835
- pageIndex: 0
791
+ const setGlobalFilter = useCallback(
792
+ (value) => {
793
+ setGlobalFilterOriginal(value);
794
+ setPaginationState((prev) => __spreadProps(__spreadValues({}, prev), { pageIndex: 0 }));
795
+ },
796
+ [setGlobalFilterOriginal]
797
+ );
798
+ const setColumnFilter = useCallback(
799
+ (columnId, value, matchMode) => {
800
+ setColumnFilterOriginal(columnId, value, matchMode);
801
+ setPaginationState((prev) => __spreadProps(__spreadValues({}, prev), { pageIndex: 0 }));
802
+ },
803
+ [setColumnFilterOriginal]
804
+ );
805
+ const resizeTimeoutRef = useRef(null);
806
+ const handleColumnSizingChange = useCallback(
807
+ (updaterOrValue) => {
808
+ setIsResizing((prev) => {
809
+ if (!prev) return true;
810
+ return prev;
811
+ });
812
+ setColumnSizing(updaterOrValue);
813
+ if (resizeTimeoutRef.current) {
814
+ clearTimeout(resizeTimeoutRef.current);
815
+ }
816
+ resizeTimeoutRef.current = setTimeout(() => {
817
+ setIsResizing(false);
818
+ }, 150);
819
+ },
820
+ []
821
+ );
822
+ const rowSelection = useMemo(() => {
823
+ const selection = {};
824
+ selectedRowIds.forEach((id) => {
825
+ selection[id] = true;
836
826
  });
827
+ return selection;
828
+ }, [selectedRowIds]);
829
+ const isServerSideSorting = isServerSidePagination();
830
+ const tableData = useMemo(() => {
831
+ if ((navigation === "Scroll" || navigation === "On-Demand") && accumulatedData.length > 0) {
832
+ return filtermode && !isServerSidePagination() ? filteredData : accumulatedData;
833
+ }
834
+ return filtermode && !isServerSidePagination() ? filteredData : internalDataset;
835
+ }, [
836
+ navigation,
837
+ accumulatedData,
838
+ filteredData,
839
+ internalDataset,
840
+ filtermode,
841
+ isServerSidePagination
842
+ ]);
843
+ const memoizedPagination = useMemo(
844
+ () => ({
845
+ pageSize: navigation === "None" ? (tableData == null ? void 0 : tableData.length) || 0 : paginationState.pageSize,
846
+ pageIndex: paginationState.pageIndex
847
+ }),
848
+ [navigation, tableData == null ? void 0 : tableData.length, paginationState.pageSize, paginationState.pageIndex]
849
+ );
850
+ const table = useReactTable({
851
+ data: tableData,
852
+ columns: columnsForTable,
853
+ state: {
854
+ sorting,
855
+ columnSizing,
856
+ rowSelection,
857
+ // Add row selection state
858
+ pagination: memoizedPagination
859
+ },
860
+ onSortingChange: handleSortingChange,
861
+ onColumnSizingChange: handleColumnSizingChange,
862
+ onPaginationChange: setPaginationState,
863
+ getCoreRowModel: getCoreRowModel(),
864
+ // Only use pagination model for client-side pagination
865
+ getPaginationRowModel: isServerSidePagination() ? void 0 : getPaginationRowModel(),
866
+ // Use sorted row model only for client-side sorting
867
+ getSortedRowModel: isServerSideSorting ? void 0 : getSortedRowModel(),
868
+ enableSorting: enablesort,
869
+ enableSortingRemoval: false,
870
+ autoResetPageIndex: false,
871
+ enableColumnResizing: true,
872
+ columnResizeMode: "onChange",
873
+ // Keep onChange for real-time visual feedback
874
+ enableRowSelection: true,
875
+ // Enable row selection
876
+ // Use manual pagination and sorting for server-side operations
877
+ manualPagination: isServerSidePagination(),
878
+ manualSorting: isServerSideSorting,
879
+ pageCount: isServerSidePagination() && ((_g = datasource == null ? void 0 : datasource.pagination) == null ? void 0 : _g.totalPages) ? datasource.pagination.totalPages : void 0,
880
+ getRowId: (row) => row._wmTableRowId || String(row.id) || uniqueId("row_")
837
881
  });
838
- }, [setColumnFilterOriginal]);
839
-
840
- // Use refs to track resizing state and debounce timer
841
- var resizeTimeoutRef = (0, _react.useRef)(null);
842
-
843
- // Memoize the column sizing change handler with smart resizing detection
844
- var handleColumnSizingChange = (0, _react.useCallback)(function (updaterOrValue) {
845
- // Only update resizing state if it's not already true
846
- setIsResizing(function (prev) {
847
- if (!prev) return true;
848
- return prev;
849
- });
850
- setColumnSizing(updaterOrValue);
851
-
852
- // Clear any existing timeout
853
- if (resizeTimeoutRef.current) {
854
- clearTimeout(resizeTimeoutRef.current);
855
- }
856
-
857
- // Set a debounced timeout to detect when resizing has stopped
858
- resizeTimeoutRef.current = setTimeout(function () {
859
- setIsResizing(false);
860
- }, 150); // 150ms delay to detect when user stops resizing
861
- }, []);
862
-
863
- // Create custom row selection state for TanStack Table
864
- // Uses unified selectedRowIds array - works for both radio select (1 item) and multiselect (multiple items)
865
- var rowSelection = (0, _react.useMemo)(function () {
866
- var selection = {};
867
- selectedRowIds.forEach(function (id) {
868
- selection[id] = true;
869
- });
870
- return selection;
871
- }, [selectedRowIds]);
872
-
873
- // Determine if we're using server-side sorting (same as server-side pagination)
874
- var isServerSideSorting = isServerSidePagination();
875
-
876
- // Use accumulated data for Scroll and On-Demand navigation, otherwise use normal dataset
877
- var tableData = (0, _react.useMemo)(function () {
878
- // For Scroll and On-Demand, use accumulated data from pagination
879
- if ((navigation === "Scroll" || navigation === "On-Demand") && accumulatedData.length > 0) {
880
- // For server-side pagination, don't apply client-side filtering as server already filters
881
- return filtermode && !isServerSidePagination() ? filteredData : accumulatedData;
882
- }
883
- // For server-side pagination, use internalDataset directly (already filtered by server)
884
- // Client-side filtering should only be applied for client-side pagination
885
- return filtermode && !isServerSidePagination() ? filteredData : internalDataset;
886
- }, [navigation, accumulatedData, filteredData, internalDataset, filtermode, isServerSidePagination]);
887
-
888
- // Memoize pagination options to prevent unnecessary re-renders
889
- var memoizedPagination = (0, _react.useMemo)(function () {
890
- return {
891
- pageSize: navigation === "None" ? (tableData === null || tableData === void 0 ? void 0 : tableData.length) || 0 : paginationState.pageSize,
892
- pageIndex: paginationState.pageIndex
893
- };
894
- }, [navigation, tableData === null || tableData === void 0 ? void 0 : tableData.length, paginationState.pageSize, paginationState.pageIndex]);
895
- var table = (0, _reactTable.useReactTable)({
896
- data: tableData,
897
- columns: columnsForTable,
898
- state: {
899
- sorting: sorting,
900
- columnSizing: columnSizing,
901
- rowSelection: rowSelection,
902
- // Add row selection state
903
- pagination: memoizedPagination
904
- },
905
- onSortingChange: handleSortingChange,
906
- onColumnSizingChange: handleColumnSizingChange,
907
- onPaginationChange: setPaginationState,
908
- getCoreRowModel: (0, _reactTable.getCoreRowModel)(),
909
- // Only use pagination model for client-side pagination
910
- getPaginationRowModel: isServerSidePagination() ? undefined : (0, _reactTable.getPaginationRowModel)(),
911
- // Use sorted row model only for client-side sorting
912
- getSortedRowModel: isServerSideSorting ? undefined : (0, _reactTable.getSortedRowModel)(),
913
- enableSorting: enablesort,
914
- enableSortingRemoval: false,
915
- autoResetPageIndex: false,
916
- enableColumnResizing: true,
917
- columnResizeMode: "onChange",
918
- // Keep onChange for real-time visual feedback
919
- enableRowSelection: true,
920
- // Enable row selection
921
- // Use manual pagination and sorting for server-side operations
922
- manualPagination: isServerSidePagination(),
923
- manualSorting: isServerSideSorting,
924
- pageCount: isServerSidePagination() && datasource !== null && datasource !== void 0 && (_datasource$paginatio2 = datasource.pagination) !== null && _datasource$paginatio2 !== void 0 && _datasource$paginatio2.totalPages ? datasource.pagination.totalPages : undefined,
925
- getRowId: function getRowId(row) {
926
- return row._wmTableRowId || String(row.id) || (0, _lodashEs.uniqueId)("row_");
927
- }
928
- });
929
-
930
- // Update the table ref
931
- tableRef.current = table;
932
-
933
- // Memoize filter fields to prevent unnecessary re-renders in useServerSideSorting
934
- var memoizedFilterFields = (0, _react.useMemo)(function () {
935
- if (!filtermode) return {};
936
- var searchObj = filtermode === "search" ? [{
937
- field: globalSearchColumn,
938
- value: globalFilter,
939
- matchMode: "anywhereignorecase",
940
- type: "string"
941
- }] : transformFilterFields(columnFilters);
942
- return getFilterFields(searchObj);
943
- }, [filtermode, globalSearchColumn, globalFilter, columnFilters, getFilterFields, transformFilterFields]);
944
-
945
- // Memoize logical operator
946
- var memoizedLogicalOp = (0, _react.useMemo)(function () {
947
- return filtermode === "search" && !globalSearchColumn ? "OR" : "AND";
948
- }, [filtermode, globalSearchColumn]);
949
-
950
- // Use server-side sorting hook to handle data fetching
951
- (0, _hooks.useServerSideSorting)({
952
- datasource: datasource,
953
- sorting: sorting,
954
- setInternalDataset: setInternalDataset,
955
- showToast: showToast,
956
- isServerSidePagination: isServerSidePagination(),
957
- pageIndex: table.getState().pagination.pageIndex,
958
- onError: onError,
959
- onBeforefilter: onBeforefilter,
960
- filterFields: memoizedFilterFields,
961
- logicalOp: memoizedLogicalOp,
962
- listener: listener,
963
- name: name
964
- });
965
-
966
- // Panel structure management
967
- var _usePanelStructure = (0, _hooks.usePanelStructure)({
968
- title: title,
969
- subheading: subheading,
970
- iconclass: iconclass,
971
- exportformat: exportformat,
972
- headerActions: headerActions,
973
- footerActions: footerActions,
974
- shownavigation: shownavigation,
975
- onDemandLoad: onDemandLoad,
976
- internalDataset: internalDataset,
977
- pagesize: pagesize,
978
- allowpagesizechange: allowpagesizechange,
979
- datasource: datasource,
980
- showrecordcount: showrecordcount
981
- }),
982
- showPanelHeading = _usePanelStructure.showPanelHeading,
983
- showPagination = _usePanelStructure.showPagination;
984
-
985
- // Callback: when pagination widget is ready, set table.dataNavigator = pagination widget proxy
986
- var handlePaginationWidgetReady = (0, _react.useCallback)(function (paginationWidget) {
987
- var _listener$Widgets3;
988
- if (name && listener !== null && listener !== void 0 && (_listener$Widgets3 = listener.Widgets) !== null && _listener$Widgets3 !== void 0 && _listener$Widgets3[name]) {
989
- listener.Widgets[name].dataNavigator = paginationWidget;
990
- }
991
- }, [name, listener]);
992
-
993
- // Memoize sortInfo for export to prevent unnecessary re-renders
994
- var sortInfoForExport = (0, _react.useMemo)(function () {
995
- if (sorting.length > 0) {
996
- return {
997
- field: sorting[0].id,
998
- direction: sorting[0].desc ? "desc" : "asc"
999
- };
1000
- }
1001
- return undefined;
1002
- }, [sorting]);
1003
-
1004
- // Update grid edit mode (includes inline editing and add new row)
1005
- var isGridEditModeComplete = isAddingNewRow || editingRowId !== null;
1006
-
1007
- // Generate spacing-related classes based on spacing prop
1008
- var spacingClasses = (0, _utils.getSpacingClasses)(spacing);
1009
-
1010
- // ==================== STATE MANAGEMENT ====================
1011
- // Prepare filter data based on filter mode - always in array format
1012
- var filterDataForState = (0, _react.useMemo)(function () {
1013
- if (!filtermode) return undefined;
1014
- if (filtermode === "search") {
1015
- if (globalFilter || globalSearchColumn) {
1016
- // Find column type for the selected search column
1017
- var columnType = globalSearchColumn ? function (_col$meta, _col$meta2) {
1018
- var col = (0, _lodashEs.find)(columnsForTable, function (c) {
1019
- var column = c;
1020
- return column.accessorKey === globalSearchColumn || column.id === globalSearchColumn;
1021
- });
1022
- return (col === null || col === void 0 || (_col$meta = col.meta) === null || _col$meta === void 0 ? void 0 : _col$meta.type) || (col === null || col === void 0 || (_col$meta2 = col.meta) === null || _col$meta2 === void 0 ? void 0 : _col$meta2.editinputtype) || "string";
1023
- }() : "string";
1024
- return [{
1025
- field: globalSearchColumn || "",
882
+ tableRef.current = table;
883
+ const memoizedFilterFields = useMemo(() => {
884
+ if (!filtermode) return {};
885
+ const searchObj = filtermode === "search" ? [
886
+ {
887
+ field: globalSearchColumn,
1026
888
  value: globalFilter,
1027
889
  matchMode: "anywhereignorecase",
1028
- type: columnType
1029
- }];
1030
- }
1031
- } else if (filtermode === "multicolumn") {
1032
- var activeFilters = Object.entries(columnFilters).filter(function (_ref) {
1033
- var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
1034
- _ = _ref2[0],
1035
- filter = _ref2[1];
1036
- return filter.value;
1037
- }).map(function (_ref3) {
1038
- var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
1039
- field = _ref4[0],
1040
- filter = _ref4[1];
1041
- // Find column type for each field
1042
- var columnType = function (_col$meta3, _col$meta4) {
1043
- var col = (0, _lodashEs.find)(columnsForTable, function (c) {
1044
- var column = c;
1045
- return column.accessorKey === field || column.id === field;
1046
- });
1047
- return (col === null || col === void 0 || (_col$meta3 = col.meta) === null || _col$meta3 === void 0 ? void 0 : _col$meta3.type) || (col === null || col === void 0 || (_col$meta4 = col.meta) === null || _col$meta4 === void 0 ? void 0 : _col$meta4.editinputtype) || "string";
1048
- }();
890
+ type: "string"
891
+ }
892
+ ] : transformFilterFields(columnFilters);
893
+ return getFilterFields(searchObj);
894
+ }, [
895
+ filtermode,
896
+ globalSearchColumn,
897
+ globalFilter,
898
+ columnFilters,
899
+ getFilterFields,
900
+ transformFilterFields
901
+ ]);
902
+ const memoizedLogicalOp = useMemo(() => {
903
+ return filtermode === "search" && !globalSearchColumn ? "OR" : "AND";
904
+ }, [filtermode, globalSearchColumn]);
905
+ useServerSideSorting({
906
+ datasource,
907
+ sorting,
908
+ setInternalDataset,
909
+ showToast,
910
+ isServerSidePagination: isServerSidePagination(),
911
+ pageIndex: table.getState().pagination.pageIndex,
912
+ onError,
913
+ onBeforefilter,
914
+ filterFields: memoizedFilterFields,
915
+ logicalOp: memoizedLogicalOp,
916
+ listener,
917
+ name
918
+ });
919
+ const { showPanelHeading, showPagination } = usePanelStructure({
920
+ title,
921
+ subheading,
922
+ iconclass,
923
+ exportformat,
924
+ headerActions,
925
+ footerActions,
926
+ shownavigation,
927
+ onDemandLoad,
928
+ internalDataset,
929
+ pagesize,
930
+ allowpagesizechange,
931
+ datasource,
932
+ showrecordcount
933
+ });
934
+ const handlePaginationWidgetReady = useCallback(
935
+ (paginationWidget) => {
936
+ var _a2;
937
+ if (name && ((_a2 = listener == null ? void 0 : listener.Widgets) == null ? void 0 : _a2[name])) {
938
+ listener.Widgets[name].dataNavigator = paginationWidget;
939
+ }
940
+ },
941
+ [name, listener]
942
+ );
943
+ const sortInfoForExport = useMemo(() => {
944
+ if (sorting.length > 0) {
1049
945
  return {
1050
- field: field,
1051
- value: filter.value,
1052
- matchMode: filter.matchMode,
1053
- type: columnType
946
+ field: sorting[0].id,
947
+ direction: sorting[0].desc ? "desc" : "asc"
1054
948
  };
1055
- });
1056
- return activeFilters.length > 0 ? activeFilters : undefined;
1057
- }
1058
- return undefined;
1059
- }, [filtermode, globalFilter, globalSearchColumn, columnFilters, columnsForTable]);
1060
-
1061
- // Convert TanStack Table sorting state to our format
1062
- var sortDataForState = (0, _react.useMemo)(function () {
1063
- if (sorting.length > 0) {
1064
- var firstSort = sorting[0]; // We only support single column sorting for state persistence
1065
- return {
1066
- field: firstSort.id,
1067
- direction: firstSort.desc ? "desc" : "asc"
1068
- };
1069
- }
1070
- return undefined;
1071
- }, [sorting]);
1072
- var stateManager = (0, _hooks.useTableStateManager)({
1073
- name: name,
1074
- storage: effectiveStateHandler,
1075
- currentPage: table.getState().pagination.pageIndex + 1,
1076
- currentPageSize: table.getState().pagination.pageSize,
1077
- selectedRowIds: selectedRowIds,
1078
- internalDataset: internalDataset,
1079
- initialActualPageSize: initialActualPageSize,
1080
- datasource: datasource,
1081
- multiselect: effectiveMultiselect,
1082
- filterData: filterDataForState,
1083
- sortData: sortDataForState,
1084
- navigation: navigation,
1085
- isStateConfigured: effectiveStateHandler !== undefined && effectiveStateHandler !== "none",
1086
- defaultPageSize: initialPageSize,
1087
- initialSortState: initialSortState,
1088
- initialFilterState: initialSearchState
1089
- });
1090
-
1091
- // Enhanced page size change handler with state persistence
1092
- var handlePageSizeChange = (0, _react.useCallback)(function (newPageSize) {
1093
- // Get old page size before updating for state persistence
1094
- var oldPageSize = paginationState.pageSize;
1095
-
1096
- // Call base handler from hook
1097
- handlePageSizeChangeBase(newPageSize);
1098
-
1099
- // Skip state persistence for Scroll navigation
1100
- if (navigation !== "Scroll") {
1101
- // Get current persisted state to access all selected items across pages
1102
- var currentPersistedState = (0, _utils.getTableState)(name, effectiveStateHandler);
1103
-
1104
- // Build the state for page size change
1105
- var newState = stateManager.getStateForPageSizeChange(newPageSize, currentPersistedState === null || currentPersistedState === void 0 ? void 0 : currentPersistedState.selectedItem, oldPageSize // Pass the old page size
1106
- );
1107
-
1108
- // Clear the existing state first to avoid merge issues with setWidgetState
1109
- (0, _utils.clearTableState)(name, effectiveStateHandler);
1110
-
1111
- // Only save if there's something to save (not in default state)
1112
- if (Object.keys(newState).length > 0) {
1113
- // If pagesize equals default, remove it from the state
1114
- if (newPageSize === initialPageSize) {
1115
- delete newState.pagesize;
1116
- }
1117
-
1118
- // Only save if there are still properties after removing default pagesize
1119
- if (Object.keys(newState).length > 0) {
1120
- (0, _utils.saveTableState)(name, effectiveStateHandler, newState);
949
+ }
950
+ return void 0;
951
+ }, [sorting]);
952
+ const isGridEditModeComplete = isAddingNewRow || editingRowId !== null;
953
+ const spacingClasses = getSpacingClasses(spacing);
954
+ const filterDataForState = useMemo(() => {
955
+ if (!filtermode) return void 0;
956
+ if (filtermode === "search") {
957
+ if (globalFilter || globalSearchColumn) {
958
+ const columnType = globalSearchColumn ? (() => {
959
+ var _a2, _b2;
960
+ const col = find(columnsForTable, (c) => {
961
+ const column = c;
962
+ return column.accessorKey === globalSearchColumn || column.id === globalSearchColumn;
963
+ });
964
+ return ((_a2 = col == null ? void 0 : col.meta) == null ? void 0 : _a2.type) || ((_b2 = col == null ? void 0 : col.meta) == null ? void 0 : _b2.editinputtype) || "string";
965
+ })() : "string";
966
+ return [
967
+ {
968
+ field: globalSearchColumn || "",
969
+ value: globalFilter,
970
+ matchMode: "anywhereignorecase",
971
+ type: columnType
972
+ }
973
+ ];
1121
974
  }
975
+ } else if (filtermode === "multicolumn") {
976
+ const activeFilters = Object.entries(columnFilters).filter(([_, filter]) => filter.value).map(([field, filter]) => {
977
+ const columnType = (() => {
978
+ var _a2, _b2;
979
+ const col = find(columnsForTable, (c) => {
980
+ const column = c;
981
+ return column.accessorKey === field || column.id === field;
982
+ });
983
+ return ((_a2 = col == null ? void 0 : col.meta) == null ? void 0 : _a2.type) || ((_b2 = col == null ? void 0 : col.meta) == null ? void 0 : _b2.editinputtype) || "string";
984
+ })();
985
+ return {
986
+ field,
987
+ value: filter.value,
988
+ matchMode: filter.matchMode,
989
+ type: columnType
990
+ };
991
+ });
992
+ return activeFilters.length > 0 ? activeFilters : void 0;
1122
993
  }
1123
- }
1124
- }, [handlePageSizeChangeBase, name, effectiveStateHandler, stateManager, initialPageSize, navigation]);
1125
-
1126
- // slectPageSize callback fix
1127
- var selectPageSize = (0, _react.useCallback)(function (pagesize) {
1128
- if (!allowpagesizechange && !pagesize) return;
1129
- var pageSizeOptions = (pagesizeoptions || "5,10,20,50,100").split(",").map(function (v) {
1130
- return Number(v.trim());
1131
- }).filter(function (n) {
1132
- return !Number.isNaN(n);
1133
- }).sort(function (a, b) {
1134
- return a - b;
1135
- });
1136
- if (pageSizeOptions.length === 0) return;
1137
- var nv = Number(pagesize);
1138
- var clamped = nv < pageSizeOptions[0] || nv > pageSizeOptions[pageSizeOptions.length - 1] || !pageSizeOptions.includes(nv) ? pageSizeOptions[0] : nv;
1139
- handlePageSizeChange(clamped);
1140
- // Broadcast so other tabs with same name (e.g. first/active tab) also get the script's value
1141
- if (effectiveStorageKey !== name) {
1142
- (0, _scriptPageSizeBroadcast.broadcastScriptPageSize)(name, effectiveStorageKey, clamped);
1143
- }
1144
- }, [allowpagesizechange, pagesizeoptions, handlePageSizeChange, effectiveStorageKey, name]);
1145
-
1146
- // Subscribe to script page size broadcast - when script calls selectPageSize on another tab,
1147
- // we receive the value and update (fixes first tab showing 20 when script targeted last tab)
1148
- (0, _react.useEffect)(function () {
1149
- if (effectiveStorageKey === name) return;
1150
- return (0, _scriptPageSizeBroadcast.subscribeToScriptPageSizeBroadcast)(name, effectiveStorageKey, function (value) {
1151
- // Receiving tab must set pageSize so remount uses correct initialPageSize
1152
- handlePageSizeChange(value);
994
+ return void 0;
995
+ }, [filtermode, globalFilter, globalSearchColumn, columnFilters, columnsForTable]);
996
+ const sortDataForState = useMemo(() => {
997
+ if (sorting.length > 0) {
998
+ const firstSort = sorting[0];
999
+ return {
1000
+ field: firstSort.id,
1001
+ direction: firstSort.desc ? "desc" : "asc"
1002
+ };
1003
+ }
1004
+ return void 0;
1005
+ }, [sorting]);
1006
+ const stateManager = useTableStateManager({
1007
+ name,
1008
+ storage: effectiveStateHandler,
1009
+ currentPage: table.getState().pagination.pageIndex + 1,
1010
+ currentPageSize: table.getState().pagination.pageSize,
1011
+ selectedRowIds,
1012
+ internalDataset,
1013
+ initialActualPageSize,
1014
+ datasource,
1015
+ multiselect: effectiveMultiselect,
1016
+ filterData: filterDataForState,
1017
+ sortData: sortDataForState,
1018
+ navigation,
1019
+ isStateConfigured: effectiveStateHandler !== void 0 && effectiveStateHandler !== "none",
1020
+ defaultPageSize: initialPageSize,
1021
+ initialSortState,
1022
+ initialFilterState: initialSearchState
1153
1023
  });
1154
- }, [name, effectiveStorageKey, handlePageSizeChange]);
1155
-
1156
- // Call data render callbacks for dynamic tables or when data changes
1157
- (0, _react.useEffect)(function () {
1158
- // For dynamic tables, call callbacks when we have data
1159
- // For static tables, call callbacks when we have both data and columns
1160
- var shouldCallCallbacks = isDynamicTable ? internalDataset.length > 0 : internalDataset.length > 0 && wmTableColumns.length > 0;
1161
- if (shouldCallCallbacks) {
1162
- var currentPageIndex = table.getState().pagination.pageIndex;
1163
-
1164
- // Update the tracked page index
1165
- prevPageIndexRef.current = currentPageIndex;
1166
-
1167
- // Only call callbacks if data has actually changed
1168
- if (!(0, _lodashEs.isEqual)(prevDatasetRef.current, internalDataset)) {
1169
- prevDatasetRef.current = internalDataset;
1170
-
1171
- // Call onBeforedatarender callback
1172
- if (onBeforedatarender) {
1173
- var _listener$Widgets4;
1174
- onBeforedatarender(listener === null || listener === void 0 || (_listener$Widgets4 = listener.Widgets) === null || _listener$Widgets4 === void 0 ? void 0 : _listener$Widgets4[name],
1175
- // widget reference
1176
- internalDataset,
1177
- // data
1178
- columnsProxy // columns (including dynamic ones)
1024
+ const handlePageSizeChange = useCallback(
1025
+ (newPageSize) => {
1026
+ const oldPageSize = paginationState.pageSize;
1027
+ handlePageSizeChangeBase(newPageSize);
1028
+ if (navigation !== "Scroll") {
1029
+ const currentPersistedState = getTableState(name, effectiveStateHandler);
1030
+ const newState = stateManager.getStateForPageSizeChange(
1031
+ newPageSize,
1032
+ currentPersistedState == null ? void 0 : currentPersistedState.selectedItem,
1033
+ oldPageSize
1034
+ // Pass the old page size
1179
1035
  );
1180
- var customExprKeys = Object.keys(columnsProxy).filter(function (key) {
1181
- return columnsProxy[key].customExpression;
1182
- });
1183
- if (customExprKeys.length > 0) {
1184
- void mergeParsedCustomColumns()["finally"](function () {});
1036
+ clearTableState(name, effectiveStateHandler);
1037
+ if (Object.keys(newState).length > 0) {
1038
+ if (newPageSize === initialPageSize) {
1039
+ delete newState.pagesize;
1040
+ }
1041
+ if (Object.keys(newState).length > 0) {
1042
+ saveTableState(name, effectiveStateHandler, newState);
1043
+ }
1185
1044
  }
1186
- var nextRows = internalDataset.map(function (r) {
1187
- return (0, _typeof2["default"])(r) === "object" && r !== null ? _objectSpread({}, r) : r;
1188
- });
1189
- setInternalDataset(nextRows);
1190
1045
  }
1191
-
1192
- // Schedule onDatarender callback after rendering is complete
1193
- // Use requestAnimationFrame to ensure DOM is fully painted
1194
- requestAnimationFrame(function () {
1195
- if (onDatarender) {
1196
- var _listener$Widgets5;
1197
- if (name && listener !== null && listener !== void 0 && listener.Widgets[name] && tableContainerRef.current) {
1198
- listener.Widgets[name].nativeElement = tableContainerRef.current;
1046
+ },
1047
+ [
1048
+ handlePageSizeChangeBase,
1049
+ name,
1050
+ effectiveStateHandler,
1051
+ stateManager,
1052
+ initialPageSize,
1053
+ navigation
1054
+ ]
1055
+ );
1056
+ const selectPageSize = useCallback(
1057
+ (pagesize2) => {
1058
+ if (!allowpagesizechange && !pagesize2) return;
1059
+ const pageSizeOptions = (pagesizeoptions || "5,10,20,50,100").split(",").map((v) => Number(v.trim())).filter((n) => !Number.isNaN(n)).sort((a, b) => a - b);
1060
+ if (pageSizeOptions.length === 0) return;
1061
+ const nv = Number(pagesize2);
1062
+ const clamped = nv < pageSizeOptions[0] || nv > pageSizeOptions[pageSizeOptions.length - 1] || !pageSizeOptions.includes(nv) ? pageSizeOptions[0] : nv;
1063
+ handlePageSizeChange(clamped);
1064
+ if (effectiveStorageKey !== name) {
1065
+ broadcastScriptPageSize(name, effectiveStorageKey, clamped);
1066
+ }
1067
+ },
1068
+ [allowpagesizechange, pagesizeoptions, handlePageSizeChange, effectiveStorageKey, name]
1069
+ );
1070
+ useEffect(() => {
1071
+ if (effectiveStorageKey === name) return;
1072
+ return subscribeToScriptPageSizeBroadcast(name, effectiveStorageKey, (value) => {
1073
+ handlePageSizeChange(value);
1074
+ });
1075
+ }, [name, effectiveStorageKey, handlePageSizeChange]);
1076
+ useEffect(() => {
1077
+ var _a2;
1078
+ const shouldCallCallbacks = isDynamicTable ? internalDataset.length > 0 : internalDataset.length > 0 && wmTableColumns.length > 0;
1079
+ if (shouldCallCallbacks) {
1080
+ const currentPageIndex = table.getState().pagination.pageIndex;
1081
+ prevPageIndexRef.current = currentPageIndex;
1082
+ if (!isEqual(prevDatasetRef.current, internalDataset)) {
1083
+ prevDatasetRef.current = internalDataset;
1084
+ if (onBeforedatarender) {
1085
+ onBeforedatarender(
1086
+ (_a2 = listener == null ? void 0 : listener.Widgets) == null ? void 0 : _a2[name],
1087
+ // widget reference
1088
+ internalDataset,
1089
+ // data
1090
+ columnsProxy
1091
+ // columns (including dynamic ones)
1092
+ );
1093
+ const customExprKeys = Object.keys(columnsProxy).filter(
1094
+ (key) => columnsProxy[key].customExpression
1095
+ );
1096
+ if (customExprKeys.length > 0) {
1097
+ void mergeParsedCustomColumns().finally(() => {
1098
+ });
1199
1099
  }
1200
- onDatarender(listener === null || listener === void 0 || (_listener$Widgets5 = listener.Widgets) === null || _listener$Widgets5 === void 0 ? void 0 : _listener$Widgets5[name],
1201
- // widget reference to match Angular format
1202
- {
1203
- $data: internalDataset,
1204
- data: internalDataset
1205
- } // match Angular's format with both $data and data
1100
+ const nextRows = internalDataset.map(
1101
+ (r) => typeof r === "object" && r !== null ? __spreadValues({}, r) : r
1206
1102
  );
1103
+ setInternalDataset(nextRows);
1207
1104
  }
1208
- });
1105
+ requestAnimationFrame(() => {
1106
+ var _a3;
1107
+ if (onDatarender) {
1108
+ if (name && (listener == null ? void 0 : listener.Widgets[name]) && tableContainerRef.current) {
1109
+ listener.Widgets[name].nativeElement = tableContainerRef.current;
1110
+ }
1111
+ onDatarender(
1112
+ (_a3 = listener == null ? void 0 : listener.Widgets) == null ? void 0 : _a3[name],
1113
+ // widget reference to match Angular format
1114
+ { $data: internalDataset, data: internalDataset }
1115
+ // match Angular's format with both $data and data
1116
+ );
1117
+ }
1118
+ });
1119
+ }
1209
1120
  }
1210
- }
1211
- }, [internalDataset, wmTableColumns, onBeforedatarender, onDatarender, name, isDynamicTable, table.getState().pagination.pageIndex, setInternalDataset, columnsProxy, mergeParsedCustomColumns]);
1212
-
1213
- // Re-parse when custom-expression markup signature changes, or when rows appear after empty dataset.
1214
- (0, _react.useEffect)(function () {
1215
- if (!onBeforedatarender) return;
1216
- if (internalDataset.length === 0) return;
1217
- void mergeParsedCustomColumns();
1218
- }, [customExpressionSignature, mergeParsedCustomColumns, onBeforedatarender, internalDataset.length]);
1219
- // Use table initialization hook
1220
- (0, _hooks.useTableInitialization)({
1221
- internalDataset: internalDataset,
1222
- wmTableColumns: wmTableColumnsWithOverrides,
1223
- cellState: cellState,
1224
- gridfirstrowselect: gridfirstrowselect,
1225
- useRadioSelect: useRadioSelect,
1226
- useMultiSelect: useMultiSelect,
1227
- setActiveRow: setActiveRow,
1228
- selectedRowIds: selectedRowIds,
1229
- formName: formName,
1230
- editmode: editmode,
1231
- activeRowIds: activeRowIds,
1232
- listener: listener
1233
- });
1234
-
1235
- // Use table effects hook for state persistence
1236
- var _useTableEffects = (0, _hooks.useTableEffects)({
1237
- name: name,
1238
- navigation: navigation,
1239
- datasource: datasource,
1240
- internalDataset: internalDataset,
1121
+ }, [
1122
+ internalDataset,
1123
+ wmTableColumns,
1124
+ onBeforedatarender,
1125
+ onDatarender,
1126
+ name,
1127
+ isDynamicTable,
1128
+ table.getState().pagination.pageIndex,
1129
+ setInternalDataset,
1130
+ columnsProxy,
1131
+ mergeParsedCustomColumns
1132
+ ]);
1133
+ useEffect(() => {
1134
+ if (!onBeforedatarender) return;
1135
+ if (internalDataset.length === 0) return;
1136
+ void mergeParsedCustomColumns();
1137
+ }, [
1138
+ customExpressionSignature,
1139
+ mergeParsedCustomColumns,
1140
+ onBeforedatarender,
1141
+ internalDataset.length
1142
+ ]);
1143
+ useTableInitialization({
1144
+ internalDataset,
1145
+ wmTableColumns: wmTableColumnsWithOverrides,
1146
+ cellState,
1147
+ gridfirstrowselect,
1148
+ useRadioSelect,
1149
+ useMultiSelect,
1150
+ setActiveRow,
1151
+ selectedRowIds,
1152
+ formName,
1153
+ editmode,
1154
+ activeRowIds,
1155
+ listener
1156
+ });
1157
+ const { restoredPageNumber, restoredSelectedIndices, setIsRestoringSelection } = useTableEffects({
1158
+ name,
1159
+ navigation,
1160
+ datasource,
1161
+ internalDataset,
1241
1162
  statehandler: effectiveStateHandler,
1242
- selectedRowIds: selectedRowIds,
1163
+ selectedRowIds,
1243
1164
  currentPage: table.getState().pagination.pageIndex + 1,
1244
1165
  // Convert to 1-based
1245
1166
  currentPageSize: table.getState().pagination.pageSize,
1246
- sorting: sorting,
1167
+ sorting,
1247
1168
  isGridEditMode: isGridEditModeComplete,
1248
- stateManager: stateManager,
1249
- initialActualPageSize: initialActualPageSize
1250
- }),
1251
- restoredPageNumber = _useTableEffects.restoredPageNumber,
1252
- restoredSelectedIndices = _useTableEffects.restoredSelectedIndices,
1253
- setIsRestoringSelection = _useTableEffects.setIsRestoringSelection;
1254
-
1255
- // Apply restored state
1256
- (0, _react.useEffect)(function () {
1257
- if (restoredPageNumber !== null && restoredPageNumber > 1) {
1258
- // Set the restored page (convert to 0-based index)
1259
- table.setPageIndex(restoredPageNumber - 1);
1260
- }
1261
- }, [restoredPageNumber, table]);
1262
-
1263
- // Track if we've already restored selection to avoid loops
1264
- var hasRestoredSelectionRef = (0, _react.useRef)(false);
1265
- (0, _react.useEffect)(function () {
1266
- if (restoredSelectedIndices.length > 0 && internalDataset.length > 0 && !hasRestoredSelectionRef.current) {
1267
- // Mark as restored to prevent running again
1268
- hasRestoredSelectionRef.current = true;
1269
-
1270
- // Set flag to prevent saving while restoring
1271
- setIsRestoringSelection(true);
1272
-
1273
- // Apply restored selections by converting indices to row IDs
1274
- if (useMultiSelect) {
1275
- // For multiselect, set all restored items by index
1276
- var _selectedRowIds = [];
1277
- restoredSelectedIndices.forEach(function (index) {
1278
- if (index >= 0 && index < internalDataset.length) {
1279
- var row = internalDataset[index];
1280
- if (row && row._wmTableRowId) {
1281
- handleMultiSelection(row._wmTableRowId, row, true);
1282
- // Collect all selected row IDs
1283
- _selectedRowIds.push(row._wmTableRowId);
1169
+ stateManager,
1170
+ initialActualPageSize
1171
+ });
1172
+ useEffect(() => {
1173
+ if (restoredPageNumber !== null && restoredPageNumber > 1) {
1174
+ table.setPageIndex(restoredPageNumber - 1);
1175
+ }
1176
+ }, [restoredPageNumber, table]);
1177
+ const hasRestoredSelectionRef = useRef(false);
1178
+ useEffect(() => {
1179
+ if (restoredSelectedIndices.length > 0 && internalDataset.length > 0 && !hasRestoredSelectionRef.current) {
1180
+ hasRestoredSelectionRef.current = true;
1181
+ setIsRestoringSelection(true);
1182
+ if (useMultiSelect) {
1183
+ const selectedRowIds2 = [];
1184
+ restoredSelectedIndices.forEach((index) => {
1185
+ if (index >= 0 && index < internalDataset.length) {
1186
+ const row = internalDataset[index];
1187
+ if (row && row._wmTableRowId) {
1188
+ handleMultiSelection(row._wmTableRowId, row, true);
1189
+ selectedRowIds2.push(row._wmTableRowId);
1190
+ }
1284
1191
  }
1192
+ });
1193
+ if (selectedRowIds2.length > 0) {
1194
+ setActiveRow(selectedRowIds2);
1285
1195
  }
1286
- });
1287
- // Set all selected rows as active
1288
- if (_selectedRowIds.length > 0) {
1289
- setActiveRow(_selectedRowIds);
1290
- }
1291
- } else {
1292
- // For radio select or default mode (single selection), only restore the first selection
1293
- var firstIndex = restoredSelectedIndices[0];
1294
- if (firstIndex >= 0 && firstIndex < internalDataset.length) {
1295
- var row = internalDataset[firstIndex];
1296
- if (row && row._wmTableRowId) {
1297
- handleRadioSelection(row._wmTableRowId, row);
1298
- // Also set as active row for single selection
1299
- setActiveRow(row._wmTableRowId);
1196
+ } else {
1197
+ const firstIndex = restoredSelectedIndices[0];
1198
+ if (firstIndex >= 0 && firstIndex < internalDataset.length) {
1199
+ const row = internalDataset[firstIndex];
1200
+ if (row && row._wmTableRowId) {
1201
+ handleRadioSelection(row._wmTableRowId, row);
1202
+ setActiveRow(row._wmTableRowId);
1203
+ }
1300
1204
  }
1301
1205
  }
1206
+ setTimeout(() => {
1207
+ setIsRestoringSelection(false);
1208
+ }, 0);
1302
1209
  }
1303
-
1304
- // Reset flag after restoration is complete
1305
- setTimeout(function () {
1306
- setIsRestoringSelection(false);
1307
- }, 0);
1308
- }
1309
- }, [restoredSelectedIndices, internalDataset, useMultiSelect, handleMultiSelection, handleRadioSelection, setIsRestoringSelection]);
1310
-
1311
- // Cleanup resize timeout on unmount and when component updates
1312
- (0, _react.useEffect)(function () {
1313
- var currentTimeout = resizeTimeoutRef.current;
1314
- return function () {
1315
- if (currentTimeout) {
1316
- clearTimeout(currentTimeout);
1317
- }
1318
- };
1319
- }, []);
1320
-
1321
- // Create wrapper functions for external API
1322
- var editRow = (0, _react.useCallback)(function (event, widget, row) {
1323
- if (!row || !row._wmTableRowId) {
1324
- console.warn("Invalid row data provided to editRow");
1325
- return;
1326
- }
1327
- startEditing(row, row._wmTableRowId);
1328
- }, [startEditing]);
1329
- var deleteRow = (0, _react.useCallback)(/*#__PURE__*/function () {
1330
- var _ref5 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(event, widget, row) {
1331
- var _listener$Widgets6, cleanedRow, rowIndex, result;
1332
- return _regenerator["default"].wrap(function _callee$(_context) {
1333
- while (1) switch (_context.prev = _context.next) {
1334
- case 0:
1335
- if (row) {
1336
- _context.next = 3;
1337
- break;
1338
- }
1339
- console.warn("Invalid row data provided to deleteRow");
1340
- return _context.abrupt("return");
1341
- case 3:
1342
- if (!onBeforerowdelete) {
1343
- _context.next = 11;
1344
- break;
1345
- }
1346
- cleanedRow = (0, _utils.cleanRowData)([row])[0];
1347
- rowIndex = internalDataset.findIndex(function (r) {
1348
- return r._wmTableRowId === row._wmTableRowId || r.id !== undefined && r.id === row.id;
1349
- });
1350
- _context.next = 8;
1351
- return onBeforerowdelete(event, listener === null || listener === void 0 || (_listener$Widgets6 = listener.Widgets) === null || _listener$Widgets6 === void 0 ? void 0 : _listener$Widgets6[name], cleanedRow, {
1352
- rowIndex: rowIndex,
1353
- data: cleanedRow
1354
- });
1355
- case 8:
1356
- result = _context.sent;
1357
- if (!(result === false)) {
1358
- _context.next = 11;
1359
- break;
1360
- }
1361
- return _context.abrupt("return");
1362
- case 11:
1363
- _deleteRecord(row, tableRef.current);
1364
- case 12:
1365
- case "end":
1366
- return _context.stop();
1210
+ }, [
1211
+ restoredSelectedIndices,
1212
+ internalDataset,
1213
+ useMultiSelect,
1214
+ handleMultiSelection,
1215
+ handleRadioSelection,
1216
+ setIsRestoringSelection
1217
+ ]);
1218
+ useEffect(() => {
1219
+ const currentTimeout = resizeTimeoutRef.current;
1220
+ return () => {
1221
+ if (currentTimeout) {
1222
+ clearTimeout(currentTimeout);
1367
1223
  }
1368
- }, _callee);
1369
- }));
1370
- return function (_x, _x2, _x3) {
1371
- return _ref5.apply(this, arguments);
1372
- };
1373
- }(), [_deleteRecord, onBeforerowdelete, listener, name, internalDataset]);
1374
-
1375
- // Refresh table data
1376
- var refresh = (0, _react.useCallback)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
1377
- var newData,
1378
- _datasource$paginatio3,
1379
- currentTable,
1380
- targetPage,
1381
- currentPageSize,
1382
- shouldNavigateToLastPage,
1383
- totalElements,
1384
- totalAfterAdd,
1385
- lastPage,
1386
- response,
1387
- dataWithIds,
1388
- _listener$Widgets7,
1389
- _args2 = arguments;
1390
- return _regenerator["default"].wrap(function _callee2$(_context2) {
1391
- while (1) switch (_context2.prev = _context2.next) {
1392
- case 0:
1393
- newData = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : false;
1394
- if (datasource) {
1395
- _context2.next = 4;
1396
- break;
1224
+ };
1225
+ }, []);
1226
+ const editRow = useCallback(
1227
+ (event, widget, row) => {
1228
+ if (!row || !row._wmTableRowId) {
1229
+ console.warn("Invalid row data provided to editRow");
1230
+ return;
1231
+ }
1232
+ startEditing(row, row._wmTableRowId);
1233
+ },
1234
+ [startEditing]
1235
+ );
1236
+ const deleteRow = useCallback(
1237
+ async (event, widget, row) => {
1238
+ var _a2;
1239
+ if (!row) {
1240
+ console.warn("Invalid row data provided to deleteRow");
1241
+ return;
1242
+ }
1243
+ if (onBeforerowdelete) {
1244
+ const cleanedRow = cleanRowData([row])[0];
1245
+ const rowIndex = internalDataset.findIndex(
1246
+ (r) => r._wmTableRowId === row._wmTableRowId || r.id !== void 0 && r.id === row.id
1247
+ );
1248
+ const result = await onBeforerowdelete(event, (_a2 = listener == null ? void 0 : listener.Widgets) == null ? void 0 : _a2[name], cleanedRow, {
1249
+ rowIndex,
1250
+ data: cleanedRow
1251
+ });
1252
+ if (result === false) {
1253
+ return;
1397
1254
  }
1255
+ }
1256
+ deleteRecord(row, tableRef.current);
1257
+ },
1258
+ [deleteRecord, onBeforerowdelete, listener, name, internalDataset]
1259
+ );
1260
+ const refresh = useCallback(
1261
+ async (newData = false) => {
1262
+ var _a2, _b2;
1263
+ if (!datasource) {
1398
1264
  console.warn("No datasource available for refresh");
1399
- return _context2.abrupt("return");
1400
- case 4:
1401
- _context2.prev = 4;
1402
- // Use tableRef.current to access the latest table instance
1403
- currentTable = tableRef.current;
1404
- if (currentTable) {
1405
- _context2.next = 9;
1406
- break;
1265
+ return;
1266
+ }
1267
+ try {
1268
+ const currentTable = tableRef.current;
1269
+ if (!currentTable) {
1270
+ console.warn("Table instance not available");
1271
+ return;
1407
1272
  }
1408
- console.warn("Table instance not available");
1409
- return _context2.abrupt("return");
1410
- case 9:
1411
- targetPage = currentTable.getState().pagination.pageIndex + 1;
1412
- currentPageSize = ((_datasource$paginatio3 = datasource.pagination) === null || _datasource$paginatio3 === void 0 ? void 0 : _datasource$paginatio3.size) || currentTable.getState().pagination.pageSize;
1413
- shouldNavigateToLastPage = false; // If newData is true and we have pagination metadata, calculate the last page
1273
+ let targetPage = currentTable.getState().pagination.pageIndex + 1;
1274
+ const currentPageSize = ((_a2 = datasource.pagination) == null ? void 0 : _a2.size) || currentTable.getState().pagination.pageSize;
1275
+ let shouldNavigateToLastPage = false;
1414
1276
  if (newData && datasource.pagination) {
1415
- totalElements = datasource.pagination.totalElements;
1416
- if (totalElements !== undefined && currentPageSize > 0) {
1417
- // Calculate the last page
1418
- // For example: 15 elements with page size 5 = 3 pages
1419
- // Adding 1 element makes it 16 elements = 4 pages (since page 3 is full)
1420
- totalAfterAdd = totalElements + 1;
1421
- lastPage = Math.ceil(totalAfterAdd / currentPageSize);
1277
+ const { totalElements } = datasource.pagination;
1278
+ if (totalElements !== void 0 && currentPageSize > 0) {
1279
+ const totalAfterAdd = totalElements + 1;
1280
+ const lastPage = Math.ceil(totalAfterAdd / currentPageSize);
1422
1281
  targetPage = lastPage;
1423
1282
  shouldNavigateToLastPage = true;
1424
1283
  }
1425
1284
  }
1426
-
1427
- // For server-side pagination, use datasource invoke
1428
- if (!isServerSidePagination()) {
1429
- _context2.next = 20;
1430
- break;
1431
- }
1432
- _context2.next = 16;
1433
- return (0, _crudHandlers.refreshDataSource)(datasource, {
1434
- page: targetPage,
1435
- pagesize: currentPageSize,
1436
- filterFields: memoizedFilterFields || {},
1437
- condition: memoizedLogicalOp
1438
- });
1439
- case 16:
1440
- response = _context2.sent;
1441
- // The datasource should update its data property automatically
1442
- // which will trigger a re-render through the dataset prop
1443
- if (response && response.data) {
1444
- dataWithIds = (0, _utils.addUniqueRowIds)(response.data);
1445
- setInternalDataset(dataWithIds);
1446
-
1447
- // Set the table to the last page AFTER data is loaded
1285
+ if (isServerSidePagination()) {
1286
+ const response = await refreshDataSource(datasource, {
1287
+ page: targetPage,
1288
+ pagesize: currentPageSize,
1289
+ filterFields: memoizedFilterFields || {},
1290
+ condition: memoizedLogicalOp
1291
+ });
1292
+ if (response && response.data) {
1293
+ const dataWithIds = addUniqueRowIds(response.data);
1294
+ setInternalDataset(dataWithIds);
1295
+ if (shouldNavigateToLastPage) {
1296
+ requestAnimationFrame(() => {
1297
+ currentTable.setPageIndex(targetPage);
1298
+ });
1299
+ }
1300
+ }
1301
+ } else {
1448
1302
  if (shouldNavigateToLastPage) {
1449
- // Use requestAnimationFrame for better performance than setTimeout
1450
- requestAnimationFrame(function () {
1451
- currentTable.setPageIndex(targetPage);
1452
- });
1303
+ currentTable.setPageIndex(targetPage);
1453
1304
  }
1454
1305
  }
1455
- _context2.next = 21;
1456
- break;
1457
- case 20:
1458
- // For client-side pagination, just set the page index
1459
- if (shouldNavigateToLastPage) {
1460
- currentTable.setPageIndex(targetPage);
1461
- }
1462
- case 21:
1463
- _context2.next = 28;
1464
- break;
1465
- case 23:
1466
- _context2.prev = 23;
1467
- _context2.t0 = _context2["catch"](4);
1468
- console.error("Error refreshing table data:", _context2.t0);
1306
+ } catch (error) {
1307
+ console.error("Error refreshing table data:", error);
1469
1308
  if (showToast) {
1470
1309
  showToast("Failed to refresh table data", "Error");
1471
1310
  }
1472
1311
  if (onError) {
1473
- onError(null, listener === null || listener === void 0 || (_listener$Widgets7 = listener.Widgets) === null || _listener$Widgets7 === void 0 ? void 0 : _listener$Widgets7[name], _context2.t0, "refresh");
1312
+ onError(null, (_b2 = listener == null ? void 0 : listener.Widgets) == null ? void 0 : _b2[name], error, "refresh");
1474
1313
  }
1475
- case 28:
1476
- case "end":
1477
- return _context2.stop();
1314
+ }
1315
+ },
1316
+ [datasource, isServerSidePagination(), setInternalDataset, showToast, onError, name]
1317
+ );
1318
+ const tableApis = {
1319
+ columns: columnsProxy,
1320
+ addNewRow: handleAddNewRowClick,
1321
+ editRow,
1322
+ deleteRow,
1323
+ refresh,
1324
+ datasource,
1325
+ dataset,
1326
+ selectPageSize,
1327
+ rowDefInstances
1328
+ };
1329
+ syncSelectedItemsImplRef.current = (newSelectedIds) => {
1330
+ if (!(listener == null ? void 0 : listener.onChange)) return;
1331
+ const getRowId = (row) => row._wmTableRowId || String(row.id);
1332
+ const selectedRows = internalDataset.filter(
1333
+ (row) => newSelectedIds.includes(getRowId(row))
1334
+ );
1335
+ const selectedItems = cleanRowData(selectedRows);
1336
+ if (!isEqual(prevSelectedRow.current, selectedItems)) {
1337
+ prevSelectedRow.current = selectedItems;
1338
+ if (tableApisRegistered.current) {
1339
+ listener.onChange(widgetRegistrationKey, { selectedItems });
1340
+ } else {
1341
+ tableApisRegistered.current = true;
1342
+ listener.onChange(widgetRegistrationKey, __spreadProps(__spreadValues({}, tableApis), { selectedItems }));
1343
+ }
1478
1344
  }
1479
- }, _callee2, null, [[4, 23]]);
1480
- })), [datasource, isServerSidePagination(), setInternalDataset, showToast, onError, name]); // Removed 'table' from dependencies to prevent recreation
1481
-
1482
- var tableApis = {
1483
- columns: columnsProxy,
1484
- addNewRow: handleAddNewRowClick,
1485
- editRow: editRow,
1486
- deleteRow: deleteRow,
1487
- refresh: refresh,
1488
- datasource: datasource,
1489
- dataset: dataset,
1490
- selectPageSize: selectPageSize,
1491
- rowDefInstances: rowDefInstances
1492
- };
1493
-
1494
- // Keep the sync-selected-items implementation up-to-date every render so that
1495
- // the stable onSyncSelectedItems callback (passed to useRowSelection) always has
1496
- // access to the latest tableApis / internalDataset / listener values.
1497
- syncSelectedItemsImplRef.current = function (newSelectedIds) {
1498
- if (!(listener !== null && listener !== void 0 && listener.onChange)) return;
1499
- var getRowId = function getRowId(row) {
1500
- return row._wmTableRowId || String(row.id);
1501
1345
  };
1502
- var selectedRows = internalDataset.filter(function (row) {
1503
- return newSelectedIds.includes(getRowId(row));
1504
- });
1505
- var selectedItems = (0, _utils.cleanRowData)(selectedRows);
1506
- if (!(0, _lodashEs.isEqual)(prevSelectedRow.current, selectedItems)) {
1507
- prevSelectedRow.current = selectedItems;
1508
- if (tableApisRegistered.current) {
1509
- listener.onChange(widgetRegistrationKey, {
1510
- selectedItems: selectedItems
1511
- });
1512
- } else {
1513
- tableApisRegistered.current = true;
1514
- listener.onChange(widgetRegistrationKey, _objectSpread(_objectSpread({}, tableApis), {}, {
1515
- selectedItems: selectedItems
1516
- }));
1346
+ useEffect(() => {
1347
+ var _a2, _b2, _c2;
1348
+ if (parentForm && name && ((_a2 = listener == null ? void 0 : listener.Widgets) == null ? void 0 : _a2[parentForm])) {
1349
+ const columns2 = (_c2 = (_b2 = listener == null ? void 0 : listener.Widgets) == null ? void 0 : _b2[name]) == null ? void 0 : _c2.columns;
1350
+ const defaultValues = Object.entries(columns2 || {}).reduce(
1351
+ (acc, [key, value]) => {
1352
+ if ((value == null ? void 0 : value.defaultValue) !== void 0) {
1353
+ acc[key] = value;
1354
+ }
1355
+ return acc;
1356
+ },
1357
+ {}
1358
+ );
1359
+ const valuesToPass = Object.keys(defaultValues).length === 0 ? [] : defaultValues;
1360
+ if (parentFormColumns) {
1361
+ listener == null ? void 0 : listener.onChange(parentForm, {
1362
+ dataoutput: __spreadProps(__spreadValues({}, parentFormColumns), {
1363
+ [name]: valuesToPass
1364
+ })
1365
+ });
1366
+ }
1517
1367
  }
1518
- }
1519
- };
1520
-
1521
- // Register table with parent form's formWidgets when parentForm is present
1522
- (0, _react.useEffect)(function () {
1523
- var _listener$Widgets8;
1524
- if (parentForm && name && listener !== null && listener !== void 0 && (_listener$Widgets8 = listener.Widgets) !== null && _listener$Widgets8 !== void 0 && _listener$Widgets8[parentForm]) {
1525
- var _listener$Widgets9;
1526
- var _columns = listener === null || listener === void 0 || (_listener$Widgets9 = listener.Widgets) === null || _listener$Widgets9 === void 0 || (_listener$Widgets9 = _listener$Widgets9[name]) === null || _listener$Widgets9 === void 0 ? void 0 : _listener$Widgets9.columns;
1527
- var defaultValues = Object.entries(_columns || {}).reduce(function (acc, _ref7) {
1528
- var _ref8 = (0, _slicedToArray2["default"])(_ref7, 2),
1529
- key = _ref8[0],
1530
- value = _ref8[1];
1531
- if ((value === null || value === void 0 ? void 0 : value.defaultValue) !== undefined) {
1532
- acc[key] = value;
1368
+ }, [parentForm, parentFormColumns]);
1369
+ const updateSelectedItem = () => {
1370
+ if (!(listener == null ? void 0 : listener.onChange)) return;
1371
+ const getRowId = (row) => row._wmTableRowId || String(row.id);
1372
+ let selectedRows = [];
1373
+ if ((useRadioSelect || useMultiSelect) && selectedRowIds.length > 0) {
1374
+ selectedRows = internalDataset.filter((row) => selectedRowIds.includes(getRowId(row)));
1375
+ } else if (activeRowIds.length > 0) {
1376
+ selectedRows = internalDataset.filter(
1377
+ (row) => activeRowIds.includes(getRowId(row))
1378
+ );
1379
+ }
1380
+ const cleanedRows = cleanRowData(selectedRows);
1381
+ const selectedItems = cleanedRows.length > 0 ? cleanedRows : [];
1382
+ if (!isEqual(prevSelectedRow.current, selectedItems)) {
1383
+ prevSelectedRow.current = selectedItems;
1384
+ if (tableApisRegistered.current) {
1385
+ listener.onChange(widgetRegistrationKey, { selectedItems });
1386
+ return;
1533
1387
  }
1534
- return acc;
1535
- }, {});
1536
-
1537
- // If all values are undefined, pass empty array, else pass object of default values
1538
- var valuesToPass = Object.keys(defaultValues).length === 0 ? [] : defaultValues;
1539
- if (parentFormColumns) {
1540
- listener === null || listener === void 0 || listener.onChange(parentForm, {
1541
- dataoutput: _objectSpread(_objectSpread({}, parentFormColumns), {}, (0, _defineProperty2["default"])({}, name, valuesToPass))
1542
- });
1388
+ tableApisRegistered.current = true;
1389
+ listener.onChange(widgetRegistrationKey, __spreadProps(__spreadValues({}, tableApis), { selectedItems }));
1543
1390
  }
1544
- }
1545
- }, [parentForm, parentFormColumns]);
1546
- var updateSelectedItem = function updateSelectedItem() {
1547
- if (!(listener !== null && listener !== void 0 && listener.onChange)) return;
1548
-
1549
- // Helper to get row ID
1550
- var getRowId = function getRowId(row) {
1551
- return row._wmTableRowId || String(row.id);
1552
1391
  };
1553
-
1554
- // Get selected rows based on selection mode
1555
- var selectedRows = [];
1556
- if ((useRadioSelect || useMultiSelect) && selectedRowIds.length > 0) {
1557
- selectedRows = internalDataset.filter(function (row) {
1558
- return selectedRowIds.includes(getRowId(row));
1559
- });
1560
- } else if (activeRowIds.length > 0) {
1561
- selectedRows = internalDataset.filter(function (row) {
1562
- return activeRowIds.includes(getRowId(row));
1563
- });
1564
- }
1565
-
1566
- // Clean and format selecteditem - always return as array
1567
- var cleanedRows = (0, _utils.cleanRowData)(selectedRows);
1568
-
1569
- // Always return selectedItems as an array (empty array if nothing selected)
1570
- var selectedItems = cleanedRows.length > 0 ? cleanedRows : [];
1571
-
1572
- // Update only if changed
1573
- if (!(0, _lodashEs.isEqual)(prevSelectedRow.current, selectedItems)) {
1574
- prevSelectedRow.current = selectedItems;
1575
- if (tableApisRegistered.current) {
1576
- listener.onChange(widgetRegistrationKey, {
1577
- selectedItems: selectedItems
1578
- });
1579
- return;
1580
- }
1581
- tableApisRegistered.current = true;
1582
- listener.onChange(widgetRegistrationKey, _objectSpread(_objectSpread({}, tableApis), {}, {
1583
- selectedItems: selectedItems
1584
- }));
1585
- }
1586
- };
1587
-
1588
- // Expose active/selected row data through listener
1589
- // This updates whenever the active/selected row changes (when user clicks on a row)
1590
- (0, _react.useEffect)(function () {
1591
- updateSelectedItem();
1592
- }, [activeRowIds, selectedRowIds, useRadioSelect, useMultiSelect, internalDataset, name]);
1593
-
1594
- // `table` reference is stable; header groups can change as state changes (pagination/columns/etc).
1595
- // So include state-based deps to avoid stale/empty colgroup.
1596
- var colGroupSpec = (0, _react.useMemo)(function () {
1597
- var headerGroups = table.getHeaderGroups();
1598
- var leafHeaderGroup = headerGroups.length ? headerGroups[headerGroups.length - 1] : undefined;
1599
- var leafHeaders = ((leafHeaderGroup === null || leafHeaderGroup === void 0 ? void 0 : leafHeaderGroup.headers) || []).filter(function (h) {
1600
- return !h.isPlaceholder;
1601
- });
1602
-
1603
- // Build base spec from TanStack columns
1604
- var base = leafHeaders.map(function (h) {
1605
- return {
1392
+ useEffect(() => {
1393
+ updateSelectedItem();
1394
+ }, [activeRowIds, selectedRowIds, useRadioSelect, useMultiSelect, internalDataset, name]);
1395
+ const isTableLoading = useMemo(() => {
1396
+ return loading && navigation !== "On-Demand" && internalDataset.length === 0;
1397
+ }, [loading, navigation, internalDataset.length]);
1398
+ const colGroupSpec = useMemo(() => {
1399
+ const headerGroups = table.getHeaderGroups();
1400
+ const leafHeaderGroup = headerGroups.length ? headerGroups[headerGroups.length - 1] : void 0;
1401
+ const leafHeaders = ((leafHeaderGroup == null ? void 0 : leafHeaderGroup.headers) || []).filter((h) => !h.isPlaceholder);
1402
+ const base = leafHeaders.map((h) => ({
1606
1403
  key: h.column.id,
1607
- width: "".concat(h.column.getSize(), "px")
1608
- };
1609
- });
1610
- return base;
1611
- }, [table, columnSizing, columnsVersion, showheader, ColClassSignature]);
1612
- return __jsx(_material.Box, {
1613
- ref: tableContainerRef,
1614
- hidden: props.hidden,
1615
- className: "app-grid app-panel panel app-datagrid ".concat(className).trim(),
1616
- name: name,
1617
- editmode: editmode,
1618
- navigation: navigation,
1619
- title: title,
1620
- currentpage: table.getState().pagination.pageIndex + 1
1621
- }, renderConfirmDialog(), showPanelHeading && __jsx(_components.TablePanelHeading, {
1622
- title: title,
1623
- subheading: subheading,
1624
- iconclass: iconclass,
1625
- exportformat: exportformat,
1626
- headerActions: headerActions,
1627
- spacing: spacing,
1628
- isGridEditMode: isGridEditModeComplete,
1629
- isLoading: datasource === null || datasource === void 0 ? void 0 : datasource.loading,
1630
- listener: listener,
1631
- datasource: datasource,
1632
- columns: wmTableColumnsWithOverrides,
1633
- sortInfo: sortInfoForExport,
1634
- filterInfo: filterDataForState,
1635
- exportdatasize: exportdatasize,
1636
- onBeforeExport: onBeforeexport
1637
- }), __jsx(_material.Box, {
1638
- className: "app-datagrid",
1639
- onKeyDown: function onKeyDown(e) {
1640
- return handleTableEditKeyDown(e);
1641
- }
1642
- }, filtermode === "search" && __jsx(_components.GlobalSearchFilter, {
1643
- filteronkeypress: filteronkeypress,
1644
- value: globalFilter,
1645
- onChange: setGlobalFilter,
1646
- selectedColumn: globalSearchColumn,
1647
- onColumnChange: setGlobalSearchColumn,
1648
- columns: columnsForTable,
1649
- searchLabel: searchlabel,
1650
- name: name,
1651
- listener: listener
1652
- }), __jsx(_material.Box, {
1653
- className: "table-container table-responsive"
1654
- }, __jsx(_material.Box, {
1655
- className: "app-grid-header"
1656
- }, __jsx(_material.Box, {
1657
- className: "app-grid-header-inner",
1658
- style: _objectSpread({
1659
- height: "100%",
1660
- overflow: "auto",
1661
- position: "relative"
1662
- }, styles)
1663
- }, loading && navigation !== "On-Demand" && __jsx(_LoadingComponent["default"], {
1664
- message: loadingdatamsg
1665
- }), __jsx(_material.Table, {
1666
- key: "table-".concat(isDynamicTable ? "dynamic" : "static", "-").concat(wmTableColumns.length, "-page-").concat(table.getState().pagination.pageIndex) // Force complete rebuild on pagination
1667
- ,
1668
- className: "".concat(_utils.TABLE_CSS_CLASSES.gridDefault, " table-striped table-hover ").concat(spacingClasses).trim(),
1669
- sx: _objectSpread({
1670
- width: props.width || "100%"
1671
- }, tableStructure && (0, _groupHeaderUtils.hasTableGroups)(tableStructure) ? {
1672
- tableLayout: "fixed",
1673
- minWidth: table.getTotalSize()
1674
- } : {}),
1675
- name: name
1676
- }, showheader && wmTableColumns.length > 0 && __jsx(_react["default"].Fragment, null, __jsx(_components.TableHeaderComponent, {
1677
- table: table,
1678
- enablesort: enablesort,
1679
- enablecolumnselection: enablecolumnselection,
1680
- rowClass: rowClass,
1681
- ColClassSignature: ColClassSignature,
1682
- sorting: sorting,
1683
- columnSizing: columnSizing,
1684
- rowSelection: rowSelection,
1685
- rowExpansionConfig: rowExpansionConfig,
1686
- columnsVersion: columnsVersion,
1687
- filterMode: filtermode,
1688
- columnFilters: columnFilters,
1689
- onColumnFilterChange: setColumnFilter,
1690
- renderFormWidget: renderFormWidget,
1691
- listener: listener,
1692
- tableStructure: tableStructure,
1693
- onColumnSelect: handleColumnSelect,
1694
- onColumnDeselect: handleColumnDeselect,
1695
- onHeaderclick: onHeaderclick,
1696
- tableName: name
1697
- }), __jsx("colgroup", null, colGroupSpec.map(function (c) {
1698
- return __jsx("col", {
1699
- key: c.key,
1700
- style: {
1701
- width: c.width
1702
- },
1703
- width: c.width
1704
- });
1705
- }))), internalDataset.length > 0 && __jsx(_components.TableBodyComponent, {
1706
- table: table,
1707
- columns: columns,
1708
- rowClass: rowClass,
1709
- formposition: formposition,
1710
- renderAddNewRow: renderAddNewRow,
1711
- onRowClick: handleRowClick,
1712
- isRowActive: isRowActive,
1713
- isRowSelected: isRowSelected,
1714
- nodatamessage: nodatamessage,
1715
- loadingdatamsg: loadingdatamsg,
1716
- isLoading: datasource === null || datasource === void 0 ? void 0 : datasource.loading,
1717
- rowExpansionConfig: rowExpansionConfig,
1718
- expandedRows: expandedRows,
1719
- toggleRowExpansion: handleToggleRowExpansion,
1720
- isRowExpanded: isRowExpanded,
1721
- rowsVersion: tableData.length,
1722
- ColClassSignature: ColClassSignature,
1723
- tableData: tableData,
1724
- editingRowId: editingRowId,
1725
- activeRowIds: activeRowIds,
1726
- selectedRowIds: selectedRowIds,
1727
- isAddingNewRow: isAddingNewRow,
1728
- customExpressionColumns: customColumns,
1729
- customColumnsRevision: customColumnsRevision,
1730
- columnsVersion: columnsVersion
1731
- }), summaryRowEnabled && summaryRowDefs.length > 0 && __jsx(_components.SummaryRowFooter, {
1732
- summaryRowDefs: summaryRowDefs,
1733
- summaryRowDefObjects: summaryRowDefObjects,
1734
- columns: wmTableColumnsWithOverrides,
1735
- tableName: name,
1736
- summaryRowColumnShow: summaryRowColumnShow
1737
- })))))), __jsx(_material.Box, {
1738
- className: "panel-footer clearfix"
1739
- }, showPagination && __jsx(_material.Box, {
1740
- className: "app-datagrid-paginator"
1741
- }, __jsx(_pagination["default"], {
1742
- name: name,
1743
- dataset: filtermode ? filteredData : internalDataset,
1744
- maxResults: (_table$getState$pagin = table.getState().pagination.pageSize) !== null && _table$getState$pagin !== void 0 ? _table$getState$pagin : initialPageSize,
1745
- currentPage: table.getState().pagination.pageIndex + 1,
1746
- navigation: navigation,
1747
- navigationalign: navigationalign,
1748
- showrecordcount: showrecordcount,
1749
- maxsize: maxsize,
1750
- boundarylinks: boundarylinks,
1751
- directionlinks: true,
1752
- allowpagesizechange: allowpagesizechange,
1753
- pagesizeoptions: pagesizeoptions,
1754
- listener: listener,
1755
- onPaginationChange: handlePaginationChange,
1756
- onSetRecord: onSetrecord,
1757
- onPageSizeChange: handlePageSizeChange,
1758
- onDataUpdate: handleAccumulatedDataUpdate,
1759
- onPaginationWidgetReady: handlePaginationWidgetReady
1760
- // Pass pagination metadata from datasource if available
1761
- ,
1762
- paginationMeta: datasource === null || datasource === void 0 ? void 0 : datasource.pagination,
1763
- totalItems: datasource === null || datasource === void 0 || (_datasource$paginatio4 = datasource.pagination) === null || _datasource$paginatio4 === void 0 ? void 0 : _datasource$paginatio4.totalElements
1764
- // Pass datasource for API-based pagination
1765
- ,
1766
- datasource: datasource
1767
- // Pass server-side pagination flag
1768
- ,
1769
- isServerSidePagination: isServerSidePagination()
1770
- // Pass additional invoke options for server-side operations
1771
- ,
1772
- datasourceInvokeOptions: isServerSidePagination() ? {
1773
- orderBy: sorting.length > 0 ? sorting.map(function (s) {
1774
- return "".concat(s.id, " ").concat(s.desc ? "desc" : "asc");
1775
- }).join(", ") : undefined,
1776
- filterFields: memoizedFilterFields,
1777
- condition: memoizedLogicalOp
1778
- } : undefined
1779
- // On-Demand navigation props
1780
- ,
1781
- ondemandmessage: ondemandmessage,
1782
- viewlessmessage: viewlessmessage,
1783
- showviewlessbutton: showviewlessbutton
1784
- })), __jsx(_components.TableFooterActions, {
1785
- footerActions: footerActions,
1786
- spacing: spacing,
1787
- isGridEditMode: isGridEditModeComplete,
1788
- isLoading: datasource === null || datasource === void 0 ? void 0 : datasource.loading,
1789
- listener: listener
1790
- })));
1791
- }, function (prev, current) {
1792
- // Check if core data and configuration props are the same
1793
- var keys = ["dataset", "editmode", "navigation", "pagesize", "showrowindex", "showheader", "enablesort", "radioselect", "radioselecttitle", "radioselectarialabel", "multiselect", "multiselecttitle", "multiselectarialabel", "gridfirstrowselect", "rowClass", "deleteoktext", "deletecanceltext", "confirmdelete", "errormessage", "nodatamessage", "loadingdatamsg", "insertmessage", "updatemessage", "deletemessage", "spacing", "title", "subheading", "iconclass", "allowpagesizechange", "pagesizeoptions", "showrecordcount", "shownavigation", "datasource", "binddataset", "onSuccess", "onError", "onRowinsert", "onRowupdate", "onRowdelete", "onSort", "onBeforerowdelete", "onHeaderclick", "onRowselect", "onRowdeselect", "statehandler", "filtermode", "children", "listener", "hidden"];
1794
-
1795
- // First check the simple props
1796
- var simplePropsEqual = keys.every(function (key) {
1797
- return prev[key] === current[key];
1798
- });
1799
- if (!simplePropsEqual) return false;
1800
-
1801
- // Check if children structure has changed (column/action definitions)
1802
- var prevChildrenCount = _react["default"].Children.count(prev.children);
1803
- var currentChildrenCount = _react["default"].Children.count(current.children);
1804
- if (prevChildrenCount !== currentChildrenCount) return false;
1805
-
1806
- // If all checks pass, consider components equal (skip re-render)
1807
- return true;
1808
- });
1404
+ width: `${h.column.getSize()}px`
1405
+ }));
1406
+ return base;
1407
+ }, [table, columnSizing, columnsVersion, showheader, ColClassSignature]);
1408
+ return /* @__PURE__ */ jsxs(
1409
+ Box,
1410
+ __spreadProps(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
1411
+ ref: tableContainerRef,
1412
+ hidden: props.hidden,
1413
+ className: `app-grid app-panel panel app-datagrid ${className}`.trim()
1414
+ }, { name }), { editmode }), { navigation }), { title }), {
1415
+ currentpage: table.getState().pagination.pageIndex + 1
1416
+ }), {
1417
+ children: [
1418
+ renderConfirmDialog(),
1419
+ showPanelHeading && /* @__PURE__ */ jsx(
1420
+ TablePanelHeading,
1421
+ {
1422
+ title,
1423
+ subheading,
1424
+ iconclass,
1425
+ exportformat,
1426
+ headerActions,
1427
+ spacing,
1428
+ isGridEditMode: isGridEditModeComplete,
1429
+ isLoading: datasource == null ? void 0 : datasource.loading,
1430
+ listener,
1431
+ datasource,
1432
+ columns: wmTableColumnsWithOverrides,
1433
+ sortInfo: sortInfoForExport,
1434
+ filterInfo: filterDataForState,
1435
+ exportdatasize,
1436
+ onBeforeExport: onBeforeexport
1437
+ }
1438
+ ),
1439
+ /* @__PURE__ */ jsxs(Box, { className: "app-datagrid", onKeyDown: (e) => handleTableEditKeyDown(e), children: [
1440
+ filtermode === "search" && /* @__PURE__ */ jsx(
1441
+ GlobalSearchFilter,
1442
+ {
1443
+ filteronkeypress,
1444
+ value: globalFilter,
1445
+ onChange: setGlobalFilter,
1446
+ selectedColumn: globalSearchColumn,
1447
+ onColumnChange: setGlobalSearchColumn,
1448
+ columns: columnsForTable,
1449
+ searchLabel: searchlabel,
1450
+ name,
1451
+ listener
1452
+ }
1453
+ ),
1454
+ /* @__PURE__ */ jsx(Box, { className: "table-container table-responsive", children: /* @__PURE__ */ jsx(Box, { className: "app-grid-header", children: /* @__PURE__ */ jsxs(
1455
+ Box,
1456
+ {
1457
+ className: "app-grid-header-inner",
1458
+ style: __spreadValues({ height: "100%", overflow: "auto", position: "relative" }, styles),
1459
+ children: [
1460
+ isTableLoading && /* @__PURE__ */ jsx(LoadingComponent, { message: loadingdatamsg }),
1461
+ /* @__PURE__ */ jsxs(
1462
+ Table,
1463
+ __spreadProps(__spreadValues({
1464
+ className: `${TABLE_CSS_CLASSES.gridDefault} table-striped table-hover ${spacingClasses}`.trim(),
1465
+ sx: __spreadValues({
1466
+ width: props.width || "100%"
1467
+ }, tableStructure && hasTableGroups(tableStructure) ? {
1468
+ tableLayout: "fixed",
1469
+ minWidth: table.getTotalSize()
1470
+ } : {})
1471
+ }, { name }), {
1472
+ children: [
1473
+ showheader && wmTableColumns.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
1474
+ /* @__PURE__ */ jsx(
1475
+ TableHeaderComponent,
1476
+ {
1477
+ table,
1478
+ enablesort,
1479
+ enablecolumnselection,
1480
+ rowClass,
1481
+ ColClassSignature,
1482
+ sorting,
1483
+ columnSizing,
1484
+ rowSelection,
1485
+ rowExpansionConfig,
1486
+ columnsVersion,
1487
+ filterMode: filtermode,
1488
+ columnFilters,
1489
+ onColumnFilterChange: setColumnFilter,
1490
+ renderFormWidget,
1491
+ listener,
1492
+ tableStructure,
1493
+ onColumnSelect: handleColumnSelect,
1494
+ onColumnDeselect: handleColumnDeselect,
1495
+ onHeaderclick,
1496
+ tableName: name
1497
+ }
1498
+ ),
1499
+ /* @__PURE__ */ jsx("colgroup", { children: colGroupSpec.map((c) => /* @__PURE__ */ jsx("col", { style: { width: c.width }, width: c.width }, c.key)) })
1500
+ ] }),
1501
+ internalDataset.length > 0 && /* @__PURE__ */ jsx(
1502
+ TableBodyComponent,
1503
+ {
1504
+ table,
1505
+ columns,
1506
+ rowClass,
1507
+ formposition,
1508
+ renderAddNewRow,
1509
+ onRowClick: handleRowClick,
1510
+ isRowActive,
1511
+ isRowSelected,
1512
+ nodatamessage,
1513
+ loadingdatamsg,
1514
+ isLoading: datasource == null ? void 0 : datasource.loading,
1515
+ rowExpansionConfig,
1516
+ expandedRows,
1517
+ toggleRowExpansion: handleToggleRowExpansion,
1518
+ isRowExpanded,
1519
+ rowsVersion: tableData.length,
1520
+ ColClassSignature,
1521
+ tableData,
1522
+ editingRowId,
1523
+ activeRowIds,
1524
+ selectedRowIds,
1525
+ isAddingNewRow,
1526
+ customExpressionColumns: customColumns,
1527
+ customColumnsRevision,
1528
+ columnsVersion
1529
+ }
1530
+ ),
1531
+ summaryRowEnabled && summaryRowDefs.length > 0 && /* @__PURE__ */ jsx(
1532
+ SummaryRowFooter,
1533
+ {
1534
+ summaryRowDefs,
1535
+ summaryRowDefObjects,
1536
+ columns: wmTableColumnsWithOverrides,
1537
+ tableName: name,
1538
+ summaryRowColumnShow
1539
+ }
1540
+ )
1541
+ ]
1542
+ }),
1543
+ `table-${isDynamicTable ? "dynamic" : "static"}-${wmTableColumns.length}-page-${table.getState().pagination.pageIndex}`
1544
+ )
1545
+ ]
1546
+ }
1547
+ ) }) })
1548
+ ] }),
1549
+ /* @__PURE__ */ jsxs(Box, { className: "panel-footer clearfix", children: [
1550
+ showPagination && /* @__PURE__ */ jsx(Box, { className: "app-datagrid-paginator", children: /* @__PURE__ */ jsx(
1551
+ WmPagination,
1552
+ {
1553
+ name,
1554
+ dataset: filtermode ? filteredData : internalDataset,
1555
+ maxResults: (_h = table.getState().pagination.pageSize) != null ? _h : initialPageSize,
1556
+ currentPage: table.getState().pagination.pageIndex + 1,
1557
+ navigation,
1558
+ navigationalign,
1559
+ showrecordcount,
1560
+ maxsize,
1561
+ boundarylinks,
1562
+ directionlinks: true,
1563
+ allowpagesizechange,
1564
+ pagesizeoptions,
1565
+ listener,
1566
+ onPaginationChange: handlePaginationChange,
1567
+ onSetRecord: onSetrecord,
1568
+ onPageSizeChange: handlePageSizeChange,
1569
+ onDataUpdate: handleAccumulatedDataUpdate,
1570
+ onPaginationWidgetReady: handlePaginationWidgetReady,
1571
+ paginationMeta: datasource == null ? void 0 : datasource.pagination,
1572
+ totalItems: (_i = datasource == null ? void 0 : datasource.pagination) == null ? void 0 : _i.totalElements,
1573
+ datasource,
1574
+ isServerSidePagination: isServerSidePagination(),
1575
+ datasourceInvokeOptions: isServerSidePagination() ? {
1576
+ orderBy: sorting.length > 0 ? sorting.map((s) => `${s.id} ${s.desc ? "desc" : "asc"}`).join(", ") : void 0,
1577
+ filterFields: memoizedFilterFields,
1578
+ condition: memoizedLogicalOp
1579
+ } : void 0,
1580
+ ondemandmessage,
1581
+ viewlessmessage,
1582
+ showviewlessbutton
1583
+ }
1584
+ ) }),
1585
+ /* @__PURE__ */ jsx(
1586
+ TableFooterActions,
1587
+ {
1588
+ footerActions,
1589
+ spacing,
1590
+ isGridEditMode: isGridEditModeComplete,
1591
+ isLoading: datasource == null ? void 0 : datasource.loading,
1592
+ listener
1593
+ }
1594
+ )
1595
+ ] })
1596
+ ]
1597
+ })
1598
+ );
1599
+ },
1600
+ (prev, current) => {
1601
+ const keys = [
1602
+ "dataset",
1603
+ "editmode",
1604
+ "navigation",
1605
+ "pagesize",
1606
+ "showrowindex",
1607
+ "showheader",
1608
+ "enablesort",
1609
+ "radioselect",
1610
+ "radioselecttitle",
1611
+ "radioselectarialabel",
1612
+ "multiselect",
1613
+ "multiselecttitle",
1614
+ "multiselectarialabel",
1615
+ "gridfirstrowselect",
1616
+ "rowClass",
1617
+ "deleteoktext",
1618
+ "deletecanceltext",
1619
+ "confirmdelete",
1620
+ "errormessage",
1621
+ "nodatamessage",
1622
+ "loadingdatamsg",
1623
+ "insertmessage",
1624
+ "updatemessage",
1625
+ "deletemessage",
1626
+ "spacing",
1627
+ "title",
1628
+ "subheading",
1629
+ "iconclass",
1630
+ "allowpagesizechange",
1631
+ "pagesizeoptions",
1632
+ "showrecordcount",
1633
+ "shownavigation",
1634
+ "datasource",
1635
+ "binddataset",
1636
+ "onSuccess",
1637
+ "onError",
1638
+ "onRowinsert",
1639
+ "onRowupdate",
1640
+ "onRowdelete",
1641
+ "onSort",
1642
+ "onBeforerowdelete",
1643
+ "onHeaderclick",
1644
+ "onRowselect",
1645
+ "onRowdeselect",
1646
+ "statehandler",
1647
+ "filtermode",
1648
+ "children",
1649
+ "listener",
1650
+ "hidden"
1651
+ ];
1652
+ const simplePropsEqual = keys.every((key) => prev[key] === current[key]);
1653
+ if (!simplePropsEqual) return false;
1654
+ const prevChildrenCount = React.Children.count(prev.children);
1655
+ const currentChildrenCount = React.Children.count(current.children);
1656
+ if (prevChildrenCount !== currentChildrenCount) return false;
1657
+ return true;
1658
+ }
1659
+ );
1809
1660
  WmTableComponent.displayName = "WmTableComponent";
1810
-
1811
- // Wrapper component that provides EditedRowsContext to WmTableComponent
1812
- var WmTableWithProvider = function WmTableWithProvider(props) {
1813
- return __jsx(_useEditedRows.EditedRowsProvider, null, __jsx(WmTableComponent, props));
1661
+ const WmTableWithProvider = (props) => {
1662
+ return /* @__PURE__ */ jsx(EditedRowsProvider, { children: /* @__PURE__ */ jsx(WmTableComponent, __spreadValues({}, props)) });
1814
1663
  };
1815
1664
  WmTableWithProvider.displayName = "WmTable";
1816
- var WmTableStandalone = exports.WmTable = (0, _withStandalone["default"])(WmTableWithProvider);
1817
- // @ts-ignore
1818
- var WmTable = (0, _withBaseWrapper["default"])(WmTableWithProvider);
1665
+ const WmTableStandalone = withStandalone(WmTableWithProvider);
1666
+ const WmTable = withBaseWrapper(WmTableWithProvider);
1819
1667
  WmTable.displayName = "WmTable";
1820
-
1821
- /**
1822
- * The WmTable component is used to display data in a tabular format.
1823
- *
1824
- * - [Playground](https://react-components.wavemaker.ai/?path=/story/data-data-table--showcase)
1825
- *
1826
- * - [Docs](https://react-components.wavemaker.ai/?path=/story/data-data-table--docs)
1827
- *
1828
- * @param props - {@link WmTableProps}
1829
- */
1830
- var _default = exports["default"] = WmTable;
1668
+ var table_default = WmTable;
1669
+ export {
1670
+ WmTableStandalone as WmTable,
1671
+ WmTableComponent,
1672
+ table_default as default
1673
+ };