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.
- package/jsconfig.json +28 -0
- package/next.config.js +75 -0
- package/package.json +163 -0
- package/public/fonts/NotoSansArabic-VariableFont_wdth,wght.ttf +0 -0
- package/public/fonts/font.js +2 -0
- package/public/fonts/logo.js +2 -0
- package/public/images/appicon.png +0 -0
- package/public/images/appicon1.png +0 -0
- package/public/images/asiacell.png +0 -0
- package/public/images/avatars/1.png +0 -0
- package/public/images/avatars/3.png +0 -0
- package/public/images/avatars/4.png +0 -0
- package/public/images/avatars/5.png +0 -0
- package/public/images/cards/trophy.png +0 -0
- package/public/images/favicon.png +0 -0
- package/public/images/favicon1.png +0 -0
- package/public/images/icons/bag.png +0 -0
- package/public/images/icons/briefcase.png +0 -0
- package/public/images/icons/calendar.png +0 -0
- package/public/images/icons/dashboard.png +0 -0
- package/public/images/icons/dollar.png +0 -0
- package/public/images/icons/person.png +0 -0
- package/public/images/icons/profit.png +0 -0
- package/public/images/icons/setting.png +0 -0
- package/public/images/misc/chart.png +0 -0
- package/public/images/misc/paypal.png +0 -0
- package/public/images/pages/401.png +0 -0
- package/public/images/pages/404.png +0 -0
- package/public/images/pages/500.png +0 -0
- package/public/images/pages/auth-v2-forgot-password-illustration-bordered-dark.png +0 -0
- package/public/images/pages/auth-v2-forgot-password-illustration-bordered-light.png +0 -0
- package/public/images/pages/auth-v2-forgot-password-illustration-dark.png +0 -0
- package/public/images/pages/auth-v2-forgot-password-illustration-light.png +0 -0
- package/public/images/pages/auth-v2-forgot-password-mask-dark.png +0 -0
- package/public/images/pages/auth-v2-forgot-password-mask-light.png +0 -0
- package/public/images/pages/auth-v2-login-illustration-bordered-dark.png +0 -0
- package/public/images/pages/auth-v2-login-illustration-bordered-light.png +0 -0
- package/public/images/pages/auth-v2-login-illustration-dark.png +0 -0
- package/public/images/pages/auth-v2-login-illustration-light.png +0 -0
- package/public/images/pages/auth-v2-login-mask-dark.png +0 -0
- package/public/images/pages/auth-v2-login-mask-light.png +0 -0
- package/public/images/pages/auth-v2-register-illustration-bordered-dark.png +0 -0
- package/public/images/pages/auth-v2-register-illustration-bordered-light.png +0 -0
- package/public/images/pages/auth-v2-register-illustration-dark.png +0 -0
- package/public/images/pages/auth-v2-register-illustration-light.png +0 -0
- package/public/images/pages/auth-v2-register-mask-dark.png +0 -0
- package/public/images/pages/auth-v2-register-mask-light.png +0 -0
- package/public/images/pages/misc-401-object.png +0 -0
- package/public/images/pages/misc-404-object.png +0 -0
- package/public/images/pages/misc-500-object.png +0 -0
- package/public/images/pages/misc-coming-soon-object.png +0 -0
- package/public/images/pages/misc-mask-dark.png +0 -0
- package/public/images/pages/misc-mask-light.png +0 -0
- package/public/images/white.jpg +0 -0
- package/public/images/zain.png +0 -0
- package/public/locales/ar.json +35 -0
- package/public/navigationTest/Navigation.json +13 -0
- package/public/vercel.svg +4 -0
- package/src/@core/components/auth/AclGuard.js +55 -0
- package/src/@core/components/auth/AuthGuard.js +40 -0
- package/src/@core/components/auth/GuestGuard.js +30 -0
- package/src/@core/components/custom-inputs/Horizontal.jsx +143 -0
- package/src/@core/components/custom-inputs/Image.jsx +78 -0
- package/src/@core/components/custom-inputs/Vertical.jsx +113 -0
- package/src/@core/components/customizer/index.jsx +470 -0
- package/src/@core/components/customizer/styles.module.css +169 -0
- package/src/@core/components/mui/Avatar.jsx +41 -0
- package/src/@core/components/mui/Badge.jsx +20 -0
- package/src/@core/components/mui/IconButton.jsx +74 -0
- package/src/@core/components/mui/TabList.jsx +60 -0
- package/src/@core/components/option-menu/index.jsx +137 -0
- package/src/@core/components/scroll-to-top/index.jsx +43 -0
- package/src/@core/components/spinner/index.js +26 -0
- package/src/@core/components/window-wrapper/index.js +27 -0
- package/src/@core/contexts/settingsContext.jsx +98 -0
- package/src/@core/hooks/useBgColor.js +63 -0
- package/src/@core/hooks/useImageVariant.js +27 -0
- package/src/@core/hooks/useLayoutInit.js +37 -0
- package/src/@core/hooks/useObjectCookie.js +18 -0
- package/src/@core/hooks/useSettings.jsx +15 -0
- package/src/@core/layouts/BlankLayout.js +37 -0
- package/src/@core/layouts/BlankLayoutWithAppBar.js +51 -0
- package/src/@core/layouts/HorizontalLayout.jsx +151 -0
- package/src/@core/layouts/Layout.js +39 -0
- package/src/@core/layouts/VerticalLayout.jsx +124 -0
- package/src/@core/layouts/components/blank-layout-with-appBar/index.js +115 -0
- package/src/@core/layouts/components/horizontal/app-bar-content/index.js +67 -0
- package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +352 -0
- package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +21 -0
- package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +195 -0
- package/src/@core/layouts/components/horizontal/navigation/index.js +31 -0
- package/src/@core/layouts/components/shared-components/LanguageDropdown.js +96 -0
- package/src/@core/layouts/components/shared-components/ModeToggler.js +32 -0
- package/src/@core/layouts/components/shared-components/NotificationDropdown.js +226 -0
- package/src/@core/layouts/components/shared-components/UserDropdown.js +177 -0
- package/src/@core/layouts/components/shared-components/footer/FooterContent.js +46 -0
- package/src/@core/layouts/components/shared-components/footer/index.js +61 -0
- package/src/@core/layouts/components/vertical/appBar/index.js +74 -0
- package/src/@core/layouts/components/vertical/navigation/Drawer.js +122 -0
- package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +435 -0
- package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +180 -0
- package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +26 -0
- package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +258 -0
- package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +102 -0
- package/src/@core/layouts/components/vertical/navigation/index.js +169 -0
- package/src/@core/layouts/utils.js +69 -0
- package/src/@core/styles/Table.module.css +93 -0
- package/src/@core/styles/horizontal/menuItemStyles.js +100 -0
- package/src/@core/styles/horizontal/menuRootStyles.js +19 -0
- package/src/@core/styles/libs/fullcalendar/index.js +461 -0
- package/src/@core/styles/libs/keen-slider/index.js +111 -0
- package/src/@core/styles/libs/react-apexcharts/index.js +107 -0
- package/src/@core/styles/libs/react-cleave/index.js +33 -0
- package/src/@core/styles/libs/react-credit-cards/index.js +11 -0
- package/src/@core/styles/libs/react-datepicker/index.js +388 -0
- package/src/@core/styles/libs/react-draft-wysiwyg/index.js +144 -0
- package/src/@core/styles/libs/react-dropzone/index.js +76 -0
- package/src/@core/styles/libs/react-hot-toast/index.js +37 -0
- package/src/@core/styles/libs/recharts/index.js +47 -0
- package/src/@core/styles/stepper.js +103 -0
- package/src/@core/styles/vertical/menuItemStyles.js +138 -0
- package/src/@core/styles/vertical/menuSectionStyles.js +54 -0
- package/src/@core/styles/vertical/navigationCustomStyles.js +62 -0
- package/src/@core/svg/ContentCompact.jsx +17 -0
- package/src/@core/svg/ContentWide.jsx +17 -0
- package/src/@core/svg/DirectionLtr.jsx +93 -0
- package/src/@core/svg/DirectionRtl.jsx +93 -0
- package/src/@core/svg/LayoutCollapsed.jsx +59 -0
- package/src/@core/svg/LayoutHorizontal.jsx +42 -0
- package/src/@core/svg/LayoutVertical.jsx +59 -0
- package/src/@core/svg/Logo.jsx +76 -0
- package/src/@core/svg/SkinBordered.jsx +54 -0
- package/src/@core/svg/SkinDefault.jsx +59 -0
- package/src/@core/tailwind/plugin.js +78 -0
- package/src/@core/theme/ThemeComponent.js +63 -0
- package/src/@core/theme/ThemeOptions.js +71 -0
- package/src/@core/theme/breakpoints/index.js +11 -0
- package/src/@core/theme/colorSchemes.js +326 -0
- package/src/@core/theme/customShadows.js +11 -0
- package/src/@core/theme/globalStyles.js +81 -0
- package/src/@core/theme/index.js +42 -0
- package/src/@core/theme/overrides/accordion.js +51 -0
- package/src/@core/theme/overrides/accordion.jsx +85 -0
- package/src/@core/theme/overrides/alerts.js +110 -0
- package/src/@core/theme/overrides/alerts.jsx +180 -0
- package/src/@core/theme/overrides/autocomplete.js +14 -0
- package/src/@core/theme/overrides/autocomplete.jsx +68 -0
- package/src/@core/theme/overrides/avatar.js +38 -0
- package/src/@core/theme/overrides/avatars.js +27 -0
- package/src/@core/theme/overrides/backdrop.js +22 -0
- package/src/@core/theme/overrides/badges.js +16 -0
- package/src/@core/theme/overrides/breadcrumbs.js +11 -0
- package/src/@core/theme/overrides/button-group.js +84 -0
- package/src/@core/theme/overrides/button.js +93 -0
- package/src/@core/theme/overrides/buttonGroup.js +9 -0
- package/src/@core/theme/overrides/card.js +83 -0
- package/src/@core/theme/overrides/checkbox.jsx +95 -0
- package/src/@core/theme/overrides/chip.js +72 -0
- package/src/@core/theme/overrides/dataGrid.js +114 -0
- package/src/@core/theme/overrides/dateTimePicker.js +65 -0
- package/src/@core/theme/overrides/dialog.js +120 -0
- package/src/@core/theme/overrides/divider.js +13 -0
- package/src/@core/theme/overrides/drawer.js +20 -0
- package/src/@core/theme/overrides/fab.js +13 -0
- package/src/@core/theme/overrides/form-control-label.js +19 -0
- package/src/@core/theme/overrides/icon-button.js +145 -0
- package/src/@core/theme/overrides/index.js +103 -0
- package/src/@core/theme/overrides/input.js +72 -0
- package/src/@core/theme/overrides/link.js +9 -0
- package/src/@core/theme/overrides/list.js +44 -0
- package/src/@core/theme/overrides/menu.js +25 -0
- package/src/@core/theme/overrides/pagination.js +41 -0
- package/src/@core/theme/overrides/paper.js +9 -0
- package/src/@core/theme/overrides/popover.js +16 -0
- package/src/@core/theme/overrides/progress.js +38 -0
- package/src/@core/theme/overrides/radio.jsx +80 -0
- package/src/@core/theme/overrides/rating.js +16 -0
- package/src/@core/theme/overrides/rating.jsx +32 -0
- package/src/@core/theme/overrides/select.js +19 -0
- package/src/@core/theme/overrides/select.jsx +52 -0
- package/src/@core/theme/overrides/slider.js +97 -0
- package/src/@core/theme/overrides/snackbar.js +19 -0
- package/src/@core/theme/overrides/switch.js +73 -0
- package/src/@core/theme/overrides/switches.js +25 -0
- package/src/@core/theme/overrides/table-pagination.js +39 -0
- package/src/@core/theme/overrides/table.js +81 -0
- package/src/@core/theme/overrides/tabs.js +30 -0
- package/src/@core/theme/overrides/timeline.js +80 -0
- package/src/@core/theme/overrides/toggle-button.js +33 -0
- package/src/@core/theme/overrides/toggleButton.js +16 -0
- package/src/@core/theme/overrides/tooltip.js +21 -0
- package/src/@core/theme/overrides/typography.js +13 -0
- package/src/@core/theme/palette/index.js +107 -0
- package/src/@core/theme/shadows/index.js +61 -0
- package/src/@core/theme/shadows.js +12 -0
- package/src/@core/theme/spacing/index.js +3 -0
- package/src/@core/theme/spacing.js +5 -0
- package/src/@core/theme/typography/index.js +65 -0
- package/src/@core/theme/typography.js +84 -0
- package/src/@core/utils/create-emotion-cache.js +5 -0
- package/src/@core/utils/hex-to-rgba.js +11 -0
- package/src/@core/utils/serverHelpers.js +45 -0
- package/src/@menu/components/RouterLink.jsx +18 -0
- package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +88 -0
- package/src/@menu/components/horizontal-menu/Menu.jsx +83 -0
- package/src/@menu/components/horizontal-menu/MenuButton.jsx +100 -0
- package/src/@menu/components/horizontal-menu/MenuItem.jsx +183 -0
- package/src/@menu/components/horizontal-menu/SubMenu.jsx +418 -0
- package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +41 -0
- package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +20 -0
- package/src/@menu/components/vertical-menu/Menu.jsx +161 -0
- package/src/@menu/components/vertical-menu/MenuButton.jsx +95 -0
- package/src/@menu/components/vertical-menu/MenuItem.jsx +180 -0
- package/src/@menu/components/vertical-menu/MenuSection.jsx +124 -0
- package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +70 -0
- package/src/@menu/components/vertical-menu/NavHeader.jsx +39 -0
- package/src/@menu/components/vertical-menu/SubMenu.jsx +420 -0
- package/src/@menu/components/vertical-menu/SubMenuContent.jsx +101 -0
- package/src/@menu/components/vertical-menu/VerticalNav.jsx +216 -0
- package/src/@menu/contexts/horizontalNavContext.jsx +29 -0
- package/src/@menu/contexts/verticalNavContext.jsx +65 -0
- package/src/@menu/defaultConfigs.js +12 -0
- package/src/@menu/hooks/useHorizontalMenu.jsx +19 -0
- package/src/@menu/hooks/useHorizontalNav.jsx +19 -0
- package/src/@menu/hooks/useMediaQuery.jsx +29 -0
- package/src/@menu/hooks/useVerticalMenu.jsx +19 -0
- package/src/@menu/hooks/useVerticalNav.jsx +19 -0
- package/src/@menu/horizontal-menu/index.jsx +8 -0
- package/src/@menu/styles/StyledBackdrop.jsx +15 -0
- package/src/@menu/styles/StyledMenuIcon.jsx +12 -0
- package/src/@menu/styles/StyledMenuLabel.jsx +16 -0
- package/src/@menu/styles/StyledMenuPrefix.jsx +10 -0
- package/src/@menu/styles/StyledMenuSectionLabel.jsx +21 -0
- package/src/@menu/styles/StyledMenuSuffix.jsx +10 -0
- package/src/@menu/styles/StyledSubMenuContent.jsx +43 -0
- package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +13 -0
- package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +26 -0
- package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +11 -0
- package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +33 -0
- package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +18 -0
- package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +10 -0
- package/src/@menu/styles/horizontal/horizontalUl.module.css +15 -0
- package/src/@menu/styles/styles.module.css +5 -0
- package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +16 -0
- package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +28 -0
- package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +23 -0
- package/src/@menu/styles/vertical/StyledVerticalNav.jsx +67 -0
- package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +15 -0
- package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +23 -0
- package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +25 -0
- package/src/@menu/styles/vertical/verticalNavBgImage.module.css +10 -0
- package/src/@menu/svg/ChevronRight.jsx +9 -0
- package/src/@menu/svg/Close.jsx +12 -0
- package/src/@menu/svg/RadioCircle.jsx +12 -0
- package/src/@menu/svg/RadioCircleMarked.jsx +13 -0
- package/src/@menu/utils/menuClasses.js +44 -0
- package/src/@menu/utils/menuUtils.jsx +145 -0
- package/src/@menu/vertical-menu/index.jsx +11 -0
- package/src/configs/Permissions/PermissionsActions.json +6 -0
- package/src/configs/Permissions/PermissionsSubjects.json +107 -0
- package/src/configs/acl.js +115 -0
- package/src/configs/auth.js +5 -0
- package/src/configs/aws-exports.js +30 -0
- package/src/configs/firebase.js +25 -0
- package/src/configs/i18n.js +34 -0
- package/src/configs/izColors.json +11 -0
- package/src/configs/primaryColorConfig.js +35 -0
- package/src/configs/themeConfig.js +44 -0
- package/src/context/AuthContext.js +179 -0
- package/src/context/BuilderContext.jsx +209 -0
- package/src/context/SystemContext.js +99 -0
- package/src/hooks/useAuth.js +4 -0
- package/src/layouts/UserLayout.js +94 -0
- package/src/layouts/UserThemeOptions.js +191 -0
- package/src/layouts/components/Direction.js +30 -0
- package/src/layouts/components/HtmlTooltip.js +15 -0
- package/src/layouts/components/Translations.js +11 -0
- package/src/layouts/components/UserDropdown.js +217 -0
- package/src/layouts/components/UserIcon.js +40 -0
- package/src/layouts/components/acl/Can.js +6 -0
- package/src/layouts/components/acl/CanViewNavGroup.js +36 -0
- package/src/layouts/components/acl/CanViewNavLink.js +17 -0
- package/src/layouts/components/acl/CanViewNavSectionTitle.js +17 -0
- package/src/layouts/components/horizontal/AppBarContent.js +39 -0
- package/src/layouts/components/horizontal/ServerSideNavItems.js +44 -0
- package/src/layouts/components/mui/StepperComps.js +55 -0
- package/src/layouts/components/vertical/AppBarContent.js +35 -0
- package/src/layouts/components/vertical/ServerSideNavItems.js +44 -0
- package/src/lib/index.js +75 -0
- package/src/lib/navigation/NavigationExtensionContext.jsx +81 -0
- package/src/lib/navigation/mergeNavExtensions.js +66 -0
- package/src/lib/navigation/useNavExtension.js +54 -0
- package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +57 -0
- package/src/libs/ApexCharts.jsx +5 -0
- package/src/libs/ReactPlayer.jsx +5 -0
- package/src/libs/Recharts.jsx +4 -0
- package/src/libs/auth.js +124 -0
- package/src/libs/styles/AppFullCalendar.js +505 -0
- package/src/libs/styles/AppKeenSlider.js +116 -0
- package/src/libs/styles/AppReactApexCharts.jsx +110 -0
- package/src/libs/styles/AppReactDatepicker.jsx +470 -0
- package/src/libs/styles/AppReactDropzone.js +76 -0
- package/src/libs/styles/AppReactToastify.jsx +108 -0
- package/src/libs/styles/AppRecharts.js +55 -0
- package/src/libs/styles/inputOtp.module.css +39 -0
- package/src/libs/styles/tiptapEditor.css +72 -0
- package/src/navigation/horizontal/index.js +246 -0
- package/src/navigation/vertical/index.js +253 -0
- package/src/pages/401.js +70 -0
- package/src/pages/404.js +67 -0
- package/src/pages/500.js +68 -0
- package/src/pages/[slug].js +115 -0
- package/src/pages/_app.js +148 -0
- package/src/pages/_document.js +72 -0
- package/src/pages/api/navigation/regenerate-registry.js +116 -0
- package/src/pages/api/navigation/save.js +218 -0
- package/src/pages/authModule/acl/index.js +48 -0
- package/src/pages/authModule/forgot-password/index.js +228 -0
- package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +392 -0
- package/src/pages/authModule/permissions/rolePermissions/index.js +343 -0
- package/src/pages/authModule/permissions/systemPermissions/index.js +354 -0
- package/src/pages/authModule/privacy/index.js +721 -0
- package/src/pages/authModule/users/index.js +210 -0
- package/src/pages/index.js +44 -0
- package/src/pages/login/index.js +328 -0
- package/src/pages/mainHome/index.js +181 -0
- package/src/pages/navigatorBuilder/index.jsx +2070 -0
- package/src/pages/reportModule/reportBuilder/index.js +1361 -0
- package/src/pages/reportModule/reportBuilder/reportViewer/index.js +187 -0
- package/src/pages/reportModule/reportBuilder/reports/index.js +198 -0
- package/src/pages/viewBuilder/index.jsx +94 -0
- package/src/pages/viewBuilder/viewPage/index.jsx +46 -0
- package/src/pages/viewBuilder/views/index.js +146 -0
- package/src/pages/viewer/[id]/index.js +88 -0
- package/src/services/ContentTypes.js +10 -0
- package/src/services/DeleteService.js +77 -0
- package/src/services/Endpoints/BunnyEndpoints.js +26 -0
- package/src/services/Endpoints/CaseEndpoints.js +29 -0
- package/src/services/Endpoints/CaseTypeEndpoints.js +29 -0
- package/src/services/Endpoints/ContactsEndpoints.js +81 -0
- package/src/services/Endpoints/CourtEndpoints.js +29 -0
- package/src/services/Endpoints/FilterEndpoints.js +31 -0
- package/src/services/Endpoints/NavigatorEndpoints.js +21 -0
- package/src/services/Endpoints/ReportBuilderEndpoints.js +45 -0
- package/src/services/Endpoints/UiBuilderEndpoints.js +37 -0
- package/src/services/Endpoints/UserTableTemplateEndpoints.js +26 -0
- package/src/services/Endpoints/UsersEndpoints.js +142 -0
- package/src/services/Endpoints/ViewEndpoints.js +28 -0
- package/src/services/Endpoints/ViewPermissionEndpoints.js +37 -0
- package/src/services/Endpoints/ViewPermissionRoleEndpoints.js +39 -0
- package/src/services/Endpoints/ViewPermissionRoleItemsEndpoints.js +32 -0
- package/src/services/Endpoints/ViewPermissionRoleUsersEndpoints.js +28 -0
- package/src/services/Endpoints/WidgetEndpoints.js +28 -0
- package/src/services/Endpoints.js +49 -0
- package/src/services/External/BunnyCdn/BunnyUploadFile.js +168 -0
- package/src/services/GetService.js +67 -0
- package/src/services/MetaDataTemplate/index.js +5 -0
- package/src/services/PatchService.js +83 -0
- package/src/services/PostService.js +81 -0
- package/src/services/StreamService.js +82 -0
- package/src/services/UpdateService.js +82 -0
- package/src/services/auth/AuthService.js +47 -0
- package/src/services/auth/GetUsersService.js +38 -0
- package/src/services/auth/PostRegisterUser.js +29 -0
- package/src/services/auth/PostResetPasswordService.js +28 -0
- package/src/services/auth/PutAccountService.js +29 -0
- package/src/services/auth/PutRefreshToken.js +69 -0
- package/src/services/auth/RefreshToken.js +0 -0
- package/src/services/builderHelper/actionExecutor.js +73 -0
- package/src/services/builderHelper/builderHelper.js +99 -0
- package/src/services/builderHelper/index.js +2 -0
- package/src/services/builderHelper/jsExecutor.js +115 -0
- package/src/services/builderHelper/layoutHelpers.js +231 -0
- package/src/services/builderHelper/nodeFactory.js +44 -0
- package/src/services/builderHelper/resolveProps.js +34 -0
- package/src/services/builderHelper/tree.js +131 -0
- package/src/services/components/UniversalNestedAutocomplete.js +331 -0
- package/src/services/components/agGridAutoComplete.js +172 -0
- package/src/services/components/universalAutoComplete.js +207 -0
- package/src/services/enums/ReportBuilderTypeEnum.js +18 -0
- package/src/services/helper/FilterFormat.js +70 -0
- package/src/services/helper/FormatCurrencyIQD.js +11 -0
- package/src/services/helper/datagridEditComponents.js +38 -0
- package/src/services/helper/dateFormat.js +30 -0
- package/src/services/helper/formData.js +21 -0
- package/src/services/helper/getFieldByType.js +0 -0
- package/src/services/helper/getPropByString.js +18 -0
- package/src/services/helper/handleChange.js +26 -0
- package/src/services/helper/helper.js +105 -0
- package/src/services/helper/multiSelectEditor.js +226 -0
- package/src/services/helper/translateOrderReturnStatus.js +12 -0
- package/src/services/helper/translateRole.js +24 -0
- package/src/services/helper/translateStatus.js +12 -0
- package/src/services/helper/translateTransferReceiptType.js +67 -0
- package/src/services/helper/translsateStoreProductTransfer.js +40 -0
- package/src/services/helper/translsateStoreType.js +25 -0
- package/src/services/helper/useInterval.js +21 -0
- package/src/services/helper/yupCutomization.js +15 -0
- package/src/services/reportData/fetchReportData.js +210 -0
- package/src/views/ConfirmDialog.js +178 -0
- package/src/views/builder/JSEditor.js +226 -0
- package/src/views/builder/inspector/Inspector.jsx +63 -0
- package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +117 -0
- package/src/views/builder/inspector/Tabs/MainTab.jsx +95 -0
- package/src/views/builder/inspector/Tabs/RulesTab.jsx +79 -0
- package/src/views/builder/inspector/Tabs/StyleTab.jsx +79 -0
- package/src/views/builder/inspector/definitions/autocomplete/main.js +25 -0
- package/src/views/builder/inspector/definitions/breadcrumb/main.js +9 -0
- package/src/views/builder/inspector/definitions/button/actions.js +12 -0
- package/src/views/builder/inspector/definitions/button/main.js +14 -0
- package/src/views/builder/inspector/definitions/button/rules.js +5 -0
- package/src/views/builder/inspector/definitions/button/style.js +32 -0
- package/src/views/builder/inspector/definitions/button.actions.js +12 -0
- package/src/views/builder/inspector/definitions/card/main.js +11 -0
- package/src/views/builder/inspector/definitions/cell/main.js +4 -0
- package/src/views/builder/inspector/definitions/checkbox/actions.js +1 -0
- package/src/views/builder/inspector/definitions/checkbox/main.js +13 -0
- package/src/views/builder/inspector/definitions/checkbox/rules.js +8 -0
- package/src/views/builder/inspector/definitions/checkbox/style.js +38 -0
- package/src/views/builder/inspector/definitions/checkboxFields.js +0 -0
- package/src/views/builder/inspector/definitions/column/main.js +9 -0
- package/src/views/builder/inspector/definitions/column-group/main.js +18 -0
- package/src/views/builder/inspector/definitions/common/actions.js +1 -0
- package/src/views/builder/inspector/definitions/common/main.js +14 -0
- package/src/views/builder/inspector/definitions/common/rules.js +8 -0
- package/src/views/builder/inspector/definitions/common/style.js +39 -0
- package/src/views/builder/inspector/definitions/common.advanced.js +8 -0
- package/src/views/builder/inspector/definitions/common.main.js +14 -0
- package/src/views/builder/inspector/definitions/common.style.js +33 -0
- package/src/views/builder/inspector/definitions/commonMainFields.js +18 -0
- package/src/views/builder/inspector/definitions/container/actions.js +1 -0
- package/src/views/builder/inspector/definitions/container/main.js +4 -0
- package/src/views/builder/inspector/definitions/container/rules.js +4 -0
- package/src/views/builder/inspector/definitions/container/style.js +32 -0
- package/src/views/builder/inspector/definitions/datepicker/actions.js +1 -0
- package/src/views/builder/inspector/definitions/datepicker/main.js +28 -0
- package/src/views/builder/inspector/definitions/datepicker/rules.js +8 -0
- package/src/views/builder/inspector/definitions/datepicker/style.js +38 -0
- package/src/views/builder/inspector/definitions/datepicker.main.js +28 -0
- package/src/views/builder/inspector/definitions/divider/actions.js +1 -0
- package/src/views/builder/inspector/definitions/divider/main.js +23 -0
- package/src/views/builder/inspector/definitions/divider/rules.js +4 -0
- package/src/views/builder/inspector/definitions/divider/style.js +9 -0
- package/src/views/builder/inspector/definitions/dropdown/actions.js +10 -0
- package/src/views/builder/inspector/definitions/dropdown/main.js +19 -0
- package/src/views/builder/inspector/definitions/dropdown/rules.js +8 -0
- package/src/views/builder/inspector/definitions/dropdown/style.js +38 -0
- package/src/views/builder/inspector/definitions/header/actions.js +1 -0
- package/src/views/builder/inspector/definitions/header/main.js +29 -0
- package/src/views/builder/inspector/definitions/header/rules.js +4 -0
- package/src/views/builder/inspector/definitions/header/style.js +12 -0
- package/src/views/builder/inspector/definitions/header-cell/main.js +5 -0
- package/src/views/builder/inspector/definitions/image/actions.js +1 -0
- package/src/views/builder/inspector/definitions/image/main.js +13 -0
- package/src/views/builder/inspector/definitions/image/rules.js +4 -0
- package/src/views/builder/inspector/definitions/image/style.js +12 -0
- package/src/views/builder/inspector/definitions/index.js +407 -0
- package/src/views/builder/inspector/definitions/input/actions.js +1 -0
- package/src/views/builder/inspector/definitions/input/main.js +14 -0
- package/src/views/builder/inspector/definitions/input/rules.js +8 -0
- package/src/views/builder/inspector/definitions/input/style.js +32 -0
- package/src/views/builder/inspector/definitions/label/actions.js +1 -0
- package/src/views/builder/inspector/definitions/label/main.js +24 -0
- package/src/views/builder/inspector/definitions/label/rules.js +4 -0
- package/src/views/builder/inspector/definitions/label/style.js +12 -0
- package/src/views/builder/inspector/definitions/layout/actions.js +1 -0
- package/src/views/builder/inspector/definitions/layout/main.js +6 -0
- package/src/views/builder/inspector/definitions/layout/rules.js +3 -0
- package/src/views/builder/inspector/definitions/layout/style.js +7 -0
- package/src/views/builder/inspector/definitions/layout-cell/actions.js +1 -0
- package/src/views/builder/inspector/definitions/layout-cell/main.js +7 -0
- package/src/views/builder/inspector/definitions/layout-cell/rules.js +3 -0
- package/src/views/builder/inspector/definitions/layout-cell/style.js +44 -0
- package/src/views/builder/inspector/definitions/link/actions.js +1 -0
- package/src/views/builder/inspector/definitions/link/main.js +29 -0
- package/src/views/builder/inspector/definitions/link/rules.js +4 -0
- package/src/views/builder/inspector/definitions/link/style.js +11 -0
- package/src/views/builder/inspector/definitions/menu/actions.js +3 -0
- package/src/views/builder/inspector/definitions/menu/main.js +16 -0
- package/src/views/builder/inspector/definitions/menu/rules.js +4 -0
- package/src/views/builder/inspector/definitions/menu/style.js +33 -0
- package/src/views/builder/inspector/definitions/number/actions.js +10 -0
- package/src/views/builder/inspector/definitions/number/main.js +29 -0
- package/src/views/builder/inspector/definitions/number/rules.js +8 -0
- package/src/views/builder/inspector/definitions/number/style.js +32 -0
- package/src/views/builder/inspector/definitions/progress-circle/actions.js +1 -0
- package/src/views/builder/inspector/definitions/progress-circle/main.js +18 -0
- package/src/views/builder/inspector/definitions/progress-circle/rules.js +4 -0
- package/src/views/builder/inspector/definitions/progress-circle/style.js +5 -0
- package/src/views/builder/inspector/definitions/progress-line/actions.js +1 -0
- package/src/views/builder/inspector/definitions/progress-line/main.js +16 -0
- package/src/views/builder/inspector/definitions/progress-line/rules.js +4 -0
- package/src/views/builder/inspector/definitions/progress-line/style.js +6 -0
- package/src/views/builder/inspector/definitions/radio/actions.js +10 -0
- package/src/views/builder/inspector/definitions/radio/main.js +16 -0
- package/src/views/builder/inspector/definitions/radio/rules.js +8 -0
- package/src/views/builder/inspector/definitions/radio/style.js +32 -0
- package/src/views/builder/inspector/definitions/reportViewer/main.js +12 -0
- package/src/views/builder/inspector/definitions/richtext/actions.js +10 -0
- package/src/views/builder/inspector/definitions/richtext/main.js +21 -0
- package/src/views/builder/inspector/definitions/richtext/rules.js +8 -0
- package/src/views/builder/inspector/definitions/richtext/style.js +32 -0
- package/src/views/builder/inspector/definitions/signature/actions.js +1 -0
- package/src/views/builder/inspector/definitions/signature/main.js +13 -0
- package/src/views/builder/inspector/definitions/signature/rules.js +8 -0
- package/src/views/builder/inspector/definitions/signature/style.js +26 -0
- package/src/views/builder/inspector/definitions/table/main.js +9 -0
- package/src/views/builder/inspector/definitions/tag/actions.js +10 -0
- package/src/views/builder/inspector/definitions/tag/main.js +17 -0
- package/src/views/builder/inspector/definitions/tag/rules.js +8 -0
- package/src/views/builder/inspector/definitions/tag/style.js +32 -0
- package/src/views/builder/inspector/definitions/textarea/actions.js +1 -0
- package/src/views/builder/inspector/definitions/textarea/main.js +16 -0
- package/src/views/builder/inspector/definitions/textarea/rules.js +8 -0
- package/src/views/builder/inspector/definitions/textarea/style.js +32 -0
- package/src/views/builder/inspector/definitions/time/actions.js +10 -0
- package/src/views/builder/inspector/definitions/time/main.js +18 -0
- package/src/views/builder/inspector/definitions/time/rules.js +8 -0
- package/src/views/builder/inspector/definitions/time/style.js +32 -0
- package/src/views/builder/inspector/definitions/toggle/actions.js +10 -0
- package/src/views/builder/inspector/definitions/toggle/main.js +26 -0
- package/src/views/builder/inspector/definitions/toggle/rules.js +8 -0
- package/src/views/builder/inspector/definitions/toggle/style.js +32 -0
- package/src/views/builder/inspector/fields/BooleanEditor.jsx +30 -0
- package/src/views/builder/inspector/fields/ExpressionEditor.jsx +35 -0
- package/src/views/builder/inspector/fields/FieldWrapper.jsx +15 -0
- package/src/views/builder/inspector/fields/ItemsEditor.jsx +118 -0
- package/src/views/builder/inspector/fields/OptionsEditor.jsx +118 -0
- package/src/views/builder/inspector/fields/SelectEditor.jsx +32 -0
- package/src/views/builder/inspector/fields/TabsEditor.jsx +128 -0
- package/src/views/builder/inspector/fields/TextEditor.jsx +28 -0
- package/src/views/builder/inspector/fields/TextFieldEditor.jsx +0 -0
- package/src/views/builder/sidebar/Sidebar.jsx +20 -0
- package/src/views/builder/sidebar/SidebarTabs.jsx +50 -0
- package/src/views/builder/sidebar/tabs/ActionsTab.jsx +94 -0
- package/src/views/builder/sidebar/tabs/Components/ComponentItem.jsx +69 -0
- package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +89 -0
- package/src/views/builder/sidebar/tabs/Components/GroupLevelAutocomplete.jsx +269 -0
- package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +69 -0
- package/src/views/builder/sidebar/tabs/TreeTab.jsx +205 -0
- package/src/views/builder/sidebar/tabs/ViewTab.jsx +121 -0
- package/src/views/builder/viewer/Canvas.jsx +7 -0
- package/src/views/builder/viewer/ComponentRenderer.jsx +166 -0
- package/src/views/builder/viewer/DropZone.jsx +60 -0
- package/src/views/builder/viewer/ProductionViewer.jsx +155 -0
- package/src/views/builder/viewer/SaveViewDialog.jsx +60 -0
- package/src/views/builder/viewer/SaveWidgetDialog.jsx +142 -0
- package/src/views/builder/viewer/Viewer.jsx +83 -0
- package/src/views/builder/viewer/ViewerComponentWrapper.jsx +238 -0
- package/src/views/builder/viewer/ViewerToolbar.jsx +89 -0
- package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +57 -0
- package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +32 -0
- package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +55 -0
- package/src/views/builder/viewer/renderers/CardRenderer.jsx +76 -0
- package/src/views/builder/viewer/renderers/CellRenderer.jsx +71 -0
- package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +27 -0
- package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +96 -0
- package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +71 -0
- package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +111 -0
- package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +49 -0
- package/src/views/builder/viewer/renderers/DividerRenderer.jsx +22 -0
- package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +63 -0
- package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +78 -0
- package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +23 -0
- package/src/views/builder/viewer/renderers/ImageRenderer.jsx +26 -0
- package/src/views/builder/viewer/renderers/InputRenderer.jsx +34 -0
- package/src/views/builder/viewer/renderers/LabelRenderer.jsx +23 -0
- package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +162 -0
- package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +173 -0
- package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +51 -0
- package/src/views/builder/viewer/renderers/LinkRenderer.jsx +24 -0
- package/src/views/builder/viewer/renderers/MenuRenderer.jsx +291 -0
- package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +80 -0
- package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +47 -0
- package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +36 -0
- package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +57 -0
- package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +94 -0
- package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +15 -0
- package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +76 -0
- package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +89 -0
- package/src/views/builder/viewer/renderers/TabRenderer.jsx +82 -0
- package/src/views/builder/viewer/renderers/TableRenderer.jsx +92 -0
- package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +67 -0
- package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +37 -0
- package/src/views/builder/viewer/renderers/TextRenderer.jsx +9 -0
- package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +49 -0
- package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +46 -0
- package/src/views/builder/viewer/renderers/WizardRenderer.jsx +88 -0
- package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +72 -0
- package/src/views/customFilter/CustomFilterDialog.js +1142 -0
- package/src/views/genericTable/BuilderExpressionParams.js +193 -0
- package/src/views/genericTable/FixedFilterDialog.js +447 -0
- package/src/views/genericTable/GenericForm.js +301 -0
- package/src/views/genericTable/QueryEditor.js +99 -0
- package/src/views/genericTable/RegexTextEditor.js +182 -0
- package/src/views/genericTable/ReportBuilderSaveDialog.js +153 -0
- package/src/views/genericTable/RoutingSettingDialog.js +189 -0
- package/src/views/genericTable/SGrid.js +2168 -0
- package/src/views/genericTable/SearchFilterDialog.js +247 -0
- package/src/views/genericTable/TAGGrid.js +1046 -0
- package/src/views/genericTable/cellEditors/autocompleteEditor.js +229 -0
- package/src/views/genericTable/cellRenderers/imageRenderer.js +14 -0
- package/src/views/genericTable/statusBar/rowCountStatusBar.js +37 -0
- package/src/views/genericTable/template/addTemplate.js +187 -0
- package/src/views/genericTable/toolPanels/CustomColumnsToolPanel.js +43 -0
- package/src/views/pages/auth/FooterIllustrationsV2.js +40 -0
- package/src/views/pages/misc/FooterIllustrations.js +47 -0
- package/src/views/pages/misc/muiTable/CustomPagination.js +34 -0
- package/src/views/pages/users/UserManageDialog.js +283 -0
- package/src/views/pages/users/UserViewPage.js +199 -0
- package/src/views/users/AddUserNameDialog.js +162 -0
- package/src/views/users/ContactManage.js +449 -0
- package/src/views/users/ResetPasswordDialog.js +242 -0
- package/styles/globals.css +71 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const UserIcon = props => {
|
|
2
|
+
// ** Props
|
|
3
|
+
const { icon, iconProps, componentType } = props;
|
|
4
|
+
|
|
5
|
+
// Return null if no valid componentType
|
|
6
|
+
if (!componentType) return null;
|
|
7
|
+
|
|
8
|
+
const IconTag = icon;
|
|
9
|
+
|
|
10
|
+
// Return null if no valid icon provided
|
|
11
|
+
if (!IconTag) return null;
|
|
12
|
+
|
|
13
|
+
let styles;
|
|
14
|
+
if (componentType === 'search') {
|
|
15
|
+
// Conditional Props based on component type
|
|
16
|
+
/* styles = {
|
|
17
|
+
color: 'blue',
|
|
18
|
+
fontSize: '2rem'
|
|
19
|
+
} */
|
|
20
|
+
} else if (componentType === 'vertical-menu') {
|
|
21
|
+
// Conditional Props based on component type
|
|
22
|
+
/* styles = {
|
|
23
|
+
color: 'red',
|
|
24
|
+
fontSize: '1.5rem'
|
|
25
|
+
} */
|
|
26
|
+
} else if (componentType === 'horizontal-menu') {
|
|
27
|
+
// Conditional Props based on component type
|
|
28
|
+
/* styles = {
|
|
29
|
+
color: 'green',
|
|
30
|
+
fontSize: '1rem'
|
|
31
|
+
} */
|
|
32
|
+
} else {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// @ts-ignore
|
|
37
|
+
return <IconTag {...iconProps} style={{ ...styles }} />;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export default UserIcon;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// ** React Imports
|
|
2
|
+
import { useContext } from 'react'
|
|
3
|
+
|
|
4
|
+
// ** Component Imports
|
|
5
|
+
import { AbilityContext } from 'src/layouts/components/acl/Can'
|
|
6
|
+
|
|
7
|
+
const CanViewNavGroup = props => {
|
|
8
|
+
// ** Props
|
|
9
|
+
const { children, navGroup } = props
|
|
10
|
+
|
|
11
|
+
// ** Hook
|
|
12
|
+
const ability = useContext(AbilityContext)
|
|
13
|
+
|
|
14
|
+
const checkForVisibleChild = arr => {
|
|
15
|
+
return arr.some(i => {
|
|
16
|
+
if (i.children) {
|
|
17
|
+
return checkForVisibleChild(i.children)
|
|
18
|
+
} else {
|
|
19
|
+
return ability?.can(i.action, i.subject)
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const canViewMenuGroup = item => {
|
|
25
|
+
const hasAnyVisibleChild = item.children && checkForVisibleChild(item.children)
|
|
26
|
+
if (!(item.action && item.subject)) {
|
|
27
|
+
return hasAnyVisibleChild
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return ability && ability.can(item.action, item.subject) && hasAnyVisibleChild
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return navGroup && canViewMenuGroup(navGroup) ? <>{children}</> : null
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export default CanViewNavGroup
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// ** React Imports
|
|
2
|
+
import { useContext } from 'react'
|
|
3
|
+
|
|
4
|
+
// ** Component Imports
|
|
5
|
+
import { AbilityContext } from 'src/layouts/components/acl/Can'
|
|
6
|
+
|
|
7
|
+
const CanViewNavLink = props => {
|
|
8
|
+
// ** Props
|
|
9
|
+
const { children, navLink } = props
|
|
10
|
+
|
|
11
|
+
// ** Hook
|
|
12
|
+
const ability = useContext(AbilityContext)
|
|
13
|
+
|
|
14
|
+
return ability && ability.can(navLink?.action, navLink?.subject) ? <>{children}</> : null
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default CanViewNavLink
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// ** React Imports
|
|
2
|
+
import { useContext } from 'react'
|
|
3
|
+
|
|
4
|
+
// ** Component Imports
|
|
5
|
+
import { AbilityContext } from 'src/layouts/components/acl/Can'
|
|
6
|
+
|
|
7
|
+
const CanViewNavSectionTitle = props => {
|
|
8
|
+
// ** Props
|
|
9
|
+
const { children, navTitle } = props
|
|
10
|
+
|
|
11
|
+
// ** Hook
|
|
12
|
+
const ability = useContext(AbilityContext)
|
|
13
|
+
|
|
14
|
+
return ability && ability.can(navTitle?.action, navTitle?.subject) ? <>{children}</> : null
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default CanViewNavSectionTitle
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// ** MUI Imports
|
|
2
|
+
import Box from '@mui/material/Box'
|
|
3
|
+
|
|
4
|
+
// ** Components
|
|
5
|
+
import ModeToggler from 'src/@core/layouts/components/shared-components/ModeToggler'
|
|
6
|
+
import UserDropdown from 'src/layouts/components/UserDropdown'
|
|
7
|
+
import Navigation from "src/@core/layouts/components/horizontal/navigation";
|
|
8
|
+
import Toolbar from "@mui/material/Toolbar";
|
|
9
|
+
|
|
10
|
+
const AppBarContent = props => {
|
|
11
|
+
// ** Props
|
|
12
|
+
const { hidden,
|
|
13
|
+
children,
|
|
14
|
+
settings,
|
|
15
|
+
scrollToTop,
|
|
16
|
+
saveSettings,
|
|
17
|
+
horizontalNavMenuContent: userHorizontalNavMenuContent } = props
|
|
18
|
+
const { skin, appBar, navHidden, appBarBlur, contentWidth } = settings
|
|
19
|
+
return (
|
|
20
|
+
<Box sx={{ display: 'flex', alignItems: 'center' }}>
|
|
21
|
+
{/*<ModeToggler settings={settings} saveSettings={saveSettings} />*/}
|
|
22
|
+
<Box className='layout-horizontal-nav' sx={{ width: '100%' }}>
|
|
23
|
+
<Toolbar
|
|
24
|
+
className='horizontal-nav-content-container'
|
|
25
|
+
sx={{
|
|
26
|
+
mx: 'auto',
|
|
27
|
+
...(contentWidth === 'boxed' && { '@media (min-width:1440px)': { maxWidth: 1440 } }),
|
|
28
|
+
minHeight: theme => `${theme.mixins.toolbar.minHeight - (skin === 'bordered' ? 1 : 0)}px !important`
|
|
29
|
+
}}
|
|
30
|
+
>
|
|
31
|
+
{(userHorizontalNavMenuContent && userHorizontalNavMenuContent(props)) || <Navigation {...props} />}
|
|
32
|
+
</Toolbar>
|
|
33
|
+
</Box>
|
|
34
|
+
<UserDropdown settings={settings} />
|
|
35
|
+
</Box>
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export default AppBarContent
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// ** React Imports
|
|
2
|
+
import { useEffect, useState } from 'react'
|
|
3
|
+
|
|
4
|
+
// ** Import All Icons
|
|
5
|
+
import * as Icons from 'mdi-material-ui'
|
|
6
|
+
|
|
7
|
+
// ** Axios Import
|
|
8
|
+
import axios from 'axios'
|
|
9
|
+
|
|
10
|
+
const ServerSideNavItems = () => {
|
|
11
|
+
// ** State
|
|
12
|
+
const [menuItems, setMenuItems] = useState([])
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
axios.get('/api/horizontal-nav/data').then(response => {
|
|
15
|
+
const menuArray = response.data
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Replace the icon string with the component
|
|
19
|
+
* If you don't want to import the whole icon library
|
|
20
|
+
* you can create a static object and replace the icons using that object
|
|
21
|
+
*/
|
|
22
|
+
const finalMenuArray = items => {
|
|
23
|
+
return items.map(item => {
|
|
24
|
+
if (item.icon) {
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
item.icon = Icons[item.icon]
|
|
27
|
+
if (item.children) {
|
|
28
|
+
finalMenuArray(item.children)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return item
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return item
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
setMenuItems(finalMenuArray(menuArray))
|
|
38
|
+
})
|
|
39
|
+
}, [])
|
|
40
|
+
|
|
41
|
+
return menuItems
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export default ServerSideNavItems
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Icon, StepConnector, stepConnectorClasses, styled } from '@mui/material'
|
|
2
|
+
|
|
3
|
+
export const ColorlibConnector = styled(StepConnector)(({ theme }) => ({
|
|
4
|
+
[`&.${stepConnectorClasses.alternativeLabel}`]: {
|
|
5
|
+
top: 14
|
|
6
|
+
},
|
|
7
|
+
[`&.${stepConnectorClasses.active}`]: {
|
|
8
|
+
[`& .${stepConnectorClasses.line}`]: {
|
|
9
|
+
backgroundImage: 'linear-gradient( 95deg,rgb(242,113,33) 0%,rgb(233,64,87) 50%,rgb(138,35,135) 100%)'
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
[`&.${stepConnectorClasses.completed}`]: {
|
|
13
|
+
[`& .${stepConnectorClasses.line}`]: {
|
|
14
|
+
backgroundImage: 'linear-gradient( 95deg,rgb(242,113,33) 0%,rgb(233,64,87) 50%,rgb(138,35,135) 100%)'
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
[`& .${stepConnectorClasses.line}`]: {
|
|
18
|
+
height: 3,
|
|
19
|
+
border: 0,
|
|
20
|
+
backgroundColor: theme.palette.mode === 'dark' ? theme.palette.grey[800] : '#eaeaf0',
|
|
21
|
+
borderRadius: 1
|
|
22
|
+
}
|
|
23
|
+
}))
|
|
24
|
+
|
|
25
|
+
export const ColorlibStepIconRoot = styled('div')(({ theme, ownerState, borderColor }) => ({
|
|
26
|
+
backgroundColor: theme.palette.mode === 'dark' ? theme.palette.grey[700] : '#ccc',
|
|
27
|
+
zIndex: 1,
|
|
28
|
+
color: '#fff',
|
|
29
|
+
width: 30,
|
|
30
|
+
height: 30,
|
|
31
|
+
display: 'flex',
|
|
32
|
+
borderRadius: '50%',
|
|
33
|
+
justifyContent: 'center',
|
|
34
|
+
alignItems: 'center',
|
|
35
|
+
...(ownerState.active && {
|
|
36
|
+
backgroundImage: 'linear-gradient( 136deg, rgb(242,113,33) 0%, rgb(233,64,87) 50%, rgb(138,35,135) 100%)',
|
|
37
|
+
boxShadow: '0 4px 10px 0 rgba(0,0,0,.25)',
|
|
38
|
+
border: 'solid 4px',
|
|
39
|
+
borderColor: borderColor
|
|
40
|
+
}),
|
|
41
|
+
...(ownerState.completed && {
|
|
42
|
+
backgroundImage: 'linear-gradient( 136deg, rgb(242,113,33) 0%, rgb(233,64,87) 50%, rgb(138,35,135) 100%)'
|
|
43
|
+
})
|
|
44
|
+
}))
|
|
45
|
+
|
|
46
|
+
export function ColorlibStepIcon(props, icon, borderColor) {
|
|
47
|
+
const { active, completed, className } = props
|
|
48
|
+
const icons = <Icon sx={{ fontSize: '16px !important' }}>{icon}</Icon>
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<ColorlibStepIconRoot ownerState={{ completed, active }} className={className} borderColor={borderColor}>
|
|
52
|
+
{icons}
|
|
53
|
+
</ColorlibStepIconRoot>
|
|
54
|
+
)
|
|
55
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// ** MUI Imports
|
|
2
|
+
import Box from '@mui/material/Box'
|
|
3
|
+
import IconButton from '@mui/material/IconButton'
|
|
4
|
+
|
|
5
|
+
// ** Icons Imports
|
|
6
|
+
import MenuIcon from 'mdi-material-ui/Menu'
|
|
7
|
+
|
|
8
|
+
// ** Components
|
|
9
|
+
import ModeToggler from 'src/@core/layouts/components/shared-components/ModeToggler'
|
|
10
|
+
import UserDropdown from 'src/layouts/components/UserDropdown'
|
|
11
|
+
|
|
12
|
+
const AppBarContent = props => {
|
|
13
|
+
// ** Props
|
|
14
|
+
const { hidden, settings, saveSettings, toggleNavVisibility } = props
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<Box sx={{ width: '100%', display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
|
|
18
|
+
<Box className='actions-left' sx={{ mr: 2, display: 'flex', alignItems: 'center' }}>
|
|
19
|
+
{hidden ? (
|
|
20
|
+
<IconButton color='inherit' sx={{ ml: -2.75 }} onClick={toggleNavVisibility}>
|
|
21
|
+
<MenuIcon />
|
|
22
|
+
</IconButton>
|
|
23
|
+
) : null}
|
|
24
|
+
|
|
25
|
+
<ModeToggler settings={settings} saveSettings={saveSettings} />
|
|
26
|
+
{/* <UserLanguageDropdown settings={settings} saveSettings={saveSettings} /> */}
|
|
27
|
+
</Box>
|
|
28
|
+
<Box className='actions-right' sx={{ display: 'flex', alignItems: 'center' }}>
|
|
29
|
+
<UserDropdown settings={settings} />
|
|
30
|
+
</Box>
|
|
31
|
+
</Box>
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export default AppBarContent
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// ** React Imports
|
|
2
|
+
import { useEffect, useState } from 'react'
|
|
3
|
+
|
|
4
|
+
// ** Import All Icons
|
|
5
|
+
import * as Icons from 'mdi-material-ui'
|
|
6
|
+
|
|
7
|
+
// ** Axios Import
|
|
8
|
+
import axios from 'axios'
|
|
9
|
+
|
|
10
|
+
const ServerSideNavItems = () => {
|
|
11
|
+
// ** State
|
|
12
|
+
const [menuItems, setMenuItems] = useState([])
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
axios.get('/api/vertical-nav/data').then(response => {
|
|
15
|
+
const menuArray = response.data
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Replace the icon string with the component
|
|
19
|
+
* If you don't want to import the whole icon library
|
|
20
|
+
* you can create a static object and replace the icons using that object
|
|
21
|
+
*/
|
|
22
|
+
const finalMenuArray = items => {
|
|
23
|
+
return items.map(item => {
|
|
24
|
+
if (item.icon) {
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
item.icon = Icons[item.icon]
|
|
27
|
+
if (item.children) {
|
|
28
|
+
finalMenuArray(item.children)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return item
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return item
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
setMenuItems(finalMenuArray(menuArray))
|
|
38
|
+
})
|
|
39
|
+
}, [])
|
|
40
|
+
|
|
41
|
+
return menuItems
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export default ServerSideNavItems
|
package/src/lib/index.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @robobyte/front-builder — Public Package API
|
|
3
|
+
*
|
|
4
|
+
* This file is the single entry point for the package.
|
|
5
|
+
* Host Next.js apps import from here.
|
|
6
|
+
*
|
|
7
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
8
|
+
* QUICK START
|
|
9
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
10
|
+
*
|
|
11
|
+
* 1. Install (private npm registry):
|
|
12
|
+
* npm install @robobyte/front-builder
|
|
13
|
+
*
|
|
14
|
+
* 2. In the host app's next.config.js, add transpilePackages so Next.js
|
|
15
|
+
* can compile this source-first package:
|
|
16
|
+
*
|
|
17
|
+
* const nextConfig = {
|
|
18
|
+
* transpilePackages: ['@robobyte/front-builder'],
|
|
19
|
+
* }
|
|
20
|
+
*
|
|
21
|
+
* 3. In the host app's _app.js, wrap the tree with RoboByteFrontBuilderProvider:
|
|
22
|
+
*
|
|
23
|
+
* import { RoboByteFrontBuilderProvider } from '@robobyte/front-builder'
|
|
24
|
+
*
|
|
25
|
+
* export default function App({ Component, pageProps }) {
|
|
26
|
+
* return (
|
|
27
|
+
* <RoboByteFrontBuilderProvider navExtensions={[...]}>
|
|
28
|
+
* <Component {...pageProps} />
|
|
29
|
+
* </RoboByteFrontBuilderProvider>
|
|
30
|
+
* )
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* 4. Add builder pages to your Next.js app (e.g. pages/ui-builder/[id].js):
|
|
34
|
+
*
|
|
35
|
+
* export { default } from '@robobyte/front-builder/UIBuilderPage'
|
|
36
|
+
* // or:
|
|
37
|
+
* import { UIBuilderPage } from '@robobyte/front-builder'
|
|
38
|
+
* export default UIBuilderPage
|
|
39
|
+
*
|
|
40
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
// ── Navigation Extension API ──────────────────────────────────────────────────
|
|
44
|
+
// NavigationExtensionProvider : Wrap your app to enable nav injection
|
|
45
|
+
// useNavigationExtensionContext: Internal context accessor (used by the nav renderer)
|
|
46
|
+
// useNavExtension : Hook to register nav items from any component
|
|
47
|
+
export {
|
|
48
|
+
NavigationExtensionProvider,
|
|
49
|
+
useNavigationExtensionContext
|
|
50
|
+
} from './navigation/NavigationExtensionContext'
|
|
51
|
+
|
|
52
|
+
export { default as useNavExtension } from './navigation/useNavExtension'
|
|
53
|
+
|
|
54
|
+
// ── Convenience Root Provider ─────────────────────────────────────────────────
|
|
55
|
+
// Combines NavigationExtensionProvider with any future package-level providers.
|
|
56
|
+
// Prefer this over using NavigationExtensionProvider directly.
|
|
57
|
+
export { default as RoboByteFrontBuilderProvider } from './providers/RoboByteFrontBuilderProvider'
|
|
58
|
+
|
|
59
|
+
// ── Page Components ───────────────────────────────────────────────────────────
|
|
60
|
+
// These are full Next.js page components.
|
|
61
|
+
// To embed them in your app, create a page file that re-exports the component:
|
|
62
|
+
//
|
|
63
|
+
// // pages/ui-builder/[id].js (in the HOST app)
|
|
64
|
+
// export { default } from '@robobyte/front-builder'
|
|
65
|
+
// // then override via named export if needed:
|
|
66
|
+
// import { UIBuilderPage } from '@robobyte/front-builder'
|
|
67
|
+
//
|
|
68
|
+
export { default as UIBuilderPage } from '../pages/viewBuilder/index'
|
|
69
|
+
export { default as ReportBuilderPage } from '../pages/reportModule/reportBuilder/index'
|
|
70
|
+
|
|
71
|
+
// ── Core Contexts & Hooks (advanced use) ─────────────────────────────────────
|
|
72
|
+
// Useful when you need to read or drive builder state from the host app.
|
|
73
|
+
export { BuilderProvider, useBuilder } from '../context/BuilderContext'
|
|
74
|
+
export { SystemContext, SystemProvider } from '../context/SystemContext'
|
|
75
|
+
export { AuthContext, AuthProvider } from '../context/AuthContext'
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NavigationExtensionContext
|
|
3
|
+
*
|
|
4
|
+
* Allows host Next.js applications to inject additional navigation items
|
|
5
|
+
* into the RoboByteFrontBuilder sidebar at runtime — without modifying
|
|
6
|
+
* the server-stored navigation config.
|
|
7
|
+
*
|
|
8
|
+
* USAGE in host app's _app.js:
|
|
9
|
+
*
|
|
10
|
+
* import { NavigationExtensionProvider } from '@robobyte/front-builder'
|
|
11
|
+
*
|
|
12
|
+
* <NavigationExtensionProvider items={[
|
|
13
|
+
* {
|
|
14
|
+
* id: 'host-analytics',
|
|
15
|
+
* title: 'Analytics',
|
|
16
|
+
* icon: 'ChartBar', // mdi-material-ui icon name
|
|
17
|
+
* type: 'static',
|
|
18
|
+
* path: '/analytics',
|
|
19
|
+
* insertAt: 'end', // 'start' | 'end' | number | { afterId } | { beforeId }
|
|
20
|
+
* }
|
|
21
|
+
* ]}>
|
|
22
|
+
* <App />
|
|
23
|
+
* </NavigationExtensionProvider>
|
|
24
|
+
*
|
|
25
|
+
* Or dynamically from any component using the hook:
|
|
26
|
+
*
|
|
27
|
+
* import { useNavExtension } from '@robobyte/front-builder'
|
|
28
|
+
*
|
|
29
|
+
* useNavExtension([
|
|
30
|
+
* { id: 'my-item', title: 'My Page', type: 'static', path: '/my-page', icon: 'Cog' }
|
|
31
|
+
* ], 'my-plugin')
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
import { createContext, useCallback, useContext, useState } from 'react'
|
|
35
|
+
|
|
36
|
+
const NavigationExtensionContext = createContext({
|
|
37
|
+
extensionItems: [],
|
|
38
|
+
registerItems: () => {},
|
|
39
|
+
unregisterItems: () => {}
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Provider that makes extension items available to the navigation system.
|
|
44
|
+
* Wrap your app (or just the pages that need extended navigation) with this.
|
|
45
|
+
*
|
|
46
|
+
* @param {Object[]} items - Static extension items declared on the provider
|
|
47
|
+
* @param {ReactNode} children
|
|
48
|
+
*/
|
|
49
|
+
export const NavigationExtensionProvider = ({ children, items = [] }) => {
|
|
50
|
+
// Dynamic items registered at runtime via useNavExtension()
|
|
51
|
+
const [dynamicGroups, setDynamicGroups] = useState({})
|
|
52
|
+
|
|
53
|
+
const registerItems = useCallback((pluginId, pluginItems) => {
|
|
54
|
+
setDynamicGroups(prev => ({ ...prev, [pluginId]: pluginItems }))
|
|
55
|
+
}, [])
|
|
56
|
+
|
|
57
|
+
const unregisterItems = useCallback(pluginId => {
|
|
58
|
+
setDynamicGroups(prev => {
|
|
59
|
+
const next = { ...prev }
|
|
60
|
+
delete next[pluginId]
|
|
61
|
+
return next
|
|
62
|
+
})
|
|
63
|
+
}, [])
|
|
64
|
+
|
|
65
|
+
// Merge static (prop) items + all dynamic groups into one flat list
|
|
66
|
+
const extensionItems = [
|
|
67
|
+
...items,
|
|
68
|
+
...Object.values(dynamicGroups).flat()
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
return (
|
|
72
|
+
<NavigationExtensionContext.Provider value={{ extensionItems, registerItems, unregisterItems }}>
|
|
73
|
+
{children}
|
|
74
|
+
</NavigationExtensionContext.Provider>
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Internal hook — used by the navigation renderer to read extension items */
|
|
79
|
+
export const useNavigationExtensionContext = () => useContext(NavigationExtensionContext)
|
|
80
|
+
|
|
81
|
+
export default NavigationExtensionContext
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mergeNavExtensions
|
|
3
|
+
*
|
|
4
|
+
* Merges host-app extension items into the server-fetched navigation data array.
|
|
5
|
+
* Each extension item may specify an `insertAt` field to control placement:
|
|
6
|
+
*
|
|
7
|
+
* insertAt: 'end' → append (default)
|
|
8
|
+
* insertAt: 'start' → prepend
|
|
9
|
+
* insertAt: 2 → insert at index 2
|
|
10
|
+
* insertAt: { afterId: 'xyz' } → insert after the item whose id === 'xyz'
|
|
11
|
+
* insertAt: { beforeId: 'xyz' }→ insert before the item whose id === 'xyz'
|
|
12
|
+
*
|
|
13
|
+
* The `insertAt` key is stripped before the item is added to the tree so that
|
|
14
|
+
* the nav renderer never sees it.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const mergeNavExtensions = (navData, extensionItems) => {
|
|
18
|
+
if (!extensionItems || extensionItems.length === 0) return navData
|
|
19
|
+
|
|
20
|
+
let result = [...navData]
|
|
21
|
+
|
|
22
|
+
for (const extItem of extensionItems) {
|
|
23
|
+
// Strip internal fields before inserting into the tree
|
|
24
|
+
const { insertAt = 'end', _pluginId, ...navItem } = extItem
|
|
25
|
+
|
|
26
|
+
// Don't add duplicates (match by id)
|
|
27
|
+
if (navItem.id && result.some(existing => existing.id === navItem.id)) {
|
|
28
|
+
// Update in place if already present
|
|
29
|
+
result = result.map(existing => (existing.id === navItem.id ? navItem : existing))
|
|
30
|
+
continue
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (insertAt === 'start') {
|
|
34
|
+
result = [navItem, ...result]
|
|
35
|
+
} else if (insertAt === 'end') {
|
|
36
|
+
result = [...result, navItem]
|
|
37
|
+
} else if (typeof insertAt === 'number') {
|
|
38
|
+
const idx = Math.max(0, Math.min(insertAt, result.length))
|
|
39
|
+
result = [...result.slice(0, idx), navItem, ...result.slice(idx)]
|
|
40
|
+
} else if (insertAt && typeof insertAt === 'object') {
|
|
41
|
+
if (insertAt.afterId) {
|
|
42
|
+
const idx = result.findIndex(i => i.id === insertAt.afterId)
|
|
43
|
+
if (idx !== -1) {
|
|
44
|
+
result = [...result.slice(0, idx + 1), navItem, ...result.slice(idx + 1)]
|
|
45
|
+
} else {
|
|
46
|
+
result = [...result, navItem]
|
|
47
|
+
}
|
|
48
|
+
} else if (insertAt.beforeId) {
|
|
49
|
+
const idx = result.findIndex(i => i.id === insertAt.beforeId)
|
|
50
|
+
if (idx !== -1) {
|
|
51
|
+
result = [...result.slice(0, idx), navItem, ...result.slice(idx)]
|
|
52
|
+
} else {
|
|
53
|
+
result = [...result, navItem]
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
result = [...result, navItem]
|
|
57
|
+
}
|
|
58
|
+
} else {
|
|
59
|
+
result = [...result, navItem]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return result
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export default mergeNavExtensions
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useNavExtension
|
|
3
|
+
*
|
|
4
|
+
* Hook for dynamically registering navigation items from anywhere inside the
|
|
5
|
+
* host application. Items are automatically cleaned up on unmount.
|
|
6
|
+
*
|
|
7
|
+
* USAGE:
|
|
8
|
+
*
|
|
9
|
+
* import { useNavExtension } from '@robobyte/front-builder'
|
|
10
|
+
*
|
|
11
|
+
* function MyFeaturePlugin() {
|
|
12
|
+
* useNavExtension(
|
|
13
|
+
* [
|
|
14
|
+
* {
|
|
15
|
+
* id: 'my-reports',
|
|
16
|
+
* title: 'My Reports',
|
|
17
|
+
* icon: 'FileChartOutline', // any mdi-material-ui icon name
|
|
18
|
+
* type: 'static',
|
|
19
|
+
* path: '/my-reports',
|
|
20
|
+
* insertAt: 'end', // optional, defaults to 'end'
|
|
21
|
+
* }
|
|
22
|
+
* ],
|
|
23
|
+
* 'my-feature-plugin' // stable plugin ID — use a unique string per feature
|
|
24
|
+
* )
|
|
25
|
+
* return null
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* @param {Object[]} items - Nav item descriptors (see NavigationExtensionContext for shape)
|
|
29
|
+
* @param {string} pluginId - Stable unique ID for this set of items (prevents duplicates)
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
import { useEffect, useRef } from 'react'
|
|
33
|
+
import { useNavigationExtensionContext } from './NavigationExtensionContext'
|
|
34
|
+
|
|
35
|
+
let _counter = 0
|
|
36
|
+
|
|
37
|
+
const useNavExtension = (items, pluginId) => {
|
|
38
|
+
const { registerItems, unregisterItems } = useNavigationExtensionContext()
|
|
39
|
+
|
|
40
|
+
// Generate a stable ID once per hook call when none is provided
|
|
41
|
+
const stableId = useRef(pluginId || `nav-ext-${++_counter}`).current
|
|
42
|
+
|
|
43
|
+
// Serialize items to detect changes without referential equality issues
|
|
44
|
+
const itemsKey = JSON.stringify(items)
|
|
45
|
+
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (!items || items.length === 0) return
|
|
48
|
+
registerItems(stableId, items)
|
|
49
|
+
return () => unregisterItems(stableId)
|
|
50
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
51
|
+
}, [stableId, itemsKey])
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export default useNavExtension
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RoboByteFrontBuilderProvider
|
|
3
|
+
*
|
|
4
|
+
* Root provider for the @robobyte/front-builder package.
|
|
5
|
+
* Wrap your host app's _app.js with this component.
|
|
6
|
+
*
|
|
7
|
+
* It currently wires up the NavigationExtensionProvider so that
|
|
8
|
+
* nav items you pass via `navExtensions` (or register via useNavExtension)
|
|
9
|
+
* are merged into the sidebar automatically.
|
|
10
|
+
*
|
|
11
|
+
* EXAMPLE (_app.js in the host Next.js app):
|
|
12
|
+
*
|
|
13
|
+
* import { RoboByteFrontBuilderProvider } from '@robobyte/front-builder'
|
|
14
|
+
*
|
|
15
|
+
* export default function App({ Component, pageProps }) {
|
|
16
|
+
* return (
|
|
17
|
+
* <RoboByteFrontBuilderProvider
|
|
18
|
+
* navExtensions={[
|
|
19
|
+
* {
|
|
20
|
+
* id: 'host-settings',
|
|
21
|
+
* title: 'Settings',
|
|
22
|
+
* icon: 'CogOutline', // any mdi-material-ui icon name
|
|
23
|
+
* type: 'static',
|
|
24
|
+
* path: '/settings',
|
|
25
|
+
* insertAt: 'end', // 'start' | 'end' | number | { afterId } | { beforeId }
|
|
26
|
+
* },
|
|
27
|
+
* {
|
|
28
|
+
* id: 'host-analytics',
|
|
29
|
+
* title: 'Analytics',
|
|
30
|
+
* icon: 'ChartBar',
|
|
31
|
+
* type: 'static',
|
|
32
|
+
* path: '/analytics',
|
|
33
|
+
* insertAt: { afterId: 'host-settings' },
|
|
34
|
+
* }
|
|
35
|
+
* ]}
|
|
36
|
+
* >
|
|
37
|
+
* <Component {...pageProps} />
|
|
38
|
+
* </RoboByteFrontBuilderProvider>
|
|
39
|
+
* )
|
|
40
|
+
* }
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
import { NavigationExtensionProvider } from '../navigation/NavigationExtensionContext'
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @param {Object[]} navExtensions - Static nav items to inject into the sidebar
|
|
47
|
+
* @param {ReactNode} children
|
|
48
|
+
*/
|
|
49
|
+
const RoboByteFrontBuilderProvider = ({ children, navExtensions = [] }) => {
|
|
50
|
+
return (
|
|
51
|
+
<NavigationExtensionProvider items={navExtensions}>
|
|
52
|
+
{children}
|
|
53
|
+
</NavigationExtensionProvider>
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export default RoboByteFrontBuilderProvider
|