@wavemaker/react-runtime 11.14.1-rc.236

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/actions/base-action.js +32 -0
  2. package/actions/login-action.js +53 -0
  3. package/actions/logout-action.js +41 -0
  4. package/actions/navigation-action.js +145 -0
  5. package/actions/notification-action.js +147 -0
  6. package/actions/timer-action.js +164 -0
  7. package/actions/toast-provider.js +111 -0
  8. package/actions/toast.js +115 -0
  9. package/actions/toast.service.js +94 -0
  10. package/actions/types/index.js +11 -0
  11. package/components/advanced/carousel/index.js +456 -0
  12. package/components/advanced/carousel/props.js +5 -0
  13. package/components/advanced/carousel/template.js +72 -0
  14. package/components/advanced/login/index.js +307 -0
  15. package/components/advanced/login/props.js +5 -0
  16. package/components/advanced/marquee/index.js +158 -0
  17. package/components/advanced/marquee/props.js +5 -0
  18. package/components/basic/anchor/index.js +239 -0
  19. package/components/basic/anchor/props.js +5 -0
  20. package/components/basic/audio/index.js +61 -0
  21. package/components/basic/html/index.js +158 -0
  22. package/components/basic/icon/index.js +85 -0
  23. package/components/basic/iframe/iframe.utils.js +10 -0
  24. package/components/basic/iframe/index.js +95 -0
  25. package/components/basic/label/index.js +139 -0
  26. package/components/basic/message/index.js +120 -0
  27. package/components/basic/message/props.js +5 -0
  28. package/components/basic/picture/index.js +117 -0
  29. package/components/basic/picture/props.js +5 -0
  30. package/components/basic/progress-bar/index.js +168 -0
  31. package/components/basic/progress-bar/props.js +18 -0
  32. package/components/basic/progress-circle/index.js +196 -0
  33. package/components/basic/progress-circle/props.js +16 -0
  34. package/components/basic/richtexteditor/index.js +533 -0
  35. package/components/basic/richtexteditor/props.js +5 -0
  36. package/components/basic/search/index.js +1023 -0
  37. package/components/basic/search/props.js +5 -0
  38. package/components/basic/search/providers.js +350 -0
  39. package/components/basic/spinner/index.js +202 -0
  40. package/components/basic/spinner/props.js +12 -0
  41. package/components/basic/tile/index.js +91 -0
  42. package/components/basic/tree/Components/TreeNodeComponent.js +142 -0
  43. package/components/basic/tree/index.js +503 -0
  44. package/components/basic/tree/props.js +5 -0
  45. package/components/basic/tree/utils.js +154 -0
  46. package/components/basic/video/index.js +85 -0
  47. package/components/basic/video/props.js +5 -0
  48. package/components/chart/components/barColumnChart/index.js +132 -0
  49. package/components/chart/components/barColumnChart/props.js +5 -0
  50. package/components/chart/components/bubbleChart/index.js +176 -0
  51. package/components/chart/components/bubbleChart/props.js +5 -0
  52. package/components/chart/components/chartLegend/components/ClassicLegendItem.js +39 -0
  53. package/components/chart/components/chartLegend/components/FuriousLegendItem.js +81 -0
  54. package/components/chart/components/chartLegend/index.js +69 -0
  55. package/components/chart/components/chartLegend/props.js +5 -0
  56. package/components/chart/components/chartLegend/utils.js +31 -0
  57. package/components/chart/components/chartTooltip/index.js +53 -0
  58. package/components/chart/components/chartTooltip/styles.js +37 -0
  59. package/components/chart/components/chartTooltip/utils.js +23 -0
  60. package/components/chart/components/cumulativeLineChart/index.js +113 -0
  61. package/components/chart/components/cumulativeLineChart/props.js +5 -0
  62. package/components/chart/components/cumulativeLineChart/utils.js +34 -0
  63. package/components/chart/components/index.js +40 -0
  64. package/components/chart/components/lineAreaChart/index.js +140 -0
  65. package/components/chart/components/lineAreaChart/props.js +5 -0
  66. package/components/chart/components/noDataMessage/index.js +27 -0
  67. package/components/chart/components/pieDonutChart/index.js +171 -0
  68. package/components/chart/components/pieDonutChart/props.js +5 -0
  69. package/components/chart/constant.js +72 -0
  70. package/components/chart/index.js +930 -0
  71. package/components/chart/props.js +5 -0
  72. package/components/chart/utils.js +691 -0
  73. package/components/common/AppSpinner.js +36 -0
  74. package/components/common/app-spinner.js +26 -0
  75. package/components/common/index.js +12 -0
  76. package/components/constants.js +1208 -0
  77. package/components/container/accordion/accordion-pane/index.js +108 -0
  78. package/components/container/accordion/accordion-pane/props.js +11 -0
  79. package/components/container/accordion/index.js +232 -0
  80. package/components/container/accordion/props.js +13 -0
  81. package/components/container/alignment-utils.js +183 -0
  82. package/components/container/index.js +188 -0
  83. package/components/container/layout-grid/grid-column/index.js +34 -0
  84. package/components/container/layout-grid/grid-row/index.js +24 -0
  85. package/components/container/layout-grid/index.js +33 -0
  86. package/components/container/linear-layout/index.js +72 -0
  87. package/components/container/linear-layout/linear-layout-item/index.js +43 -0
  88. package/components/container/panel/components/panel-header/index.js +144 -0
  89. package/components/container/panel/components/panel-header/props.js +5 -0
  90. package/components/container/panel/hooks.js +144 -0
  91. package/components/container/panel/index.js +286 -0
  92. package/components/container/panel/props.js +5 -0
  93. package/components/container/props.js +5 -0
  94. package/components/container/tabs/index.js +379 -0
  95. package/components/container/tabs/props.js +20 -0
  96. package/components/container/tabs/tab-pane/index.js +42 -0
  97. package/components/container/tabs/tab-pane/props.js +5 -0
  98. package/components/container/wizard/WizardContext.js +16 -0
  99. package/components/container/wizard/components/StepComponents.js +100 -0
  100. package/components/container/wizard/components/WizardStep.js +89 -0
  101. package/components/container/wizard/index.js +710 -0
  102. package/components/container/wizard/props.js +5 -0
  103. package/components/container/wizard/utils.js +133 -0
  104. package/components/container/wizard/wizard-action/index.js +22 -0
  105. package/components/container/wizard/wizard-step/index.js +94 -0
  106. package/components/data/card/card-actions/index.js +24 -0
  107. package/components/data/card/card-content/index.js +38 -0
  108. package/components/data/card/card-footer/index.js +24 -0
  109. package/components/data/card/index.js +246 -0
  110. package/components/data/card/props.js +5 -0
  111. package/components/data/form/base-form/constant.js +39 -0
  112. package/components/data/form/base-form/index.js +460 -0
  113. package/components/data/form/base-form/props.js +29 -0
  114. package/components/data/form/base-form/utils.js +42 -0
  115. package/components/data/form/dynamic-fields/index.js +196 -0
  116. package/components/data/form/dynamic-fields/props.js +5 -0
  117. package/components/data/form/dynamic-fields/utils.js +237 -0
  118. package/components/data/form/form-action/index.js +71 -0
  119. package/components/data/form/form-body/index.js +26 -0
  120. package/components/data/form/form-context.js +34 -0
  121. package/components/data/form/form-controller/props.js +19 -0
  122. package/components/data/form/form-controller/validation-contrustor.js +313 -0
  123. package/components/data/form/form-controller/withFormController.js +320 -0
  124. package/components/data/form/form-field/base-field.js +138 -0
  125. package/components/data/form/form-field/index.js +36 -0
  126. package/components/data/form/form-field/props.js +5 -0
  127. package/components/data/form/form-footer/index.js +26 -0
  128. package/components/data/form/form-header/index.js +56 -0
  129. package/components/data/form/index.js +39 -0
  130. package/components/data/form/props.js +5 -0
  131. package/components/data/list/components/GroupHeader.js +35 -0
  132. package/components/data/list/components/GroupedListItems.js +98 -0
  133. package/components/data/list/components/ListContainer.js +27 -0
  134. package/components/data/list/components/ListDND.js +241 -0
  135. package/components/data/list/components/ListHeader.js +59 -0
  136. package/components/data/list/components/ListItem.js +148 -0
  137. package/components/data/list/components/ListItemWithTemplate.js +59 -0
  138. package/components/data/list/components/ListItems.js +231 -0
  139. package/components/data/list/components/ListPagination.js +165 -0
  140. package/components/data/list/components/LoadMoreButton.js +39 -0
  141. package/components/data/list/components/NoDataMessage.js +22 -0
  142. package/components/data/list/components/StandardListItems.js +84 -0
  143. package/components/data/list/components/index.js +119 -0
  144. package/components/data/list/components/props.js +5 -0
  145. package/components/data/list/hooks/index.js +75 -0
  146. package/components/data/list/hooks/props.js +5 -0
  147. package/components/data/list/hooks/useCurrentPageItems.js +48 -0
  148. package/components/data/list/hooks/useGroupedData.js +37 -0
  149. package/components/data/list/hooks/useListData.js +60 -0
  150. package/components/data/list/hooks/useListEffects.js +285 -0
  151. package/components/data/list/hooks/useListEventHandlers.js +291 -0
  152. package/components/data/list/hooks/useListPagination.js +168 -0
  153. package/components/data/list/hooks/useListState.js +98 -0
  154. package/components/data/list/hooks/useListStateManager.js +195 -0
  155. package/components/data/list/hooks/usePaginatedGroupedData.js +121 -0
  156. package/components/data/list/index.js +611 -0
  157. package/components/data/list/props.js +5 -0
  158. package/components/data/list/templates/media-template.js +53 -0
  159. package/components/data/list/utils/constants.js +81 -0
  160. package/components/data/list/utils/list-helpers.js +173 -0
  161. package/components/data/list/utils/list-widget-methods.js +114 -0
  162. package/components/data/live-filter/index.js +279 -0
  163. package/components/data/live-filter/props.js +12 -0
  164. package/components/data/live-form/index.js +93 -0
  165. package/components/data/live-form/props.js +16 -0
  166. package/components/data/pagination/components/BasicPagination.js +77 -0
  167. package/components/data/pagination/components/ClassicPagination.js +191 -0
  168. package/components/data/pagination/components/InlinePagination.js +99 -0
  169. package/components/data/pagination/components/LoadingComponent.js +31 -0
  170. package/components/data/pagination/components/PageSizeSelector.js +175 -0
  171. package/components/data/pagination/components/PagerNavigation.js +105 -0
  172. package/components/data/pagination/components/TotalRecords.js +52 -0
  173. package/components/data/pagination/components/index.js +47 -0
  174. package/components/data/pagination/components/props.js +5 -0
  175. package/components/data/pagination/hooks/index.js +19 -0
  176. package/components/data/pagination/hooks/props.js +5 -0
  177. package/components/data/pagination/hooks/useNavigationSize.js +44 -0
  178. package/components/data/pagination/hooks/usePagination.js +796 -0
  179. package/components/data/pagination/index.js +322 -0
  180. package/components/data/table/components/AddNewRow.js +190 -0
  181. package/components/data/table/components/EditableCell.js +91 -0
  182. package/components/data/table/components/FieldValidationError.js +24 -0
  183. package/components/data/table/components/RowExpansionButton.js +74 -0
  184. package/components/data/table/components/TableBody.js +279 -0
  185. package/components/data/table/components/TableFilters.js +325 -0
  186. package/components/data/table/components/TableFooterActions.js +48 -0
  187. package/components/data/table/components/TableHeader.js +174 -0
  188. package/components/data/table/components/TablePanelHeading.js +68 -0
  189. package/components/data/table/components/index.js +74 -0
  190. package/components/data/table/hooks/index.js +219 -0
  191. package/components/data/table/hooks/useCellState.js +117 -0
  192. package/components/data/table/hooks/useDynamicColumns.js +85 -0
  193. package/components/data/table/hooks/useEditingState.js +47 -0
  194. package/components/data/table/hooks/useFormWidget.js +184 -0
  195. package/components/data/table/hooks/usePaginationState.js +60 -0
  196. package/components/data/table/hooks/usePanelStructure.js +40 -0
  197. package/components/data/table/hooks/useResponsiveColumns.js +34 -0
  198. package/components/data/table/hooks/useRowExpansion.js +110 -0
  199. package/components/data/table/hooks/useRowHandlers.js +38 -0
  200. package/components/data/table/hooks/useRowSelection.js +213 -0
  201. package/components/data/table/hooks/useServerSideSorting.js +165 -0
  202. package/components/data/table/hooks/useTableColumns.js +263 -0
  203. package/components/data/table/hooks/useTableData.js +154 -0
  204. package/components/data/table/hooks/useTableEdit.js +467 -0
  205. package/components/data/table/hooks/useTableEffects.js +139 -0
  206. package/components/data/table/hooks/useTableFilter.js +389 -0
  207. package/components/data/table/hooks/useTableInitialization.js +103 -0
  208. package/components/data/table/hooks/useTableState.js +69 -0
  209. package/components/data/table/hooks/useTableStateManager.js +558 -0
  210. package/components/data/table/index.js +1295 -0
  211. package/components/data/table/live-table/index.js +232 -0
  212. package/components/data/table/props.js +5 -0
  213. package/components/data/table/table-action/index.js +78 -0
  214. package/components/data/table/table-column/index.js +35 -0
  215. package/components/data/table/table-row/index.js +49 -0
  216. package/components/data/table/table-row-action/index.js +74 -0
  217. package/components/data/table/utils/buildSelectionColumns.js +173 -0
  218. package/components/data/table/utils/columnBuilder.js +209 -0
  219. package/components/data/table/utils/columnProxy.js +48 -0
  220. package/components/data/table/utils/columnWidthDistribution.js +98 -0
  221. package/components/data/table/utils/constants.js +80 -0
  222. package/components/data/table/utils/crud-handlers.js +518 -0
  223. package/components/data/table/utils/dynamic-columns.js +118 -0
  224. package/components/data/table/utils/index.js +607 -0
  225. package/components/data/table/utils/renderDisplayCell.js +183 -0
  226. package/components/data/table/utils/selectionUtils.js +166 -0
  227. package/components/data/table/utils/table-helpers.js +100 -0
  228. package/components/data/table/utils/validation.js +124 -0
  229. package/components/data/types.js +113 -0
  230. package/components/data/utils/field-data-utils.js +66 -0
  231. package/components/data/utils/filter-field-util.js +81 -0
  232. package/components/data/utils/index.js +216 -0
  233. package/components/dialogs/alert-dialog/index.js +80 -0
  234. package/components/dialogs/confirm-dialog/index.js +105 -0
  235. package/components/dialogs/dialog/index.js +56 -0
  236. package/components/dialogs/dialog-actions/index.js +18 -0
  237. package/components/dialogs/dialog-body/index.js +21 -0
  238. package/components/dialogs/dialog-content/index.js +30 -0
  239. package/components/dialogs/dialog-header/index.js +93 -0
  240. package/components/dialogs/iframe-dialog/index.js +114 -0
  241. package/components/dialogs/index.js +129 -0
  242. package/components/dialogs/login-dialog/index.js +369 -0
  243. package/components/dialogs/login-dialog/props.js +5 -0
  244. package/components/dialogs/page-dialog/index.js +96 -0
  245. package/components/dialogs/withDialogWrapper.js +108 -0
  246. package/components/form/button/index.js +216 -0
  247. package/components/form/button-group/index.js +60 -0
  248. package/components/input/calendar/index.js +546 -0
  249. package/components/input/calendar/props.js +5 -0
  250. package/components/input/calendar/utils.js +340 -0
  251. package/components/input/chips/SortableChip/index.js +115 -0
  252. package/components/input/chips/SortableChip/props.js +5 -0
  253. package/components/input/chips/index.js +488 -0
  254. package/components/input/chips/props.js +5 -0
  255. package/components/input/chips/utils.js +259 -0
  256. package/components/input/color-picker/index.js +678 -0
  257. package/components/input/color-picker/props.js +5 -0
  258. package/components/input/composite/index.js +137 -0
  259. package/components/input/currency/index.js +263 -0
  260. package/components/input/currency/props.js +5 -0
  261. package/components/input/default/checkbox/index.js +230 -0
  262. package/components/input/default/checkbox/props.js +5 -0
  263. package/components/input/default/checkboxset/index.js +476 -0
  264. package/components/input/default/checkboxset/props.js +5 -0
  265. package/components/input/default/radioset/index.js +379 -0
  266. package/components/input/default/radioset/props.js +5 -0
  267. package/components/input/default/switch/index.js +490 -0
  268. package/components/input/default/switch/prop.js +5 -0
  269. package/components/input/epoch/date/components/DatePickerPopover.js +220 -0
  270. package/components/input/epoch/date/index.js +520 -0
  271. package/components/input/epoch/date/props.js +5 -0
  272. package/components/input/epoch/date/styled.js +70 -0
  273. package/components/input/epoch/date/utils.js +108 -0
  274. package/components/input/epoch/datetime/index.js +656 -0
  275. package/components/input/epoch/datetime/props.js +5 -0
  276. package/components/input/epoch/datetime/styled.js +90 -0
  277. package/components/input/epoch/datetime/utils.js +244 -0
  278. package/components/input/epoch/time/index.js +412 -0
  279. package/components/input/epoch/time/props.js +5 -0
  280. package/components/input/epoch/time/utils.js +209 -0
  281. package/components/input/fileupload/Utils.js +134 -0
  282. package/components/input/fileupload/components/ListItems.js +140 -0
  283. package/components/input/fileupload/components/MultiUpload.js +85 -0
  284. package/components/input/fileupload/components/SingleUpload.js +65 -0
  285. package/components/input/fileupload/index.js +170 -0
  286. package/components/input/fileupload/props.js +5 -0
  287. package/components/input/fileupload/useFileUpload.js +400 -0
  288. package/components/input/number/index.js +295 -0
  289. package/components/input/number/props.js +5 -0
  290. package/components/input/rating/index.js +368 -0
  291. package/components/input/rating/props.js +5 -0
  292. package/components/input/select/index.js +344 -0
  293. package/components/input/select/props.js +5 -0
  294. package/components/input/slider/index.js +167 -0
  295. package/components/input/slider/props.js +5 -0
  296. package/components/input/text/index.js +434 -0
  297. package/components/input/text/props.js +5 -0
  298. package/components/input/text/util.js +179 -0
  299. package/components/input/textarea/index.js +347 -0
  300. package/components/input/textarea/props.js +5 -0
  301. package/components/layout/footer/index.js +30 -0
  302. package/components/layout/header/index.js +30 -0
  303. package/components/layout/leftnav/index.js +44 -0
  304. package/components/layout/rightnav/index.js +32 -0
  305. package/components/layout/topnav/index.js +34 -0
  306. package/components/navbar/index.js +41 -0
  307. package/components/navbar/nav/index.js +102 -0
  308. package/components/navbar/nav/props.js +5 -0
  309. package/components/navbar/nav-item/index.js +44 -0
  310. package/components/navigation/breadcrumb/index.js +56 -0
  311. package/components/navigation/breadcrumb/props.js +5 -0
  312. package/components/navigation/menu/components/ListItems.js +66 -0
  313. package/components/navigation/menu/constants.js +101 -0
  314. package/components/navigation/menu/index.js +807 -0
  315. package/components/navigation/menu/props.js +5 -0
  316. package/components/navigation/popover/index.js +209 -0
  317. package/components/navigation/popover/props.js +15 -0
  318. package/components/page/content/index.js +28 -0
  319. package/components/page/error-boundary/index.js +108 -0
  320. package/components/page/index.js +137 -0
  321. package/components/page/page-content/index.js +23 -0
  322. package/components/page/partial/index.js +36 -0
  323. package/components/page/partial-container/index.js +48 -0
  324. package/components/page/props.js +5 -0
  325. package/components/page/toast-container/index.js +33 -0
  326. package/components/prefab/container/index.js +46 -0
  327. package/components/prefab/index.js +67 -0
  328. package/context/AppContext.js +25 -0
  329. package/context/AppSpinnerProvider.js +43 -0
  330. package/context/LocalizationProvider.js +79 -0
  331. package/context/PrefabContext.js +66 -0
  332. package/context/WidgetProvider.js +187 -0
  333. package/core/app-config.js +1 -0
  334. package/core/app.service.js +357 -0
  335. package/core/appVariablesStore.js +20 -0
  336. package/core/appstore.js +88 -0
  337. package/core/constants/currency-constant.js +1071 -0
  338. package/core/constants/events.js +34 -0
  339. package/core/constants/index.js +27 -0
  340. package/core/dialog.service.js +76 -0
  341. package/core/event-notifier.js +151 -0
  342. package/core/formatter/date-formatters.js +222 -0
  343. package/core/formatter/index.js +131 -0
  344. package/core/formatter/number-formatters.js +142 -0
  345. package/core/formatter/security-formatters.js +323 -0
  346. package/core/formatter/string-formatters.js +52 -0
  347. package/core/formatter/types.js +18 -0
  348. package/core/formatters.js +24 -0
  349. package/core/proxy-service.js +412 -0
  350. package/core/script-registry.js +63 -0
  351. package/core/security.service.js +11 -0
  352. package/core/util/common.js +33 -0
  353. package/core/util/dom.js +107 -0
  354. package/core/util/index.js +136 -0
  355. package/core/util/security.js +184 -0
  356. package/core/util/utils.js +189 -0
  357. package/core/widget-observer.js +98 -0
  358. package/higherOrder/BaseApp.js +430 -0
  359. package/higherOrder/BaseAppProps.js +5 -0
  360. package/higherOrder/BaseDateTime.js +251 -0
  361. package/higherOrder/BasePage.js +715 -0
  362. package/higherOrder/BasePartial.js +124 -0
  363. package/higherOrder/BasePrefab.js +145 -0
  364. package/higherOrder/DataNav.js +377 -0
  365. package/higherOrder/helper.js +43 -0
  366. package/higherOrder/props.js +5 -0
  367. package/higherOrder/withBaseWrapper.js +183 -0
  368. package/hooks/useAccess.js +308 -0
  369. package/hooks/useAppConfig.js +42 -0
  370. package/hooks/useAuth.js +562 -0
  371. package/hooks/useDataSourceSubscription.js +125 -0
  372. package/hooks/useDebounce.js +76 -0
  373. package/hooks/useDeviceVisibility.js +49 -0
  374. package/hooks/useHttp.js +338 -0
  375. package/libs/index.js +20 -0
  376. package/mui-config/theme-provider.js +17 -0
  377. package/mui-config/theme.js +371 -0
  378. package/package-lock.json +10183 -0
  379. package/package.json +95 -0
  380. package/store/index.js +33 -0
  381. package/store/middleware/navigationMiddleware.js +48 -0
  382. package/store/slices/appConfigSlice.js +103 -0
  383. package/store/slices/authSlice.js +508 -0
  384. package/store/slices/i18nSlice.js +206 -0
  385. package/types/index.js +15 -0
  386. package/utils/dataset-util.js +174 -0
  387. package/utils/eval-expression.js +32 -0
  388. package/utils/form-state.util.js +140 -0
  389. package/utils/form-utils.js +187 -0
  390. package/utils/format-util.js +260 -0
  391. package/utils/page-params-util.js +24 -0
  392. package/utils/resource-url.js +27 -0
  393. package/utils/state-persistance.js +343 -0
  394. package/utils/style-utils.js +73 -0
  395. package/utils/transformedDataset-utils.js +633 -0
  396. package/utils/widget-cleanup-util.js +84 -0
  397. package/utils/widgets.js +99 -0
  398. package/variables/base-variable.js +173 -0
  399. package/variables/constants.js +27 -0
  400. package/variables/live-variable.js +166 -0
  401. package/variables/model-variable.js +77 -0
  402. package/variables/service-variable.js +307 -0
@@ -0,0 +1,1023 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof3 = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
13
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
14
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
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 _clsx = _interopRequireDefault(require("clsx"));
19
+ var _image = _interopRequireDefault(require("next/image"));
20
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
21
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
22
+ var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
23
+ var _MenuList = _interopRequireDefault(require("@mui/material/MenuList"));
24
+ var _ClickAwayListener = _interopRequireDefault(require("@mui/material/ClickAwayListener"));
25
+ var _Paper = _interopRequireDefault(require("@mui/material/Paper"));
26
+ var _Popper = _interopRequireDefault(require("@mui/material/Popper"));
27
+ var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
28
+ var _dompurify = _interopRequireDefault(require("dompurify"));
29
+ var _material = require("@mui/material");
30
+ var _withBaseWrapper = _interopRequireDefault(require("@wavemaker/react-runtime/higherOrder/withBaseWrapper"));
31
+ var _lodash = require("lodash");
32
+ var _transformedDatasetUtils = require("@wavemaker/react-runtime/utils/transformedDataset-utils");
33
+ var _providers = require("./providers");
34
+ var _excluded = ["showclear", "debouncetime", "searchkey", "searchon", "matchmode", "minchars", "limit", "tabindex", "placeholder", "dropup", "readonly", "datavalue", "dataset", "datafield", "displayfield", "disabled", "autofocus", "type", "showsearchicon", "showbackbutton", "imagewidth", "width", "displaylabel", "displayimagesrc", "displayexpression", "datacompletemsg", "loadingdatamsg", "clearsearchiconclass", "backsearchiconclass", "searchiconclass", "navsearchbar", "class", "shortcutkey", "required", "hint", "arialabel", "onBeforeservicecall", "onBlur", "onChange", "onFocus", "onSelect", "onSubmit", "onClear", "onSearch", "onDatasetready", "conditionalstyles", "styles", "name", "listener", "value", "datasetItems", "selectedItems", "displayValue", "groupedData", "handleHeaderClick", "toggleAllHeaders", "isDestroyed", "validation", "casesensitive", "isUpdateRequired", "onQuerySearch"];
35
+ 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); }
36
+ var __jsx = _react["default"].createElement;
37
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
38
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
39
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
40
+ 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; }
41
+ 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; }
42
+ var DEFAULT_CLASS = "app-search input-group";
43
+ var Search = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
44
+ var _props$showclear = props.showclear,
45
+ showclear = _props$showclear === void 0 ? false : _props$showclear,
46
+ _props$debouncetime = props.debouncetime,
47
+ debouncetime = _props$debouncetime === void 0 ? 250 : _props$debouncetime,
48
+ searchkey = props.searchkey,
49
+ _props$searchon = props.searchon,
50
+ searchon = _props$searchon === void 0 ? "typing" : _props$searchon,
51
+ _props$matchmode = props.matchmode,
52
+ matchmode = _props$matchmode === void 0 ? "contains" : _props$matchmode,
53
+ _props$minchars = props.minchars,
54
+ minchars = _props$minchars === void 0 ? 1 : _props$minchars,
55
+ _props$limit = props.limit,
56
+ limit = _props$limit === void 0 ? 10 : _props$limit,
57
+ _props$tabindex = props.tabindex,
58
+ tabindex = _props$tabindex === void 0 ? 0 : _props$tabindex,
59
+ _props$placeholder = props.placeholder,
60
+ placeholder = _props$placeholder === void 0 ? "Search" : _props$placeholder,
61
+ _props$dropup = props.dropup,
62
+ dropup = _props$dropup === void 0 ? false : _props$dropup,
63
+ _props$readonly = props.readonly,
64
+ readonly = _props$readonly === void 0 ? false : _props$readonly,
65
+ datavalue = props.datavalue,
66
+ _props$dataset = props.dataset,
67
+ dataset = _props$dataset === void 0 ? [] : _props$dataset,
68
+ _props$datafield = props.datafield,
69
+ datafield = _props$datafield === void 0 ? "All Fields" : _props$datafield,
70
+ displayfield = props.displayfield,
71
+ _props$disabled = props.disabled,
72
+ disabled = _props$disabled === void 0 ? false : _props$disabled,
73
+ _props$autofocus = props.autofocus,
74
+ autofocus = _props$autofocus === void 0 ? false : _props$autofocus,
75
+ _props$type = props.type,
76
+ type = _props$type === void 0 ? "search" : _props$type,
77
+ _props$showsearchicon = props.showsearchicon,
78
+ showsearchicon = _props$showsearchicon === void 0 ? true : _props$showsearchicon,
79
+ _props$showbackbutton = props.showbackbutton,
80
+ showbackbutton = _props$showbackbutton === void 0 ? false : _props$showbackbutton,
81
+ _props$imagewidth = props.imagewidth,
82
+ imagewidth = _props$imagewidth === void 0 ? "16px" : _props$imagewidth,
83
+ width = props.width,
84
+ displaylabel = props.displaylabel,
85
+ displayimagesrc = props.displayimagesrc,
86
+ displayexpression = props.displayexpression,
87
+ _props$datacompletems = props.datacompletemsg,
88
+ datacompletemsg = _props$datacompletems === void 0 ? "No more data to load" : _props$datacompletems,
89
+ _props$loadingdatamsg = props.loadingdatamsg,
90
+ loadingdatamsg = _props$loadingdatamsg === void 0 ? "Loading items..." : _props$loadingdatamsg,
91
+ _props$clearsearchico = props.clearsearchiconclass,
92
+ clearsearchiconclass = _props$clearsearchico === void 0 ? "wi wi-close" : _props$clearsearchico,
93
+ _props$backsearchicon = props.backsearchiconclass,
94
+ backsearchiconclass = _props$backsearchicon === void 0 ? "wi wi-arrow-left" : _props$backsearchicon,
95
+ _props$searchiconclas = props.searchiconclass,
96
+ searchiconclass = _props$searchiconclas === void 0 ? "sl-search wm-sl-l" : _props$searchiconclas,
97
+ _props$navsearchbar = props.navsearchbar,
98
+ navsearchbar = _props$navsearchbar === void 0 ? false : _props$navsearchbar,
99
+ className = props["class"],
100
+ shortcutkey = props.shortcutkey,
101
+ required = props.required,
102
+ hint = props.hint,
103
+ _props$arialabel = props.arialabel,
104
+ arialabel = _props$arialabel === void 0 ? "Search field" : _props$arialabel,
105
+ onBeforeservicecall = props.onBeforeservicecall,
106
+ onBlur = props.onBlur,
107
+ onChange = props.onChange,
108
+ onFocus = props.onFocus,
109
+ onSelect = props.onSelect,
110
+ onSubmit = props.onSubmit,
111
+ onClear = props.onClear,
112
+ onSearch = props.onSearch,
113
+ onDatasetready = props.onDatasetready,
114
+ _props$conditionalsty = props.conditionalstyles,
115
+ conditionalstyles = _props$conditionalsty === void 0 ? {} : _props$conditionalsty,
116
+ _props$styles = props.styles,
117
+ styles = _props$styles === void 0 ? {} : _props$styles,
118
+ name = props.name,
119
+ listener = props.listener,
120
+ value = props.value,
121
+ datasetItems = props.datasetItems,
122
+ selectedItems = props.selectedItems,
123
+ displayValue = props.displayValue,
124
+ initialGroupedData = props.groupedData,
125
+ handleHeaderClick = props.handleHeaderClick,
126
+ toggleAllHeaders = props.toggleAllHeaders,
127
+ isDestroyed = props.isDestroyed,
128
+ validation = props.validation,
129
+ _props$casesensitive = props.casesensitive,
130
+ casesensitive = _props$casesensitive === void 0 ? false : _props$casesensitive,
131
+ isUpdateRequired = props.isUpdateRequired,
132
+ onQuerySearch = props.onQuerySearch,
133
+ restProps = (0, _objectWithoutProperties2["default"])(props, _excluded);
134
+ var searchRef = (0, _react.useRef)(null);
135
+ var inputRef = (0, _react.useRef)(null);
136
+ var dropdownRef = (0, _react.useRef)(null);
137
+ var _useState = (0, _react.useState)(typeof datavalue === "string" ? datavalue : ""),
138
+ query = _useState[0],
139
+ setQuery = _useState[1];
140
+ var _useState2 = (0, _react.useState)(false),
141
+ isOpen = _useState2[0],
142
+ setIsOpen = _useState2[1];
143
+ var _useState3 = (0, _react.useState)(false),
144
+ loadingItems = _useState3[0],
145
+ setLoadingItems = _useState3[1];
146
+ var _useState4 = (0, _react.useState)(false),
147
+ isScrolled = _useState4[0],
148
+ setIsScrolled = _useState4[1];
149
+ var _useState5 = (0, _react.useState)(1),
150
+ page = _useState5[0],
151
+ setPage = _useState5[1];
152
+ var _useState6 = (0, _react.useState)([]),
153
+ formattedDataset = _useState6[0],
154
+ setFormattedDataset = _useState6[1];
155
+ var _useState7 = (0, _react.useState)({}),
156
+ groupedData = _useState7[0],
157
+ setGroupedData = _useState7[1];
158
+ var _useState8 = (0, _react.useState)(type === "autocomplete"),
159
+ listenQuery = _useState8[0],
160
+ setListenQuery = _useState8[1]; // Only listen for autocomplete type
161
+ var _useState9 = (0, _react.useState)(false),
162
+ menuOpen = _useState9[0],
163
+ setMenuOpen = _useState9[1]; // Track menu open state separately
164
+ var _useState0 = (0, _react.useState)(true),
165
+ hasMoreData = _useState0[0],
166
+ setHasMoreData = _useState0[1]; // Track if there's more data to load
167
+ var _useState1 = (0, _react.useState)(null),
168
+ selectedItem = _useState1[0],
169
+ setSelectedItem = _useState1[1]; // Track the selected item
170
+ var _useState10 = (0, _react.useState)(undefined),
171
+ updateRequired = _useState10[0],
172
+ setUpdateRequired = _useState10[1];
173
+ (0, _react.useEffect)(function () {
174
+ // do not remove this code specifically handled for chips component for clearing the query.
175
+ if (datavalue == "") {
176
+ setQuery("");
177
+ }
178
+ }, [datavalue]);
179
+
180
+ // Combine width with other styles
181
+ var searchStyle = _objectSpread(_objectSpread({
182
+ width: width
183
+ }, styles), conditionalstyles);
184
+
185
+ // Create dataProvider instance
186
+ var dataProvider = (0, _react.useMemo)(function () {
187
+ return new _providers.DataProvider();
188
+ }, []);
189
+
190
+ // Focus input on mount
191
+ (0, _react.useEffect)(function () {
192
+ if (autofocus) {
193
+ var _inputRef$current;
194
+ (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus();
195
+ }
196
+ }, []);
197
+
198
+ // Handle shortcut key
199
+ (0, _react.useEffect)(function () {
200
+ var handleShortcutKey = function handleShortcutKey(event) {
201
+ if (shortcutkey && event.key.toLowerCase() === shortcutkey.toLowerCase()) {
202
+ var _inputRef$current2;
203
+ event.preventDefault();
204
+ (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 || _inputRef$current2.focus();
205
+ }
206
+ };
207
+ window.addEventListener("keydown", handleShortcutKey);
208
+ return function () {
209
+ return window.removeEventListener("keydown", handleShortcutKey);
210
+ };
211
+ }, [shortcutkey]);
212
+
213
+ // Process and prepare dataset for autocomplete type since it list should be loaded immediately when the component is mounted
214
+ (0, _react.useEffect)(function () {
215
+ // For autocomplete type load data immediately
216
+ if (type === "autocomplete") {
217
+ getDataSource("");
218
+ }
219
+ }, [dataset, type]);
220
+
221
+ // Update listen query state when type changes
222
+ (0, _react.useEffect)(function () {
223
+ setListenQuery(type === "autocomplete");
224
+ }, [type]);
225
+ var getGroupedData = (0, _react.useCallback)(function (data) {
226
+ if (props !== null && props !== void 0 && props.groupby && data !== null && data !== void 0 && data.length) {
227
+ var result = {};
228
+ data.forEach(function (item) {
229
+ if (!(props !== null && props !== void 0 && props.groupby)) {
230
+ return;
231
+ }
232
+ var groupKey = item[props === null || props === void 0 ? void 0 : props.groupby] || "ungrouped";
233
+ if (!result[groupKey]) {
234
+ result[groupKey] = [];
235
+ }
236
+ result[groupKey].push(item);
237
+ });
238
+ return result;
239
+ }
240
+ return {
241
+ ungrouped: data
242
+ };
243
+ }, [props === null || props === void 0 ? void 0 : props.groupby]);
244
+ var getDataSource = (0, _react.useCallback)(/*#__PURE__*/function () {
245
+ var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(query, nextPage) {
246
+ var normalizedData, dataConfig, _isUpdateRequired, _response, dataSet, localDataProvider, response, data, isLastPage;
247
+ return _regenerator["default"].wrap(function _callee$(_context) {
248
+ while (1) switch (_context.prev = _context.next) {
249
+ case 0:
250
+ if (!(!query && (type === "search" || type === "autocomplete" && !nextPage))) {
251
+ _context.next = 5;
252
+ break;
253
+ }
254
+ setFormattedDataset([]);
255
+ setIsOpen(false);
256
+ setMenuOpen(false);
257
+ return _context.abrupt("return", []);
258
+ case 5:
259
+ normalizedData = (0, _transformedDatasetUtils.transformDataset)(dataset, datafield, displayfield, displaylabel, displayexpression, props.orderby, props.groupby, props.dataPath);
260
+ dataConfig = {
261
+ dataset: normalizedData,
262
+ datafield: datafield || "All Fields",
263
+ query: query,
264
+ matchMode: matchmode,
265
+ casesensitive: false,
266
+ searchKey: searchkey,
267
+ isformfield: false,
268
+ limit: limit,
269
+ page: nextPage ? page + 1 : 1,
270
+ isLocalFilter: true,
271
+ onBeforeservicecall: onBeforeservicecall
272
+ };
273
+ _context.prev = 7;
274
+ setLoadingItems(true);
275
+ _isUpdateRequired = updateRequired;
276
+ if (searchkey && updateRequired === undefined) {
277
+ _isUpdateRequired = dataProvider.init(props);
278
+ setUpdateRequired(_isUpdateRequired);
279
+ }
280
+
281
+ // Handle remote search if required
282
+ if (!(searchkey && _isUpdateRequired)) {
283
+ _context.next = 31;
284
+ break;
285
+ }
286
+ _context.prev = 12;
287
+ _context.next = 15;
288
+ return dataProvider === null || dataProvider === void 0 ? void 0 : dataProvider.invokeVariable(props, query);
289
+ case 15:
290
+ _response = _context.sent;
291
+ setLoadingItems(false);
292
+ if (!_response) {
293
+ _context.next = 23;
294
+ break;
295
+ }
296
+ dataSet = Array.isArray(_response) ? _response : [_response];
297
+ setFormattedDataset(dataSet);
298
+
299
+ // Group data if grouping is enabled
300
+ if (props !== null && props !== void 0 && props.groupby) {
301
+ setGroupedData(getGroupedData(dataSet));
302
+ }
303
+
304
+ // Update UI state based on results
305
+ if (dataSet.length > 0) {
306
+ setIsOpen(true);
307
+ setMenuOpen(true);
308
+ } else {
309
+ setIsOpen(false);
310
+ setMenuOpen(false);
311
+ }
312
+ return _context.abrupt("return", dataSet);
313
+ case 23:
314
+ _context.next = 30;
315
+ break;
316
+ case 25:
317
+ _context.prev = 25;
318
+ _context.t0 = _context["catch"](12);
319
+ setLoadingItems(false);
320
+ setIsOpen(false);
321
+ setMenuOpen(false);
322
+ // TODO: call a toast here
323
+ case 30:
324
+ return _context.abrupt("return", []);
325
+ case 31:
326
+ if (!(!normalizedData || normalizedData.length === 0)) {
327
+ _context.next = 33;
328
+ break;
329
+ }
330
+ return _context.abrupt("return", []);
331
+ case 33:
332
+ localDataProvider = new _providers.LocalDataProvider();
333
+ _context.next = 36;
334
+ return localDataProvider.filter(dataConfig);
335
+ case 36:
336
+ response = _context.sent;
337
+ data = response.data, isLastPage = response.isLastPage; // Update hasMoreData state based on results
338
+ setHasMoreData(data.length > 0 && !isLastPage);
339
+ if (!nextPage) {
340
+ setFormattedDataset(data);
341
+ setGroupedData(getGroupedData(data));
342
+ } else {
343
+ setFormattedDataset(function (prev) {
344
+ return [].concat((0, _toConsumableArray2["default"])(prev), (0, _toConsumableArray2["default"])(data));
345
+ });
346
+ setGroupedData(getGroupedData([].concat((0, _toConsumableArray2["default"])(formattedDataset), (0, _toConsumableArray2["default"])(data))));
347
+ }
348
+ setPage(function (prev) {
349
+ return nextPage ? prev + 1 : 1;
350
+ });
351
+ setIsScrolled(false);
352
+
353
+ // Show dropdown if we have results
354
+ if (data.length > 0) {
355
+ setIsOpen(true);
356
+ setMenuOpen(true);
357
+ }
358
+
359
+ // Call onDatasetready callback if provided
360
+ if (onDatasetready && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
361
+ onDatasetready(listener.Widgets[name], data);
362
+ }
363
+ return _context.abrupt("return", data);
364
+ case 47:
365
+ _context.prev = 47;
366
+ _context.t1 = _context["catch"](7);
367
+ console.error("Error fetching data:", _context.t1);
368
+ return _context.abrupt("return", []);
369
+ case 51:
370
+ _context.prev = 51;
371
+ setLoadingItems(false);
372
+ return _context.finish(51);
373
+ case 54:
374
+ case "end":
375
+ return _context.stop();
376
+ }
377
+ }, _callee, null, [[7, 47, 51, 54], [12, 25]]);
378
+ }));
379
+ return function (_x, _x2) {
380
+ return _ref.apply(this, arguments);
381
+ };
382
+ }(), [dataset, datafield, matchmode, searchkey, limit, onBeforeservicecall, page, formattedDataset, getGroupedData, type, onDatasetready, listener === null || listener === void 0 ? void 0 : listener.Widgets, name]);
383
+
384
+ // First, modify getDataSourceAsObservable to handle the state updates properly
385
+ var getDataSourceDebounced = (0, _react.useMemo)(function () {
386
+ return (0, _lodash.debounce)(/*#__PURE__*/function () {
387
+ var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(query) {
388
+ var data;
389
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
390
+ while (1) switch (_context2.prev = _context2.next) {
391
+ case 0:
392
+ if (query) {
393
+ _context2.next = 5;
394
+ break;
395
+ }
396
+ setFormattedDataset([]);
397
+ setIsOpen(false);
398
+ setMenuOpen(false);
399
+ return _context2.abrupt("return");
400
+ case 5:
401
+ if (!(query.length >= minchars)) {
402
+ _context2.next = 22;
403
+ break;
404
+ }
405
+ _context2.prev = 6;
406
+ setLoadingItems(true);
407
+ _context2.next = 10;
408
+ return getDataSource(query);
409
+ case 10:
410
+ data = _context2.sent;
411
+ setLoadingItems(false);
412
+
413
+ // Update the formatted dataset first
414
+ setFormattedDataset(data);
415
+
416
+ // Then update visibility based on results
417
+ if (data && data.length > 0) {
418
+ setIsOpen(true);
419
+ setMenuOpen(true);
420
+ } else {
421
+ setIsOpen(false);
422
+ setMenuOpen(false);
423
+ }
424
+ _context2.next = 22;
425
+ break;
426
+ case 16:
427
+ _context2.prev = 16;
428
+ _context2.t0 = _context2["catch"](6);
429
+ console.error("Error in search:", _context2.t0);
430
+ setLoadingItems(false);
431
+ setIsOpen(false);
432
+ setMenuOpen(false);
433
+ case 22:
434
+ case "end":
435
+ return _context2.stop();
436
+ }
437
+ }, _callee2, null, [[6, 16]]);
438
+ }));
439
+ return function (_x3) {
440
+ return _ref2.apply(this, arguments);
441
+ };
442
+ }(), debouncetime);
443
+ }, [getDataSource, minchars, debouncetime]);
444
+
445
+ // listen to query change and trigger debounced search
446
+ (0, _react.useEffect)(function () {
447
+ if (query && (type === "autocomplete" && listenQuery || type === "search" && searchon === "typing")) {
448
+ getDataSourceDebounced(query);
449
+ }
450
+ }, [query]);
451
+
452
+ // Simplify handleInputChange to only update query
453
+ var handleInputChange = function handleInputChange(event) {
454
+ var _event$target;
455
+ var queryValue = (event === null || event === void 0 || (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value) || "";
456
+ setQuery(queryValue);
457
+
458
+ // Call onChange handlers
459
+ if (onChange && listener !== null && listener !== void 0 && listener.Widgets && name && name in (listener === null || listener === void 0 ? void 0 : listener.Widgets)) {
460
+ onChange(event, listener.Widgets[name], queryValue, queryValue);
461
+ }
462
+
463
+ // Clear results and close dropdown if query is empty
464
+ if (!queryValue) {
465
+ setFormattedDataset([]);
466
+ setSelectedItem(null);
467
+ setIsOpen(false);
468
+ setMenuOpen(false);
469
+ if (onClear && listener !== null && listener !== void 0 && listener.Widgets && name && name in (listener === null || listener === void 0 ? void 0 : listener.Widgets)) {
470
+ onClear(event, listener.Widgets[name]);
471
+ }
472
+ if (listener !== null && listener !== void 0 && listener.onChange) {
473
+ listener.onChange(name, {
474
+ datavalue: {}
475
+ });
476
+ }
477
+ return;
478
+ }
479
+
480
+ // For autocomplete type, only show dropdown if we meet minimum chars
481
+ if (type === "autocomplete" && queryValue.length < minchars) {
482
+ setFormattedDataset([]);
483
+ setIsOpen(false);
484
+ setMenuOpen(false);
485
+ return;
486
+ }
487
+ };
488
+ var handleKeyDown = function handleKeyDown(event) {
489
+ if (event.key === "Enter") {
490
+ // If dropdown is open and we have items
491
+ if (menuOpen && formattedDataset.length > 0) {
492
+ var _dropdownRef$current;
493
+ var matches = ((_dropdownRef$current = dropdownRef.current) === null || _dropdownRef$current === void 0 ? void 0 : _dropdownRef$current.querySelectorAll("li")) || [];
494
+ if (matches.length > 0) {
495
+ var firstMatch = matches[0];
496
+ handleMatchSelect(firstMatch);
497
+ }
498
+ } else {
499
+ // For search type with searchon=iconclick or no searchon specified
500
+ if (type === "search" && (!searchon || searchon === "onsearchiconclick")) {
501
+ handleSearchClick(event);
502
+ }
503
+
504
+ // Fire onSubmit if provided
505
+ if (onSubmit && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
506
+ onSubmit(event, listener.Widgets[name]);
507
+ }
508
+ }
509
+ } else if (event.key === "ArrowDown") {
510
+ event.preventDefault();
511
+ handleFocusNextItem();
512
+ } else if (event.key === "Escape") {
513
+ setIsOpen(false);
514
+ setMenuOpen(false);
515
+ }
516
+ };
517
+ var handleClearSearch = function handleClearSearch(event) {
518
+ var _inputRef$current3;
519
+ setQuery("");
520
+ setIsOpen(false);
521
+ setMenuOpen(false);
522
+ setSelectedItem(null);
523
+ setFormattedDataset([]);
524
+ if (onClear && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
525
+ onClear(event, listener.Widgets[name]);
526
+ }
527
+
528
+ // Focus back on input
529
+ (_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 || _inputRef$current3.focus();
530
+ };
531
+ var handleClickAway = function handleClickAway(e) {
532
+ setIsOpen(false);
533
+ setMenuOpen(false);
534
+ handleBlur(e);
535
+ };
536
+ var handleFocus = function handleFocus(event) {
537
+ // For autocomplete type
538
+ if (type === "autocomplete") {
539
+ // If we already have results, show them
540
+ if (formattedDataset.length > 0) {
541
+ setIsOpen(true);
542
+ setMenuOpen(true);
543
+ }
544
+ // If we have a query that meets minimum length, search with it
545
+ else {
546
+ setLoadingItems(true);
547
+ var normalizedData = (0, _transformedDatasetUtils.transformDataset)(dataset, datafield, displayfield, displaylabel, displayexpression, props.orderby, props.groupby);
548
+ setFormattedDataset(normalizedData);
549
+ setIsOpen(true);
550
+ setMenuOpen(true);
551
+ setLoadingItems(false);
552
+ }
553
+ }
554
+
555
+ // Call onFocus handler if provided
556
+ if (onFocus && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
557
+ onFocus(event, listener.Widgets[name]);
558
+ }
559
+ };
560
+ var handleBlur = function handleBlur(event) {
561
+ // Don't close dropdown immediately to allow click events on menu items
562
+ setTimeout(function () {
563
+ var _dropdownRef$current2;
564
+ if (document.activeElement !== dropdownRef.current && !((_dropdownRef$current2 = dropdownRef.current) !== null && _dropdownRef$current2 !== void 0 && _dropdownRef$current2.contains(document.activeElement))) {
565
+ setIsOpen(false);
566
+ setMenuOpen(false);
567
+ }
568
+ }, 200);
569
+ if (onBlur && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
570
+ onBlur(event, listener.Widgets[name]);
571
+ }
572
+ };
573
+ var handleSearchClick = function handleSearchClick(event) {
574
+ // Reset hasMoreData state before new search
575
+ setHasMoreData(true);
576
+
577
+ // For search type with searchon=iconclick or no searchon specified
578
+ if (type === "search" && (!searchon || searchon === "onsearchiconclick")) {
579
+ // First set loading state
580
+ setLoadingItems(true);
581
+ getDataSource(query);
582
+ }
583
+
584
+ // Call the onSearch handler if provided
585
+ if (onSearch && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
586
+ onSearch(event, listener.Widgets[name]);
587
+ }
588
+ };
589
+ var handleFocusNextItem = function handleFocusNextItem() {
590
+ var _dropdownRef$current3;
591
+ // For autocomplete type, open dropdown if closed and no item is selected
592
+ if (type === "autocomplete" && !menuOpen && query.length >= minchars && !selectedItem) {
593
+ setIsOpen(true);
594
+ setMenuOpen(true);
595
+
596
+ // Load data if not loaded
597
+ if (formattedDataset.length === 0) {
598
+ getDataSource(query);
599
+ }
600
+ }
601
+
602
+ // Focus on first menu item
603
+ var matches = ((_dropdownRef$current3 = dropdownRef.current) === null || _dropdownRef$current3 === void 0 ? void 0 : _dropdownRef$current3.querySelectorAll("li")) || [];
604
+ if (matches.length > 0) {
605
+ var firstMatch = matches[0];
606
+ firstMatch.focus();
607
+ }
608
+ };
609
+ var handleMatchSelect = function handleMatchSelect(match) {
610
+ var itemData = match.getAttribute("data-item");
611
+ if (!itemData) return;
612
+ try {
613
+ var item = JSON.parse(itemData);
614
+
615
+ // Set display value in input
616
+ var displayVal = item.displayValue || item.label;
617
+ setQuery(displayVal);
618
+ setIsOpen(false);
619
+ setMenuOpen(false);
620
+ setSelectedItem(item); // Set the selected item
621
+ setFormattedDataset([]); // Clear the dropdown dataset
622
+
623
+ if (listener !== null && listener !== void 0 && listener.onChange) {
624
+ listener.onChange(name, {
625
+ datavalue: item.dataObject.value
626
+ });
627
+ }
628
+
629
+ // Trigger onSelect callback if provided
630
+ if (onSelect && listener !== null && listener !== void 0 && listener.Widgets && name && name in listener.Widgets) {
631
+ onSelect(new MouseEvent("click"), listener.Widgets[name], item);
632
+ }
633
+ } catch (error) {
634
+ console.error("Error parsing item data:", error);
635
+ }
636
+ };
637
+ var handleMenuItemClick = function handleMenuItemClick(event) {
638
+ handleMatchSelect(event.currentTarget);
639
+ };
640
+ var handleScroll = function handleScroll(event) {
641
+ if (!loadingItems && !isScrolled && hasMoreData && !selectedItem) {
642
+ var target = event.target;
643
+ if (target.scrollHeight - target.scrollTop <= target.clientHeight + 50) {
644
+ setIsScrolled(true);
645
+ getDataSource(query, true);
646
+ }
647
+ }
648
+ };
649
+ var renderGroupDivider = function renderGroupDivider(groupKey) {
650
+ if (props.groupby && groupKey !== "ungrouped") {
651
+ return __jsx(_MenuItem["default"], {
652
+ key: "header-".concat(groupKey),
653
+ onClick: handleMenuItemClick,
654
+ dense: true,
655
+ className: "list-group-header"
656
+ }, __jsx(_Typography["default"], {
657
+ variant: "h4",
658
+ className: "group-title",
659
+ style: {
660
+ padding: "10px 16px"
661
+ }
662
+ }, groupKey));
663
+ }
664
+ return null;
665
+ };
666
+ var prepareDataItem = function prepareDataItem(item, index) {
667
+ // Handle primitive values
668
+ if ((0, _typeof2["default"])(item) !== "object" || item === null) {
669
+ var stringValue = String(item);
670
+ return {
671
+ key: index,
672
+ value: item,
673
+ label: stringValue,
674
+ displayValue: stringValue,
675
+ displayImage: null,
676
+ dataObject: item
677
+ };
678
+ }
679
+
680
+ // Return if already normalized
681
+ var isNormalized = ["key", "value", "label", "displayValue"].every(function (prop) {
682
+ return item.hasOwnProperty(prop);
683
+ });
684
+ if (isNormalized) return item;
685
+
686
+ // Helper to find first valid field value
687
+ var findFieldValue = function findFieldValue(fields, fallback) {
688
+ var _iterator = _createForOfIteratorHelper(fields.filter(Boolean)),
689
+ _step;
690
+ try {
691
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
692
+ var field = _step.value;
693
+ if (field && item.hasOwnProperty(field) && item[field] != null && item[field] !== "") {
694
+ return item[field];
695
+ }
696
+ }
697
+ } catch (err) {
698
+ _iterator.e(err);
699
+ } finally {
700
+ _iterator.f();
701
+ }
702
+ return fallback;
703
+ };
704
+
705
+ // Get display value with priority: displayexpression > field names > first object value
706
+ var getDisplayValue = function getDisplayValue() {
707
+ // Try displayexpression first
708
+ if (displayexpression && typeof displayexpression === "function") {
709
+ try {
710
+ return displayexpression(item.dataObject ? item.dataObject : item);
711
+ } catch (e) {
712
+ console.warn("Error executing displayexpression:", e);
713
+ }
714
+ }
715
+
716
+ // Try predefined field names
717
+ var displayFields = [displaylabel, displayfield, "label", "name", "title", "text", "displayValue", "display"];
718
+ var fieldValue = findFieldValue(displayFields);
719
+ if (fieldValue != null) return String(fieldValue);
720
+
721
+ // Fallback to first object value
722
+ var firstValue = Object.values(item).find(function (val) {
723
+ return val != null;
724
+ });
725
+ return firstValue ? String(firstValue) : "";
726
+ };
727
+ var displayValue = getDisplayValue();
728
+ var keyFields = [datafield && datafield !== "All Fields" ? datafield : null, "id", "key", "value"];
729
+ var keyValue = findFieldValue(keyFields, index);
730
+ var displayImage = displayimagesrc && item[displayimagesrc] ? item[displayimagesrc] : null;
731
+ return {
732
+ key: keyValue,
733
+ value: item,
734
+ label: displayValue,
735
+ displayValue: displayValue,
736
+ displayImage: displayImage,
737
+ dataObject: item
738
+ };
739
+ };
740
+
741
+ // Add this helper function to highlight matching text
742
+ var highlightMatch = function highlightMatch(text, query) {
743
+ if (!query || !text) return text;
744
+ try {
745
+ var parts = text.split(new RegExp("(".concat(query, ")"), "gi"));
746
+ return parts.map(function (part, index) {
747
+ if (part.toLowerCase() === query.toLowerCase()) {
748
+ return __jsx("strong", {
749
+ key: index,
750
+ style: {
751
+ color: "var(--wm-search-dropdown-menu-item-color-matched)"
752
+ }
753
+ }, part);
754
+ }
755
+ return part;
756
+ });
757
+ } catch (e) {
758
+ // If there's any error in regex, return original text
759
+ return text;
760
+ }
761
+ };
762
+
763
+ // Update the renderItem function to use highlighting
764
+ var renderItem = function renderItem(item, query, index) {
765
+ // Convert raw data item to our format
766
+ var dataItem = prepareDataItem(item, index);
767
+
768
+ // Get the display text
769
+ var displayText = typeof dataItem.displayValue === "string" ? _dompurify["default"].sanitize(dataItem.displayValue) : String(dataItem.label);
770
+ return __jsx(_MenuItem["default"], {
771
+ key: "item-".concat(index, "-").concat(dataItem.key),
772
+ onClick: handleMenuItemClick,
773
+ "data-item": JSON.stringify(dataItem),
774
+ dense: true,
775
+ className: "search-dropdown-item",
776
+ style: {
777
+ padding: "10px 16px"
778
+ }
779
+ }, __jsx(_material.Box, {
780
+ component: "a",
781
+ style: {
782
+ textDecoration: "none",
783
+ color: "inherit"
784
+ }
785
+ }, dataItem.displayImage && __jsx(_image["default"], {
786
+ src: dataItem.displayImage,
787
+ alt: "",
788
+ width: parseInt(imagewidth) || 16,
789
+ height: parseInt(imagewidth) || 16,
790
+ style: {
791
+ marginRight: "8px"
792
+ }
793
+ }), __jsx(_material.Box, {
794
+ component: "span",
795
+ className: "",
796
+ title: displayText
797
+ }, highlightMatch(displayText, query))));
798
+ };
799
+
800
+ // Update renderItems to handle non-array cases
801
+ var renderItems = function renderItems() {
802
+ var itemCount = 0;
803
+
804
+ // If we have grouped data, render by groups
805
+ if (props.groupby) {
806
+ var groupKeys = Object.keys(groupedData || {});
807
+ if (groupKeys.length === 0) {
808
+ return null;
809
+ }
810
+ var renderedItems = [];
811
+ groupKeys.forEach(function (groupKey) {
812
+ // Add group divider if needed
813
+ var divider = renderGroupDivider(groupKey);
814
+ if (divider) {
815
+ renderedItems.push(divider);
816
+ }
817
+
818
+ // Add items for this group
819
+ var groupItems = (groupedData === null || groupedData === void 0 ? void 0 : groupedData[groupKey]) || [];
820
+ groupItems.forEach(function (item) {
821
+ if (itemCount < limit) {
822
+ renderedItems.push(renderItem(item, query, itemCount));
823
+ itemCount++;
824
+ }
825
+ });
826
+ });
827
+ return renderedItems;
828
+ }
829
+
830
+ // Ensure formattedDataset is an array before mapping
831
+ var formattedArray = Array.isArray(formattedDataset) ? formattedDataset : [];
832
+ return formattedArray.map(function (item, index) {
833
+ if (index < limit) {
834
+ return renderItem(item, query, index);
835
+ }
836
+ return null;
837
+ }).filter(Boolean); // Remove null values
838
+ };
839
+ var renderClearButton = function renderClearButton() {
840
+ if (showclear && query !== "") {
841
+ return __jsx(_material.Button, {
842
+ className: (0, _clsx["default"])("btn btn-icon form-control-feedback clear-btn show-btn clear-btn", {
843
+ "show-btn": !!query
844
+ }),
845
+ "aria-label": "Clear",
846
+ onClick: handleClearSearch,
847
+ size: "small"
848
+ }, __jsx(_material.Box, {
849
+ component: "i",
850
+ className: "app-icon ".concat(clearsearchiconclass)
851
+ }));
852
+ }
853
+ return null;
854
+ };
855
+ var renderSearchIcon = function renderSearchIcon() {
856
+ if (showsearchicon) {
857
+ return __jsx(_material.Button, {
858
+ className: "app-search-button btn btn-icon",
859
+ title: "search",
860
+ type: "submit",
861
+ onClick: handleSearchClick,
862
+ disabled: disabled,
863
+ size: "small"
864
+ }, __jsx(_material.Box, {
865
+ component: "i",
866
+ className: "app-icon ".concat(searchiconclass)
867
+ }));
868
+ }
869
+ return null;
870
+ };
871
+ var renderBackButton = function renderBackButton() {
872
+ if (showbackbutton && backsearchiconclass) {
873
+ return __jsx(_IconButton["default"], {
874
+ className: "back-btn",
875
+ "aria-label": "Back",
876
+ onClick: handleClearSearch,
877
+ size: "small"
878
+ }, __jsx(_material.Box, {
879
+ component: "span",
880
+ className: "app-icon ".concat(backsearchiconclass)
881
+ }), __jsx(_material.Box, {
882
+ component: "span",
883
+ className: "sr-only"
884
+ }, "Back button"));
885
+ }
886
+ return null;
887
+ };
888
+ var renderLoadingIndicator = function renderLoadingIndicator() {
889
+ if (loadingItems) {
890
+ return __jsx(_Typography["default"], {
891
+ variant: "body2",
892
+ className: "dropdown-status"
893
+ }, __jsx(_CircularProgress["default"], {
894
+ size: 20,
895
+ color: "primary",
896
+ style: {
897
+ marginRight: "8px"
898
+ }
899
+ }), loadingdatamsg);
900
+ }
901
+ return null;
902
+ };
903
+ var renderNoResultsMessage = function renderNoResultsMessage() {
904
+ if (!loadingItems && formattedDataset.length === 0 && query !== "" && !selectedItem) {
905
+ return __jsx(_Typography["default"], {
906
+ variant: "body2",
907
+ className: "dropdown-status",
908
+ style: {
909
+ padding: "8px 16px"
910
+ }
911
+ }, "No results found");
912
+ }
913
+ return null;
914
+ };
915
+ var renderCompletionMessage = function renderCompletionMessage() {
916
+ // Show "No more data to load" message when there are results but no more data to load
917
+ if (!loadingItems && formattedDataset.length > 0 && !selectedItem) {
918
+ return __jsx(_Typography["default"], {
919
+ variant: "body2",
920
+ className: "dropdown-status",
921
+ style: {
922
+ padding: "8px 16px",
923
+ textAlign: "center"
924
+ }
925
+ }, datacompletemsg);
926
+ }
927
+ return null;
928
+ };
929
+ var renderDropdown = function renderDropdown() {
930
+ var _searchRef$current;
931
+ // Don't show dropdown if an item is selected or if menu is not open
932
+ if (!isOpen || !menuOpen || selectedItem) return null;
933
+ return __jsx(_Popper["default"], {
934
+ open: isOpen && menuOpen,
935
+ anchorEl: inputRef.current,
936
+ placement: dropup ? "top-start" : "bottom-start",
937
+ style: {
938
+ zIndex: 1300,
939
+ width: (_searchRef$current = searchRef.current) === null || _searchRef$current === void 0 ? void 0 : _searchRef$current.clientWidth
940
+ }
941
+ }, __jsx(_Paper["default"], {
942
+ elevation: 3,
943
+ className: "search-dropdown-paper"
944
+ }, __jsx(_material.Box, {
945
+ component: "div",
946
+ ref: dropdownRef,
947
+ onScroll: handleScroll,
948
+ style: {
949
+ maxHeight: "300px",
950
+ overflow: "auto",
951
+ boxShadow: "0 2px 10px rgba(0, 0, 0, 0.1)"
952
+ },
953
+ className: "search-dropdown-container"
954
+ }, __jsx(_MenuList["default"], {
955
+ className: "search-menu-list app-search dropdown-menu"
956
+ }, renderItems(), renderNoResultsMessage(), renderLoadingIndicator(), renderCompletionMessage()))));
957
+ };
958
+
959
+ // Only include safe props in restProps to avoid React warnings
960
+ var safeRestProps = Object.entries(restProps).reduce(function (acc, _ref3) {
961
+ var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
962
+ key = _ref4[0],
963
+ value = _ref4[1];
964
+ // Filter out any props that might cause DOM warnings
965
+ var invalidProps = ["validation", "datasetItems", "selectedItems", "displayValue", "onchange", "onblur", "groupedData", "handleHeaderClick", "toggleAllHeaders", "isDestroyed"];
966
+ if (!invalidProps.includes(key)) {
967
+ acc[key] = value;
968
+ }
969
+ return acc;
970
+ }, {});
971
+ return __jsx(_ClickAwayListener["default"], {
972
+ onClickAway: handleClickAway
973
+ }, __jsx(_material.Box, (0, _extends2["default"])({
974
+ component: "div",
975
+ ref: searchRef,
976
+ style: searchStyle
977
+ // Don't pass tabIndex to div when it contains focusable elements
978
+ }, safeRestProps, {
979
+ className: (0, _clsx["default"])(DEFAULT_CLASS, className),
980
+ "data-search-type": type,
981
+ type: type
982
+ }), renderBackButton(), __jsx(_material.Box, {
983
+ component: "span",
984
+ className: "sr-only"
985
+ }, "Back button"), __jsx(_material.Box, {
986
+ component: "input",
987
+ name: name,
988
+ className: (0, _clsx["default"])("app-textbox form-control list-of-objs app-search-input"),
989
+ type: "text",
990
+ "focus-target": "true",
991
+ value: query,
992
+ onChange: handleInputChange,
993
+ disabled: disabled,
994
+ tabIndex: tabindex,
995
+ ref: inputRef,
996
+ "aria-label": arialabel,
997
+ autoComplete: "off",
998
+ title: query,
999
+ placeholder: placeholder,
1000
+ readOnly: readonly,
1001
+ onBlur: function onBlur(e) {
1002
+ return handleBlur(e);
1003
+ },
1004
+ onFocus: function onFocus(e) {
1005
+ return handleFocus(e);
1006
+ },
1007
+ onKeyDown: function onKeyDown(e) {
1008
+ return handleKeyDown(e);
1009
+ }
1010
+ }), type === "autocomplete" ? null : __jsx(_material.Box, {
1011
+ component: "span",
1012
+ className: "input-group-addon"
1013
+ }, __jsx(_material.Box, {
1014
+ component: "form",
1015
+ noValidate: true,
1016
+ autoComplete: "off"
1017
+ }, renderSearchIcon())), __jsx(_material.Box, {
1018
+ component: "span",
1019
+ className: "sr-only"
1020
+ }, "Clear button"), showclear && showclear !== "false" ? renderClearButton() : null, renderDropdown()));
1021
+ });
1022
+ Search.displayName = "WmSearch";
1023
+ var _default = exports["default"] = (0, _withBaseWrapper["default"])(Search);