robobyte-front-builder 1.0.0

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 (614) hide show
  1. package/jsconfig.json +28 -0
  2. package/next.config.js +75 -0
  3. package/package.json +163 -0
  4. package/public/fonts/NotoSansArabic-VariableFont_wdth,wght.ttf +0 -0
  5. package/public/fonts/font.js +2 -0
  6. package/public/fonts/logo.js +2 -0
  7. package/public/images/appicon.png +0 -0
  8. package/public/images/appicon1.png +0 -0
  9. package/public/images/asiacell.png +0 -0
  10. package/public/images/avatars/1.png +0 -0
  11. package/public/images/avatars/3.png +0 -0
  12. package/public/images/avatars/4.png +0 -0
  13. package/public/images/avatars/5.png +0 -0
  14. package/public/images/cards/trophy.png +0 -0
  15. package/public/images/favicon.png +0 -0
  16. package/public/images/favicon1.png +0 -0
  17. package/public/images/icons/bag.png +0 -0
  18. package/public/images/icons/briefcase.png +0 -0
  19. package/public/images/icons/calendar.png +0 -0
  20. package/public/images/icons/dashboard.png +0 -0
  21. package/public/images/icons/dollar.png +0 -0
  22. package/public/images/icons/person.png +0 -0
  23. package/public/images/icons/profit.png +0 -0
  24. package/public/images/icons/setting.png +0 -0
  25. package/public/images/misc/chart.png +0 -0
  26. package/public/images/misc/paypal.png +0 -0
  27. package/public/images/pages/401.png +0 -0
  28. package/public/images/pages/404.png +0 -0
  29. package/public/images/pages/500.png +0 -0
  30. package/public/images/pages/auth-v2-forgot-password-illustration-bordered-dark.png +0 -0
  31. package/public/images/pages/auth-v2-forgot-password-illustration-bordered-light.png +0 -0
  32. package/public/images/pages/auth-v2-forgot-password-illustration-dark.png +0 -0
  33. package/public/images/pages/auth-v2-forgot-password-illustration-light.png +0 -0
  34. package/public/images/pages/auth-v2-forgot-password-mask-dark.png +0 -0
  35. package/public/images/pages/auth-v2-forgot-password-mask-light.png +0 -0
  36. package/public/images/pages/auth-v2-login-illustration-bordered-dark.png +0 -0
  37. package/public/images/pages/auth-v2-login-illustration-bordered-light.png +0 -0
  38. package/public/images/pages/auth-v2-login-illustration-dark.png +0 -0
  39. package/public/images/pages/auth-v2-login-illustration-light.png +0 -0
  40. package/public/images/pages/auth-v2-login-mask-dark.png +0 -0
  41. package/public/images/pages/auth-v2-login-mask-light.png +0 -0
  42. package/public/images/pages/auth-v2-register-illustration-bordered-dark.png +0 -0
  43. package/public/images/pages/auth-v2-register-illustration-bordered-light.png +0 -0
  44. package/public/images/pages/auth-v2-register-illustration-dark.png +0 -0
  45. package/public/images/pages/auth-v2-register-illustration-light.png +0 -0
  46. package/public/images/pages/auth-v2-register-mask-dark.png +0 -0
  47. package/public/images/pages/auth-v2-register-mask-light.png +0 -0
  48. package/public/images/pages/misc-401-object.png +0 -0
  49. package/public/images/pages/misc-404-object.png +0 -0
  50. package/public/images/pages/misc-500-object.png +0 -0
  51. package/public/images/pages/misc-coming-soon-object.png +0 -0
  52. package/public/images/pages/misc-mask-dark.png +0 -0
  53. package/public/images/pages/misc-mask-light.png +0 -0
  54. package/public/images/white.jpg +0 -0
  55. package/public/images/zain.png +0 -0
  56. package/public/locales/ar.json +35 -0
  57. package/public/navigationTest/Navigation.json +13 -0
  58. package/public/vercel.svg +4 -0
  59. package/src/@core/components/auth/AclGuard.js +55 -0
  60. package/src/@core/components/auth/AuthGuard.js +40 -0
  61. package/src/@core/components/auth/GuestGuard.js +30 -0
  62. package/src/@core/components/custom-inputs/Horizontal.jsx +143 -0
  63. package/src/@core/components/custom-inputs/Image.jsx +78 -0
  64. package/src/@core/components/custom-inputs/Vertical.jsx +113 -0
  65. package/src/@core/components/customizer/index.jsx +470 -0
  66. package/src/@core/components/customizer/styles.module.css +169 -0
  67. package/src/@core/components/mui/Avatar.jsx +41 -0
  68. package/src/@core/components/mui/Badge.jsx +20 -0
  69. package/src/@core/components/mui/IconButton.jsx +74 -0
  70. package/src/@core/components/mui/TabList.jsx +60 -0
  71. package/src/@core/components/option-menu/index.jsx +137 -0
  72. package/src/@core/components/scroll-to-top/index.jsx +43 -0
  73. package/src/@core/components/spinner/index.js +26 -0
  74. package/src/@core/components/window-wrapper/index.js +27 -0
  75. package/src/@core/contexts/settingsContext.jsx +98 -0
  76. package/src/@core/hooks/useBgColor.js +63 -0
  77. package/src/@core/hooks/useImageVariant.js +27 -0
  78. package/src/@core/hooks/useLayoutInit.js +37 -0
  79. package/src/@core/hooks/useObjectCookie.js +18 -0
  80. package/src/@core/hooks/useSettings.jsx +15 -0
  81. package/src/@core/layouts/BlankLayout.js +37 -0
  82. package/src/@core/layouts/BlankLayoutWithAppBar.js +51 -0
  83. package/src/@core/layouts/HorizontalLayout.jsx +151 -0
  84. package/src/@core/layouts/Layout.js +39 -0
  85. package/src/@core/layouts/VerticalLayout.jsx +124 -0
  86. package/src/@core/layouts/components/blank-layout-with-appBar/index.js +115 -0
  87. package/src/@core/layouts/components/horizontal/app-bar-content/index.js +67 -0
  88. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +352 -0
  89. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +21 -0
  90. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +195 -0
  91. package/src/@core/layouts/components/horizontal/navigation/index.js +31 -0
  92. package/src/@core/layouts/components/shared-components/LanguageDropdown.js +96 -0
  93. package/src/@core/layouts/components/shared-components/ModeToggler.js +32 -0
  94. package/src/@core/layouts/components/shared-components/NotificationDropdown.js +226 -0
  95. package/src/@core/layouts/components/shared-components/UserDropdown.js +177 -0
  96. package/src/@core/layouts/components/shared-components/footer/FooterContent.js +46 -0
  97. package/src/@core/layouts/components/shared-components/footer/index.js +61 -0
  98. package/src/@core/layouts/components/vertical/appBar/index.js +74 -0
  99. package/src/@core/layouts/components/vertical/navigation/Drawer.js +122 -0
  100. package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +435 -0
  101. package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +180 -0
  102. package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +26 -0
  103. package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +258 -0
  104. package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +102 -0
  105. package/src/@core/layouts/components/vertical/navigation/index.js +169 -0
  106. package/src/@core/layouts/utils.js +69 -0
  107. package/src/@core/styles/Table.module.css +93 -0
  108. package/src/@core/styles/horizontal/menuItemStyles.js +100 -0
  109. package/src/@core/styles/horizontal/menuRootStyles.js +19 -0
  110. package/src/@core/styles/libs/fullcalendar/index.js +461 -0
  111. package/src/@core/styles/libs/keen-slider/index.js +111 -0
  112. package/src/@core/styles/libs/react-apexcharts/index.js +107 -0
  113. package/src/@core/styles/libs/react-cleave/index.js +33 -0
  114. package/src/@core/styles/libs/react-credit-cards/index.js +11 -0
  115. package/src/@core/styles/libs/react-datepicker/index.js +388 -0
  116. package/src/@core/styles/libs/react-draft-wysiwyg/index.js +144 -0
  117. package/src/@core/styles/libs/react-dropzone/index.js +76 -0
  118. package/src/@core/styles/libs/react-hot-toast/index.js +37 -0
  119. package/src/@core/styles/libs/recharts/index.js +47 -0
  120. package/src/@core/styles/stepper.js +103 -0
  121. package/src/@core/styles/vertical/menuItemStyles.js +138 -0
  122. package/src/@core/styles/vertical/menuSectionStyles.js +54 -0
  123. package/src/@core/styles/vertical/navigationCustomStyles.js +62 -0
  124. package/src/@core/svg/ContentCompact.jsx +17 -0
  125. package/src/@core/svg/ContentWide.jsx +17 -0
  126. package/src/@core/svg/DirectionLtr.jsx +93 -0
  127. package/src/@core/svg/DirectionRtl.jsx +93 -0
  128. package/src/@core/svg/LayoutCollapsed.jsx +59 -0
  129. package/src/@core/svg/LayoutHorizontal.jsx +42 -0
  130. package/src/@core/svg/LayoutVertical.jsx +59 -0
  131. package/src/@core/svg/Logo.jsx +76 -0
  132. package/src/@core/svg/SkinBordered.jsx +54 -0
  133. package/src/@core/svg/SkinDefault.jsx +59 -0
  134. package/src/@core/tailwind/plugin.js +78 -0
  135. package/src/@core/theme/ThemeComponent.js +63 -0
  136. package/src/@core/theme/ThemeOptions.js +71 -0
  137. package/src/@core/theme/breakpoints/index.js +11 -0
  138. package/src/@core/theme/colorSchemes.js +326 -0
  139. package/src/@core/theme/customShadows.js +11 -0
  140. package/src/@core/theme/globalStyles.js +81 -0
  141. package/src/@core/theme/index.js +42 -0
  142. package/src/@core/theme/overrides/accordion.js +51 -0
  143. package/src/@core/theme/overrides/accordion.jsx +85 -0
  144. package/src/@core/theme/overrides/alerts.js +110 -0
  145. package/src/@core/theme/overrides/alerts.jsx +180 -0
  146. package/src/@core/theme/overrides/autocomplete.js +14 -0
  147. package/src/@core/theme/overrides/autocomplete.jsx +68 -0
  148. package/src/@core/theme/overrides/avatar.js +38 -0
  149. package/src/@core/theme/overrides/avatars.js +27 -0
  150. package/src/@core/theme/overrides/backdrop.js +22 -0
  151. package/src/@core/theme/overrides/badges.js +16 -0
  152. package/src/@core/theme/overrides/breadcrumbs.js +11 -0
  153. package/src/@core/theme/overrides/button-group.js +84 -0
  154. package/src/@core/theme/overrides/button.js +93 -0
  155. package/src/@core/theme/overrides/buttonGroup.js +9 -0
  156. package/src/@core/theme/overrides/card.js +83 -0
  157. package/src/@core/theme/overrides/checkbox.jsx +95 -0
  158. package/src/@core/theme/overrides/chip.js +72 -0
  159. package/src/@core/theme/overrides/dataGrid.js +114 -0
  160. package/src/@core/theme/overrides/dateTimePicker.js +65 -0
  161. package/src/@core/theme/overrides/dialog.js +120 -0
  162. package/src/@core/theme/overrides/divider.js +13 -0
  163. package/src/@core/theme/overrides/drawer.js +20 -0
  164. package/src/@core/theme/overrides/fab.js +13 -0
  165. package/src/@core/theme/overrides/form-control-label.js +19 -0
  166. package/src/@core/theme/overrides/icon-button.js +145 -0
  167. package/src/@core/theme/overrides/index.js +103 -0
  168. package/src/@core/theme/overrides/input.js +72 -0
  169. package/src/@core/theme/overrides/link.js +9 -0
  170. package/src/@core/theme/overrides/list.js +44 -0
  171. package/src/@core/theme/overrides/menu.js +25 -0
  172. package/src/@core/theme/overrides/pagination.js +41 -0
  173. package/src/@core/theme/overrides/paper.js +9 -0
  174. package/src/@core/theme/overrides/popover.js +16 -0
  175. package/src/@core/theme/overrides/progress.js +38 -0
  176. package/src/@core/theme/overrides/radio.jsx +80 -0
  177. package/src/@core/theme/overrides/rating.js +16 -0
  178. package/src/@core/theme/overrides/rating.jsx +32 -0
  179. package/src/@core/theme/overrides/select.js +19 -0
  180. package/src/@core/theme/overrides/select.jsx +52 -0
  181. package/src/@core/theme/overrides/slider.js +97 -0
  182. package/src/@core/theme/overrides/snackbar.js +19 -0
  183. package/src/@core/theme/overrides/switch.js +73 -0
  184. package/src/@core/theme/overrides/switches.js +25 -0
  185. package/src/@core/theme/overrides/table-pagination.js +39 -0
  186. package/src/@core/theme/overrides/table.js +81 -0
  187. package/src/@core/theme/overrides/tabs.js +30 -0
  188. package/src/@core/theme/overrides/timeline.js +80 -0
  189. package/src/@core/theme/overrides/toggle-button.js +33 -0
  190. package/src/@core/theme/overrides/toggleButton.js +16 -0
  191. package/src/@core/theme/overrides/tooltip.js +21 -0
  192. package/src/@core/theme/overrides/typography.js +13 -0
  193. package/src/@core/theme/palette/index.js +107 -0
  194. package/src/@core/theme/shadows/index.js +61 -0
  195. package/src/@core/theme/shadows.js +12 -0
  196. package/src/@core/theme/spacing/index.js +3 -0
  197. package/src/@core/theme/spacing.js +5 -0
  198. package/src/@core/theme/typography/index.js +65 -0
  199. package/src/@core/theme/typography.js +84 -0
  200. package/src/@core/utils/create-emotion-cache.js +5 -0
  201. package/src/@core/utils/hex-to-rgba.js +11 -0
  202. package/src/@core/utils/serverHelpers.js +45 -0
  203. package/src/@menu/components/RouterLink.jsx +18 -0
  204. package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +88 -0
  205. package/src/@menu/components/horizontal-menu/Menu.jsx +83 -0
  206. package/src/@menu/components/horizontal-menu/MenuButton.jsx +100 -0
  207. package/src/@menu/components/horizontal-menu/MenuItem.jsx +183 -0
  208. package/src/@menu/components/horizontal-menu/SubMenu.jsx +418 -0
  209. package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +41 -0
  210. package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +20 -0
  211. package/src/@menu/components/vertical-menu/Menu.jsx +161 -0
  212. package/src/@menu/components/vertical-menu/MenuButton.jsx +95 -0
  213. package/src/@menu/components/vertical-menu/MenuItem.jsx +180 -0
  214. package/src/@menu/components/vertical-menu/MenuSection.jsx +124 -0
  215. package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +70 -0
  216. package/src/@menu/components/vertical-menu/NavHeader.jsx +39 -0
  217. package/src/@menu/components/vertical-menu/SubMenu.jsx +420 -0
  218. package/src/@menu/components/vertical-menu/SubMenuContent.jsx +101 -0
  219. package/src/@menu/components/vertical-menu/VerticalNav.jsx +216 -0
  220. package/src/@menu/contexts/horizontalNavContext.jsx +29 -0
  221. package/src/@menu/contexts/verticalNavContext.jsx +65 -0
  222. package/src/@menu/defaultConfigs.js +12 -0
  223. package/src/@menu/hooks/useHorizontalMenu.jsx +19 -0
  224. package/src/@menu/hooks/useHorizontalNav.jsx +19 -0
  225. package/src/@menu/hooks/useMediaQuery.jsx +29 -0
  226. package/src/@menu/hooks/useVerticalMenu.jsx +19 -0
  227. package/src/@menu/hooks/useVerticalNav.jsx +19 -0
  228. package/src/@menu/horizontal-menu/index.jsx +8 -0
  229. package/src/@menu/styles/StyledBackdrop.jsx +15 -0
  230. package/src/@menu/styles/StyledMenuIcon.jsx +12 -0
  231. package/src/@menu/styles/StyledMenuLabel.jsx +16 -0
  232. package/src/@menu/styles/StyledMenuPrefix.jsx +10 -0
  233. package/src/@menu/styles/StyledMenuSectionLabel.jsx +21 -0
  234. package/src/@menu/styles/StyledMenuSuffix.jsx +10 -0
  235. package/src/@menu/styles/StyledSubMenuContent.jsx +43 -0
  236. package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +13 -0
  237. package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +26 -0
  238. package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +11 -0
  239. package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +33 -0
  240. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +18 -0
  241. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +10 -0
  242. package/src/@menu/styles/horizontal/horizontalUl.module.css +15 -0
  243. package/src/@menu/styles/styles.module.css +5 -0
  244. package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +16 -0
  245. package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +28 -0
  246. package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +23 -0
  247. package/src/@menu/styles/vertical/StyledVerticalNav.jsx +67 -0
  248. package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +15 -0
  249. package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +23 -0
  250. package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +25 -0
  251. package/src/@menu/styles/vertical/verticalNavBgImage.module.css +10 -0
  252. package/src/@menu/svg/ChevronRight.jsx +9 -0
  253. package/src/@menu/svg/Close.jsx +12 -0
  254. package/src/@menu/svg/RadioCircle.jsx +12 -0
  255. package/src/@menu/svg/RadioCircleMarked.jsx +13 -0
  256. package/src/@menu/utils/menuClasses.js +44 -0
  257. package/src/@menu/utils/menuUtils.jsx +145 -0
  258. package/src/@menu/vertical-menu/index.jsx +11 -0
  259. package/src/configs/Permissions/PermissionsActions.json +6 -0
  260. package/src/configs/Permissions/PermissionsSubjects.json +107 -0
  261. package/src/configs/acl.js +115 -0
  262. package/src/configs/auth.js +5 -0
  263. package/src/configs/aws-exports.js +30 -0
  264. package/src/configs/firebase.js +25 -0
  265. package/src/configs/i18n.js +34 -0
  266. package/src/configs/izColors.json +11 -0
  267. package/src/configs/primaryColorConfig.js +35 -0
  268. package/src/configs/themeConfig.js +44 -0
  269. package/src/context/AuthContext.js +179 -0
  270. package/src/context/BuilderContext.jsx +209 -0
  271. package/src/context/SystemContext.js +99 -0
  272. package/src/hooks/useAuth.js +4 -0
  273. package/src/layouts/UserLayout.js +94 -0
  274. package/src/layouts/UserThemeOptions.js +191 -0
  275. package/src/layouts/components/Direction.js +30 -0
  276. package/src/layouts/components/HtmlTooltip.js +15 -0
  277. package/src/layouts/components/Translations.js +11 -0
  278. package/src/layouts/components/UserDropdown.js +217 -0
  279. package/src/layouts/components/UserIcon.js +40 -0
  280. package/src/layouts/components/acl/Can.js +6 -0
  281. package/src/layouts/components/acl/CanViewNavGroup.js +36 -0
  282. package/src/layouts/components/acl/CanViewNavLink.js +17 -0
  283. package/src/layouts/components/acl/CanViewNavSectionTitle.js +17 -0
  284. package/src/layouts/components/horizontal/AppBarContent.js +39 -0
  285. package/src/layouts/components/horizontal/ServerSideNavItems.js +44 -0
  286. package/src/layouts/components/mui/StepperComps.js +55 -0
  287. package/src/layouts/components/vertical/AppBarContent.js +35 -0
  288. package/src/layouts/components/vertical/ServerSideNavItems.js +44 -0
  289. package/src/lib/index.js +75 -0
  290. package/src/lib/navigation/NavigationExtensionContext.jsx +81 -0
  291. package/src/lib/navigation/mergeNavExtensions.js +66 -0
  292. package/src/lib/navigation/useNavExtension.js +54 -0
  293. package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +57 -0
  294. package/src/libs/ApexCharts.jsx +5 -0
  295. package/src/libs/ReactPlayer.jsx +5 -0
  296. package/src/libs/Recharts.jsx +4 -0
  297. package/src/libs/auth.js +124 -0
  298. package/src/libs/styles/AppFullCalendar.js +505 -0
  299. package/src/libs/styles/AppKeenSlider.js +116 -0
  300. package/src/libs/styles/AppReactApexCharts.jsx +110 -0
  301. package/src/libs/styles/AppReactDatepicker.jsx +470 -0
  302. package/src/libs/styles/AppReactDropzone.js +76 -0
  303. package/src/libs/styles/AppReactToastify.jsx +108 -0
  304. package/src/libs/styles/AppRecharts.js +55 -0
  305. package/src/libs/styles/inputOtp.module.css +39 -0
  306. package/src/libs/styles/tiptapEditor.css +72 -0
  307. package/src/navigation/horizontal/index.js +246 -0
  308. package/src/navigation/vertical/index.js +253 -0
  309. package/src/pages/401.js +70 -0
  310. package/src/pages/404.js +67 -0
  311. package/src/pages/500.js +68 -0
  312. package/src/pages/[slug].js +115 -0
  313. package/src/pages/_app.js +148 -0
  314. package/src/pages/_document.js +72 -0
  315. package/src/pages/api/navigation/regenerate-registry.js +116 -0
  316. package/src/pages/api/navigation/save.js +218 -0
  317. package/src/pages/authModule/acl/index.js +48 -0
  318. package/src/pages/authModule/forgot-password/index.js +228 -0
  319. package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +392 -0
  320. package/src/pages/authModule/permissions/rolePermissions/index.js +343 -0
  321. package/src/pages/authModule/permissions/systemPermissions/index.js +354 -0
  322. package/src/pages/authModule/privacy/index.js +721 -0
  323. package/src/pages/authModule/users/index.js +210 -0
  324. package/src/pages/index.js +44 -0
  325. package/src/pages/login/index.js +328 -0
  326. package/src/pages/mainHome/index.js +181 -0
  327. package/src/pages/navigatorBuilder/index.jsx +2070 -0
  328. package/src/pages/reportModule/reportBuilder/index.js +1361 -0
  329. package/src/pages/reportModule/reportBuilder/reportViewer/index.js +187 -0
  330. package/src/pages/reportModule/reportBuilder/reports/index.js +198 -0
  331. package/src/pages/viewBuilder/index.jsx +94 -0
  332. package/src/pages/viewBuilder/viewPage/index.jsx +46 -0
  333. package/src/pages/viewBuilder/views/index.js +146 -0
  334. package/src/pages/viewer/[id]/index.js +88 -0
  335. package/src/services/ContentTypes.js +10 -0
  336. package/src/services/DeleteService.js +77 -0
  337. package/src/services/Endpoints/BunnyEndpoints.js +26 -0
  338. package/src/services/Endpoints/CaseEndpoints.js +29 -0
  339. package/src/services/Endpoints/CaseTypeEndpoints.js +29 -0
  340. package/src/services/Endpoints/ContactsEndpoints.js +81 -0
  341. package/src/services/Endpoints/CourtEndpoints.js +29 -0
  342. package/src/services/Endpoints/FilterEndpoints.js +31 -0
  343. package/src/services/Endpoints/NavigatorEndpoints.js +21 -0
  344. package/src/services/Endpoints/ReportBuilderEndpoints.js +45 -0
  345. package/src/services/Endpoints/UiBuilderEndpoints.js +37 -0
  346. package/src/services/Endpoints/UserTableTemplateEndpoints.js +26 -0
  347. package/src/services/Endpoints/UsersEndpoints.js +142 -0
  348. package/src/services/Endpoints/ViewEndpoints.js +28 -0
  349. package/src/services/Endpoints/ViewPermissionEndpoints.js +37 -0
  350. package/src/services/Endpoints/ViewPermissionRoleEndpoints.js +39 -0
  351. package/src/services/Endpoints/ViewPermissionRoleItemsEndpoints.js +32 -0
  352. package/src/services/Endpoints/ViewPermissionRoleUsersEndpoints.js +28 -0
  353. package/src/services/Endpoints/WidgetEndpoints.js +28 -0
  354. package/src/services/Endpoints.js +49 -0
  355. package/src/services/External/BunnyCdn/BunnyUploadFile.js +168 -0
  356. package/src/services/GetService.js +67 -0
  357. package/src/services/MetaDataTemplate/index.js +5 -0
  358. package/src/services/PatchService.js +83 -0
  359. package/src/services/PostService.js +81 -0
  360. package/src/services/StreamService.js +82 -0
  361. package/src/services/UpdateService.js +82 -0
  362. package/src/services/auth/AuthService.js +47 -0
  363. package/src/services/auth/GetUsersService.js +38 -0
  364. package/src/services/auth/PostRegisterUser.js +29 -0
  365. package/src/services/auth/PostResetPasswordService.js +28 -0
  366. package/src/services/auth/PutAccountService.js +29 -0
  367. package/src/services/auth/PutRefreshToken.js +69 -0
  368. package/src/services/auth/RefreshToken.js +0 -0
  369. package/src/services/builderHelper/actionExecutor.js +73 -0
  370. package/src/services/builderHelper/builderHelper.js +99 -0
  371. package/src/services/builderHelper/index.js +2 -0
  372. package/src/services/builderHelper/jsExecutor.js +115 -0
  373. package/src/services/builderHelper/layoutHelpers.js +231 -0
  374. package/src/services/builderHelper/nodeFactory.js +44 -0
  375. package/src/services/builderHelper/resolveProps.js +34 -0
  376. package/src/services/builderHelper/tree.js +131 -0
  377. package/src/services/components/UniversalNestedAutocomplete.js +331 -0
  378. package/src/services/components/agGridAutoComplete.js +172 -0
  379. package/src/services/components/universalAutoComplete.js +207 -0
  380. package/src/services/enums/ReportBuilderTypeEnum.js +18 -0
  381. package/src/services/helper/FilterFormat.js +70 -0
  382. package/src/services/helper/FormatCurrencyIQD.js +11 -0
  383. package/src/services/helper/datagridEditComponents.js +38 -0
  384. package/src/services/helper/dateFormat.js +30 -0
  385. package/src/services/helper/formData.js +21 -0
  386. package/src/services/helper/getFieldByType.js +0 -0
  387. package/src/services/helper/getPropByString.js +18 -0
  388. package/src/services/helper/handleChange.js +26 -0
  389. package/src/services/helper/helper.js +105 -0
  390. package/src/services/helper/multiSelectEditor.js +226 -0
  391. package/src/services/helper/translateOrderReturnStatus.js +12 -0
  392. package/src/services/helper/translateRole.js +24 -0
  393. package/src/services/helper/translateStatus.js +12 -0
  394. package/src/services/helper/translateTransferReceiptType.js +67 -0
  395. package/src/services/helper/translsateStoreProductTransfer.js +40 -0
  396. package/src/services/helper/translsateStoreType.js +25 -0
  397. package/src/services/helper/useInterval.js +21 -0
  398. package/src/services/helper/yupCutomization.js +15 -0
  399. package/src/services/reportData/fetchReportData.js +210 -0
  400. package/src/views/ConfirmDialog.js +178 -0
  401. package/src/views/builder/JSEditor.js +226 -0
  402. package/src/views/builder/inspector/Inspector.jsx +63 -0
  403. package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +117 -0
  404. package/src/views/builder/inspector/Tabs/MainTab.jsx +95 -0
  405. package/src/views/builder/inspector/Tabs/RulesTab.jsx +79 -0
  406. package/src/views/builder/inspector/Tabs/StyleTab.jsx +79 -0
  407. package/src/views/builder/inspector/definitions/autocomplete/main.js +25 -0
  408. package/src/views/builder/inspector/definitions/breadcrumb/main.js +9 -0
  409. package/src/views/builder/inspector/definitions/button/actions.js +12 -0
  410. package/src/views/builder/inspector/definitions/button/main.js +14 -0
  411. package/src/views/builder/inspector/definitions/button/rules.js +5 -0
  412. package/src/views/builder/inspector/definitions/button/style.js +32 -0
  413. package/src/views/builder/inspector/definitions/button.actions.js +12 -0
  414. package/src/views/builder/inspector/definitions/card/main.js +11 -0
  415. package/src/views/builder/inspector/definitions/cell/main.js +4 -0
  416. package/src/views/builder/inspector/definitions/checkbox/actions.js +1 -0
  417. package/src/views/builder/inspector/definitions/checkbox/main.js +13 -0
  418. package/src/views/builder/inspector/definitions/checkbox/rules.js +8 -0
  419. package/src/views/builder/inspector/definitions/checkbox/style.js +38 -0
  420. package/src/views/builder/inspector/definitions/checkboxFields.js +0 -0
  421. package/src/views/builder/inspector/definitions/column/main.js +9 -0
  422. package/src/views/builder/inspector/definitions/column-group/main.js +18 -0
  423. package/src/views/builder/inspector/definitions/common/actions.js +1 -0
  424. package/src/views/builder/inspector/definitions/common/main.js +14 -0
  425. package/src/views/builder/inspector/definitions/common/rules.js +8 -0
  426. package/src/views/builder/inspector/definitions/common/style.js +39 -0
  427. package/src/views/builder/inspector/definitions/common.advanced.js +8 -0
  428. package/src/views/builder/inspector/definitions/common.main.js +14 -0
  429. package/src/views/builder/inspector/definitions/common.style.js +33 -0
  430. package/src/views/builder/inspector/definitions/commonMainFields.js +18 -0
  431. package/src/views/builder/inspector/definitions/container/actions.js +1 -0
  432. package/src/views/builder/inspector/definitions/container/main.js +4 -0
  433. package/src/views/builder/inspector/definitions/container/rules.js +4 -0
  434. package/src/views/builder/inspector/definitions/container/style.js +32 -0
  435. package/src/views/builder/inspector/definitions/datepicker/actions.js +1 -0
  436. package/src/views/builder/inspector/definitions/datepicker/main.js +28 -0
  437. package/src/views/builder/inspector/definitions/datepicker/rules.js +8 -0
  438. package/src/views/builder/inspector/definitions/datepicker/style.js +38 -0
  439. package/src/views/builder/inspector/definitions/datepicker.main.js +28 -0
  440. package/src/views/builder/inspector/definitions/divider/actions.js +1 -0
  441. package/src/views/builder/inspector/definitions/divider/main.js +23 -0
  442. package/src/views/builder/inspector/definitions/divider/rules.js +4 -0
  443. package/src/views/builder/inspector/definitions/divider/style.js +9 -0
  444. package/src/views/builder/inspector/definitions/dropdown/actions.js +10 -0
  445. package/src/views/builder/inspector/definitions/dropdown/main.js +19 -0
  446. package/src/views/builder/inspector/definitions/dropdown/rules.js +8 -0
  447. package/src/views/builder/inspector/definitions/dropdown/style.js +38 -0
  448. package/src/views/builder/inspector/definitions/header/actions.js +1 -0
  449. package/src/views/builder/inspector/definitions/header/main.js +29 -0
  450. package/src/views/builder/inspector/definitions/header/rules.js +4 -0
  451. package/src/views/builder/inspector/definitions/header/style.js +12 -0
  452. package/src/views/builder/inspector/definitions/header-cell/main.js +5 -0
  453. package/src/views/builder/inspector/definitions/image/actions.js +1 -0
  454. package/src/views/builder/inspector/definitions/image/main.js +13 -0
  455. package/src/views/builder/inspector/definitions/image/rules.js +4 -0
  456. package/src/views/builder/inspector/definitions/image/style.js +12 -0
  457. package/src/views/builder/inspector/definitions/index.js +407 -0
  458. package/src/views/builder/inspector/definitions/input/actions.js +1 -0
  459. package/src/views/builder/inspector/definitions/input/main.js +14 -0
  460. package/src/views/builder/inspector/definitions/input/rules.js +8 -0
  461. package/src/views/builder/inspector/definitions/input/style.js +32 -0
  462. package/src/views/builder/inspector/definitions/label/actions.js +1 -0
  463. package/src/views/builder/inspector/definitions/label/main.js +24 -0
  464. package/src/views/builder/inspector/definitions/label/rules.js +4 -0
  465. package/src/views/builder/inspector/definitions/label/style.js +12 -0
  466. package/src/views/builder/inspector/definitions/layout/actions.js +1 -0
  467. package/src/views/builder/inspector/definitions/layout/main.js +6 -0
  468. package/src/views/builder/inspector/definitions/layout/rules.js +3 -0
  469. package/src/views/builder/inspector/definitions/layout/style.js +7 -0
  470. package/src/views/builder/inspector/definitions/layout-cell/actions.js +1 -0
  471. package/src/views/builder/inspector/definitions/layout-cell/main.js +7 -0
  472. package/src/views/builder/inspector/definitions/layout-cell/rules.js +3 -0
  473. package/src/views/builder/inspector/definitions/layout-cell/style.js +44 -0
  474. package/src/views/builder/inspector/definitions/link/actions.js +1 -0
  475. package/src/views/builder/inspector/definitions/link/main.js +29 -0
  476. package/src/views/builder/inspector/definitions/link/rules.js +4 -0
  477. package/src/views/builder/inspector/definitions/link/style.js +11 -0
  478. package/src/views/builder/inspector/definitions/menu/actions.js +3 -0
  479. package/src/views/builder/inspector/definitions/menu/main.js +16 -0
  480. package/src/views/builder/inspector/definitions/menu/rules.js +4 -0
  481. package/src/views/builder/inspector/definitions/menu/style.js +33 -0
  482. package/src/views/builder/inspector/definitions/number/actions.js +10 -0
  483. package/src/views/builder/inspector/definitions/number/main.js +29 -0
  484. package/src/views/builder/inspector/definitions/number/rules.js +8 -0
  485. package/src/views/builder/inspector/definitions/number/style.js +32 -0
  486. package/src/views/builder/inspector/definitions/progress-circle/actions.js +1 -0
  487. package/src/views/builder/inspector/definitions/progress-circle/main.js +18 -0
  488. package/src/views/builder/inspector/definitions/progress-circle/rules.js +4 -0
  489. package/src/views/builder/inspector/definitions/progress-circle/style.js +5 -0
  490. package/src/views/builder/inspector/definitions/progress-line/actions.js +1 -0
  491. package/src/views/builder/inspector/definitions/progress-line/main.js +16 -0
  492. package/src/views/builder/inspector/definitions/progress-line/rules.js +4 -0
  493. package/src/views/builder/inspector/definitions/progress-line/style.js +6 -0
  494. package/src/views/builder/inspector/definitions/radio/actions.js +10 -0
  495. package/src/views/builder/inspector/definitions/radio/main.js +16 -0
  496. package/src/views/builder/inspector/definitions/radio/rules.js +8 -0
  497. package/src/views/builder/inspector/definitions/radio/style.js +32 -0
  498. package/src/views/builder/inspector/definitions/reportViewer/main.js +12 -0
  499. package/src/views/builder/inspector/definitions/richtext/actions.js +10 -0
  500. package/src/views/builder/inspector/definitions/richtext/main.js +21 -0
  501. package/src/views/builder/inspector/definitions/richtext/rules.js +8 -0
  502. package/src/views/builder/inspector/definitions/richtext/style.js +32 -0
  503. package/src/views/builder/inspector/definitions/signature/actions.js +1 -0
  504. package/src/views/builder/inspector/definitions/signature/main.js +13 -0
  505. package/src/views/builder/inspector/definitions/signature/rules.js +8 -0
  506. package/src/views/builder/inspector/definitions/signature/style.js +26 -0
  507. package/src/views/builder/inspector/definitions/table/main.js +9 -0
  508. package/src/views/builder/inspector/definitions/tag/actions.js +10 -0
  509. package/src/views/builder/inspector/definitions/tag/main.js +17 -0
  510. package/src/views/builder/inspector/definitions/tag/rules.js +8 -0
  511. package/src/views/builder/inspector/definitions/tag/style.js +32 -0
  512. package/src/views/builder/inspector/definitions/textarea/actions.js +1 -0
  513. package/src/views/builder/inspector/definitions/textarea/main.js +16 -0
  514. package/src/views/builder/inspector/definitions/textarea/rules.js +8 -0
  515. package/src/views/builder/inspector/definitions/textarea/style.js +32 -0
  516. package/src/views/builder/inspector/definitions/time/actions.js +10 -0
  517. package/src/views/builder/inspector/definitions/time/main.js +18 -0
  518. package/src/views/builder/inspector/definitions/time/rules.js +8 -0
  519. package/src/views/builder/inspector/definitions/time/style.js +32 -0
  520. package/src/views/builder/inspector/definitions/toggle/actions.js +10 -0
  521. package/src/views/builder/inspector/definitions/toggle/main.js +26 -0
  522. package/src/views/builder/inspector/definitions/toggle/rules.js +8 -0
  523. package/src/views/builder/inspector/definitions/toggle/style.js +32 -0
  524. package/src/views/builder/inspector/fields/BooleanEditor.jsx +30 -0
  525. package/src/views/builder/inspector/fields/ExpressionEditor.jsx +35 -0
  526. package/src/views/builder/inspector/fields/FieldWrapper.jsx +15 -0
  527. package/src/views/builder/inspector/fields/ItemsEditor.jsx +118 -0
  528. package/src/views/builder/inspector/fields/OptionsEditor.jsx +118 -0
  529. package/src/views/builder/inspector/fields/SelectEditor.jsx +32 -0
  530. package/src/views/builder/inspector/fields/TabsEditor.jsx +128 -0
  531. package/src/views/builder/inspector/fields/TextEditor.jsx +28 -0
  532. package/src/views/builder/inspector/fields/TextFieldEditor.jsx +0 -0
  533. package/src/views/builder/sidebar/Sidebar.jsx +20 -0
  534. package/src/views/builder/sidebar/SidebarTabs.jsx +50 -0
  535. package/src/views/builder/sidebar/tabs/ActionsTab.jsx +94 -0
  536. package/src/views/builder/sidebar/tabs/Components/ComponentItem.jsx +69 -0
  537. package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +89 -0
  538. package/src/views/builder/sidebar/tabs/Components/GroupLevelAutocomplete.jsx +269 -0
  539. package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +69 -0
  540. package/src/views/builder/sidebar/tabs/TreeTab.jsx +205 -0
  541. package/src/views/builder/sidebar/tabs/ViewTab.jsx +121 -0
  542. package/src/views/builder/viewer/Canvas.jsx +7 -0
  543. package/src/views/builder/viewer/ComponentRenderer.jsx +166 -0
  544. package/src/views/builder/viewer/DropZone.jsx +60 -0
  545. package/src/views/builder/viewer/ProductionViewer.jsx +155 -0
  546. package/src/views/builder/viewer/SaveViewDialog.jsx +60 -0
  547. package/src/views/builder/viewer/SaveWidgetDialog.jsx +142 -0
  548. package/src/views/builder/viewer/Viewer.jsx +83 -0
  549. package/src/views/builder/viewer/ViewerComponentWrapper.jsx +238 -0
  550. package/src/views/builder/viewer/ViewerToolbar.jsx +89 -0
  551. package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +57 -0
  552. package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +32 -0
  553. package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +55 -0
  554. package/src/views/builder/viewer/renderers/CardRenderer.jsx +76 -0
  555. package/src/views/builder/viewer/renderers/CellRenderer.jsx +71 -0
  556. package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +27 -0
  557. package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +96 -0
  558. package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +71 -0
  559. package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +111 -0
  560. package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +49 -0
  561. package/src/views/builder/viewer/renderers/DividerRenderer.jsx +22 -0
  562. package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +63 -0
  563. package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +78 -0
  564. package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +23 -0
  565. package/src/views/builder/viewer/renderers/ImageRenderer.jsx +26 -0
  566. package/src/views/builder/viewer/renderers/InputRenderer.jsx +34 -0
  567. package/src/views/builder/viewer/renderers/LabelRenderer.jsx +23 -0
  568. package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +162 -0
  569. package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +173 -0
  570. package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +51 -0
  571. package/src/views/builder/viewer/renderers/LinkRenderer.jsx +24 -0
  572. package/src/views/builder/viewer/renderers/MenuRenderer.jsx +291 -0
  573. package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +80 -0
  574. package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +47 -0
  575. package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +36 -0
  576. package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +57 -0
  577. package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +94 -0
  578. package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +15 -0
  579. package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +76 -0
  580. package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +89 -0
  581. package/src/views/builder/viewer/renderers/TabRenderer.jsx +82 -0
  582. package/src/views/builder/viewer/renderers/TableRenderer.jsx +92 -0
  583. package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +67 -0
  584. package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +37 -0
  585. package/src/views/builder/viewer/renderers/TextRenderer.jsx +9 -0
  586. package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +49 -0
  587. package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +46 -0
  588. package/src/views/builder/viewer/renderers/WizardRenderer.jsx +88 -0
  589. package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +72 -0
  590. package/src/views/customFilter/CustomFilterDialog.js +1142 -0
  591. package/src/views/genericTable/BuilderExpressionParams.js +193 -0
  592. package/src/views/genericTable/FixedFilterDialog.js +447 -0
  593. package/src/views/genericTable/GenericForm.js +301 -0
  594. package/src/views/genericTable/QueryEditor.js +99 -0
  595. package/src/views/genericTable/RegexTextEditor.js +182 -0
  596. package/src/views/genericTable/ReportBuilderSaveDialog.js +153 -0
  597. package/src/views/genericTable/RoutingSettingDialog.js +189 -0
  598. package/src/views/genericTable/SGrid.js +2168 -0
  599. package/src/views/genericTable/SearchFilterDialog.js +247 -0
  600. package/src/views/genericTable/TAGGrid.js +1046 -0
  601. package/src/views/genericTable/cellEditors/autocompleteEditor.js +229 -0
  602. package/src/views/genericTable/cellRenderers/imageRenderer.js +14 -0
  603. package/src/views/genericTable/statusBar/rowCountStatusBar.js +37 -0
  604. package/src/views/genericTable/template/addTemplate.js +187 -0
  605. package/src/views/genericTable/toolPanels/CustomColumnsToolPanel.js +43 -0
  606. package/src/views/pages/auth/FooterIllustrationsV2.js +40 -0
  607. package/src/views/pages/misc/FooterIllustrations.js +47 -0
  608. package/src/views/pages/misc/muiTable/CustomPagination.js +34 -0
  609. package/src/views/pages/users/UserManageDialog.js +283 -0
  610. package/src/views/pages/users/UserViewPage.js +199 -0
  611. package/src/views/users/AddUserNameDialog.js +162 -0
  612. package/src/views/users/ContactManage.js +449 -0
  613. package/src/views/users/ResetPasswordDialog.js +242 -0
  614. package/styles/globals.css +71 -0
@@ -0,0 +1,269 @@
1
+ import { useEffect, useState } from 'react'
2
+ import fetchReportDataByPageId from 'services/reportData/fetchReportData'
3
+ import { Endpoints, Services } from 'services/Endpoints'
4
+ import { Controller } from 'react-hook-form'
5
+ import { Autocomplete, Box, Button, CircularProgress, TextField } from '@mui/material'
6
+ import IconButton from '@mui/material/IconButton'
7
+ import { ChevronLeft, Plus } from 'mdi-material-ui'
8
+ import Paper from '@mui/material/Paper'
9
+ import Typography from '@mui/material/Typography'
10
+ import Chip from '@mui/material/Chip'
11
+
12
+ const normalize = s => (s || '').trim().replace(/\s+/g, ' ')
13
+ const sameName = (a, b) => normalize(a).toLowerCase() === normalize(b).toLowerCase()
14
+
15
+ export default function GroupLevelAutocomplete({ selectedViewGroup,control, errors }) {
16
+ const [open, setOpen] = useState(false)
17
+ const [groups, setGroups] = useState(false)
18
+ const [selectedGroup, setSelectedGroup] = useState(null)
19
+ const [selectedLabel, setSelectedLabel] = useState('')
20
+ const [breadcrumb, setBreadcrumb] = useState([])
21
+ const [inputValue, setInputValue] = useState('')
22
+ const [loading, setLoading] = useState(false)
23
+ const [creating, setCreating] = useState(false)
24
+ const currentLevelId = breadcrumb.length ? breadcrumb[breadcrumb.length - 1].id : null
25
+
26
+ async function handleGetGroup(id) {
27
+ try {
28
+ setLoading(true)
29
+
30
+ let filter = {
31
+ Tfilter: [{ path: 'parentGroupId', method: 'Equals', value: true, checkForNull: true }]
32
+ }
33
+ if (id != null) {
34
+ filter = {
35
+ Tfilter: [{ path: 'parentGroupId', method: 'Equals', value: id }]
36
+ }
37
+ }
38
+
39
+ const res = await fetchReportDataByPageId({
40
+ pageId: '8e36a817-ceb3-499c-accf-f2a1e720be0b',
41
+ dataAsObject: true,
42
+ filter
43
+ })
44
+
45
+ if (res?.rows) setGroups(res.rows)
46
+ else setGroups([])
47
+ } catch (e) {
48
+ console.error(e)
49
+ } finally {
50
+ setLoading(false)
51
+ }
52
+ }
53
+
54
+ async function createGroup(name, parentGroupId) {
55
+ // يرجع: { id, name, parentGroupId }
56
+ const payload = {
57
+ name: normalize(name),
58
+ parentGroupId: parentGroupId ?? null
59
+ }
60
+
61
+ // ✅ عدّل endpoint حسب مشروعك
62
+ const res = await Services.PostService(Endpoints.UiBuilder.Post.AddUpdateGroup, true, payload)
63
+ return res?.data
64
+ }
65
+
66
+ const handleOpen = async () => {
67
+ setOpen(true)
68
+ await handleGetGroup(currentLevelId)
69
+ }
70
+
71
+ const handleClose = () => setOpen(false)
72
+
73
+ async function goTopLevel() {
74
+ setBreadcrumb([])
75
+ setInputValue('')
76
+ await handleGetGroup(null)
77
+ }
78
+
79
+ async function goToCrumb(index, crumb) {
80
+ setBreadcrumb(prev => prev.slice(0, index + 1))
81
+ setInputValue('')
82
+ await handleGetGroup(crumb?.id ?? null)
83
+ }
84
+
85
+ function chooseGroup(item, field) {
86
+ field.onChange(item.id)
87
+ setSelectedGroup(item)
88
+ setOpen(false)
89
+ }
90
+ async function goDeeper(item, field) {
91
+ field.onChange(item.id)
92
+
93
+ setBreadcrumb(prev => [...prev, { id: item.id, name: item.name }])
94
+ setInputValue('')
95
+ await handleGetGroup(item.id)
96
+ }
97
+
98
+ async function handleEnter(field) {
99
+ const name = normalize(inputValue)
100
+ if (!name) return
101
+
102
+ const existing = (groups || []).find(g => sameName(g.name, name))
103
+ if (existing) {
104
+ await goDeeper(existing, field)
105
+ return
106
+ }
107
+
108
+ try {
109
+ setCreating(true)
110
+ const created = await createGroup(name, currentLevelId)
111
+ if (!created?.id) return
112
+
113
+ await goDeeper(created, field)
114
+ } catch (e) {
115
+ console.error(e)
116
+ } finally {
117
+ setCreating(false)
118
+ }
119
+ }
120
+ async function openChildren(item, field) {
121
+ field.onChange(item.id)
122
+ setSelectedLabel(item.name)
123
+
124
+ setBreadcrumb(prev => [...prev, { id: item.id, name: item.name }])
125
+ setInputValue('')
126
+ await handleGetGroup(item.id)
127
+ }
128
+
129
+ useEffect(() => {
130
+ setSelectedGroup(selectedViewGroup)
131
+ },[selectedViewGroup])
132
+ return (
133
+ <Controller
134
+ name='groupId'
135
+ control={control}
136
+ render={({ field }) => (
137
+ <Autocomplete
138
+ fullWidth
139
+ sx={{
140
+ mt: 3
141
+ }}
142
+ size='small'
143
+ open={open}
144
+ onOpen={handleOpen}
145
+ onClose={handleClose}
146
+ options={groups || []}
147
+ loading={loading}
148
+ value={selectedGroup}
149
+ inputValue={inputValue}
150
+ onInputChange={(_, v) => setInputValue(v)}
151
+ isOptionEqualToValue={(option, value) => option?.id === value?.id}
152
+ getOptionLabel={option => option?.name || ''}
153
+ renderOption={(props, option) => (
154
+ <li {...props} key={option.id} style={{ display: 'flex', alignItems: 'center' }}>
155
+ <Box sx={{ flex: 1, pr: 1 }}>{option.name}</Box>
156
+ <IconButton
157
+ size='small'
158
+ onMouseDown={e => {
159
+ e.preventDefault()
160
+ e.stopPropagation()
161
+ }}
162
+ onClick={e => {
163
+ e.preventDefault()
164
+ e.stopPropagation()
165
+ chooseGroup(option, field)
166
+ }}
167
+ title='Choose'
168
+ >
169
+ <Plus fontSize='small' />
170
+ </IconButton>
171
+ <IconButton
172
+ size='small'
173
+ onMouseDown={e => {
174
+ e.preventDefault()
175
+ e.stopPropagation()
176
+ }}
177
+ onClick={async e => {
178
+ e.preventDefault()
179
+ e.stopPropagation()
180
+ await openChildren(option, field)
181
+ }}
182
+ title='Open children'
183
+ >
184
+ <ChevronLeft fontSize='small' />
185
+ </IconButton>
186
+ </li>
187
+ )}
188
+ PaperComponent={({ children, ...props }) => (
189
+ <Paper {...props} sx={{ maxHeight: 400, overflow: 'auto' }}>
190
+ {/* Breadcrumb header */}
191
+ {breadcrumb.length > 0 && (
192
+ <Box sx={{ p: 2, borderBottom: 1, borderColor: 'divider' }}>
193
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>
194
+ <Button
195
+ size='small'
196
+ onMouseDown={e => {
197
+ e.preventDefault()
198
+ e.stopPropagation()
199
+ }}
200
+ onClick={async e => {
201
+ e.preventDefault()
202
+ e.stopPropagation()
203
+ await goTopLevel()
204
+ }}
205
+ >
206
+ الرئيسية
207
+ </Button>
208
+
209
+ {breadcrumb.map((crumb, index) => (
210
+ <Box key={crumb.id} sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
211
+ <Typography variant='caption'>/</Typography>
212
+ <Button
213
+ size='small'
214
+ onMouseDown={e => {
215
+ e.preventDefault()
216
+ e.stopPropagation()
217
+ }}
218
+ onClick={async e => {
219
+ e.preventDefault()
220
+ e.stopPropagation()
221
+ await goToCrumb(index, crumb)
222
+ }}
223
+ >
224
+ {crumb.name}
225
+ </Button>
226
+ </Box>
227
+ ))}
228
+ </Box>
229
+ </Box>
230
+ )}
231
+
232
+ {children}
233
+ </Paper>
234
+ )}
235
+ renderInput={params => (
236
+ <TextField
237
+ {...params}
238
+ label='Group'
239
+ error={Boolean(errors?.groupId)}
240
+ placeholder='اختر مجموعة أو اكتب اسم واضغط Enter'
241
+ onKeyDown={async e => {
242
+ if (e.key === 'Enter') {
243
+ e.preventDefault()
244
+ e.stopPropagation()
245
+ await handleEnter(field)
246
+ }
247
+ }}
248
+ InputProps={{
249
+ ...params.InputProps,
250
+ endAdornment: (
251
+ <>
252
+ {creating ? <CircularProgress size={18} /> : null}
253
+ {params.InputProps.endAdornment}
254
+ </>
255
+ )
256
+ }}
257
+ />
258
+ )}
259
+ renderTags={() => {
260
+ if (!field.value || !selectedLabel) return null
261
+ return (
262
+ <Chip label={selectedLabel} size='small' color='primary' sx={{ borderRadius: 1, fontWeight: 'medium' }} />
263
+ )
264
+ }}
265
+ />
266
+ )}
267
+ />
268
+ )
269
+ }
@@ -0,0 +1,69 @@
1
+ export const COMPONENT_SECTIONS = [
2
+ {
3
+ key: 'fields',
4
+ title: 'Fields',
5
+ items: [
6
+ { type: 'autocomplete', label: 'AutoComplete', icon: '📋' },
7
+ { type: 'calendar', label: 'Calendar', icon: '📆' },
8
+ { type: 'checkbox', label: 'Checkbox', icon: '☑️' },
9
+ { type: 'datepicker', label: 'DatePicker', icon: '📅' },
10
+ { type: 'dropdown', label: 'Dropdown', icon: '⬇️' },
11
+ { type: 'google-map', label: 'Google Map', icon: '📍' },
12
+ { type: 'input', label: 'Input', icon: '✏️' },
13
+ { type: 'number', label: 'Number format', icon: '🔢' },
14
+ { type: 'radio', label: 'Radio group', icon: '🔘' },
15
+ { type: 'richtext', label: 'Rich text editor', icon: '🖋️' },
16
+ { type: 'signature', label: 'Signature', icon: '✍️' },
17
+ { type: 'tag', label: 'Tag picker', icon: '🏷️' },
18
+ { type: 'textarea', label: 'Text area', icon: '📄' },
19
+ { type: 'time', label: 'Time picker', icon: '⏱️' },
20
+ { type: 'toggle', label: 'Toggle', icon: '🎚️' },
21
+ { type: 'upload', label: 'Uploader', icon: '⬆️' }
22
+ ]
23
+ },
24
+
25
+ {
26
+ key: 'static',
27
+ title: 'Static',
28
+ items: [
29
+ { type: 'button', label: 'Button', icon: '🔘' },
30
+ { type: 'divider', label: 'Divider', icon: '➖' },
31
+ { type: 'header', label: 'Header', icon: '🔠' },
32
+ { type: 'image', label: 'Image', icon: '🖼️' },
33
+ { type: 'label', label: 'Label', icon: '🏷️' },
34
+ { type: 'link', label: 'Link', icon: '🔗' },
35
+ { type: 'menu', label: 'Menu', icon: '📑' },
36
+ { type: 'progress-circle', label: 'Progress circle', icon: '⭕' },
37
+ { type: 'progress-line', label: 'Progress line', icon: '➖' },
38
+ { type: 'qrcode', label: 'QR Code', icon: '🔲' },
39
+ { type: 'tooltip', label: 'Tooltip', icon: '❓' },
40
+ { type: 'reportViewer', label: 'Report Viewer', icon: '🎚️' },
41
+
42
+ ]
43
+ },
44
+
45
+ {
46
+ key: 'structure',
47
+ title: 'Structure',
48
+ items: [
49
+ { type: 'breadcrumb', label: 'Breadcrumb', icon: '≫' },
50
+ { type: 'card', label: 'Card', icon: '▭' },
51
+ { type: 'cell', label: 'Cell', icon: '▢' },
52
+ { type: 'column', label: 'Column', icon: '▮' },
53
+ { type: 'column-group', label: 'Column group', icon: '▦' },
54
+ { type: 'container', label: 'Container', icon: '▢' },
55
+ { type: 'header-cell', label: 'Header cell', icon: '▣' },
56
+ { type: 'repeater', label: 'Repeater', icon: '⟲' },
57
+ { type: 'tab', label: 'Tab', icon: '▤' },
58
+ { type: 'table', label: 'Table', icon: '▤' },
59
+ { type: 'wizard', label: 'Wizard', icon: '①②' },
60
+ { type: 'wizard-step', label: 'Wizard step', icon: '①' },
61
+ { type: 'layout', label: 'Layout Grid', icon: '▦' }
62
+ ]
63
+ },
64
+ // {
65
+ // key: 'widgets',
66
+ // title: 'Widgets',
67
+ // items: []
68
+ // }
69
+ ]
@@ -0,0 +1,205 @@
1
+ import { Box, Popover, Typography } from '@mui/material'
2
+ import { ChevronRight, ChevronDown, Pencil, DotsVerticalCircleOutline, Delete, ContentCopy } from 'mdi-material-ui'
3
+ import { useContext, useState } from 'react'
4
+ import { BuilderProvider, useBuilder } from 'src/context/BuilderContext'
5
+ import Button from '@mui/material/Button'
6
+ import IconButton from '@mui/material/IconButton'
7
+ import { duplicateInTree } from 'services/builderHelper/builderHelper'
8
+ import {Save} from '@mui/icons-material'
9
+ import { removeFromTree } from 'services/builderHelper'
10
+ import SaveWidgetDialog from 'views/builder/viewer/SaveWidgetDialog'
11
+ import PostService from 'services/PostService'
12
+ import { Endpoints } from 'services/Endpoints'
13
+
14
+ function TreeNode({ node, level = 0 }) {
15
+ const { selectedId, setSelectedId,setSchema,schema } = useBuilder()
16
+ const [expanded, setExpanded] = useState(true)
17
+ const [anchorEl, setAnchorEl] = useState(null)
18
+ const [selectedChildRow, setSelectedChildRow] = useState()
19
+ const hasChildren = node.children && node.children.length > 0
20
+ const isSelected = selectedId === node.id
21
+ const [saveDialogOpen, setSaveDialogOpen] = useState(false)
22
+ const [isSaving, setIsSaving] = useState(false)
23
+ const handleToggle = (e) => {
24
+ e.stopPropagation()
25
+ setExpanded(!expanded)
26
+ }
27
+
28
+
29
+ const handleSelect = () => {
30
+ setSelectedId(node.id)
31
+ }
32
+
33
+ // Get node label from props or use type as fallback
34
+ const getNodeLabel = () => {
35
+ // Priority: key > label > type (key)
36
+ const key = node.props?.main?.key?.value || node.props?.main?.key
37
+ if (key && typeof key === 'string') return key
38
+
39
+ const label = node.props?.main?.label?.value || node.props?.main?.label
40
+ if (label && typeof label === 'string') return label
41
+
42
+ return `${node.type} (${key || node.id})`
43
+ }
44
+ const handleDelete = e => {
45
+ e.stopPropagation()
46
+ if (setSchema) {
47
+ setSchema(prev => ({
48
+ ...prev,
49
+ root: removeFromTree(prev.root, node.id)
50
+ }))
51
+ setSelectedId(null)
52
+ }
53
+ }
54
+ const handleSaveClick = () => {
55
+ setSaveDialogOpen(true)
56
+ }
57
+ const handleDuplicate = e => {
58
+ e.stopPropagation()
59
+ if (setSchema) {
60
+ setSchema(prev => ({
61
+ ...prev,
62
+ root: duplicateInTree(prev.root, node.id)
63
+ }))
64
+ }
65
+ }
66
+ const handleSave = async values => {
67
+ if (!node) {
68
+ console.error('No schema to save')
69
+ return
70
+ }
71
+ setIsSaving(true)
72
+ try {
73
+ const data = {
74
+ name: values?.title,
75
+ widgetCategoryId: values.category?.id,
76
+ value: JSON.stringify(node)
77
+ }
78
+
79
+ const response = await PostService(Endpoints.Widget.Post.Add, true, data)
80
+
81
+ if (response) {
82
+ setSaveDialogOpen(false)
83
+ }
84
+ } catch (error) {
85
+ console.error('Error saving view:', error)
86
+ } finally {
87
+ setIsSaving(false)
88
+ }
89
+ }
90
+ return (
91
+ <Box>
92
+ <Box
93
+ onClick={handleSelect}
94
+ sx={{
95
+ display: 'flex',
96
+ alignItems: 'center',
97
+ py: 0.5,
98
+ px: 1,
99
+ pl: level * 2 + 1,
100
+ cursor: 'pointer',
101
+ bgcolor: isSelected ? 'primary.main' : 'transparent',
102
+ color: isSelected ? 'primary.contrastText' : 'text.primary',
103
+ '&:hover': {
104
+ bgcolor: isSelected ? 'primary.dark' : 'action.hover'
105
+ },
106
+ borderRadius: 1,
107
+ mb: 0.5
108
+ }}
109
+ >
110
+ {hasChildren ? (
111
+ <Box
112
+ onClick={handleToggle}
113
+ sx={{
114
+ display: 'flex',
115
+ alignItems: 'center',
116
+ mr: 0.5,
117
+ cursor: 'pointer'
118
+ }}
119
+ >
120
+ {expanded ? <ChevronDown fontSize='small' /> : <ChevronRight fontSize='small' />}
121
+ </Box>
122
+ ) : (
123
+ <Box sx={{ width: 24, mr: 0.5 }} />
124
+ )}
125
+
126
+ <Typography variant='body2' sx={{ flex: 1, fontSize: 13 }}>
127
+ {getNodeLabel()} <span style={{ opacity: 0.5 }}>{node.type}</span>
128
+ </Typography>
129
+
130
+ {/*<Typography variant="caption" sx={{ opacity: 0.7, fontSize: 11, ml: 1 }}>*/}
131
+ {/* {node.type}*/}
132
+ {/*</Typography>*/}
133
+ <IconButton
134
+ size={'small'}
135
+ onClick={e => {
136
+ setAnchorEl(e.currentTarget)
137
+ setSelectedChildRow(node)
138
+ }}
139
+ >
140
+ <DotsVerticalCircleOutline />
141
+ </IconButton>
142
+ </Box>
143
+ <Popover
144
+ anchorEl={anchorEl}
145
+ open={anchorEl != null}
146
+ onClick={() => setAnchorEl(null)}
147
+ onClose={() => {
148
+ setAnchorEl(null)
149
+ }}
150
+ anchorOrigin={{
151
+ vertical: 'bottom',
152
+ horizontal: 'center'
153
+ }}
154
+ transformOrigin={{
155
+ vertical: 'top',
156
+ horizontal: 'center'
157
+ }}
158
+ >
159
+ <Box
160
+ sx={{
161
+ padding: '5px'
162
+ }}
163
+ >
164
+ <IconButton size='small' onClick={handleDuplicate} sx={{ color: 'primary', p: 0.5 }}>
165
+ <ContentCopy fontSize='small' />
166
+ </IconButton>
167
+ <IconButton size='small' onClick={handleSaveClick} sx={{ color: 'primary', p: 0.5 }}>
168
+ <Save fontSize='small' />
169
+ </IconButton>
170
+ <IconButton size='small' onClick={handleDelete} sx={{ color: 'primary', p: 0.5 }}>
171
+ <Delete fontSize='small' />
172
+ </IconButton>
173
+ </Box>
174
+ </Popover>
175
+ <SaveWidgetDialog open={saveDialogOpen} onClose={() => setSaveDialogOpen(false)} onSave={handleSave} />
176
+ {hasChildren && expanded && (
177
+ <Box>
178
+ {node.children.map(child => (
179
+ <TreeNode key={child.id} node={child} level={level + 1} />
180
+ ))}
181
+ </Box>
182
+ )}
183
+ </Box>
184
+ )
185
+ }
186
+
187
+ export default function TreeTab() {
188
+ const { schema } = useBuilder()
189
+
190
+ if (!schema?.root) {
191
+ return (
192
+ <Box p={2}>
193
+ <Typography variant="body2" color="text.disabled">
194
+ No schema available
195
+ </Typography>
196
+ </Box>
197
+ )
198
+ }
199
+
200
+ return (
201
+ <Box sx={{ p: 1, overflowY: 'auto', height: '100%' }}>
202
+ <TreeNode node={schema.root} level={0} />
203
+ </Box>
204
+ )
205
+ }
@@ -0,0 +1,121 @@
1
+ import {
2
+ Box, Button,
3
+ CircularProgress,TextField } from '@mui/material'
4
+ import { useBuilder } from 'context/BuilderContext'
5
+ import { useRouter } from 'next/router'
6
+ import { useEffect, useState } from 'react'
7
+ import { Controller, useForm } from 'react-hook-form'
8
+ import { Endpoints, Services } from 'services/Endpoints'
9
+ import Typography from '@mui/material/Typography'
10
+ import GroupLevelAutocomplete from 'views/builder/sidebar/tabs/Components/GroupLevelAutocomplete'
11
+
12
+
13
+
14
+ export default function ViewTab() {
15
+ const router = useRouter()
16
+ const { id} = router.query
17
+ const { viewMetaData,setViewMetaData,schema, setSchema } = useBuilder()
18
+ const [isLoading, setIsLoading] = useState(false)
19
+ const { control, handleSubmit, reset,errors } = useForm({
20
+ defaultValues: {
21
+ title: viewMetaData?.title || '',
22
+ viewId: null,
23
+ groupId: null
24
+ }
25
+ })
26
+
27
+ const onSubmit = async values => {
28
+ try {
29
+ setIsLoading(true)
30
+ let data = {
31
+ id : viewMetaData?.id ?? null,
32
+ title: values.title,
33
+ viewId: values.viewId,
34
+ groupId: values.groupId ?? null,
35
+ value: JSON.stringify(schema)
36
+ }
37
+
38
+ let response = null;
39
+
40
+ if(viewMetaData.isNew) {
41
+ response = await Services.PostService(Endpoints.UiBuilder.Post.AddUpdate, true, data, {
42
+ id: viewMetaData.isNew ? 0 : viewMetaData.id
43
+ })
44
+ }
45
+ else {
46
+ response = await Services.UpdateService(Endpoints.UiBuilder.Post.AddUpdate, true, data, {
47
+ id: viewMetaData.isNew ? 0 : viewMetaData.id
48
+ })
49
+ }
50
+
51
+ if (response) {
52
+ setViewMetaData(preValue => ({
53
+ ...preValue,
54
+ isNew: false,
55
+ title: values.title,
56
+ viewId: values.viewId,
57
+ groupId: values.groupId,
58
+ id: viewMetaData.id ?? response.data
59
+ }))
60
+ }
61
+ } catch (error) {
62
+ console.error(error)
63
+ } finally {
64
+ setIsLoading(false)
65
+ }
66
+ }
67
+ useEffect(() => {
68
+ reset({
69
+ title: viewMetaData?.title,
70
+ viewId: viewMetaData?.viewId,
71
+ groupId: viewMetaData?.groupId,
72
+ })
73
+ }, [viewMetaData])
74
+
75
+
76
+ return (
77
+ <Box p={2}>
78
+ <form onSubmit={handleSubmit(onSubmit)}>
79
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3, mt: 2 }}>
80
+ <Controller
81
+ name='title'
82
+ control={control}
83
+ render={({ field }) => {
84
+ return (
85
+ <Box>
86
+ <Typography variant='body2'>Title</Typography>
87
+ <TextField size={'small'} fullWidth {...field} />
88
+ </Box>
89
+ )
90
+ }}
91
+ />
92
+ <Controller
93
+ name='viewId'
94
+ control={control}
95
+ render={({ field }) => {
96
+ return (
97
+ <Box>
98
+ <Typography variant='body2'>View ID</Typography>
99
+ <TextField size={'small'} fullWidth {...field} />
100
+ </Box>
101
+ )
102
+ }}
103
+ />
104
+ <GroupLevelAutocomplete selectedViewGroup={viewMetaData?.group} control={control} errors={errors} />
105
+ <Button
106
+ sx={{
107
+ mt: 2
108
+ }}
109
+ type='submit'
110
+ size={'small'}
111
+ fullWidth={true}
112
+ variant='contained'
113
+ disabled={isLoading}
114
+ >
115
+ {isLoading ? <CircularProgress size={24} /> : 'Save'}
116
+ </Button>
117
+ </Box>
118
+ </form>
119
+ </Box>
120
+ )
121
+ }
@@ -0,0 +1,7 @@
1
+ import ComponentRenderer from './ComponentRenderer'
2
+ import { useBuilder } from 'src/context/BuilderContext'
3
+
4
+ export default function Canvas() {
5
+ const { schema } = useBuilder()
6
+ return <ComponentRenderer node={schema.root} />
7
+ }