robobyte-front-builder 1.0.17 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +211 -0
- package/next.config.js +19 -48
- package/package.json +39 -85
- package/src/context/BuilderContext.jsx +134 -6
- package/src/context/SystemContext.js +2 -2
- package/src/hooks/useGlobalStore.js +36 -0
- package/src/hooks/useTimerEngine.js +54 -0
- package/src/lib/index.js +11 -3
- package/src/lib/layouts/BlankLayout.jsx +13 -0
- package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +59 -1
- package/src/lib/themes/builderTheme.js +41 -0
- package/src/pages/_app.js +32 -134
- package/src/pages/api/ai.js +87 -0
- package/src/pages/builders/report/index.js +1 -0
- package/src/pages/builders/report/list/index.js +1 -0
- package/src/pages/builders/report/viewer/index.js +1 -0
- package/src/pages/index.js +88 -37
- package/src/pages/printBuilder/index.jsx +263 -0
- package/src/pages/printBuilder/layouts/index.jsx +298 -0
- package/src/pages/reportModule/reportBuilder/index.js +723 -563
- package/src/pages/reportModule/reportBuilder/reportViewer/index.js +137 -71
- package/src/pages/reportModule/reportBuilder/reports/index.js +51 -13
- package/src/pages/reportModule/reportBuilder/reportsPermissions/index.js +126 -0
- package/src/pages/viewBuilder/index.jsx +117 -32
- package/src/pages/viewBuilder/views/index.js +3 -3
- package/src/pages/viewer/[id]/index.js +2 -1
- package/src/services/DeleteService.js +31 -60
- package/src/services/Endpoints/PrintLayoutEndpoints.js +42 -0
- package/src/services/Endpoints.js +2 -0
- package/src/services/GetService.js +33 -54
- package/src/services/PatchService.js +38 -65
- package/src/services/PostService.js +37 -63
- package/src/services/UpdateService.js +39 -65
- package/src/services/builderHelper/actionExecutor.js +141 -25
- package/src/services/builderHelper/builderHelper.js +92 -0
- package/src/services/builderHelper/colorSchema.js +95 -0
- package/src/services/builderHelper/iconResolver.js +50 -0
- package/src/services/builderHelper/jsExecutor.js +212 -46
- package/src/services/builderHelper/nodeFactory.js +32 -15
- package/src/services/builderHelper/numberFormat.js +123 -0
- package/src/services/builderHelper/resolveProps.js +73 -4
- package/src/services/builderHelper/thresholdEngine.js +77 -0
- package/src/services/builderHelper/tree.js +31 -0
- package/src/services/components/agGridAutoComplete.js +5 -9
- package/src/services/config.js +9 -1
- package/src/services/globalStore.js +80 -0
- package/src/services/helper/multiSelectEditor.js +5 -9
- package/src/services/helper/multiSelectEditorByBuilder.js +241 -0
- package/src/services/helper/reportSessionHelper.js +83 -0
- package/src/services/reportData/fetchReportData.js +69 -28
- package/src/services/routerRef.js +35 -0
- package/src/views/ConfirmDialog.js +2 -2
- package/src/views/builder/JSEditor.js +105 -107
- package/src/views/builder/inspector/Inspector.jsx +6 -9
- package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +7 -13
- package/src/views/builder/inspector/Tabs/MainTab.jsx +143 -25
- package/src/views/builder/inspector/Tabs/RulesTab.jsx +9 -24
- package/src/views/builder/inspector/Tabs/StyleTab.jsx +9 -24
- package/src/views/builder/inspector/definitions/autocomplete/main.js +4 -6
- package/src/views/builder/inspector/definitions/banner/actions.js +7 -0
- package/src/views/builder/inspector/definitions/banner/main.js +22 -0
- package/src/views/builder/inspector/definitions/banner/rules.js +1 -0
- package/src/views/builder/inspector/definitions/banner/style.js +1 -0
- package/src/views/builder/inspector/definitions/breadcrumb/main.js +43 -6
- package/src/views/builder/inspector/definitions/button/main.js +11 -12
- package/src/views/builder/inspector/definitions/button/style.js +18 -30
- package/src/views/builder/inspector/definitions/checkbox/actions.js +3 -1
- package/src/views/builder/inspector/definitions/checkbox/main.js +4 -6
- package/src/views/builder/inspector/definitions/common/main.js +13 -2
- package/src/views/builder/inspector/definitions/dataGrid/main.js +23 -0
- package/src/views/builder/inspector/definitions/dataTableViewer/main.js +46 -0
- package/src/views/builder/inspector/definitions/datepicker/actions.js +3 -1
- package/src/views/builder/inspector/definitions/datepicker/main.js +6 -14
- package/src/views/builder/inspector/definitions/dialog/main.js +36 -0
- package/src/views/builder/inspector/definitions/dropdown/main.js +5 -8
- package/src/views/builder/inspector/definitions/excelUpload/actions.js +23 -0
- package/src/views/builder/inspector/definitions/excelUpload/main.js +17 -0
- package/src/views/builder/inspector/definitions/excelUpload/rules.js +1 -0
- package/src/views/builder/inspector/definitions/excelUpload/style.js +45 -0
- package/src/views/builder/inspector/definitions/header/main.js +10 -1
- package/src/views/builder/inspector/definitions/index.js +106 -19
- package/src/views/builder/inspector/definitions/input/actions.js +4 -1
- package/src/views/builder/inspector/definitions/input/main.js +20 -11
- package/src/views/builder/inspector/definitions/kpi/avatarGroup.js +22 -0
- package/src/views/builder/inspector/definitions/kpi/badge.js +17 -0
- package/src/views/builder/inspector/definitions/kpi/bulletChart.js +47 -0
- package/src/views/builder/inspector/definitions/kpi/chart.js +55 -0
- package/src/views/builder/inspector/definitions/kpi/colorScale.js +60 -0
- package/src/views/builder/inspector/definitions/kpi/comparisonBars.js +41 -0
- package/src/views/builder/inspector/definitions/kpi/countdown.js +46 -0
- package/src/views/builder/inspector/definitions/kpi/donut.js +51 -0
- package/src/views/builder/inspector/definitions/kpi/funnel.js +25 -0
- package/src/views/builder/inspector/definitions/kpi/gauge.js +39 -0
- package/src/views/builder/inspector/definitions/kpi/heatmapGrid.js +96 -0
- package/src/views/builder/inspector/definitions/kpi/iconBox.js +20 -0
- package/src/views/builder/inspector/definitions/kpi/metric.js +45 -0
- package/src/views/builder/inspector/definitions/kpi/rating.js +27 -0
- package/src/views/builder/inspector/definitions/kpi/statusDot.js +18 -0
- package/src/views/builder/inspector/definitions/kpi/stepStage.js +65 -0
- package/src/views/builder/inspector/definitions/kpi/tagList.js +32 -0
- package/src/views/builder/inspector/definitions/kpi/timeline.js +80 -0
- package/src/views/builder/inspector/definitions/kpi/trend.js +20 -0
- package/src/views/builder/inspector/definitions/label/main.js +10 -1
- package/src/views/builder/inspector/definitions/layout/main.js +27 -3
- package/src/views/builder/inspector/definitions/number/main.js +6 -14
- package/src/views/builder/inspector/definitions/pageNumber/main.js +21 -0
- package/src/views/builder/inspector/definitions/popover/main.js +71 -0
- package/src/views/builder/inspector/definitions/radio/main.js +5 -8
- package/src/views/builder/inspector/definitions/repeater/main.js +31 -0
- package/src/views/builder/inspector/definitions/reportViewer/main.js +15 -1
- package/src/views/builder/inspector/definitions/richtext/main.js +5 -8
- package/src/views/builder/inspector/definitions/signature/main.js +4 -1
- package/src/views/builder/inspector/definitions/tag/main.js +5 -8
- package/src/views/builder/inspector/definitions/textarea/actions.js +4 -1
- package/src/views/builder/inspector/definitions/textarea/main.js +5 -7
- package/src/views/builder/inspector/definitions/time/main.js +5 -8
- package/src/views/builder/inspector/definitions/toggle/main.js +5 -19
- package/src/views/builder/inspector/definitions/treeView/main.js +61 -0
- package/src/views/builder/inspector/definitions/viewRenderer/main.js +53 -0
- package/src/views/builder/inspector/definitions/wizard/main.js +68 -0
- package/src/views/builder/inspector/definitions/wizard-step/main.js +25 -0
- package/src/views/builder/inspector/fields/ActionsConfigEditor.jsx +426 -0
- package/src/views/builder/inspector/fields/ColorSchemaField.jsx +140 -0
- package/src/views/builder/inspector/fields/ColumnFunctionEditor.jsx +238 -0
- package/src/views/builder/inspector/fields/ColumnMappingEditor.jsx +105 -0
- package/src/views/builder/inspector/fields/ColumnsConfigEditor.jsx +506 -0
- package/src/views/builder/inspector/fields/DonutRingsEditorField.jsx +337 -0
- package/src/views/builder/inspector/fields/ExtraColsEditor.jsx +618 -0
- package/src/views/builder/inspector/fields/FunctionHelpPopover.jsx +295 -0
- package/src/views/builder/inspector/fields/IconEditor.jsx +64 -0
- package/src/views/builder/inspector/fields/KpiActionField.jsx +223 -0
- package/src/views/builder/inspector/fields/MarkersEditorField.jsx +173 -0
- package/src/views/builder/inspector/fields/SelectEditor.jsx +9 -5
- package/src/views/builder/inspector/fields/SeriesEditorField.jsx +363 -0
- package/src/views/builder/inspector/fields/TableColumnsEditor.jsx +104 -0
- package/src/views/builder/inspector/fields/ThresholdsEditor.jsx +247 -0
- package/src/views/builder/inspector/fields/ValueFunctionsRefPanel.jsx +217 -0
- package/src/views/builder/inspector/fields/columnEditorShared.jsx +217 -0
- package/src/views/builder/sidebar/Sidebar.jsx +4 -2
- package/src/views/builder/sidebar/SidebarTabs.jsx +28 -17
- package/src/views/builder/sidebar/tabs/ActionsTab.jsx +7 -3
- package/src/views/builder/sidebar/tabs/AiTab/AiPreviewDialog.jsx +193 -0
- package/src/views/builder/sidebar/tabs/AiTab/aiProvider.js +49 -0
- package/src/views/builder/sidebar/tabs/AiTab/index.jsx +409 -0
- package/src/views/builder/sidebar/tabs/AiTab/schemaTransformer.js +102 -0
- package/src/views/builder/sidebar/tabs/AiTab/schemaValidator.js +64 -0
- package/src/views/builder/sidebar/tabs/AiTab/systemPrompt.js +1151 -0
- package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +31 -31
- package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +43 -21
- package/src/views/builder/sidebar/tabs/Components/printComponentCatalog.js +81 -0
- package/src/views/builder/sidebar/tabs/TimersTab.jsx +338 -0
- package/src/views/builder/sidebar/tabs/TreeTab.jsx +13 -4
- package/src/views/builder/sidebar/tabs/ViewTab.jsx +1 -1
- package/src/views/builder/viewer/AdornedLabel.jsx +82 -0
- package/src/views/builder/viewer/ComponentRenderer.jsx +98 -24
- package/src/views/builder/viewer/DialogsZone.jsx +259 -0
- package/src/views/builder/viewer/FieldLabel.jsx +106 -0
- package/src/views/builder/viewer/PrintDialog.jsx +481 -0
- package/src/views/builder/viewer/ProductionViewer.jsx +80 -5
- package/src/views/builder/viewer/Viewer.jsx +106 -8
- package/src/views/builder/viewer/ViewerComponentWrapper.jsx +61 -4
- package/src/views/builder/viewer/ViewerToolbar.jsx +273 -59
- package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +26 -22
- package/src/views/builder/viewer/renderers/AvatarGroupRenderer.jsx +112 -0
- package/src/views/builder/viewer/renderers/BadgeRenderer.jsx +79 -0
- package/src/views/builder/viewer/renderers/BannerRenderer.jsx +62 -0
- package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +203 -15
- package/src/views/builder/viewer/renderers/BulletChartRenderer.jsx +147 -0
- package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +98 -39
- package/src/views/builder/viewer/renderers/CardRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/ChartRenderer.jsx +388 -0
- package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +17 -9
- package/src/views/builder/viewer/renderers/ColorScaleRenderer.jsx +300 -0
- package/src/views/builder/viewer/renderers/ComparisonBarsRenderer.jsx +133 -0
- package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +3 -1
- package/src/views/builder/viewer/renderers/CountdownRenderer.jsx +249 -0
- package/src/views/builder/viewer/renderers/DataGridRenderer.jsx +380 -0
- package/src/views/builder/viewer/renderers/DataTableViewerRenderer.jsx +240 -0
- package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +25 -24
- package/src/views/builder/viewer/renderers/DialogRenderer.jsx +327 -0
- package/src/views/builder/viewer/renderers/DividerRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/DonutRenderer.jsx +294 -0
- package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +36 -44
- package/src/views/builder/viewer/renderers/ExcelUploadRenderer.jsx +639 -0
- package/src/views/builder/viewer/renderers/FunnelRenderer.jsx +93 -0
- package/src/views/builder/viewer/renderers/GaugeRenderer.jsx +159 -0
- package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +31 -9
- package/src/views/builder/viewer/renderers/HeatmapGridRenderer.jsx +432 -0
- package/src/views/builder/viewer/renderers/IconBoxRenderer.jsx +59 -0
- package/src/views/builder/viewer/renderers/ImageRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/InputRenderer.jsx +75 -18
- package/src/views/builder/viewer/renderers/LabelRenderer.jsx +35 -9
- package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +102 -40
- package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +8 -8
- package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +48 -6
- package/src/views/builder/viewer/renderers/LinkRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/MenuRenderer.jsx +2 -2
- package/src/views/builder/viewer/renderers/MetricRenderer.jsx +80 -0
- package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +21 -30
- package/src/views/builder/viewer/renderers/PageNumberRenderer.jsx +76 -0
- package/src/views/builder/viewer/renderers/PopoverRenderer.jsx +350 -0
- package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +28 -39
- package/src/views/builder/viewer/renderers/RatingRenderer.jsx +80 -0
- package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +297 -38
- package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +219 -5
- package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +60 -66
- package/src/views/builder/viewer/renderers/RowActionsCell.jsx +308 -0
- package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +33 -62
- package/src/views/builder/viewer/renderers/StatusDotRenderer.jsx +75 -0
- package/src/views/builder/viewer/renderers/StepStageRenderer.jsx +348 -0
- package/src/views/builder/viewer/renderers/TagListRenderer.jsx +115 -0
- package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +31 -45
- package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +25 -18
- package/src/views/builder/viewer/renderers/TextRenderer.jsx +7 -1
- package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +25 -24
- package/src/views/builder/viewer/renderers/TimelineRenderer.jsx +525 -0
- package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +21 -27
- package/src/views/builder/viewer/renderers/TreeViewRenderer.jsx +832 -0
- package/src/views/builder/viewer/renderers/TrendRenderer.jsx +66 -0
- package/src/views/builder/viewer/renderers/ViewRendererRenderer.jsx +315 -0
- package/src/views/builder/viewer/renderers/WizardRenderer.jsx +380 -64
- package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +21 -12
- package/src/views/builder/viewer/renderers/dataGridComponents.jsx +824 -0
- package/src/views/customFilter/CustomFilterDialog.js +1023 -660
- package/src/views/customFilter/FixedFilterDialog.js +649 -0
- package/src/views/customFilter/SearchFilterDialog.js +248 -0
- package/src/views/genericTable/BuilderExpressionParams.js +3 -3
- package/src/views/genericTable/ColumnConfiguratorDialog.js +771 -0
- package/src/views/genericTable/FixedFilterDialog.js +3 -2
- package/src/views/genericTable/FormattingSettingsDialog.js +551 -0
- package/src/views/genericTable/ReportSettingsDialog.js +151 -0
- package/src/views/genericTable/SGrid.js +1061 -247
- package/src/views/genericTable/SearchFilterDialog.js +3 -2
- package/src/views/genericTable/TAGGrid.js +83 -69
- package/src/views/genericTable/cellEditors/autocompleteEditor.js +5 -9
- package/src/views/genericTable/convertStringFunctions.js +336 -0
- package/src/views/genericTable/statusBar/rowCountStatusBar.js +3 -1
- package/src/views/genericTable/updateRefHelpers.js +424 -0
- package/src/views/printBuilder/PrintBuilderViewer.jsx +607 -0
- package/src/views/printBuilder/PrintPreviewCanvas.jsx +157 -0
- package/src/views/rolePermissions/UpdateReportPermissionDialog.js +316 -0
- package/src/@core/components/auth/AclGuard.js +0 -55
- package/src/@core/components/auth/AuthGuard.js +0 -40
- package/src/@core/components/auth/GuestGuard.js +0 -30
- package/src/@core/components/custom-inputs/Horizontal.jsx +0 -143
- package/src/@core/components/custom-inputs/Image.jsx +0 -78
- package/src/@core/components/custom-inputs/Vertical.jsx +0 -113
- package/src/@core/components/customizer/index.jsx +0 -470
- package/src/@core/components/customizer/styles.module.css +0 -169
- package/src/@core/components/mui/Avatar.jsx +0 -41
- package/src/@core/components/mui/Badge.jsx +0 -20
- package/src/@core/components/mui/IconButton.jsx +0 -74
- package/src/@core/components/mui/TabList.jsx +0 -60
- package/src/@core/components/option-menu/index.jsx +0 -137
- package/src/@core/components/scroll-to-top/index.jsx +0 -43
- package/src/@core/components/spinner/index.js +0 -26
- package/src/@core/components/window-wrapper/index.js +0 -27
- package/src/@core/contexts/settingsContext.jsx +0 -98
- package/src/@core/hooks/useBgColor.js +0 -63
- package/src/@core/hooks/useImageVariant.js +0 -27
- package/src/@core/hooks/useLayoutInit.js +0 -37
- package/src/@core/hooks/useObjectCookie.js +0 -18
- package/src/@core/hooks/useSettings.jsx +0 -15
- package/src/@core/layouts/BlankLayout.js +0 -37
- package/src/@core/layouts/BlankLayoutWithAppBar.js +0 -51
- package/src/@core/layouts/HorizontalLayout.jsx +0 -151
- package/src/@core/layouts/Layout.js +0 -39
- package/src/@core/layouts/VerticalLayout.jsx +0 -124
- package/src/@core/layouts/components/blank-layout-with-appBar/index.js +0 -115
- package/src/@core/layouts/components/horizontal/app-bar-content/index.js +0 -67
- package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +0 -352
- package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +0 -21
- package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +0 -195
- package/src/@core/layouts/components/horizontal/navigation/index.js +0 -31
- package/src/@core/layouts/components/shared-components/LanguageDropdown.js +0 -96
- package/src/@core/layouts/components/shared-components/ModeToggler.js +0 -32
- package/src/@core/layouts/components/shared-components/NotificationDropdown.js +0 -226
- package/src/@core/layouts/components/shared-components/UserDropdown.js +0 -177
- package/src/@core/layouts/components/shared-components/footer/FooterContent.js +0 -46
- package/src/@core/layouts/components/shared-components/footer/index.js +0 -61
- package/src/@core/layouts/components/vertical/appBar/index.js +0 -74
- package/src/@core/layouts/components/vertical/navigation/Drawer.js +0 -122
- package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +0 -435
- package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +0 -180
- package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +0 -26
- package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +0 -258
- package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +0 -102
- package/src/@core/layouts/components/vertical/navigation/index.js +0 -169
- package/src/@core/layouts/utils.js +0 -69
- package/src/@core/styles/Table.module.css +0 -93
- package/src/@core/styles/horizontal/menuItemStyles.js +0 -100
- package/src/@core/styles/horizontal/menuRootStyles.js +0 -19
- package/src/@core/styles/libs/fullcalendar/index.js +0 -461
- package/src/@core/styles/libs/keen-slider/index.js +0 -111
- package/src/@core/styles/libs/react-apexcharts/index.js +0 -107
- package/src/@core/styles/libs/react-cleave/index.js +0 -33
- package/src/@core/styles/libs/react-credit-cards/index.js +0 -11
- package/src/@core/styles/libs/react-datepicker/index.js +0 -388
- package/src/@core/styles/libs/react-draft-wysiwyg/index.js +0 -144
- package/src/@core/styles/libs/react-dropzone/index.js +0 -76
- package/src/@core/styles/libs/react-hot-toast/index.js +0 -37
- package/src/@core/styles/libs/recharts/index.js +0 -47
- package/src/@core/styles/stepper.js +0 -103
- package/src/@core/styles/vertical/menuItemStyles.js +0 -138
- package/src/@core/styles/vertical/menuSectionStyles.js +0 -54
- package/src/@core/styles/vertical/navigationCustomStyles.js +0 -62
- package/src/@core/svg/ContentCompact.jsx +0 -17
- package/src/@core/svg/ContentWide.jsx +0 -17
- package/src/@core/svg/DirectionLtr.jsx +0 -93
- package/src/@core/svg/DirectionRtl.jsx +0 -93
- package/src/@core/svg/LayoutCollapsed.jsx +0 -59
- package/src/@core/svg/LayoutHorizontal.jsx +0 -42
- package/src/@core/svg/LayoutVertical.jsx +0 -59
- package/src/@core/svg/Logo.jsx +0 -76
- package/src/@core/svg/SkinBordered.jsx +0 -54
- package/src/@core/svg/SkinDefault.jsx +0 -59
- package/src/@core/tailwind/plugin.js +0 -78
- package/src/@core/theme/ThemeComponent.js +0 -63
- package/src/@core/theme/ThemeOptions.js +0 -71
- package/src/@core/theme/breakpoints/index.js +0 -11
- package/src/@core/theme/colorSchemes.js +0 -326
- package/src/@core/theme/customShadows.js +0 -11
- package/src/@core/theme/globalStyles.js +0 -81
- package/src/@core/theme/index.js +0 -42
- package/src/@core/theme/overrides/accordion.js +0 -51
- package/src/@core/theme/overrides/accordion.jsx +0 -85
- package/src/@core/theme/overrides/alerts.js +0 -110
- package/src/@core/theme/overrides/alerts.jsx +0 -180
- package/src/@core/theme/overrides/autocomplete.js +0 -14
- package/src/@core/theme/overrides/autocomplete.jsx +0 -68
- package/src/@core/theme/overrides/avatar.js +0 -38
- package/src/@core/theme/overrides/avatars.js +0 -27
- package/src/@core/theme/overrides/backdrop.js +0 -22
- package/src/@core/theme/overrides/badges.js +0 -16
- package/src/@core/theme/overrides/breadcrumbs.js +0 -11
- package/src/@core/theme/overrides/button-group.js +0 -84
- package/src/@core/theme/overrides/button.js +0 -93
- package/src/@core/theme/overrides/buttonGroup.js +0 -9
- package/src/@core/theme/overrides/card.js +0 -83
- package/src/@core/theme/overrides/checkbox.jsx +0 -95
- package/src/@core/theme/overrides/chip.js +0 -72
- package/src/@core/theme/overrides/dataGrid.js +0 -114
- package/src/@core/theme/overrides/dateTimePicker.js +0 -65
- package/src/@core/theme/overrides/dialog.js +0 -120
- package/src/@core/theme/overrides/divider.js +0 -13
- package/src/@core/theme/overrides/drawer.js +0 -20
- package/src/@core/theme/overrides/fab.js +0 -13
- package/src/@core/theme/overrides/form-control-label.js +0 -19
- package/src/@core/theme/overrides/icon-button.js +0 -145
- package/src/@core/theme/overrides/index.js +0 -103
- package/src/@core/theme/overrides/input.js +0 -72
- package/src/@core/theme/overrides/link.js +0 -9
- package/src/@core/theme/overrides/list.js +0 -44
- package/src/@core/theme/overrides/menu.js +0 -25
- package/src/@core/theme/overrides/pagination.js +0 -41
- package/src/@core/theme/overrides/paper.js +0 -9
- package/src/@core/theme/overrides/popover.js +0 -16
- package/src/@core/theme/overrides/progress.js +0 -38
- package/src/@core/theme/overrides/radio.jsx +0 -80
- package/src/@core/theme/overrides/rating.js +0 -16
- package/src/@core/theme/overrides/rating.jsx +0 -32
- package/src/@core/theme/overrides/select.js +0 -19
- package/src/@core/theme/overrides/select.jsx +0 -52
- package/src/@core/theme/overrides/slider.js +0 -97
- package/src/@core/theme/overrides/snackbar.js +0 -19
- package/src/@core/theme/overrides/switch.js +0 -73
- package/src/@core/theme/overrides/switches.js +0 -25
- package/src/@core/theme/overrides/table-pagination.js +0 -39
- package/src/@core/theme/overrides/table.js +0 -81
- package/src/@core/theme/overrides/tabs.js +0 -30
- package/src/@core/theme/overrides/timeline.js +0 -80
- package/src/@core/theme/overrides/toggle-button.js +0 -33
- package/src/@core/theme/overrides/toggleButton.js +0 -16
- package/src/@core/theme/overrides/tooltip.js +0 -21
- package/src/@core/theme/overrides/typography.js +0 -13
- package/src/@core/theme/palette/index.js +0 -107
- package/src/@core/theme/shadows/index.js +0 -61
- package/src/@core/theme/shadows.js +0 -12
- package/src/@core/theme/spacing/index.js +0 -3
- package/src/@core/theme/spacing.js +0 -5
- package/src/@core/theme/typography/index.js +0 -65
- package/src/@core/theme/typography.js +0 -84
- package/src/@core/utils/create-emotion-cache.js +0 -5
- package/src/@core/utils/hex-to-rgba.js +0 -11
- package/src/@core/utils/serverHelpers.js +0 -45
- package/src/@menu/components/RouterLink.jsx +0 -18
- package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +0 -88
- package/src/@menu/components/horizontal-menu/Menu.jsx +0 -83
- package/src/@menu/components/horizontal-menu/MenuButton.jsx +0 -100
- package/src/@menu/components/horizontal-menu/MenuItem.jsx +0 -183
- package/src/@menu/components/horizontal-menu/SubMenu.jsx +0 -418
- package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +0 -41
- package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +0 -20
- package/src/@menu/components/vertical-menu/Menu.jsx +0 -161
- package/src/@menu/components/vertical-menu/MenuButton.jsx +0 -95
- package/src/@menu/components/vertical-menu/MenuItem.jsx +0 -180
- package/src/@menu/components/vertical-menu/MenuSection.jsx +0 -124
- package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +0 -70
- package/src/@menu/components/vertical-menu/NavHeader.jsx +0 -39
- package/src/@menu/components/vertical-menu/SubMenu.jsx +0 -420
- package/src/@menu/components/vertical-menu/SubMenuContent.jsx +0 -101
- package/src/@menu/components/vertical-menu/VerticalNav.jsx +0 -216
- package/src/@menu/contexts/horizontalNavContext.jsx +0 -29
- package/src/@menu/contexts/verticalNavContext.jsx +0 -65
- package/src/@menu/defaultConfigs.js +0 -12
- package/src/@menu/hooks/useHorizontalMenu.jsx +0 -19
- package/src/@menu/hooks/useHorizontalNav.jsx +0 -19
- package/src/@menu/hooks/useMediaQuery.jsx +0 -29
- package/src/@menu/hooks/useVerticalMenu.jsx +0 -19
- package/src/@menu/hooks/useVerticalNav.jsx +0 -19
- package/src/@menu/horizontal-menu/index.jsx +0 -8
- package/src/@menu/styles/StyledBackdrop.jsx +0 -15
- package/src/@menu/styles/StyledMenuIcon.jsx +0 -12
- package/src/@menu/styles/StyledMenuLabel.jsx +0 -16
- package/src/@menu/styles/StyledMenuPrefix.jsx +0 -10
- package/src/@menu/styles/StyledMenuSectionLabel.jsx +0 -21
- package/src/@menu/styles/StyledMenuSuffix.jsx +0 -10
- package/src/@menu/styles/StyledSubMenuContent.jsx +0 -43
- package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +0 -13
- package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +0 -26
- package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +0 -11
- package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +0 -33
- package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +0 -18
- package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +0 -10
- package/src/@menu/styles/horizontal/horizontalUl.module.css +0 -15
- package/src/@menu/styles/styles.module.css +0 -5
- package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +0 -16
- package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +0 -28
- package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +0 -23
- package/src/@menu/styles/vertical/StyledVerticalNav.jsx +0 -67
- package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +0 -15
- package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +0 -23
- package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +0 -25
- package/src/@menu/styles/vertical/verticalNavBgImage.module.css +0 -10
- package/src/@menu/svg/ChevronRight.jsx +0 -9
- package/src/@menu/svg/Close.jsx +0 -12
- package/src/@menu/svg/RadioCircle.jsx +0 -12
- package/src/@menu/svg/RadioCircleMarked.jsx +0 -13
- package/src/@menu/utils/menuClasses.js +0 -44
- package/src/@menu/utils/menuUtils.jsx +0 -145
- package/src/@menu/vertical-menu/index.jsx +0 -11
- package/src/configs/acl.js +0 -115
- package/src/configs/auth.js +0 -5
- package/src/configs/aws-exports.js +0 -30
- package/src/configs/firebase.js +0 -25
- package/src/configs/i18n.js +0 -34
- package/src/configs/primaryColorConfig.js +0 -35
- package/src/configs/themeConfig.js +0 -44
- package/src/layouts/UserLayout.js +0 -94
- package/src/layouts/UserThemeOptions.js +0 -191
- package/src/layouts/components/Direction.js +0 -30
- package/src/layouts/components/HtmlTooltip.js +0 -15
- package/src/layouts/components/Translations.js +0 -11
- package/src/layouts/components/UserDropdown.js +0 -217
- package/src/layouts/components/UserIcon.js +0 -40
- package/src/layouts/components/acl/Can.js +0 -6
- package/src/layouts/components/acl/CanViewNavGroup.js +0 -36
- package/src/layouts/components/acl/CanViewNavLink.js +0 -17
- package/src/layouts/components/acl/CanViewNavSectionTitle.js +0 -17
- package/src/layouts/components/horizontal/AppBarContent.js +0 -39
- package/src/layouts/components/horizontal/ServerSideNavItems.js +0 -44
- package/src/layouts/components/mui/StepperComps.js +0 -55
- package/src/layouts/components/vertical/AppBarContent.js +0 -35
- package/src/layouts/components/vertical/ServerSideNavItems.js +0 -44
- package/src/libs/ApexCharts.jsx +0 -5
- package/src/libs/ReactPlayer.jsx +0 -5
- package/src/libs/Recharts.jsx +0 -4
- package/src/libs/auth.js +0 -124
- package/src/libs/styles/AppFullCalendar.js +0 -505
- package/src/libs/styles/AppKeenSlider.js +0 -116
- package/src/libs/styles/AppReactApexCharts.jsx +0 -110
- package/src/libs/styles/AppReactDatepicker.jsx +0 -470
- package/src/libs/styles/AppReactDropzone.js +0 -76
- package/src/libs/styles/AppReactToastify.jsx +0 -108
- package/src/libs/styles/AppRecharts.js +0 -55
- package/src/libs/styles/inputOtp.module.css +0 -39
- package/src/libs/styles/tiptapEditor.css +0 -72
- package/src/navigation/horizontal/index.js +0 -246
- package/src/navigation/vertical/index.js +0 -253
- package/src/pages/401.js +0 -70
- package/src/pages/404.js +0 -67
- package/src/pages/500.js +0 -68
- package/src/pages/[slug].js +0 -115
- package/src/pages/_document.js +0 -72
- package/src/pages/api/navigation/regenerate-registry.js +0 -116
- package/src/pages/api/navigation/save.js +0 -218
- package/src/pages/authModule/acl/index.js +0 -48
- package/src/pages/authModule/forgot-password/index.js +0 -228
- package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +0 -392
- package/src/pages/authModule/permissions/rolePermissions/index.js +0 -343
- package/src/pages/authModule/permissions/systemPermissions/index.js +0 -354
- package/src/pages/authModule/privacy/index.js +0 -721
- package/src/pages/authModule/users/index.js +0 -210
- package/src/pages/login/index.js +0 -328
- package/src/pages/mainHome/index.js +0 -181
- package/src/views/builder/inspector/definitions/cell/main.js +0 -4
- package/src/views/builder/inspector/definitions/column/main.js +0 -9
- package/src/views/builder/inspector/definitions/column-group/main.js +0 -18
- package/src/views/builder/inspector/definitions/header-cell/main.js +0 -5
- package/src/views/builder/inspector/definitions/table/main.js +0 -9
- package/src/views/builder/viewer/renderers/CellRenderer.jsx +0 -71
- package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +0 -96
- package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +0 -71
- package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +0 -78
- package/src/views/builder/viewer/renderers/TabRenderer.jsx +0 -82
- package/src/views/builder/viewer/renderers/TableRenderer.jsx +0 -92
- package/src/views/pages/auth/FooterIllustrationsV2.js +0 -40
- package/src/views/pages/misc/FooterIllustrations.js +0 -47
- package/src/views/pages/misc/muiTable/CustomPagination.js +0 -34
- package/src/views/pages/users/UserManageDialog.js +0 -283
- package/src/views/pages/users/UserViewPage.js +0 -199
- package/src/views/users/AddUserNameDialog.js +0 -162
- package/src/views/users/ContactManage.js +0 -449
- package/src/views/users/ResetPasswordDialog.js +0 -242
|
@@ -4,75 +4,49 @@ import { resolveURL, getAccessToken } from './config'
|
|
|
4
4
|
import toast from 'react-hot-toast'
|
|
5
5
|
|
|
6
6
|
export default async function PostService(endpoint, showToast, data, params) {
|
|
7
|
-
const accessToken = getAccessToken()
|
|
8
7
|
|
|
9
8
|
|
|
10
|
-
let response = { status: 'Error', message: '' }
|
|
11
|
-
let result = null
|
|
12
|
-
let currentParams = {
|
|
13
|
-
...params,
|
|
14
|
-
...(endpoint.DataType == DataTypes.Params ? { ...data } : {})
|
|
15
|
-
}
|
|
16
|
-
let currnetData = endpoint.DataType == DataTypes.Form || endpoint.DataType == DataTypes.Body ? data : {}
|
|
17
|
-
|
|
18
|
-
if (!data) return
|
|
19
|
-
const url = resolveURL(endpoint)
|
|
20
|
-
|
|
21
|
-
const axiosConfig = {
|
|
22
|
-
method: 'post',
|
|
23
|
-
headers: {
|
|
24
|
-
Authorization: `Bearer ${accessToken}`,
|
|
25
|
-
'Content-Type': endpoint.ContentType
|
|
26
|
-
},
|
|
27
|
-
params: {
|
|
28
|
-
...currentParams
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
9
|
try {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
result = r.data
|
|
36
|
-
response = {
|
|
37
|
-
status: 'Success',
|
|
38
|
-
message: r.data.message ? r.data.message : 'تم الحفظ بنجاح'
|
|
39
|
-
}
|
|
40
|
-
})
|
|
41
|
-
.catch(r => {
|
|
42
|
-
if (r.response && r.response.status == 400) {
|
|
43
|
-
response = {
|
|
44
|
-
status: 'Error',
|
|
45
|
-
message: typeof r.response.data == 'string' ? r.response.data : r.response.data.title
|
|
46
|
-
// message: "حدث خطأ اثناء الحفظ",
|
|
47
|
-
}
|
|
48
|
-
} else if (r.response && (r.response.status == 401 || r.response.status == 403)) {
|
|
49
|
-
response = {
|
|
50
|
-
status: 'Error',
|
|
51
|
-
message: 'غير مخول'
|
|
52
|
-
}
|
|
53
|
-
} else {
|
|
10
|
+
const accessToken = getAccessToken()
|
|
11
|
+
const url = resolveURL(endpoint)
|
|
54
12
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
})
|
|
61
|
-
} catch (error) {
|
|
62
|
-
response = {
|
|
63
|
-
status: 'Error',
|
|
64
|
-
message: 'حدث خطأ في الخادم'
|
|
13
|
+
const currentParams = {
|
|
14
|
+
...params,
|
|
15
|
+
...(endpoint.DataType === DataTypes.Params ? { ...data } : {}),
|
|
65
16
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
17
|
+
const requestData =
|
|
18
|
+
endpoint.DataType === DataTypes.Form || endpoint.DataType === DataTypes.Body
|
|
19
|
+
? data
|
|
20
|
+
: {}
|
|
21
|
+
|
|
22
|
+
const r = await Axios.post(url, requestData, {
|
|
23
|
+
headers: {
|
|
24
|
+
Authorization: `Bearer ${accessToken}`,
|
|
25
|
+
'Content-Type': endpoint.ContentType,
|
|
26
|
+
},
|
|
27
|
+
params: currentParams,
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
if (showToast) {
|
|
31
|
+
toast.success(r.data?.message || 'تم الحفظ بنجاح')
|
|
74
32
|
}
|
|
33
|
+
return r.data
|
|
34
|
+
|
|
35
|
+
} catch (err) {
|
|
36
|
+
console.log(err)
|
|
37
|
+
const message = resolveErrorMessage(err)
|
|
38
|
+
toast.error(message)
|
|
39
|
+
return null
|
|
75
40
|
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function resolveErrorMessage(err) {
|
|
44
|
+
const status = err?.response?.status
|
|
45
|
+
const data = err?.response?.data
|
|
76
46
|
|
|
77
|
-
return
|
|
47
|
+
if (status === 400) return typeof data === 'string' ? data : data?.title || 'طلب غير صحيح'
|
|
48
|
+
if (status === 401 || status === 403) return 'غير مخول'
|
|
49
|
+
if (status >= 500) return 'حدث خطأ في الخادم'
|
|
50
|
+
if (err?.message) return err.message
|
|
51
|
+
return 'حدث خطأ في الاتصال مع الخادم'
|
|
78
52
|
}
|
|
@@ -4,76 +4,50 @@ import { resolveURL, getAccessToken } from './config'
|
|
|
4
4
|
import toast from 'react-hot-toast'
|
|
5
5
|
|
|
6
6
|
export default async function UpdateService(endpoint, showToast, data, params, urlExtra = '') {
|
|
7
|
-
const accessToken = getAccessToken()
|
|
8
|
-
let response = { status: 'Error', message: '' }
|
|
9
|
-
let result = null
|
|
10
|
-
let currentParams = {
|
|
11
|
-
...params,
|
|
12
|
-
...(endpoint.DataType == DataTypes.Params ? { ...data } : {})
|
|
13
|
-
}
|
|
14
|
-
let currnetData =
|
|
15
|
-
endpoint.DataType == DataTypes.Form
|
|
16
|
-
? data
|
|
17
|
-
: {
|
|
18
|
-
...(endpoint.DataType == DataTypes.Body ? { ...data } : {})
|
|
19
|
-
}
|
|
20
|
-
if (!data) return
|
|
21
|
-
const url = resolveURL(endpoint) + urlExtra
|
|
22
|
-
|
|
23
|
-
const axiosConfig = {
|
|
24
|
-
method: 'put',
|
|
25
|
-
headers: {
|
|
26
|
-
Authorization: `Bearer ${accessToken}`,
|
|
27
|
-
'Content-Type': endpoint.ContentType
|
|
28
|
-
},
|
|
29
|
-
params: {
|
|
30
|
-
...currentParams
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
7
|
|
|
34
8
|
try {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
result = r.data
|
|
38
|
-
response = {
|
|
39
|
-
status: 'Success',
|
|
40
|
-
message: r.data.message ? r.data.message : 'تم الحفظ بنجاح'
|
|
41
|
-
}
|
|
42
|
-
})
|
|
43
|
-
.catch(r => {
|
|
44
|
-
|
|
45
|
-
if (r.response && r.response.status == 400) {
|
|
46
|
-
response = {
|
|
47
|
-
status: 'Error',
|
|
48
|
-
message: typeof r.response.data == 'string' ? r.response.data : r.response.data.title
|
|
49
|
-
// message: "حدث خطأ اثناء الحفظ",
|
|
50
|
-
}
|
|
51
|
-
} else if (r.response && (r.response.status == 401 || r.response.status == 403)) {
|
|
52
|
-
response = {
|
|
53
|
-
status: 'Error',
|
|
54
|
-
message: 'غير مخول'
|
|
55
|
-
}
|
|
56
|
-
} else {
|
|
9
|
+
const accessToken = getAccessToken()
|
|
10
|
+
const url = resolveURL(endpoint) + (urlExtra || '')
|
|
57
11
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
} catch (error) {
|
|
65
|
-
response = {
|
|
66
|
-
status: 'Error',
|
|
67
|
-
message: 'حدث خطأ في الخادم'
|
|
12
|
+
const currentParams = {
|
|
13
|
+
...params,
|
|
14
|
+
...(endpoint.DataType === DataTypes.Params ? { ...data } : {}),
|
|
68
15
|
}
|
|
69
|
-
|
|
16
|
+
const requestData =
|
|
17
|
+
endpoint.DataType === DataTypes.Form
|
|
18
|
+
? data
|
|
19
|
+
: endpoint.DataType === DataTypes.Body
|
|
20
|
+
? { ...data }
|
|
21
|
+
: {}
|
|
22
|
+
|
|
23
|
+
const r = await Axios.put(url, requestData, {
|
|
24
|
+
headers: {
|
|
25
|
+
Authorization: `Bearer ${accessToken}`,
|
|
26
|
+
'Content-Type': endpoint.ContentType,
|
|
27
|
+
},
|
|
28
|
+
params: currentParams,
|
|
29
|
+
})
|
|
30
|
+
|
|
70
31
|
if (showToast) {
|
|
71
|
-
|
|
72
|
-
toast.success(response.message)
|
|
73
|
-
} else {
|
|
74
|
-
toast.error(response.message)
|
|
75
|
-
}
|
|
32
|
+
toast.success(r.data?.message || 'تم الحفظ بنجاح')
|
|
76
33
|
}
|
|
34
|
+
return r.data
|
|
35
|
+
|
|
36
|
+
} catch (err) {
|
|
37
|
+
console.log(err)
|
|
38
|
+
const message = resolveErrorMessage(err)
|
|
39
|
+
toast.error(message)
|
|
40
|
+
return null
|
|
77
41
|
}
|
|
78
|
-
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function resolveErrorMessage(err) {
|
|
45
|
+
const status = err?.response?.status
|
|
46
|
+
const data = err?.response?.data
|
|
47
|
+
|
|
48
|
+
if (status === 400) return typeof data === 'string' ? data : data?.title || 'طلب غير صحيح'
|
|
49
|
+
if (status === 401 || status === 403) return 'غير مخول'
|
|
50
|
+
if (status >= 500) return 'حدث خطأ في الخادم'
|
|
51
|
+
if (err?.message) return err.message
|
|
52
|
+
return 'حدث خطأ في الاتصال مع الخادم'
|
|
79
53
|
}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { executeJSCode } from './jsExecutor'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Execute an action and set
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Execute an action and optionally set its result onto the data state.
|
|
5
|
+
*
|
|
6
|
+
* context shape:
|
|
7
|
+
* form, data, setData, dataRef, reportRefs
|
|
8
|
+
* (setData may also be provided as the legacy 3rd argument for backward compat)
|
|
9
|
+
*
|
|
10
|
+
* @param {object} action - The action to execute
|
|
11
|
+
* @param {object} context - Execution context
|
|
12
|
+
* @param {function} [setData] - Legacy: state setter; prefer context.setData
|
|
8
13
|
*/
|
|
9
14
|
export async function executeAction(action, context, setData) {
|
|
10
15
|
if (!action || !action.code) {
|
|
@@ -12,27 +17,47 @@ export async function executeAction(action, context, setData) {
|
|
|
12
17
|
return
|
|
13
18
|
}
|
|
14
19
|
|
|
20
|
+
// Resolve setData: prefer what's already in context, fall back to the explicit arg
|
|
21
|
+
const effectiveSetData = context.setData || setData || (() => {})
|
|
22
|
+
|
|
23
|
+
// Build the full context that jsExecutor expects
|
|
24
|
+
const fullContext = {
|
|
25
|
+
form: context.form ?? {},
|
|
26
|
+
data: context.data ?? {},
|
|
27
|
+
dataRef: context.dataRef ?? {},
|
|
28
|
+
reportRefs: context.reportRefs ?? {},
|
|
29
|
+
openDialog: context.openDialog ?? (() => {}),
|
|
30
|
+
closeDialog: context.closeDialog ?? (() => {}),
|
|
31
|
+
// Thread parent-page stores so Calculation can access `page.data` etc.
|
|
32
|
+
pageData: context.pageData,
|
|
33
|
+
pageSetData: context.pageSetData,
|
|
34
|
+
pageDataRef: context.pageDataRef,
|
|
35
|
+
pageReportRefs: context.pageReportRefs,
|
|
36
|
+
...context,
|
|
37
|
+
setData: effectiveSetData,
|
|
38
|
+
}
|
|
39
|
+
|
|
15
40
|
try {
|
|
16
|
-
|
|
17
|
-
const result = await executeJSCode(action.code, context)
|
|
41
|
+
const result = await executeJSCode(action.code, fullContext)
|
|
18
42
|
|
|
19
|
-
// Parse target path and set the result
|
|
20
43
|
if (action.targetPath) {
|
|
21
|
-
setDataAtPath(
|
|
44
|
+
setDataAtPath(effectiveSetData, action.targetPath, result)
|
|
22
45
|
}
|
|
46
|
+
|
|
47
|
+
return result
|
|
23
48
|
} catch (e) {
|
|
24
49
|
console.error(`Action execution error [${action.name}]:`, e)
|
|
25
50
|
}
|
|
26
51
|
}
|
|
27
52
|
|
|
28
53
|
/**
|
|
29
|
-
* Set value at a nested path in the data object
|
|
30
|
-
*
|
|
31
|
-
* @param {
|
|
32
|
-
* @param {
|
|
54
|
+
* Set value at a nested path in the data object.
|
|
55
|
+
*
|
|
56
|
+
* @param {function} setData - State setter
|
|
57
|
+
* @param {string} path - Dot-notation path (e.g. 'data.d1' or 'd1')
|
|
58
|
+
* @param {any} value - Value to set
|
|
33
59
|
*/
|
|
34
60
|
function setDataAtPath(setData, path, value) {
|
|
35
|
-
// Remove 'data.' prefix if present
|
|
36
61
|
const cleanPath = path.startsWith('data.') ? path.substring(5) : path
|
|
37
62
|
|
|
38
63
|
setData(prev => {
|
|
@@ -40,34 +65,125 @@ function setDataAtPath(setData, path, value) {
|
|
|
40
65
|
const keys = cleanPath.split('.')
|
|
41
66
|
let current = newData
|
|
42
67
|
|
|
43
|
-
// Navigate to the parent of the target key
|
|
44
68
|
for (let i = 0; i < keys.length - 1; i++) {
|
|
45
|
-
if (!current[keys[i]]) {
|
|
46
|
-
current[keys[i]] = {}
|
|
47
|
-
}
|
|
69
|
+
if (!current[keys[i]]) current[keys[i]] = {}
|
|
48
70
|
current = current[keys[i]]
|
|
49
71
|
}
|
|
50
72
|
|
|
51
|
-
// Set the final value
|
|
52
73
|
current[keys[keys.length - 1]] = value
|
|
53
|
-
|
|
54
74
|
return newData
|
|
55
75
|
})
|
|
56
76
|
}
|
|
57
77
|
|
|
58
78
|
/**
|
|
59
|
-
* Execute all actions of a specific event type
|
|
60
|
-
*
|
|
61
|
-
* @param {
|
|
62
|
-
* @param {
|
|
63
|
-
* @param {
|
|
79
|
+
* Execute all actions of a specific event type.
|
|
80
|
+
*
|
|
81
|
+
* @param {array} actions - All actions from schema
|
|
82
|
+
* @param {string} eventType - Event type to filter ('onLoad', 'onSubmit', …)
|
|
83
|
+
* @param {object} context - Execution context (see executeAction)
|
|
84
|
+
* @param {function} [setData] - Legacy 4th arg for backward compat
|
|
64
85
|
*/
|
|
65
86
|
export async function executeActionsByEvent(actions, eventType, context, setData) {
|
|
66
87
|
if (!actions || !Array.isArray(actions)) return
|
|
67
88
|
|
|
68
89
|
const matchingActions = actions.filter(action => action.event === eventType)
|
|
69
90
|
|
|
91
|
+
let lastResult
|
|
70
92
|
for (const action of matchingActions) {
|
|
71
|
-
await executeAction(action, context, setData)
|
|
93
|
+
lastResult = await executeAction(action, context, setData)
|
|
94
|
+
}
|
|
95
|
+
return lastResult
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Convenience helper for KPI / data-visualisation renderers.
|
|
100
|
+
*
|
|
101
|
+
* Reads `node.props.actions[eventName]` and executes the action,
|
|
102
|
+
* injecting `clickVars` into the Calculation's lexical scope so the
|
|
103
|
+
* user can reference them directly by name:
|
|
104
|
+
*
|
|
105
|
+
* async function Calculation(form, data, setData, ...) {
|
|
106
|
+
* // clickedItem, clickedValue, clickedLabel, clickedIndex, etc.
|
|
107
|
+
* setData(prev => ({ ...prev, selected: clickedItem }))
|
|
108
|
+
* openDialog('detail', { data: { row: clickedItem } })
|
|
109
|
+
* showToast('Clicked: ' + clickedLabel, 'info')
|
|
110
|
+
* }
|
|
111
|
+
*
|
|
112
|
+
* @param {object} node - Builder node (has node.props.actions)
|
|
113
|
+
* @param {object} viewerContext - Full viewerContext from the renderer
|
|
114
|
+
* @param {string} eventName - 'onDataClick' | 'onCellClick' | 'onItemClick' | etc.
|
|
115
|
+
* @param {object} [clickVars] - Click-specific variables to inject (clickedItem, clickedValue, …)
|
|
116
|
+
*/
|
|
117
|
+
export async function runKpiAction(node, viewerContext, eventName, clickVars = {}) {
|
|
118
|
+
const action = node.props?.actions?.[eventName]
|
|
119
|
+
if (!action?.code) return
|
|
120
|
+
|
|
121
|
+
const {
|
|
122
|
+
form, data, setData, dataRef, reportRefs,
|
|
123
|
+
openDialog, closeDialog,
|
|
124
|
+
pageData, pageSetData, pageDataRef, pageReportRefs,
|
|
125
|
+
} = viewerContext ?? {}
|
|
126
|
+
|
|
127
|
+
const context = {
|
|
128
|
+
form: form ?? {},
|
|
129
|
+
data: data ?? {},
|
|
130
|
+
setData: setData ?? (() => {}),
|
|
131
|
+
dataRef: dataRef?.current ?? dataRef ?? {},
|
|
132
|
+
reportRefs: reportRefs ?? {},
|
|
133
|
+
openDialog: openDialog ?? (() => {}),
|
|
134
|
+
closeDialog: closeDialog ?? (() => {}),
|
|
135
|
+
pageData, pageSetData, pageDataRef, pageReportRefs,
|
|
136
|
+
extraVars: clickVars,
|
|
72
137
|
}
|
|
138
|
+
|
|
139
|
+
return executeAction(action, context)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Convenience helper for field/input renderers.
|
|
144
|
+
*
|
|
145
|
+
* Reads the node's actions, builds the context from viewerContext, and fires
|
|
146
|
+
* all handlers registered for `eventName`.
|
|
147
|
+
*
|
|
148
|
+
* `newValue` is injected into the Calculation's lexical scope so action code
|
|
149
|
+
* can reference it directly without digging through form state:
|
|
150
|
+
*
|
|
151
|
+
* async function Calculation(form, data, setData, ...) {
|
|
152
|
+
* if (newValue === 'active') setData(prev => ({ ...prev, showExtra: true }))
|
|
153
|
+
* }
|
|
154
|
+
*
|
|
155
|
+
* @param {object} node - Builder node (has node.props.actions)
|
|
156
|
+
* @param {object} viewerContext - Full viewerContext from the renderer
|
|
157
|
+
* @param {string} eventName - 'onChange' | 'onBlur' | etc.
|
|
158
|
+
* @param {any} newValue - The new field value, available as `newValue` in action code
|
|
159
|
+
*/
|
|
160
|
+
export async function runFieldAction(node, viewerContext, eventName, newValue) {
|
|
161
|
+
const propsActions = node.props?.actions ?? {}
|
|
162
|
+
|
|
163
|
+
const actions = Object.entries(propsActions)
|
|
164
|
+
.filter(([, v]) => v?.actionType === 'custom' && v?.code)
|
|
165
|
+
.map(([event, v]) => ({ event, code: v.code, name: event }))
|
|
166
|
+
|
|
167
|
+
if (!actions.length) return
|
|
168
|
+
|
|
169
|
+
const {
|
|
170
|
+
form, data, setData, dataRef, reportRefs,
|
|
171
|
+
openDialog, closeDialog,
|
|
172
|
+
pageData, pageSetData, pageDataRef, pageReportRefs,
|
|
173
|
+
} = viewerContext
|
|
174
|
+
|
|
175
|
+
const context = {
|
|
176
|
+
form,
|
|
177
|
+
data,
|
|
178
|
+
setData: setData ?? (() => {}),
|
|
179
|
+
dataRef: dataRef?.current ?? dataRef ?? {},
|
|
180
|
+
reportRefs: reportRefs ?? {},
|
|
181
|
+
openDialog: openDialog ?? (() => {}),
|
|
182
|
+
closeDialog: closeDialog ?? (() => {}),
|
|
183
|
+
pageData, pageSetData, pageDataRef, pageReportRefs,
|
|
184
|
+
// Inject newValue into the Calculation's lexical scope via extraVars
|
|
185
|
+
extraVars: { newValue },
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return executeActionsByEvent(actions, eventName, context)
|
|
73
189
|
}
|
|
@@ -61,6 +61,51 @@ function cloneNode(node) {
|
|
|
61
61
|
return cloned
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
// ── System clipboard helpers (cross-tab / cross-browser) ─────────────────────
|
|
65
|
+
//
|
|
66
|
+
// Nodes are serialised as: { "__rbfb": 1, "node": <schema node> }
|
|
67
|
+
// The sentinel lets us reject arbitrary text the user may have copied elsewhere.
|
|
68
|
+
//
|
|
69
|
+
// writeNodeToClipboard — async, silently swallows permission errors
|
|
70
|
+
// readNodeFromClipboard — async, returns node object or null
|
|
71
|
+
//
|
|
72
|
+
const RBFB_MARKER = '__rbfb'
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Serialise a builder node and write it to the system clipboard.
|
|
76
|
+
* Safe to call fire-and-forget: never throws.
|
|
77
|
+
*/
|
|
78
|
+
export function writeNodeToClipboard(node) {
|
|
79
|
+
if (!navigator?.clipboard?.writeText) return Promise.resolve()
|
|
80
|
+
return navigator.clipboard
|
|
81
|
+
.writeText(JSON.stringify({ [RBFB_MARKER]: 1, node }))
|
|
82
|
+
.catch(() => {}) // permission denied or insecure context — ignore silently
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Read a builder node from the system clipboard.
|
|
87
|
+
* Returns the raw node object if the clipboard contains valid builder JSON,
|
|
88
|
+
* or null for any other content / permission denial.
|
|
89
|
+
*/
|
|
90
|
+
export async function readNodeFromClipboard() {
|
|
91
|
+
if (!navigator?.clipboard?.readText) return null
|
|
92
|
+
try {
|
|
93
|
+
const text = await navigator.clipboard.readText()
|
|
94
|
+
const obj = JSON.parse(text)
|
|
95
|
+
if (obj && obj[RBFB_MARKER] === 1 && obj.node && typeof obj.node === 'object') {
|
|
96
|
+
return obj.node
|
|
97
|
+
}
|
|
98
|
+
} catch {} // SyntaxError, NotAllowedError, etc.
|
|
99
|
+
return null
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// ── Container types — paste-as-child targets ───────────────────────────────
|
|
103
|
+
export const CONTAINER_TYPES = new Set([
|
|
104
|
+
'container', 'card',
|
|
105
|
+
'wizard', 'wizard-step', 'repeater',
|
|
106
|
+
'widget', 'layout', 'layout-cell', 'dialog'
|
|
107
|
+
])
|
|
108
|
+
|
|
64
109
|
export function duplicateInTree(node, targetId) {
|
|
65
110
|
if (!node.children) return node
|
|
66
111
|
|
|
@@ -82,6 +127,53 @@ export function duplicateInTree(node, targetId) {
|
|
|
82
127
|
}
|
|
83
128
|
}
|
|
84
129
|
|
|
130
|
+
// ── Insert newNode immediately after targetId in the tree ─────────────────
|
|
131
|
+
function insertAfterInTree(node, targetId, newNode) {
|
|
132
|
+
if (!node.children) return node
|
|
133
|
+
|
|
134
|
+
const idx = node.children.findIndex(c => c.id === targetId)
|
|
135
|
+
if (idx !== -1) {
|
|
136
|
+
const next = [...node.children]
|
|
137
|
+
next.splice(idx + 1, 0, newNode)
|
|
138
|
+
return { ...node, children: next }
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return {
|
|
142
|
+
...node,
|
|
143
|
+
children: node.children.map(child => insertAfterInTree(child, targetId, newNode))
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Paste a cloned copy of clipboardNode relative to targetId.
|
|
149
|
+
*
|
|
150
|
+
* - No targetId → append as last child of root
|
|
151
|
+
* - targetId is a container → append as last child of that container
|
|
152
|
+
* - targetId is a leaf → insert as next sibling
|
|
153
|
+
*
|
|
154
|
+
* @param {object} root - Schema root node
|
|
155
|
+
* @param {string|null} targetId - Currently selected node id (or null)
|
|
156
|
+
* @param {object} clipboardNode - The node that was copied
|
|
157
|
+
* @param {boolean} asChild - Force paste-as-child even if target is a leaf
|
|
158
|
+
* @returns {object} - New root node
|
|
159
|
+
*/
|
|
160
|
+
export function pasteIntoTree(root, targetId, clipboardNode, asChild = false) {
|
|
161
|
+
const newNode = cloneNode(clipboardNode)
|
|
162
|
+
|
|
163
|
+
if (!targetId) {
|
|
164
|
+
// No selection — append to root's children
|
|
165
|
+
return { ...root, children: [...(root.children ?? []), newNode] }
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (asChild) {
|
|
169
|
+
// Target is a container — insert as last child
|
|
170
|
+
return insertIntoTree(root, targetId, newNode)
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Target is a leaf — insert as next sibling
|
|
174
|
+
return insertAfterInTree(root, targetId, newNode)
|
|
175
|
+
}
|
|
176
|
+
|
|
85
177
|
function resolveValue(node, name, formData) {
|
|
86
178
|
const expr = node.expressions?.main?.[name]
|
|
87
179
|
if (expr?.type === 'js') {
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared color schema utility for KPI renderers.
|
|
3
|
+
*
|
|
4
|
+
* Supports four coloring modes for item arrays:
|
|
5
|
+
* palette — cycle through the global fallback palette (default)
|
|
6
|
+
* tints — monochromatic tints of a chosen base color
|
|
7
|
+
* data — only use colors that come from the data; no generated fallback
|
|
8
|
+
* custom — user-defined JSON array of hex / rgb strings
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export const DEFAULT_PALETTE = [
|
|
12
|
+
'#1976d2','#9c27b0','#e91e63','#ff9800',
|
|
13
|
+
'#4caf50','#00bcd4','#f44336','#3f51b5',
|
|
14
|
+
'#ff5722','#009688','#8bc34a','#607d8b',
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
// ── Low-level helpers ─────────────────────────────────────────────────────────
|
|
18
|
+
|
|
19
|
+
export function hexToRgb(hex) {
|
|
20
|
+
const h = (hex || '').replace('#', '')
|
|
21
|
+
if (h.length < 6) return [0, 0, 0]
|
|
22
|
+
return [
|
|
23
|
+
parseInt(h.slice(0, 2), 16),
|
|
24
|
+
parseInt(h.slice(2, 4), 16),
|
|
25
|
+
parseInt(h.slice(4, 6), 16),
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Generate `count` tint variants — from 100 % saturation → ~38 % (mixed with white).
|
|
31
|
+
*/
|
|
32
|
+
export function generateTints(baseHex, count = 8) {
|
|
33
|
+
try {
|
|
34
|
+
const [r, g, b] = hexToRgb(baseHex)
|
|
35
|
+
return Array.from({ length: count }, (_, i) => {
|
|
36
|
+
const t = count === 1 ? 0 : (i * 0.62) / (count - 1)
|
|
37
|
+
const mix = v => Math.round(v + (255 - v) * t)
|
|
38
|
+
return `rgb(${mix(r)},${mix(g)},${mix(b)})`
|
|
39
|
+
})
|
|
40
|
+
} catch {
|
|
41
|
+
return DEFAULT_PALETTE.slice(0, count)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// ── Public API ────────────────────────────────────────────────────────────────
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Resolve a colorSchema config object into an ordered color array for `count` items.
|
|
49
|
+
*
|
|
50
|
+
* Returns `null` for 'data' mode — the caller should skip generated colors entirely
|
|
51
|
+
* and rely solely on per-item data colors.
|
|
52
|
+
*
|
|
53
|
+
* @param {object|null} schema { mode, color, customColors }
|
|
54
|
+
* @param {number} count Number of items (used for tint generation)
|
|
55
|
+
* @param {string[]} palette Fallback palette (defaults to DEFAULT_PALETTE)
|
|
56
|
+
* @returns {string[]|null}
|
|
57
|
+
*/
|
|
58
|
+
export function resolveColorSchema(schema, count = 8, palette = DEFAULT_PALETTE) {
|
|
59
|
+
const mode = schema?.mode || 'palette'
|
|
60
|
+
|
|
61
|
+
if (mode === 'tints' && schema?.color) {
|
|
62
|
+
return generateTints(schema.color, count)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (mode === 'custom') {
|
|
66
|
+
try {
|
|
67
|
+
const arr = JSON.parse(schema?.customColors || '[]')
|
|
68
|
+
if (Array.isArray(arr) && arr.length) return arr
|
|
69
|
+
} catch { /* fall through */ }
|
|
70
|
+
return palette
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (mode === 'data') return null // no generated fallback
|
|
74
|
+
|
|
75
|
+
return palette // 'palette' or unknown
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Get the final color for a single item.
|
|
80
|
+
*
|
|
81
|
+
* Priority: dataColor (from data field) → schema-derived color.
|
|
82
|
+
*
|
|
83
|
+
* @param {object|null} schema colorSchema config
|
|
84
|
+
* @param {number} index Item index (for cycling)
|
|
85
|
+
* @param {string|null} dataColor Color already extracted from the data item
|
|
86
|
+
* @param {number} total Total item count
|
|
87
|
+
* @param {string[]} palette Fallback palette
|
|
88
|
+
* @returns {string|undefined}
|
|
89
|
+
*/
|
|
90
|
+
export function schemaColor(schema, index, dataColor, total, palette = DEFAULT_PALETTE) {
|
|
91
|
+
if (dataColor) return dataColor
|
|
92
|
+
const colors = resolveColorSchema(schema, total, palette)
|
|
93
|
+
if (!colors) return undefined // 'data' mode, no data color available
|
|
94
|
+
return colors[index % colors.length]
|
|
95
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves a string to an MUI @mui/icons-material component.
|
|
3
|
+
*
|
|
4
|
+
* Strategy: lazy-load the entire icons barrel once on first call (tree-shaking
|
|
5
|
+
* doesn't help for a dynamic lookup anyway), then cache for the lifetime of
|
|
6
|
+
* the session. Returns null when the name isn't a known icon.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const Icon = resolveIcon('SearchOutlined') // → React component or null
|
|
10
|
+
* const isIcon = isIconName('SearchOutlined') // → true
|
|
11
|
+
* const isIcon = isIconName('$') // → false
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
let _iconModule = null
|
|
15
|
+
|
|
16
|
+
function getIconModule() {
|
|
17
|
+
if (!_iconModule) {
|
|
18
|
+
try {
|
|
19
|
+
// eslint-disable-next-line global-require
|
|
20
|
+
_iconModule = require('@mui/icons-material')
|
|
21
|
+
} catch {
|
|
22
|
+
_iconModule = {}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return _iconModule
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Returns the MUI icon component for `name`, or null if not found.
|
|
30
|
+
* @param {string|null|undefined} name
|
|
31
|
+
* @returns {React.ComponentType|null}
|
|
32
|
+
*/
|
|
33
|
+
export function resolveIcon(name) {
|
|
34
|
+
if (!name || typeof name !== 'string') return null
|
|
35
|
+
const icons = getIconModule()
|
|
36
|
+
return icons[name] ?? null
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Returns true if `value` resolves to a known MUI icon component.
|
|
41
|
+
* Useful to decide whether to render an icon vs plain text in an adornment.
|
|
42
|
+
* @param {string|null|undefined} value
|
|
43
|
+
* @returns {boolean}
|
|
44
|
+
*/
|
|
45
|
+
export function isIconName(value) {
|
|
46
|
+
if (!value || typeof value !== 'string') return false
|
|
47
|
+
// Quick heuristic: icon names always start with an uppercase letter.
|
|
48
|
+
if (!/^[A-Z]/.test(value)) return false
|
|
49
|
+
return !!resolveIcon(value)
|
|
50
|
+
}
|