robobyte-front-builder 1.0.19 → 1.0.21

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 (513) hide show
  1. package/README.md +211 -0
  2. package/next.config.js +19 -48
  3. package/package.json +39 -85
  4. package/src/context/BuilderContext.jsx +134 -6
  5. package/src/context/SystemContext.js +2 -2
  6. package/src/hooks/useGlobalStore.js +36 -0
  7. package/src/hooks/useTimerEngine.js +54 -0
  8. package/src/lib/index.js +11 -3
  9. package/src/lib/layouts/BlankLayout.jsx +13 -0
  10. package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +61 -7
  11. package/src/lib/themes/builderTheme.js +41 -0
  12. package/src/pages/_app.js +32 -134
  13. package/src/pages/api/ai.js +87 -0
  14. package/src/pages/builders/report/index.js +1 -0
  15. package/src/pages/builders/report/list/index.js +1 -0
  16. package/src/pages/builders/report/viewer/index.js +1 -0
  17. package/src/pages/index.js +88 -37
  18. package/src/pages/printBuilder/index.jsx +263 -0
  19. package/src/pages/printBuilder/layouts/index.jsx +298 -0
  20. package/src/pages/reportModule/reportBuilder/index.js +8 -6
  21. package/src/pages/reportModule/reportBuilder/reportViewer/index.js +33 -22
  22. package/src/pages/reportModule/reportBuilder/reports/index.js +3 -5
  23. package/src/pages/reportModule/reportBuilder/reportsPermissions/index.js +2 -3
  24. package/src/pages/viewBuilder/index.jsx +117 -32
  25. package/src/pages/viewBuilder/views/index.js +3 -3
  26. package/src/pages/viewer/[id]/index.js +2 -1
  27. package/src/services/DeleteService.js +31 -60
  28. package/src/services/Endpoints/PrintLayoutEndpoints.js +42 -0
  29. package/src/services/Endpoints.js +2 -0
  30. package/src/services/GetService.js +33 -54
  31. package/src/services/PatchService.js +38 -65
  32. package/src/services/PostService.js +37 -63
  33. package/src/services/UpdateService.js +39 -65
  34. package/src/services/builderHelper/actionExecutor.js +141 -25
  35. package/src/services/builderHelper/builderHelper.js +92 -0
  36. package/src/services/builderHelper/colorSchema.js +95 -0
  37. package/src/services/builderHelper/iconResolver.js +50 -0
  38. package/src/services/builderHelper/jsExecutor.js +212 -46
  39. package/src/services/builderHelper/nodeFactory.js +32 -15
  40. package/src/services/builderHelper/numberFormat.js +123 -0
  41. package/src/services/builderHelper/resolveProps.js +73 -4
  42. package/src/services/builderHelper/thresholdEngine.js +77 -0
  43. package/src/services/builderHelper/tree.js +31 -0
  44. package/src/services/components/agGridAutoComplete.js +5 -9
  45. package/src/services/config.js +9 -1
  46. package/src/services/globalStore.js +80 -0
  47. package/src/services/helper/multiSelectEditor.js +5 -9
  48. package/src/services/helper/multiSelectEditorByBuilder.js +5 -9
  49. package/src/services/reportData/fetchReportData.js +69 -28
  50. package/src/services/routerRef.js +35 -0
  51. package/src/views/ConfirmDialog.js +2 -2
  52. package/src/views/builder/JSEditor.js +105 -107
  53. package/src/views/builder/inspector/Inspector.jsx +6 -9
  54. package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +7 -13
  55. package/src/views/builder/inspector/Tabs/MainTab.jsx +143 -25
  56. package/src/views/builder/inspector/Tabs/RulesTab.jsx +9 -24
  57. package/src/views/builder/inspector/Tabs/StyleTab.jsx +9 -24
  58. package/src/views/builder/inspector/definitions/autocomplete/main.js +4 -6
  59. package/src/views/builder/inspector/definitions/banner/actions.js +7 -0
  60. package/src/views/builder/inspector/definitions/banner/main.js +22 -0
  61. package/src/views/builder/inspector/definitions/banner/rules.js +1 -0
  62. package/src/views/builder/inspector/definitions/banner/style.js +1 -0
  63. package/src/views/builder/inspector/definitions/breadcrumb/main.js +43 -6
  64. package/src/views/builder/inspector/definitions/button/main.js +11 -12
  65. package/src/views/builder/inspector/definitions/button/style.js +18 -30
  66. package/src/views/builder/inspector/definitions/checkbox/actions.js +3 -1
  67. package/src/views/builder/inspector/definitions/checkbox/main.js +4 -6
  68. package/src/views/builder/inspector/definitions/common/main.js +13 -2
  69. package/src/views/builder/inspector/definitions/dataGrid/main.js +23 -0
  70. package/src/views/builder/inspector/definitions/dataTableViewer/main.js +46 -0
  71. package/src/views/builder/inspector/definitions/datepicker/actions.js +3 -1
  72. package/src/views/builder/inspector/definitions/datepicker/main.js +6 -14
  73. package/src/views/builder/inspector/definitions/dialog/main.js +36 -0
  74. package/src/views/builder/inspector/definitions/dropdown/main.js +5 -8
  75. package/src/views/builder/inspector/definitions/excelUpload/actions.js +23 -0
  76. package/src/views/builder/inspector/definitions/excelUpload/main.js +17 -0
  77. package/src/views/builder/inspector/definitions/excelUpload/rules.js +1 -0
  78. package/src/views/builder/inspector/definitions/excelUpload/style.js +45 -0
  79. package/src/views/builder/inspector/definitions/header/main.js +10 -1
  80. package/src/views/builder/inspector/definitions/index.js +106 -19
  81. package/src/views/builder/inspector/definitions/input/actions.js +4 -1
  82. package/src/views/builder/inspector/definitions/input/main.js +20 -11
  83. package/src/views/builder/inspector/definitions/kpi/avatarGroup.js +22 -0
  84. package/src/views/builder/inspector/definitions/kpi/badge.js +17 -0
  85. package/src/views/builder/inspector/definitions/kpi/bulletChart.js +47 -0
  86. package/src/views/builder/inspector/definitions/kpi/chart.js +55 -0
  87. package/src/views/builder/inspector/definitions/kpi/colorScale.js +60 -0
  88. package/src/views/builder/inspector/definitions/kpi/comparisonBars.js +41 -0
  89. package/src/views/builder/inspector/definitions/kpi/countdown.js +46 -0
  90. package/src/views/builder/inspector/definitions/kpi/donut.js +51 -0
  91. package/src/views/builder/inspector/definitions/kpi/funnel.js +25 -0
  92. package/src/views/builder/inspector/definitions/kpi/gauge.js +39 -0
  93. package/src/views/builder/inspector/definitions/kpi/heatmapGrid.js +96 -0
  94. package/src/views/builder/inspector/definitions/kpi/iconBox.js +20 -0
  95. package/src/views/builder/inspector/definitions/kpi/metric.js +45 -0
  96. package/src/views/builder/inspector/definitions/kpi/rating.js +27 -0
  97. package/src/views/builder/inspector/definitions/kpi/statusDot.js +18 -0
  98. package/src/views/builder/inspector/definitions/kpi/stepStage.js +65 -0
  99. package/src/views/builder/inspector/definitions/kpi/tagList.js +32 -0
  100. package/src/views/builder/inspector/definitions/kpi/timeline.js +80 -0
  101. package/src/views/builder/inspector/definitions/kpi/trend.js +20 -0
  102. package/src/views/builder/inspector/definitions/label/main.js +10 -1
  103. package/src/views/builder/inspector/definitions/layout/main.js +27 -3
  104. package/src/views/builder/inspector/definitions/number/main.js +6 -14
  105. package/src/views/builder/inspector/definitions/pageNumber/main.js +21 -0
  106. package/src/views/builder/inspector/definitions/popover/main.js +71 -0
  107. package/src/views/builder/inspector/definitions/radio/main.js +5 -8
  108. package/src/views/builder/inspector/definitions/repeater/main.js +31 -0
  109. package/src/views/builder/inspector/definitions/reportViewer/main.js +15 -1
  110. package/src/views/builder/inspector/definitions/richtext/main.js +5 -8
  111. package/src/views/builder/inspector/definitions/signature/main.js +4 -1
  112. package/src/views/builder/inspector/definitions/tag/main.js +5 -8
  113. package/src/views/builder/inspector/definitions/textarea/actions.js +4 -1
  114. package/src/views/builder/inspector/definitions/textarea/main.js +5 -7
  115. package/src/views/builder/inspector/definitions/time/main.js +5 -8
  116. package/src/views/builder/inspector/definitions/toggle/main.js +5 -19
  117. package/src/views/builder/inspector/definitions/treeView/main.js +61 -0
  118. package/src/views/builder/inspector/definitions/viewRenderer/main.js +53 -0
  119. package/src/views/builder/inspector/definitions/wizard/main.js +68 -0
  120. package/src/views/builder/inspector/definitions/wizard-step/main.js +25 -0
  121. package/src/views/builder/inspector/fields/ActionsConfigEditor.jsx +426 -0
  122. package/src/views/builder/inspector/fields/ColorSchemaField.jsx +140 -0
  123. package/src/views/builder/inspector/fields/ColumnFunctionEditor.jsx +238 -0
  124. package/src/views/builder/inspector/fields/ColumnMappingEditor.jsx +105 -0
  125. package/src/views/builder/inspector/fields/ColumnsConfigEditor.jsx +506 -0
  126. package/src/views/builder/inspector/fields/DonutRingsEditorField.jsx +337 -0
  127. package/src/views/builder/inspector/fields/ExtraColsEditor.jsx +618 -0
  128. package/src/views/builder/inspector/fields/FunctionHelpPopover.jsx +295 -0
  129. package/src/views/builder/inspector/fields/IconEditor.jsx +64 -0
  130. package/src/views/builder/inspector/fields/KpiActionField.jsx +223 -0
  131. package/src/views/builder/inspector/fields/MarkersEditorField.jsx +173 -0
  132. package/src/views/builder/inspector/fields/SelectEditor.jsx +9 -5
  133. package/src/views/builder/inspector/fields/SeriesEditorField.jsx +363 -0
  134. package/src/views/builder/inspector/fields/TableColumnsEditor.jsx +104 -0
  135. package/src/views/builder/inspector/fields/ThresholdsEditor.jsx +247 -0
  136. package/src/views/builder/inspector/fields/ValueFunctionsRefPanel.jsx +217 -0
  137. package/src/views/builder/inspector/fields/columnEditorShared.jsx +217 -0
  138. package/src/views/builder/sidebar/Sidebar.jsx +4 -2
  139. package/src/views/builder/sidebar/SidebarTabs.jsx +28 -17
  140. package/src/views/builder/sidebar/tabs/ActionsTab.jsx +7 -3
  141. package/src/views/builder/sidebar/tabs/AiTab/AiPreviewDialog.jsx +193 -0
  142. package/src/views/builder/sidebar/tabs/AiTab/aiProvider.js +49 -0
  143. package/src/views/builder/sidebar/tabs/AiTab/index.jsx +409 -0
  144. package/src/views/builder/sidebar/tabs/AiTab/schemaTransformer.js +102 -0
  145. package/src/views/builder/sidebar/tabs/AiTab/schemaValidator.js +64 -0
  146. package/src/views/builder/sidebar/tabs/AiTab/systemPrompt.js +1151 -0
  147. package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +31 -31
  148. package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +43 -21
  149. package/src/views/builder/sidebar/tabs/Components/printComponentCatalog.js +81 -0
  150. package/src/views/builder/sidebar/tabs/TimersTab.jsx +338 -0
  151. package/src/views/builder/sidebar/tabs/TreeTab.jsx +13 -4
  152. package/src/views/builder/sidebar/tabs/ViewTab.jsx +1 -1
  153. package/src/views/builder/viewer/AdornedLabel.jsx +82 -0
  154. package/src/views/builder/viewer/ComponentRenderer.jsx +98 -24
  155. package/src/views/builder/viewer/DialogsZone.jsx +259 -0
  156. package/src/views/builder/viewer/FieldLabel.jsx +106 -0
  157. package/src/views/builder/viewer/PrintDialog.jsx +481 -0
  158. package/src/views/builder/viewer/ProductionViewer.jsx +80 -5
  159. package/src/views/builder/viewer/Viewer.jsx +106 -8
  160. package/src/views/builder/viewer/ViewerComponentWrapper.jsx +61 -4
  161. package/src/views/builder/viewer/ViewerToolbar.jsx +273 -59
  162. package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +26 -22
  163. package/src/views/builder/viewer/renderers/AvatarGroupRenderer.jsx +112 -0
  164. package/src/views/builder/viewer/renderers/BadgeRenderer.jsx +79 -0
  165. package/src/views/builder/viewer/renderers/BannerRenderer.jsx +62 -0
  166. package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +203 -15
  167. package/src/views/builder/viewer/renderers/BulletChartRenderer.jsx +147 -0
  168. package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +98 -39
  169. package/src/views/builder/viewer/renderers/CardRenderer.jsx +1 -1
  170. package/src/views/builder/viewer/renderers/ChartRenderer.jsx +388 -0
  171. package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +17 -9
  172. package/src/views/builder/viewer/renderers/ColorScaleRenderer.jsx +300 -0
  173. package/src/views/builder/viewer/renderers/ComparisonBarsRenderer.jsx +133 -0
  174. package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +3 -1
  175. package/src/views/builder/viewer/renderers/CountdownRenderer.jsx +249 -0
  176. package/src/views/builder/viewer/renderers/DataGridRenderer.jsx +380 -0
  177. package/src/views/builder/viewer/renderers/DataTableViewerRenderer.jsx +240 -0
  178. package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +25 -24
  179. package/src/views/builder/viewer/renderers/DialogRenderer.jsx +327 -0
  180. package/src/views/builder/viewer/renderers/DividerRenderer.jsx +1 -1
  181. package/src/views/builder/viewer/renderers/DonutRenderer.jsx +294 -0
  182. package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +36 -44
  183. package/src/views/builder/viewer/renderers/ExcelUploadRenderer.jsx +639 -0
  184. package/src/views/builder/viewer/renderers/FunnelRenderer.jsx +93 -0
  185. package/src/views/builder/viewer/renderers/GaugeRenderer.jsx +159 -0
  186. package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +31 -9
  187. package/src/views/builder/viewer/renderers/HeatmapGridRenderer.jsx +432 -0
  188. package/src/views/builder/viewer/renderers/IconBoxRenderer.jsx +59 -0
  189. package/src/views/builder/viewer/renderers/ImageRenderer.jsx +1 -1
  190. package/src/views/builder/viewer/renderers/InputRenderer.jsx +75 -18
  191. package/src/views/builder/viewer/renderers/LabelRenderer.jsx +35 -9
  192. package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +102 -40
  193. package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +8 -8
  194. package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +48 -6
  195. package/src/views/builder/viewer/renderers/LinkRenderer.jsx +1 -1
  196. package/src/views/builder/viewer/renderers/MenuRenderer.jsx +2 -2
  197. package/src/views/builder/viewer/renderers/MetricRenderer.jsx +80 -0
  198. package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +21 -30
  199. package/src/views/builder/viewer/renderers/PageNumberRenderer.jsx +76 -0
  200. package/src/views/builder/viewer/renderers/PopoverRenderer.jsx +350 -0
  201. package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +1 -1
  202. package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +1 -1
  203. package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +28 -39
  204. package/src/views/builder/viewer/renderers/RatingRenderer.jsx +80 -0
  205. package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +297 -38
  206. package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +219 -5
  207. package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +60 -66
  208. package/src/views/builder/viewer/renderers/RowActionsCell.jsx +308 -0
  209. package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +33 -62
  210. package/src/views/builder/viewer/renderers/StatusDotRenderer.jsx +75 -0
  211. package/src/views/builder/viewer/renderers/StepStageRenderer.jsx +348 -0
  212. package/src/views/builder/viewer/renderers/TagListRenderer.jsx +115 -0
  213. package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +31 -45
  214. package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +25 -18
  215. package/src/views/builder/viewer/renderers/TextRenderer.jsx +7 -1
  216. package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +25 -24
  217. package/src/views/builder/viewer/renderers/TimelineRenderer.jsx +525 -0
  218. package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +21 -27
  219. package/src/views/builder/viewer/renderers/TreeViewRenderer.jsx +832 -0
  220. package/src/views/builder/viewer/renderers/TrendRenderer.jsx +66 -0
  221. package/src/views/builder/viewer/renderers/ViewRendererRenderer.jsx +315 -0
  222. package/src/views/builder/viewer/renderers/WizardRenderer.jsx +380 -64
  223. package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +21 -12
  224. package/src/views/builder/viewer/renderers/dataGridComponents.jsx +824 -0
  225. package/src/views/customFilter/CustomFilterDialog.js +1023 -660
  226. package/src/views/customFilter/FixedFilterDialog.js +649 -0
  227. package/src/views/customFilter/SearchFilterDialog.js +248 -0
  228. package/src/views/genericTable/BuilderExpressionParams.js +3 -3
  229. package/src/views/genericTable/ColumnConfiguratorDialog.js +33 -24
  230. package/src/views/genericTable/FixedFilterDialog.js +3 -2
  231. package/src/views/genericTable/FormattingSettingsDialog.js +8 -3
  232. package/src/views/genericTable/SGrid.js +198 -97
  233. package/src/views/genericTable/SearchFilterDialog.js +3 -2
  234. package/src/views/genericTable/cellEditors/autocompleteEditor.js +5 -9
  235. package/src/views/genericTable/convertStringFunctions.js +274 -138
  236. package/src/views/genericTable/statusBar/rowCountStatusBar.js +3 -1
  237. package/src/views/genericTable/updateRefHelpers.js +9 -6
  238. package/src/views/printBuilder/PrintBuilderViewer.jsx +607 -0
  239. package/src/views/printBuilder/PrintPreviewCanvas.jsx +157 -0
  240. package/src/views/rolePermissions/UpdateReportPermissionDialog.js +3 -2
  241. package/src/@core/components/auth/AclGuard.js +0 -55
  242. package/src/@core/components/auth/AuthGuard.js +0 -40
  243. package/src/@core/components/auth/GuestGuard.js +0 -30
  244. package/src/@core/components/custom-inputs/Horizontal.jsx +0 -143
  245. package/src/@core/components/custom-inputs/Image.jsx +0 -78
  246. package/src/@core/components/custom-inputs/Vertical.jsx +0 -113
  247. package/src/@core/components/customizer/index.jsx +0 -470
  248. package/src/@core/components/customizer/styles.module.css +0 -169
  249. package/src/@core/components/mui/Avatar.jsx +0 -41
  250. package/src/@core/components/mui/Badge.jsx +0 -20
  251. package/src/@core/components/mui/IconButton.jsx +0 -74
  252. package/src/@core/components/mui/TabList.jsx +0 -60
  253. package/src/@core/components/option-menu/index.jsx +0 -137
  254. package/src/@core/components/scroll-to-top/index.jsx +0 -43
  255. package/src/@core/components/spinner/index.js +0 -26
  256. package/src/@core/components/window-wrapper/index.js +0 -27
  257. package/src/@core/contexts/settingsContext.jsx +0 -98
  258. package/src/@core/hooks/useBgColor.js +0 -63
  259. package/src/@core/hooks/useImageVariant.js +0 -27
  260. package/src/@core/hooks/useLayoutInit.js +0 -37
  261. package/src/@core/hooks/useObjectCookie.js +0 -18
  262. package/src/@core/hooks/useSettings.jsx +0 -15
  263. package/src/@core/layouts/BlankLayout.js +0 -37
  264. package/src/@core/layouts/BlankLayoutWithAppBar.js +0 -51
  265. package/src/@core/layouts/HorizontalLayout.jsx +0 -151
  266. package/src/@core/layouts/Layout.js +0 -39
  267. package/src/@core/layouts/VerticalLayout.jsx +0 -124
  268. package/src/@core/layouts/components/blank-layout-with-appBar/index.js +0 -115
  269. package/src/@core/layouts/components/horizontal/app-bar-content/index.js +0 -67
  270. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +0 -352
  271. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +0 -21
  272. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +0 -195
  273. package/src/@core/layouts/components/horizontal/navigation/index.js +0 -31
  274. package/src/@core/layouts/components/shared-components/LanguageDropdown.js +0 -96
  275. package/src/@core/layouts/components/shared-components/ModeToggler.js +0 -32
  276. package/src/@core/layouts/components/shared-components/NotificationDropdown.js +0 -226
  277. package/src/@core/layouts/components/shared-components/UserDropdown.js +0 -177
  278. package/src/@core/layouts/components/shared-components/footer/FooterContent.js +0 -46
  279. package/src/@core/layouts/components/shared-components/footer/index.js +0 -61
  280. package/src/@core/layouts/components/vertical/appBar/index.js +0 -74
  281. package/src/@core/layouts/components/vertical/navigation/Drawer.js +0 -122
  282. package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +0 -435
  283. package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +0 -180
  284. package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +0 -26
  285. package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +0 -258
  286. package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +0 -102
  287. package/src/@core/layouts/components/vertical/navigation/index.js +0 -169
  288. package/src/@core/layouts/utils.js +0 -69
  289. package/src/@core/styles/Table.module.css +0 -93
  290. package/src/@core/styles/horizontal/menuItemStyles.js +0 -100
  291. package/src/@core/styles/horizontal/menuRootStyles.js +0 -19
  292. package/src/@core/styles/libs/fullcalendar/index.js +0 -461
  293. package/src/@core/styles/libs/keen-slider/index.js +0 -111
  294. package/src/@core/styles/libs/react-apexcharts/index.js +0 -107
  295. package/src/@core/styles/libs/react-cleave/index.js +0 -33
  296. package/src/@core/styles/libs/react-credit-cards/index.js +0 -11
  297. package/src/@core/styles/libs/react-datepicker/index.js +0 -388
  298. package/src/@core/styles/libs/react-draft-wysiwyg/index.js +0 -144
  299. package/src/@core/styles/libs/react-dropzone/index.js +0 -76
  300. package/src/@core/styles/libs/react-hot-toast/index.js +0 -37
  301. package/src/@core/styles/libs/recharts/index.js +0 -47
  302. package/src/@core/styles/stepper.js +0 -103
  303. package/src/@core/styles/vertical/menuItemStyles.js +0 -138
  304. package/src/@core/styles/vertical/menuSectionStyles.js +0 -54
  305. package/src/@core/styles/vertical/navigationCustomStyles.js +0 -62
  306. package/src/@core/svg/ContentCompact.jsx +0 -17
  307. package/src/@core/svg/ContentWide.jsx +0 -17
  308. package/src/@core/svg/DirectionLtr.jsx +0 -93
  309. package/src/@core/svg/DirectionRtl.jsx +0 -93
  310. package/src/@core/svg/LayoutCollapsed.jsx +0 -59
  311. package/src/@core/svg/LayoutHorizontal.jsx +0 -42
  312. package/src/@core/svg/LayoutVertical.jsx +0 -59
  313. package/src/@core/svg/Logo.jsx +0 -76
  314. package/src/@core/svg/SkinBordered.jsx +0 -54
  315. package/src/@core/svg/SkinDefault.jsx +0 -59
  316. package/src/@core/tailwind/plugin.js +0 -78
  317. package/src/@core/theme/ThemeComponent.js +0 -63
  318. package/src/@core/theme/ThemeOptions.js +0 -71
  319. package/src/@core/theme/breakpoints/index.js +0 -11
  320. package/src/@core/theme/colorSchemes.js +0 -326
  321. package/src/@core/theme/customShadows.js +0 -11
  322. package/src/@core/theme/globalStyles.js +0 -81
  323. package/src/@core/theme/index.js +0 -42
  324. package/src/@core/theme/overrides/accordion.js +0 -51
  325. package/src/@core/theme/overrides/accordion.jsx +0 -85
  326. package/src/@core/theme/overrides/alerts.js +0 -110
  327. package/src/@core/theme/overrides/alerts.jsx +0 -180
  328. package/src/@core/theme/overrides/autocomplete.js +0 -14
  329. package/src/@core/theme/overrides/autocomplete.jsx +0 -68
  330. package/src/@core/theme/overrides/avatar.js +0 -38
  331. package/src/@core/theme/overrides/avatars.js +0 -27
  332. package/src/@core/theme/overrides/backdrop.js +0 -22
  333. package/src/@core/theme/overrides/badges.js +0 -16
  334. package/src/@core/theme/overrides/breadcrumbs.js +0 -11
  335. package/src/@core/theme/overrides/button-group.js +0 -84
  336. package/src/@core/theme/overrides/button.js +0 -93
  337. package/src/@core/theme/overrides/buttonGroup.js +0 -9
  338. package/src/@core/theme/overrides/card.js +0 -83
  339. package/src/@core/theme/overrides/checkbox.jsx +0 -95
  340. package/src/@core/theme/overrides/chip.js +0 -72
  341. package/src/@core/theme/overrides/dataGrid.js +0 -114
  342. package/src/@core/theme/overrides/dateTimePicker.js +0 -65
  343. package/src/@core/theme/overrides/dialog.js +0 -120
  344. package/src/@core/theme/overrides/divider.js +0 -13
  345. package/src/@core/theme/overrides/drawer.js +0 -20
  346. package/src/@core/theme/overrides/fab.js +0 -13
  347. package/src/@core/theme/overrides/form-control-label.js +0 -19
  348. package/src/@core/theme/overrides/icon-button.js +0 -145
  349. package/src/@core/theme/overrides/index.js +0 -103
  350. package/src/@core/theme/overrides/input.js +0 -72
  351. package/src/@core/theme/overrides/link.js +0 -9
  352. package/src/@core/theme/overrides/list.js +0 -44
  353. package/src/@core/theme/overrides/menu.js +0 -25
  354. package/src/@core/theme/overrides/pagination.js +0 -41
  355. package/src/@core/theme/overrides/paper.js +0 -9
  356. package/src/@core/theme/overrides/popover.js +0 -16
  357. package/src/@core/theme/overrides/progress.js +0 -38
  358. package/src/@core/theme/overrides/radio.jsx +0 -80
  359. package/src/@core/theme/overrides/rating.js +0 -16
  360. package/src/@core/theme/overrides/rating.jsx +0 -32
  361. package/src/@core/theme/overrides/select.js +0 -19
  362. package/src/@core/theme/overrides/select.jsx +0 -52
  363. package/src/@core/theme/overrides/slider.js +0 -97
  364. package/src/@core/theme/overrides/snackbar.js +0 -19
  365. package/src/@core/theme/overrides/switch.js +0 -73
  366. package/src/@core/theme/overrides/switches.js +0 -25
  367. package/src/@core/theme/overrides/table-pagination.js +0 -39
  368. package/src/@core/theme/overrides/table.js +0 -81
  369. package/src/@core/theme/overrides/tabs.js +0 -30
  370. package/src/@core/theme/overrides/timeline.js +0 -80
  371. package/src/@core/theme/overrides/toggle-button.js +0 -33
  372. package/src/@core/theme/overrides/toggleButton.js +0 -16
  373. package/src/@core/theme/overrides/tooltip.js +0 -21
  374. package/src/@core/theme/overrides/typography.js +0 -13
  375. package/src/@core/theme/palette/index.js +0 -107
  376. package/src/@core/theme/shadows/index.js +0 -61
  377. package/src/@core/theme/shadows.js +0 -12
  378. package/src/@core/theme/spacing/index.js +0 -3
  379. package/src/@core/theme/spacing.js +0 -5
  380. package/src/@core/theme/typography/index.js +0 -65
  381. package/src/@core/theme/typography.js +0 -84
  382. package/src/@core/utils/create-emotion-cache.js +0 -5
  383. package/src/@core/utils/hex-to-rgba.js +0 -11
  384. package/src/@core/utils/serverHelpers.js +0 -45
  385. package/src/@menu/components/RouterLink.jsx +0 -18
  386. package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +0 -88
  387. package/src/@menu/components/horizontal-menu/Menu.jsx +0 -83
  388. package/src/@menu/components/horizontal-menu/MenuButton.jsx +0 -100
  389. package/src/@menu/components/horizontal-menu/MenuItem.jsx +0 -183
  390. package/src/@menu/components/horizontal-menu/SubMenu.jsx +0 -418
  391. package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +0 -41
  392. package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +0 -20
  393. package/src/@menu/components/vertical-menu/Menu.jsx +0 -161
  394. package/src/@menu/components/vertical-menu/MenuButton.jsx +0 -95
  395. package/src/@menu/components/vertical-menu/MenuItem.jsx +0 -180
  396. package/src/@menu/components/vertical-menu/MenuSection.jsx +0 -124
  397. package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +0 -70
  398. package/src/@menu/components/vertical-menu/NavHeader.jsx +0 -39
  399. package/src/@menu/components/vertical-menu/SubMenu.jsx +0 -420
  400. package/src/@menu/components/vertical-menu/SubMenuContent.jsx +0 -101
  401. package/src/@menu/components/vertical-menu/VerticalNav.jsx +0 -216
  402. package/src/@menu/contexts/horizontalNavContext.jsx +0 -29
  403. package/src/@menu/contexts/verticalNavContext.jsx +0 -65
  404. package/src/@menu/defaultConfigs.js +0 -12
  405. package/src/@menu/hooks/useHorizontalMenu.jsx +0 -19
  406. package/src/@menu/hooks/useHorizontalNav.jsx +0 -19
  407. package/src/@menu/hooks/useMediaQuery.jsx +0 -29
  408. package/src/@menu/hooks/useVerticalMenu.jsx +0 -19
  409. package/src/@menu/hooks/useVerticalNav.jsx +0 -19
  410. package/src/@menu/horizontal-menu/index.jsx +0 -8
  411. package/src/@menu/styles/StyledBackdrop.jsx +0 -15
  412. package/src/@menu/styles/StyledMenuIcon.jsx +0 -12
  413. package/src/@menu/styles/StyledMenuLabel.jsx +0 -16
  414. package/src/@menu/styles/StyledMenuPrefix.jsx +0 -10
  415. package/src/@menu/styles/StyledMenuSectionLabel.jsx +0 -21
  416. package/src/@menu/styles/StyledMenuSuffix.jsx +0 -10
  417. package/src/@menu/styles/StyledSubMenuContent.jsx +0 -43
  418. package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +0 -13
  419. package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +0 -26
  420. package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +0 -11
  421. package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +0 -33
  422. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +0 -18
  423. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +0 -10
  424. package/src/@menu/styles/horizontal/horizontalUl.module.css +0 -15
  425. package/src/@menu/styles/styles.module.css +0 -5
  426. package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +0 -16
  427. package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +0 -28
  428. package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +0 -23
  429. package/src/@menu/styles/vertical/StyledVerticalNav.jsx +0 -67
  430. package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +0 -15
  431. package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +0 -23
  432. package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +0 -25
  433. package/src/@menu/styles/vertical/verticalNavBgImage.module.css +0 -10
  434. package/src/@menu/svg/ChevronRight.jsx +0 -9
  435. package/src/@menu/svg/Close.jsx +0 -12
  436. package/src/@menu/svg/RadioCircle.jsx +0 -12
  437. package/src/@menu/svg/RadioCircleMarked.jsx +0 -13
  438. package/src/@menu/utils/menuClasses.js +0 -44
  439. package/src/@menu/utils/menuUtils.jsx +0 -145
  440. package/src/@menu/vertical-menu/index.jsx +0 -11
  441. package/src/configs/acl.js +0 -115
  442. package/src/configs/auth.js +0 -5
  443. package/src/configs/aws-exports.js +0 -30
  444. package/src/configs/firebase.js +0 -25
  445. package/src/configs/i18n.js +0 -34
  446. package/src/configs/primaryColorConfig.js +0 -35
  447. package/src/configs/themeConfig.js +0 -44
  448. package/src/layouts/UserLayout.js +0 -94
  449. package/src/layouts/UserThemeOptions.js +0 -191
  450. package/src/layouts/components/Direction.js +0 -30
  451. package/src/layouts/components/HtmlTooltip.js +0 -15
  452. package/src/layouts/components/Translations.js +0 -11
  453. package/src/layouts/components/UserDropdown.js +0 -217
  454. package/src/layouts/components/UserIcon.js +0 -40
  455. package/src/layouts/components/acl/Can.js +0 -6
  456. package/src/layouts/components/acl/CanViewNavGroup.js +0 -36
  457. package/src/layouts/components/acl/CanViewNavLink.js +0 -17
  458. package/src/layouts/components/acl/CanViewNavSectionTitle.js +0 -17
  459. package/src/layouts/components/horizontal/AppBarContent.js +0 -39
  460. package/src/layouts/components/horizontal/ServerSideNavItems.js +0 -44
  461. package/src/layouts/components/mui/StepperComps.js +0 -55
  462. package/src/layouts/components/vertical/AppBarContent.js +0 -35
  463. package/src/layouts/components/vertical/ServerSideNavItems.js +0 -44
  464. package/src/libs/ApexCharts.jsx +0 -5
  465. package/src/libs/ReactPlayer.jsx +0 -5
  466. package/src/libs/Recharts.jsx +0 -4
  467. package/src/libs/auth.js +0 -124
  468. package/src/libs/styles/AppFullCalendar.js +0 -505
  469. package/src/libs/styles/AppKeenSlider.js +0 -116
  470. package/src/libs/styles/AppReactApexCharts.jsx +0 -110
  471. package/src/libs/styles/AppReactDatepicker.jsx +0 -470
  472. package/src/libs/styles/AppReactDropzone.js +0 -76
  473. package/src/libs/styles/AppReactToastify.jsx +0 -108
  474. package/src/libs/styles/AppRecharts.js +0 -55
  475. package/src/libs/styles/inputOtp.module.css +0 -39
  476. package/src/libs/styles/tiptapEditor.css +0 -72
  477. package/src/navigation/horizontal/index.js +0 -246
  478. package/src/navigation/vertical/index.js +0 -253
  479. package/src/pages/401.js +0 -70
  480. package/src/pages/404.js +0 -67
  481. package/src/pages/500.js +0 -68
  482. package/src/pages/[slug].js +0 -115
  483. package/src/pages/_document.js +0 -72
  484. package/src/pages/api/navigation/regenerate-registry.js +0 -116
  485. package/src/pages/api/navigation/save.js +0 -218
  486. package/src/pages/authModule/acl/index.js +0 -48
  487. package/src/pages/authModule/forgot-password/index.js +0 -228
  488. package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +0 -392
  489. package/src/pages/authModule/permissions/rolePermissions/index.js +0 -343
  490. package/src/pages/authModule/permissions/systemPermissions/index.js +0 -354
  491. package/src/pages/authModule/privacy/index.js +0 -721
  492. package/src/pages/authModule/users/index.js +0 -210
  493. package/src/pages/login/index.js +0 -328
  494. package/src/pages/mainHome/index.js +0 -181
  495. package/src/views/builder/inspector/definitions/cell/main.js +0 -4
  496. package/src/views/builder/inspector/definitions/column/main.js +0 -9
  497. package/src/views/builder/inspector/definitions/column-group/main.js +0 -18
  498. package/src/views/builder/inspector/definitions/header-cell/main.js +0 -5
  499. package/src/views/builder/inspector/definitions/table/main.js +0 -9
  500. package/src/views/builder/viewer/renderers/CellRenderer.jsx +0 -71
  501. package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +0 -96
  502. package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +0 -71
  503. package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +0 -78
  504. package/src/views/builder/viewer/renderers/TabRenderer.jsx +0 -82
  505. package/src/views/builder/viewer/renderers/TableRenderer.jsx +0 -92
  506. package/src/views/pages/auth/FooterIllustrationsV2.js +0 -40
  507. package/src/views/pages/misc/FooterIllustrations.js +0 -47
  508. package/src/views/pages/misc/muiTable/CustomPagination.js +0 -34
  509. package/src/views/pages/users/UserManageDialog.js +0 -283
  510. package/src/views/pages/users/UserViewPage.js +0 -199
  511. package/src/views/users/AddUserNameDialog.js +0 -162
  512. package/src/views/users/ContactManage.js +0 -449
  513. package/src/views/users/ResetPasswordDialog.js +0 -242
@@ -1,23 +1,225 @@
1
- import { Box } from '@mui/material'
1
+ import { useEffect, useCallback } from 'react'
2
+ import { Box, Typography, CircularProgress } from '@mui/material'
3
+ import { RepeatOutlined, WidgetsOutlined } from '@mui/icons-material'
4
+ import { useState } from 'react'
2
5
  import ViewerComponentWrapper from '../ViewerComponentWrapper'
3
6
  import ComponentRenderer from '../ComponentRenderer'
4
7
  import DropZone from '../DropZone'
5
8
  import { resolveProps } from 'services/builderHelper/resolveProps'
6
9
  import { createNode } from 'services/builderHelper/nodeFactory'
7
10
  import { insertIntoTreeAtIndex, moveNodeInTree } from 'services/builderHelper/tree'
11
+ import { Endpoints, Services } from 'services/Endpoints'
12
+
13
+ // ── Direction → flex styles ───────────────────────────────────────────────────
14
+
15
+ function directionSx(direction, gap) {
16
+ const g = gap != null ? gap : 1
17
+ switch (direction) {
18
+ case 'horizontal':
19
+ return { display: 'flex', flexDirection: 'row', gap: g, flexWrap: 'nowrap', width: '100%' }
20
+ case 'wrap':
21
+ return { display: 'flex', flexDirection: 'row', gap: g, flexWrap: 'wrap', width: '100%' }
22
+ default: // vertical
23
+ return { display: 'flex', flexDirection: 'column', gap: g, width: '100%' }
24
+ }
25
+ }
26
+
27
+ // ── Build a scoped viewerContext for one item ─────────────────────────────────
28
+ //
29
+ // Two modes depending on whether `dataKey` is set:
30
+ //
31
+ // Without dataKey (read-only iteration):
32
+ // data = parent data (untouched)
33
+ // dataItem = the current item from the items array
34
+ // setData = parent setData (writes go to parent state directly)
35
+ //
36
+ // With dataKey (form array mode):
37
+ // data = parent.data[dataKey][index] ← item's own slice
38
+ // setData = scoped setter that writes back to parent.data[dataKey][index]
39
+ // dataItem = same item slice (convenient alias inside expressions)
40
+ //
41
+ // In both cases `itemIndex` is available as a bare variable in expressions.
42
+
43
+ // ── Build a scoped viewerContext for one item ─────────────────────────────────
44
+ //
45
+ // Inputs inside a Repeater MUST be scoped per-item — otherwise all items share
46
+ // form[key] from the parent form and show the same value.
47
+ //
48
+ // Storage key priority:
49
+ // dataKey (explicit) → data[dataKey][index] visible to parent, readable anywhere
50
+ // no dataKey → data[__rpt_<nodeId>][index] internal, items still isolated
51
+ //
52
+ // In both cases:
53
+ // form → item slice, so form[fieldKey] resolves per-item
54
+ // updateFormValue → scoped setter writing to item slice
55
+ // data → item slice (when dataKey set) or parent data (when not set,
56
+ // so expressions like dataItem.x still work via dataItem)
57
+
58
+ function buildItemContext(parentCtx, item, index, dataKey, nodeId) {
59
+ const storageKey = dataKey || `__rpt_${nodeId}`
60
+ const parentSetData = parentCtx.setData
61
+
62
+ const scopedSetData = (updater) => {
63
+ parentSetData(prev => {
64
+ const arr = Array.isArray(prev[storageKey]) ? [...prev[storageKey]] : []
65
+ arr[index] = typeof updater === 'function' ? updater(arr[index] ?? {}) : updater
66
+ return { ...prev, [storageKey]: arr }
67
+ })
68
+ }
69
+
70
+ const scopedUpdateFormValue = (fieldKey, value) => {
71
+ scopedSetData(prev => ({ ...prev, [fieldKey]: value }))
72
+ }
73
+
74
+ // The item's own data slice — what the scoped form reads from
75
+ const itemSlice = (Array.isArray(parentCtx.data?.[storageKey])
76
+ ? parentCtx.data[storageKey][index]
77
+ : null) ?? {}
78
+
79
+ if (dataKey) {
80
+ // Full scoping: data = item slice so expressions like `data.phone` also resolve
81
+ return {
82
+ ...parentCtx,
83
+ data: itemSlice,
84
+ setData: scopedSetData,
85
+ form: itemSlice,
86
+ updateFormValue: scopedUpdateFormValue,
87
+ dataItem: item ?? itemSlice,
88
+ itemIndex: index,
89
+ isEditMode: false,
90
+ builderContext: null,
91
+ }
92
+ }
93
+
94
+ // No dataKey: keep parent data intact for expressions, but scope form so
95
+ // inputs don't collide. Writes via updateFormValue land in the internal slot.
96
+ return {
97
+ ...parentCtx,
98
+ setData: scopedSetData,
99
+ form: itemSlice,
100
+ updateFormValue: scopedUpdateFormValue,
101
+ dataItem: item,
102
+ itemIndex: index,
103
+ isEditMode: false,
104
+ builderContext: null,
105
+ }
106
+ }
107
+
108
+ // ── Widget schema cache ────────────────────────────────────────────────────────
109
+
110
+ const widgetSchemaCache = {}
111
+
112
+ function useWidgetSchema(widgetId) {
113
+ const [node, setNode] = useState(widgetId ? widgetSchemaCache[widgetId] ?? null : null)
114
+ const [loading, setLoading] = useState(false)
115
+ const [error, setError] = useState(null)
116
+
117
+ useEffect(() => {
118
+ if (!widgetId) { setNode(null); return }
119
+ if (widgetSchemaCache[widgetId]) { setNode(widgetSchemaCache[widgetId]); return }
120
+
121
+ let cancelled = false
122
+ setLoading(true)
123
+ setError(null)
124
+
125
+ Services.GetService(Endpoints.Widget.Get.GetById, false, { id: widgetId })
126
+ .then(res => {
127
+ if (cancelled) return
128
+ if (res?.data?.value) {
129
+ const parsed = JSON.parse(res.data.value)
130
+ widgetSchemaCache[widgetId] = parsed
131
+ setNode(parsed)
132
+ } else {
133
+ setError('Widget not found')
134
+ }
135
+ })
136
+ .catch(e => {
137
+ if (!cancelled) {
138
+ console.error('[Repeater] failed to load widget', e)
139
+ setError('Failed to load widget')
140
+ }
141
+ })
142
+ .finally(() => { if (!cancelled) setLoading(false) })
143
+
144
+ return () => { cancelled = true }
145
+ }, [widgetId])
146
+
147
+ return { node, loading, error }
148
+ }
149
+
150
+ // ── Main renderer ─────────────────────────────────────────────────────────────
8
151
 
9
152
  export default function RepeaterRenderer({ node, viewerContext }) {
10
- const { data, form, isEditMode, builderContext } = viewerContext
11
- const main = resolveProps(node, 'main', { form, data })
153
+ const { data, form, isEditMode, builderContext, setData } = viewerContext
154
+
155
+ // Resolve own props using parent context (no item scope yet)
156
+ const main = resolveProps(node, 'main', viewerContext)
157
+
158
+ const {
159
+ items: itemsProp,
160
+ count,
161
+ dataKey,
162
+ itemKey,
163
+ widgetId,
164
+ direction = 'vertical',
165
+ gap,
166
+ } = main
167
+
168
+ // ── Determine the effective items array ───────────────────────────────────
169
+ //
170
+ // Priority:
171
+ // 1. `items` expression → use as-is (array of objects)
172
+ // 2. `count` expression → generate N slots, read values from data[dataKey]
173
+ // 3. data[dataKey] is already an array → use its length
174
+
175
+ const effectiveItems = (() => {
176
+ if (Array.isArray(itemsProp) && itemsProp.length > 0) return itemsProp
177
+
178
+ const n = Number(count)
179
+ if (Number.isFinite(n) && n > 0) {
180
+ // Generate N item slots. When dataKey is set, seed from existing state
181
+ // so we don't lose values across re-renders.
182
+ const existing = dataKey && Array.isArray(data?.[dataKey]) ? data[dataKey] : []
183
+ return Array.from({ length: n }, (_, i) => existing[i] ?? {})
184
+ }
12
185
 
13
- // For repeater, we use the 'items' from data/form based on the 'key'
14
- const items = main.items || []
186
+ // Fallback: if dataKey points to an existing array, derive count from it
187
+ if (dataKey && Array.isArray(data?.[dataKey])) return data[dataKey]
188
+
189
+ return []
190
+ })()
191
+
192
+ // ── Initialize / sync data[dataKey] in parent state ───────────────────────
193
+ // When count is set and dataKey is provided, ensure parent state has an
194
+ // array of the right length so the main context can read it immediately.
195
+
196
+ useEffect(() => {
197
+ if (!dataKey) return
198
+ const n = Number(count)
199
+ if (!Number.isFinite(n) || n <= 0) return
200
+
201
+ const current = data?.[dataKey]
202
+ // Only initialize if missing or length changed — never overwrite existing values
203
+ if (!Array.isArray(current) || current.length !== n) {
204
+ const next = Array.from({ length: n }, (_, i) => current?.[i] ?? {})
205
+ setData(prev => ({ ...prev, [dataKey]: next }))
206
+ }
207
+ // eslint-disable-next-line react-hooks/exhaustive-deps
208
+ }, [dataKey, count])
209
+
210
+ // ── Widget template ───────────────────────────────────────────────────────
211
+
212
+ const { node: widgetNode, loading: widgetLoading, error: widgetError } = useWidgetSchema(
213
+ widgetId || null
214
+ )
215
+ const hasWidgetTemplate = !!widgetId && !!widgetNode
216
+
217
+ // ── Drag-drop handlers (edit mode, inline template only) ──────────────────
15
218
 
16
219
  const handleDropAtIndex = index => e => {
17
220
  if (!isEditMode || !builderContext) return
18
221
  e.preventDefault()
19
222
  e.stopPropagation()
20
-
21
223
  try {
22
224
  const nodeId = e.dataTransfer.getData('application/builder-node-id')
23
225
  if (nodeId) {
@@ -29,11 +231,10 @@ export default function RepeaterRenderer({ node, viewerContext }) {
29
231
  builderContext.setDraggingNodeId(null)
30
232
  return
31
233
  }
32
-
33
234
  const componentData = e.dataTransfer.getData('application/builder-component')
34
235
  if (componentData) {
35
236
  const component = JSON.parse(componentData)
36
- const newNode = createNode(component.type)
237
+ const newNode = createNode(component.type)
37
238
  builderContext.setSchema(prev => ({
38
239
  ...prev,
39
240
  root: insertIntoTreeAtIndex(prev.root, node.id, newNode, index)
@@ -47,14 +248,37 @@ export default function RepeaterRenderer({ node, viewerContext }) {
47
248
  }
48
249
  }
49
250
 
50
- return (
51
- <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
52
- <Box sx={{ border: '1px dashed #ccc', p: 1 }}>
53
- {isEditMode ? (
54
- // In edit mode, we show the template (children)
55
- <Box>
56
- <Box sx={{ fontSize: 10, color: 'text.secondary', mb: 1 }}>Repeater Template</Box>
57
- {node.children?.length > 0 ? (
251
+ // ── Edit mode ─────────────────────────────────────────────────────────────
252
+
253
+ if (isEditMode) {
254
+ return (
255
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
256
+ <Box sx={{
257
+ border: '1px dashed',
258
+ borderColor: 'primary.light',
259
+ borderRadius: 1,
260
+ p: 1,
261
+ bgcolor: 'action.hover',
262
+ minHeight: 56,
263
+ }}>
264
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, mb: 1 }}>
265
+ <RepeatOutlined sx={{ fontSize: 14, color: 'text.disabled' }} />
266
+ <Typography sx={{ fontSize: 10, color: 'text.secondary', textTransform: 'uppercase', letterSpacing: 0.5 }}>
267
+ Repeater
268
+ {dataKey ? ` · ${dataKey}` : ''}
269
+ {widgetId ? ` · widget ${widgetId}` : ` · ${direction}`}
270
+ </Typography>
271
+ </Box>
272
+
273
+ {widgetId ? (
274
+ <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: 1, p: 2, color: 'text.disabled', minHeight: 48 }}>
275
+ <WidgetsOutlined sx={{ fontSize: 28, opacity: 0.4 }} />
276
+ <Typography sx={{ fontSize: 11, textAlign: 'center' }}>Widget template — ID: {widgetId}</Typography>
277
+ </Box>
278
+ ) : (
279
+ <Box sx={{ bgcolor: 'background.paper', borderRadius: 0.5, p: 0.5 }}>
280
+ <Typography sx={{ fontSize: 9, color: 'text.disabled', mb: 0.5, px: 0.5 }}>ITEM TEMPLATE</Typography>
281
+ {node.children?.length > 0 ? (
58
282
  <>
59
283
  {node.children.map((child, index) => (
60
284
  <Box key={child.id}>
@@ -64,30 +288,65 @@ export default function RepeaterRenderer({ node, viewerContext }) {
64
288
  ))}
65
289
  <DropZone onDrop={handleDropAtIndex(node.children.length)} isEditMode={isEditMode} />
66
290
  </>
67
- ) : (
291
+ ) : (
68
292
  <DropZone onDrop={handleDropAtIndex(0)} isEditMode={isEditMode} />
69
- )}
70
- </Box>
71
- ) : (
72
- // In preview mode, we repeat the template for each item
73
- items.map((item, index) => (
74
- <Box key={index} sx={{ mb: 2, borderBottom: '1px solid #eee', pb: 1 }}>
75
- {node.children?.map(child => (
76
- <ComponentRenderer
77
- key={child.id}
78
- node={child}
79
- viewerContext={{
80
- ...viewerContext,
81
- data: { ...data, item, index } // Provide item context
82
- }}
83
- />
84
- ))}
293
+ )}
85
294
  </Box>
86
- ))
87
- )}
88
- {!isEditMode && items.length === 0 && (
89
- <Box sx={{ textAlign: 'center', color: 'text.disabled', py: 2 }}>No items to display</Box>
90
- )}
295
+ )}
296
+ </Box>
297
+ </ViewerComponentWrapper>
298
+ )
299
+ }
300
+
301
+ // ── Preview / production ──────────────────────────────────────────────────
302
+
303
+ if (widgetId && widgetLoading) {
304
+ return (
305
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
306
+ <Box display='flex' alignItems='center' justifyContent='center' sx={{ minHeight: 48 }}>
307
+ <CircularProgress size={20} />
308
+ </Box>
309
+ </ViewerComponentWrapper>
310
+ )
311
+ }
312
+
313
+ if (widgetId && widgetError) {
314
+ return (
315
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
316
+ <Typography color='error' sx={{ fontSize: 12, p: 1 }}>{widgetError}</Typography>
317
+ </ViewerComponentWrapper>
318
+ )
319
+ }
320
+
321
+ if (effectiveItems.length === 0) {
322
+ return (
323
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
324
+ <Box sx={{ color: 'text.disabled', fontSize: 12, p: 1, textAlign: 'center' }}>No items</Box>
325
+ </ViewerComponentWrapper>
326
+ )
327
+ }
328
+
329
+ const renderItem = (item, index) => {
330
+ const ctx = buildItemContext(viewerContext, item, index, dataKey, node.id)
331
+ const key = itemKey && item?.[itemKey] != null ? item[itemKey] : index
332
+
333
+ if (hasWidgetTemplate) {
334
+ return <Box key={key}><ComponentRenderer node={widgetNode} viewerContext={ctx} /></Box>
335
+ }
336
+
337
+ return (
338
+ <Box key={key}>
339
+ {node.children?.map(child => (
340
+ <ComponentRenderer key={child.id} node={child} viewerContext={ctx} />
341
+ ))}
342
+ </Box>
343
+ )
344
+ }
345
+
346
+ return (
347
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
348
+ <Box sx={directionSx(direction, gap)}>
349
+ {effectiveItems.map((item, index) => renderItem(item, index))}
91
350
  </Box>
92
351
  </ViewerComponentWrapper>
93
352
  )
@@ -1,15 +1,229 @@
1
- import React from 'react'
2
- import ReportViewer from 'src/pages/reportModule/reportBuilder/reportViewer'
1
+ import React, { useRef, useEffect, useCallback, useState } from 'react'
2
+ import { Box, CircularProgress } from '@mui/material'
3
+ import ReportViewer from 'pages/builders/report/viewer'
3
4
  import ViewerComponentWrapper from '../ViewerComponentWrapper'
4
5
  import { resolveProps } from 'services/builderHelper/resolveProps'
6
+ import RowActionsCell from './RowActionsCell'
7
+ import { PrintTable } from '../PrintDialog'
8
+ import fetchReportDataByPageId from 'services/reportData/fetchReportData'
5
9
 
10
+ // ── Print-mode report table ────────────────────────────────────────────────────
11
+ // Uses fetchReportDataByPageId with isPagination:false to load ALL rows in one
12
+ // request, then renders a plain HTML table (AG Grid virtualization breaks print).
13
+ function PrintReportTable({ mainProps, viewerContext }) {
14
+ const [rows, setRows] = useState(null) // null = still loading
15
+ const [columns, setColumns] = useState([])
16
+
17
+ useEffect(() => {
18
+ let cancelled = false
19
+
20
+ const load = async () => {
21
+ const pageId = mainProps.pageId || mainProps.id
22
+ const dataKey = mainProps.dataKey
23
+ const ctxData = viewerContext?.data
24
+
25
+ // Fast path: no report ID — fall back to data already in viewerContext
26
+ if (!pageId) {
27
+ const fallback = Array.isArray(ctxData?.[dataKey]) ? ctxData[dataKey] : []
28
+ if (!cancelled) {
29
+ setRows(fallback)
30
+ setColumns(Array.isArray(mainProps.columnDefs) ? mainProps.columnDefs : [])
31
+ }
32
+ return
33
+ }
34
+
35
+ const result = await fetchReportDataByPageId({
36
+ pageId,
37
+ filter: mainProps.filter ?? {},
38
+ isPagination: false, // NoPagination — fetch every row
39
+ pageSize: 100000,
40
+ })
41
+
42
+ if (cancelled) return
43
+
44
+ // Prefer columnDefs explicitly configured in the builder UI.
45
+ // If none, fall back to selectedFields from the builder model —
46
+ // fetchReportDataByPageId exposes them via finalRequest.filter.selectFields.
47
+ let cols = []
48
+ if (Array.isArray(mainProps.columnDefs) && mainProps.columnDefs.length > 0) {
49
+ cols = mainProps.columnDefs
50
+ } else {
51
+ const selectedFields = result?.finalRequest?.filter?.selectFields ?? []
52
+ cols = selectedFields.map(f => ({
53
+ field: f.headerName,
54
+ headerName: f.friendlyName || f.headerName,
55
+ }))
56
+ }
57
+
58
+ setRows(result?.rows ?? [])
59
+ setColumns(cols)
60
+ }
61
+
62
+ load()
63
+ return () => { cancelled = true }
64
+ // eslint-disable-next-line react-hooks/exhaustive-deps
65
+ }, [mainProps.pageId, mainProps.id])
66
+
67
+ if (rows === null) {
68
+ return (
69
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, p: 2, fontSize: 11, color: '#999' }}>
70
+ <CircularProgress size={14} />
71
+ Loading report data…
72
+ </Box>
73
+ )
74
+ }
75
+
76
+ return <PrintTable columns={columns} rows={rows} />
77
+ }
78
+
79
+ // ── Main renderer ─────────────────────────────────────────────────────────────
6
80
  export default function ReportViewerRenderer({ node, viewerContext }) {
7
- const { data, form } = viewerContext
8
- const main = resolveProps(node, 'main', { form, data })
81
+ const {
82
+ data, form, setData, dataRef, reportRefs, openDialog, closeDialog,
83
+ pageData, pageSetData, pageDataRef, pageReportRefs,
84
+ isPrintContext, isPrintBuilder, isEditMode, isPreviewMode,
85
+ } = viewerContext
86
+
87
+ const resolveCtx = {
88
+ form,
89
+ data,
90
+ setData,
91
+ dataRef: dataRef?.current ?? {},
92
+ reportRefs: reportRefs?.current ?? {},
93
+ openDialog: openDialog ?? (() => {}),
94
+ closeDialog: closeDialog ?? (() => {}),
95
+ pageData, pageSetData, pageDataRef, pageReportRefs,
96
+ }
97
+
98
+ const main = resolveProps(node, 'main', resolveCtx)
99
+
100
+ // Use the editable 'key' prop as the node name — falls back to node.id.
101
+ // This is the identifier used in reportRefs and passed to column functions
102
+ // as `nodeName` so cross-table ref calls can target this viewer by name.
103
+ const nodeName = main.key || node.id
104
+
105
+ // Strip 'key' before spreading — React treats it as a reserved prop and
106
+ // would silently drop it; we pass it explicitly below.
107
+ const { key: _key, actionsConfig: _actionsConfig, ...mainProps } = main
108
+
109
+ // Each ReportViewer instance owns its updateRef for tracking row mutations.
110
+ // Register under nodeName so column functions can access it via reportRefs.
111
+ const updateRef = useRef([])
112
+
113
+ useEffect(() => {
114
+ if (reportRefs?.current) {
115
+ reportRefs.current[nodeName] = updateRef
116
+ }
117
+ return () => {
118
+ if (reportRefs?.current) {
119
+ delete reportRefs.current[nodeName]
120
+ }
121
+ }
122
+ }, [nodeName, reportRefs])
123
+
124
+ // ── Build the `actions` cell-renderer function from actionsConfig ─────────
125
+ const actionsConfig = Array.isArray(main.actionsConfig) && main.actionsConfig.length > 0
126
+ ? main.actionsConfig
127
+ : null
128
+
129
+ const ctxRef = useRef(viewerContext)
130
+ ctxRef.current = viewerContext
131
+
132
+ const actionsRenderer = useCallback(
133
+ actionsConfig
134
+ ? (params) => (
135
+ <RowActionsCell
136
+ params={params}
137
+ actionsConfig={actionsConfig}
138
+ viewerContext={ctxRef.current}
139
+ nodeName={nodeName}
140
+ />
141
+ )
142
+ : null,
143
+ // eslint-disable-next-line react-hooks/exhaustive-deps
144
+ [JSON.stringify(actionsConfig)]
145
+ )
146
+
147
+ // ── Edit mode: rich placeholder (both UI builder and print builder) ────────
148
+ if (isEditMode) {
149
+ const cols = Array.isArray(mainProps.columnDefs) ? mainProps.columnDefs : []
150
+ const colNames = cols.slice(0, 5).map(c => c.headerName || c.field || c.label || '?')
151
+ const hasMore = cols.length > 5
152
+
153
+ const detailRows = [
154
+ mainProps.dataKey && { label: 'dataKey', value: mainProps.dataKey },
155
+ nodeName && { label: 'id', value: nodeName },
156
+ mainProps.rowHeight != null && { label: 'rowHeight', value: mainProps.rowHeight },
157
+ mainProps.pagination != null && { label: 'pagination', value: String(mainProps.pagination) },
158
+ ].filter(Boolean)
159
+
160
+ return (
161
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
162
+ <Box sx={{
163
+ border: '2px dashed #90a4ae', borderRadius: 1, p: 1.5, m: 0.5,
164
+ bgcolor: '#f0f4f8', display: 'flex', flexDirection: 'column', gap: 0.5, minHeight: 72,
165
+ }}>
166
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
167
+ <Box sx={{ fontSize: 10, fontWeight: 700, color: '#546e7a',
168
+ textTransform: 'uppercase', letterSpacing: 0.5, flexShrink: 0 }}>
169
+ Report Viewer
170
+ </Box>
171
+ {cols.length > 0 && (
172
+ <Box sx={{ fontSize: 10, color: '#90a4ae', ml: 'auto', flexShrink: 0 }}>
173
+ {cols.length} col{cols.length !== 1 ? 's' : ''}
174
+ </Box>
175
+ )}
176
+ </Box>
177
+
178
+ {detailRows.map(({ label, value }) => (
179
+ <Box key={label} sx={{ display: 'flex', gap: 0.5, alignItems: 'baseline' }}>
180
+ <Box sx={{ fontSize: 9, color: '#90a4ae', fontWeight: 600, minWidth: 58, flexShrink: 0 }}>
181
+ {label}
182
+ </Box>
183
+ <Box sx={{ fontSize: 10, color: '#37474f', fontFamily: 'monospace',
184
+ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
185
+ {value}
186
+ </Box>
187
+ </Box>
188
+ ))}
189
+
190
+ {colNames.length > 0 && (
191
+ <Box sx={{ fontSize: 9, color: '#78909c', mt: 0.25,
192
+ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
193
+ {colNames.join(' · ')}{hasMore ? ` · +${cols.length - 5} more` : ''}
194
+ </Box>
195
+ )}
196
+ </Box>
197
+ </ViewerComponentWrapper>
198
+ )
199
+ }
200
+
201
+ // ── Print context / print builder preview ────────────────────────────────────
202
+ // AG Grid's virtualization breaks under window.print().
203
+ // PrintReportTable fetches ALL rows using NoPagination and maps columns properly.
204
+ if (isPrintContext || (isPrintBuilder && isPreviewMode)) {
205
+ return (
206
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
207
+ <PrintReportTable mainProps={mainProps} viewerContext={viewerContext} />
208
+ </ViewerComponentWrapper>
209
+ )
210
+ }
9
211
 
10
212
  return (
11
213
  <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
12
- <ReportViewer noHeader={true} {...main} />
214
+ <ReportViewer
215
+ key={nodeName}
216
+ noHeader={true}
217
+ {...mainProps}
218
+ actions={actionsRenderer ?? mainProps.actions}
219
+ updateRef={updateRef}
220
+ nodeId={nodeName}
221
+ reportRefs={reportRefs}
222
+ data={data}
223
+ dataRef={dataRef?.current}
224
+ openDialog={openDialog}
225
+ closeDialog={closeDialog}
226
+ />
13
227
  </ViewerComponentWrapper>
14
228
  )
15
229
  }