@asaleh37/ui-base 25.8.1-4 → 25.8.1-7
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/.github/workflows/publish-npm.yml +49 -49
- package/README.md +51 -51
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.map +1 -1
- package/eslint.config.js +29 -29
- package/index.html +13 -13
- package/package.json +120 -120
- package/rollup.config-1748377725725.cjs +34 -34
- package/rollup.config.js +45 -45
- package/src/components/App.tsx +123 -123
- package/src/components/BaseApp.tsx +53 -53
- package/src/components/administration/admin/ChangePasswordPanel.tsx +128 -128
- package/src/components/administration/admin/OrgMemberRoleForm.tsx +83 -83
- package/src/components/administration/admin/OrganizationApplicationModuleGrid.tsx +107 -107
- package/src/components/administration/admin/OrganizationGrid.tsx +118 -118
- package/src/components/administration/admin/OrganizationMemberGrid.tsx +176 -176
- package/src/components/administration/admin/OrganizationMemberRoleGrid.tsx +87 -87
- package/src/components/administration/admin/OrganizationRankGrid.tsx +133 -133
- package/src/components/administration/admin/OrganizationUnitGrid.tsx +143 -143
- package/src/components/administration/admin/OrganizationUnitTypeGrid.tsx +108 -108
- package/src/components/administration/admin/PersonGrid.tsx +361 -361
- package/src/components/administration/admin/RoleAuthoritiesForm.tsx +82 -82
- package/src/components/administration/admin/SystemApplicationAuthorityGrid.tsx +117 -117
- package/src/components/administration/admin/SystemApplicationGrid.tsx +83 -83
- package/src/components/administration/admin/SystemApplicationModuleGrid.tsx +96 -96
- package/src/components/administration/admin/SystemApplicationRoleAuthorityGrid.tsx +75 -75
- package/src/components/administration/admin/SystemApplicationRoleGrid.tsx +116 -116
- package/src/components/administration/dev/AttachmentConfigGrid.tsx +223 -223
- package/src/components/administration/dev/AttachmentGrid.tsx +172 -172
- package/src/components/administration/dev/BluePrintGrid.tsx +129 -129
- package/src/components/administration/dev/DashboardGrid.tsx +173 -173
- package/src/components/administration/dev/DashboardWidgetGrid.tsx +164 -164
- package/src/components/administration/dev/DataQueryGrid.tsx +206 -206
- package/src/components/administration/dev/DataQueryParameterGrid.tsx +191 -191
- package/src/components/administration/dev/DataQueryParametersForm.tsx +84 -84
- package/src/components/administration/dev/DatasourceConnectionGrid.tsx +150 -150
- package/src/components/administration/dev/EntityParameterGrid.tsx +279 -279
- package/src/components/administration/dev/LookupGrid.tsx +120 -120
- package/src/components/administration/dev/MailAttachmentGrid.tsx +155 -155
- package/src/components/administration/dev/MailBodyGrid.tsx +216 -216
- package/src/components/administration/dev/MailNotificationQueueGrid.tsx +245 -245
- package/src/components/administration/dev/MailRecipientGrid.tsx +169 -169
- package/src/components/administration/dev/MailSenderConfigGrid.tsx +478 -478
- package/src/components/administration/dev/MailTemplateGrid.tsx +384 -384
- package/src/components/administration/dev/NotificationGrid.tsx +432 -432
- package/src/components/administration/dev/NotificationQueueGrid.tsx +222 -222
- package/src/components/administration/dev/ReportGrid.tsx +506 -506
- package/src/components/administration/dev/ReportParameterGrid.tsx +186 -186
- package/src/components/administration/dev/ReportParametersForm.tsx +84 -84
- package/src/components/administration/dev/WidgetGrid.tsx +431 -431
- package/src/components/administration/dev/WorkflowDocumentActionGrid.tsx +264 -264
- package/src/components/administration/dev/WorkflowDocumentActionHistoryGrid.tsx +172 -172
- package/src/components/administration/dev/WorkflowDocumentActionMailGrid.tsx +161 -161
- package/src/components/administration/dev/WorkflowDocumentGrid.tsx +377 -377
- package/src/components/administration/dev/WorkflowDocumentMailLogGrid.tsx +218 -218
- package/src/components/administration/dev/WorkflowDocumentStatusGrid.tsx +243 -243
- package/src/components/common/ChangeOrgForm.tsx +81 -81
- package/src/components/common/Home.tsx +43 -43
- package/src/components/common/LanguageSwitcher.tsx +25 -25
- package/src/components/common/LayoutHandlers.tsx +11 -11
- package/src/components/common/LoadingMask.tsx +24 -24
- package/src/components/common/Login.tsx +214 -214
- package/src/components/common/MyNotificationsPanel.tsx +109 -109
- package/src/components/common/NotificationItem.tsx +138 -138
- package/src/components/index.ts +9 -11
- package/src/components/templates/DataEntryTemplates/DataEntryTypes.ts +324 -324
- package/src/components/templates/DataEntryTemplates/DataEntryUtil.ts +248 -248
- package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormAction.tsx +60 -60
- package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementField.tsx +231 -231
- package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementGroup.tsx +106 -106
- package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/CheckBox.tsx +64 -64
- package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/ComboBox.tsx +93 -93
- package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/Datefield.tsx +65 -65
- package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/DatetimeField.tsx +64 -64
- package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/FiltersPanel.tsx +237 -237
- package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/SystemLookupCombobox.tsx +55 -55
- package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/TemplateTextField.tsx +17 -17
- package/src/components/templates/DataEntryTemplates/TemplateDataForm/TemplateForm.tsx +387 -387
- package/src/components/templates/DataEntryTemplates/TemplateDataGrid/DataGridColumnsUtil.tsx +189 -189
- package/src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid.tsx +998 -998
- package/src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridMultiRecordAction.tsx +89 -89
- package/src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridRecordAction.tsx +95 -95
- package/src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridTopBar.tsx +227 -227
- package/src/components/templates/TransferList.tsx +256 -256
- package/src/components/templates/Window/ConfirmationWindow.tsx +55 -55
- package/src/components/templates/attachment/AttachmentCard.tsx +141 -141
- package/src/components/templates/attachment/AttachmentImageViewer.tsx +83 -83
- package/src/components/templates/attachment/AttachmentPanel.tsx +285 -285
- package/src/components/templates/index.ts +33 -33
- package/src/components/templates/report/ExcelReportViewer.tsx +71 -71
- package/src/components/templates/report/ReportViewer.tsx +382 -382
- package/src/components/templates/visuals/DashboardRouteView.tsx +9 -9
- package/src/components/templates/visuals/DashboardViewer.tsx +148 -148
- package/src/components/templates/visuals/WidgetViewer.tsx +198 -198
- package/src/components/templates/visuals/charts/TemplateBarChart.tsx +23 -23
- package/src/components/templates/visuals/charts/TemplateDataCard.tsx +35 -35
- package/src/components/templates/visuals/charts/TemplateGauge.tsx +21 -21
- package/src/components/templates/visuals/charts/TemplateLineChart.tsx +22 -22
- package/src/components/templates/visuals/charts/TemplateLineProgress.tsx +42 -42
- package/src/components/templates/visuals/charts/TemplatePieChart.tsx +24 -24
- package/src/components/templates/workflow/WorkflowDocumentPanel.tsx +606 -606
- package/src/components/templates/workflow/WorkflowDocumentTimeLine.tsx +140 -140
- package/src/components/templates/workflow/WorkflowRouteComponent.tsx +14 -14
- package/src/hooks/UseConfirmationWindow.tsx +54 -54
- package/src/hooks/UseMobile.tsx +13 -13
- package/src/hooks/UseSession.tsx +59 -59
- package/src/hooks/UseWindow.tsx +107 -107
- package/src/hooks/index.ts +12 -7
- package/src/hooks/useApiActions.ts +124 -124
- package/src/hooks/useAxios.tsx +316 -316
- package/src/hooks/useInterval.tsx +23 -23
- package/src/hooks/useLoadingMask.tsx +16 -16
- package/src/hooks/useLookupGridColumn.tsx +35 -35
- package/src/index.ts +4 -4
- package/src/layout/DrawerHeader.tsx +10 -10
- package/src/layout/Layout.tsx +90 -90
- package/src/layout/MainContent.tsx +117 -117
- package/src/layout/MobileDrawer.tsx +103 -103
- package/src/layout/NavigationTree.tsx +298 -298
- package/src/layout/NotificationButton.tsx +207 -207
- package/src/layout/RouteWrapper.tsx +63 -63
- package/src/layout/SideBar.tsx +85 -85
- package/src/layout/TopBar.tsx +289 -289
- package/src/locales/arabic/adminLocalsAr.json +93 -93
- package/src/locales/arabic/common.json +44 -44
- package/src/locales/arabic/devLocalsAr.json +317 -317
- package/src/locales/arabic/index.ts +9 -9
- package/src/locales/english/adminLocalsEn.json +96 -96
- package/src/locales/english/common.json +43 -43
- package/src/locales/english/devLocalsEn.json +318 -318
- package/src/locales/english/index.ts +9 -9
- package/src/locales/i18n.ts +8 -8
- package/src/locales/index.ts +9 -9
- package/src/main.tsx +23 -23
- package/src/navigationItems/Administration/adminNavigationItems.tsx +223 -223
- package/src/navigationItems/Administration/index.tsx +16 -16
- package/src/navigationItems/common/CommonNavigationItems.tsx +12 -12
- package/src/navigationItems/common/index.tsx +7 -7
- package/src/navigationItems/index.tsx +35 -35
- package/src/redux/features/administration/AdministrationStoresMetaData.ts +148 -148
- package/src/redux/features/common/AppInfoSlice.ts +65 -65
- package/src/redux/features/common/AppLayoutSlice.ts +29 -29
- package/src/redux/features/common/CommonStoreSlice.ts +44 -44
- package/src/redux/features/common/LoadingMaskSlice.ts +30 -30
- package/src/redux/features/common/SideBarSlice.ts +27 -27
- package/src/redux/features/common/UserSessionSlice.ts +54 -54
- package/src/redux/store.ts +29 -29
- package/src/routes/administration/adminRoutes.tsx +99 -99
- package/src/routes/administration/devRoutes.tsx +129 -129
- package/src/routes/administration/index.ts +8 -8
- package/src/routes/index.ts +11 -11
- package/src/routes/types/index.ts +6 -6
- package/src/styles/index.css +19 -19
- package/src/types/index.ts +8 -8
- package/src/util/AppUtils.ts +53 -53
- package/src/util/constants.ts +6 -6
- package/src/util/index.ts +2 -2
- package/tsconfig.json +135 -135
- package/vite.config.ts +24 -24
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/hooks/UseMobile.tsx","../src/redux/features/common/AppLayoutSlice.ts","../src/redux/features/common/LoadingMaskSlice.ts","../src/hooks/useLoadingMask.tsx","../src/redux/features/common/UserSessionSlice.ts","../src/hooks/useAxios.tsx","../src/hooks/UseConfirmationWindow.tsx","../src/hooks/UseSession.tsx","../src/hooks/UseWindow.tsx","../src/redux/features/common/CommonStoreSlice.ts","../src/hooks/useApiActions.ts","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/TemplateTextField.tsx","../src/components/templates/TransferList.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/CheckBox.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/ComboBox.tsx","../src/util/constants.ts","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/Datefield.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/DatetimeField.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/SystemLookupCombobox.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/DataGridColumnsUtil.tsx","../src/components/templates/DataEntryTemplates/DataEntryUtil.ts","../node_modules/@mui/system/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js","../node_modules/prop-types/node_modules/react-is/index.js","../node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/lib/has.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/react-is/cjs/react-is.production.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/@mui/system/node_modules/@mui/utils/esm/deepmerge/deepmerge.js","../node_modules/@mui/system/esm/createBreakpoints/createBreakpoints.js","../node_modules/@mui/system/esm/createTheme/shape.js","../node_modules/@mui/system/esm/responsivePropType/responsivePropType.js","../node_modules/@mui/system/esm/merge/merge.js","../node_modules/@mui/system/esm/breakpoints/breakpoints.js","../node_modules/@mui/system/esm/cssContainerQueries/cssContainerQueries.js","../node_modules/@mui/system/node_modules/@mui/utils/esm/capitalize/capitalize.js","../node_modules/@mui/system/esm/style/style.js","../node_modules/@mui/system/esm/spacing/spacing.js","../node_modules/@mui/system/esm/memoize/memoize.js","../node_modules/@mui/system/esm/compose/compose.js","../node_modules/@mui/system/esm/borders/borders.js","../node_modules/@mui/system/esm/cssGrid/cssGrid.js","../node_modules/@mui/system/esm/palette/palette.js","../node_modules/@mui/system/esm/sizing/sizing.js","../node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js","../node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../node_modules/@mui/system/esm/createTheme/applyStyles.js","../node_modules/@mui/system/esm/useThemeWithoutDefault/useThemeWithoutDefault.js","../node_modules/@mui/system/esm/useTheme/useTheme.js","../node_modules/@mui/system/esm/createTheme/createTheme.js","../node_modules/@mui/system/esm/createTheme/createSpacing.js","../node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../node_modules/@mui/system/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../node_modules/clsx/dist/clsx.mjs","../node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js","../node_modules/@mui/system/esm/Box/boxClasses.js","../node_modules/@mui/system/esm/Box/Box.js","../node_modules/@mui/system/esm/createBox/createBox.js","../node_modules/@mui/styled-engine/esm/index.js","../node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../src/util/AppUtils.ts","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementField.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormAction.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementGroup.tsx","../src/components/templates/attachment/AttachmentImageViewer.tsx","../src/components/templates/attachment/AttachmentCard.tsx","../src/components/templates/attachment/AttachmentPanel.tsx","../src/components/templates/workflow/WorkflowDocumentTimeLine.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridMultiRecordAction.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridTopBar.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridRecordAction.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid.tsx","../src/hooks/useLookupGridColumn.tsx","../src/components/templates/report/ExcelReportViewer.tsx","../src/components/templates/report/ReportViewer.tsx","../src/components/templates/workflow/WorkflowDocumentPanel.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/TemplateForm.tsx","../src/components/templates/workflow/WorkflowRouteComponent.tsx","../src/components/templates/visuals/charts/TemplateBarChart.tsx","../src/components/templates/visuals/charts/TemplateDataCard.tsx","../src/components/templates/visuals/charts/TemplateGauge.tsx","../src/components/templates/visuals/charts/TemplateLineChart.tsx","../src/components/templates/visuals/charts/TemplateLineProgress.tsx","../src/components/templates/visuals/charts/TemplatePieChart.tsx","../src/components/templates/visuals/WidgetViewer.tsx","../src/components/templates/visuals/DashboardViewer.tsx","../src/components/templates/visuals/DashboardRouteView.tsx","../src/components/common/ChangeOrgForm.tsx","../src/redux/features/common/SideBarSlice.ts","../src/hooks/useInterval.tsx","../src/components/common/NotificationItem.tsx","../src/layout/NotificationButton.tsx","../src/components/administration/admin/ChangePasswordPanel.tsx","../src/layout/TopBar.tsx","../src/locales/i18n.ts","../src/layout/DrawerHeader.tsx","../src/navigationItems/index.tsx","../src/navigationItems/Administration/index.tsx","../src/navigationItems/Administration/adminNavigationItems.tsx","../src/layout/NavigationTree.tsx","../src/layout/SideBar.tsx","../src/components/common/LayoutHandlers.tsx","../src/components/administration/admin/OrgMemberRoleForm.tsx","../src/components/administration/admin/OrganizationMemberGrid.tsx","../src/components/administration/admin/OrganizationRankGrid.tsx","../src/components/administration/admin/OrganizationUnitGrid.tsx","../src/components/administration/admin/OrganizationUnitTypeGrid.tsx","../src/components/administration/admin/SystemApplicationAuthorityGrid.tsx","../src/components/administration/admin/SystemApplicationModuleGrid.tsx","../src/components/administration/admin/RoleAuthoritiesForm.tsx","../src/components/administration/admin/SystemApplicationRoleGrid.tsx","../src/components/administration/dev/DataQueryParameterGrid.tsx","../src/components/administration/dev/LookupGrid.tsx","../src/components/administration/dev/ReportParameterGrid.tsx","../src/components/administration/dev/AttachmentConfigGrid.tsx","../src/components/administration/dev/ReportGrid.tsx","../src/components/administration/dev/MailRecipientGrid.tsx","../src/components/administration/dev/MailBodyGrid.tsx","../src/components/administration/dev/MailAttachmentGrid.tsx","../src/components/administration/dev/MailSenderConfigGrid.tsx","../src/components/administration/dev/WorkflowDocumentStatusGrid.tsx","../src/components/administration/dev/WorkflowDocumentActionMailGrid.tsx","../src/components/administration/dev/WorkflowDocumentActionGrid.tsx","../src/components/administration/dev/WidgetGrid.tsx","../src/components/administration/dev/DashboardWidgetGrid.tsx","../src/routes/index.ts","../src/components/common/Home.tsx","../src/routes/administration/index.ts","../src/routes/administration/adminRoutes.tsx","../src/components/administration/admin/OrganizationGrid.tsx","../src/components/administration/admin/OrganizationMemberRoleGrid.tsx","../src/components/administration/admin/PersonGrid.tsx","../src/components/administration/admin/SystemApplicationGrid.tsx","../src/components/administration/admin/SystemApplicationRoleAuthorityGrid.tsx","../src/components/administration/admin/OrganizationApplicationModuleGrid.tsx","../src/routes/administration/devRoutes.tsx","../src/components/administration/dev/BluePrintGrid.tsx","../src/components/administration/dev/DataQueryGrid.tsx","../src/components/administration/dev/DatasourceConnectionGrid.tsx","../src/components/administration/dev/EntityParameterGrid.tsx","../src/components/administration/dev/MailTemplateGrid.tsx","../src/components/administration/dev/WorkflowDocumentGrid.tsx","../src/components/administration/dev/DashboardGrid.tsx","../src/components/administration/dev/WorkflowDocumentMailLogGrid.tsx","../src/components/administration/dev/MailNotificationQueueGrid.tsx","../src/components/administration/dev/NotificationGrid.tsx","../src/components/common/MyNotificationsPanel.tsx","../src/layout/RouteWrapper.tsx","../src/layout/MainContent.tsx","../src/layout/MobileDrawer.tsx","../src/components/common/LoadingMask.tsx","../src/components/common/Login.tsx","../src/layout/Layout.tsx","../src/redux/features/common/AppInfoSlice.ts","../src/redux/features/administration/AdministrationStoresMetaData.ts","../src/components/App.tsx","../src/locales/english/index.ts","../src/locales/arabic/index.ts","../src/components/BaseApp.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { useEffect, useState } from \"react\";\n\nexport const useIsMobile = (breakpoint = 768) => {\n const [isMobile, setIsMobile] = useState(window.innerWidth < breakpoint);\n\n useEffect(() => {\n const handleResize = () => setIsMobile(window.innerWidth < breakpoint);\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, [breakpoint]);\n\n return isMobile;\n};\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport const DRAWER_WIDTH = 350;\n\ninterface AppLayoutState {\n themeMode: \"light\" | \"dark\" | string;\n appDirection: \"ltr\" | \"rtl\";\n}\n\nconst initialState: AppLayoutState = {\n themeMode: localStorage.getItem(\"themeMode\") || \"light\",\n appDirection: localStorage.getItem(\"language\") == \"ar\" ? \"rtl\" : \"ltr\",\n};\n\nconst AppLayoutSlice = createSlice({\n name: \"AppLayout\",\n initialState,\n reducers: {\n setThemeMode: (state, action) => {\n state.themeMode = action.payload;\n },\n setAppDirection: (state, action) => {\n state.appDirection = action.payload;\n },\n },\n});\n\nexport const AppLayoutActions = AppLayoutSlice.actions;\nexport default AppLayoutSlice.reducer;\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\n\ninterface LoadingMaskStateValue {\n value: { isOpened: boolean; message?: string | null };\n}\n\nconst initialState: LoadingMaskStateValue = {\n value: { isOpened: false, message: null },\n};\n\nconst loadingMaskSlice = createSlice({\n name: \"loadingMask\",\n initialState,\n reducers: {\n showLoadingMask: (\n state,\n action: PayloadAction<string | null | undefined>\n ) => {\n state.value.isOpened = true;\n state.value.message = action.payload;\n },\n hideLoadingMask: (state) => {\n state.value.isOpened = false;\n state.value.message = null;\n },\n },\n});\n\nexport const { showLoadingMask, hideLoadingMask } = loadingMaskSlice.actions;\nexport default loadingMaskSlice.reducer;\n","import { useDispatch } from \"react-redux\";\nimport { hideLoadingMask, showLoadingMask } from \"../redux/features/common/LoadingMaskSlice\";\n\n\nconst useLoadingMask = () => {\n const dispatch = useDispatch();\n const show = (message?: string) => {\n dispatch(showLoadingMask(message));\n };\n const hide = () => {\n dispatch(hideLoadingMask());\n };\n return { show, hide };\n};\n\nexport default useLoadingMask;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport interface OrganizationProps {\n organizationCode?: string;\n organizationName?: string;\n}\n\nexport interface UserSessionProps {\n value: {\n isAuthenticated: boolean | null;\n employeeNumber?: string;\n employeeName?: string;\n mobileNumber?: string;\n email?: string;\n isEmployeeArchived?: string;\n organizationCode?: string;\n organizationUnitId?: string;\n organizationUnitArName?: string;\n organizationUnitEnName?: string;\n organizationRankId?: string;\n rankCode?: string;\n rankName?: string;\n rankOrder?: string;\n currentOrganization?: any;\n userOrganizations?: Array<OrganizationProps>;\n authorities: Array<{ authority: string }>;\n };\n}\n\nconst initialState: UserSessionProps = {\n value: {\n isAuthenticated: null,\n authorities: [],\n },\n};\n\nconst UserSessionSlice = createSlice({\n name: \"UserSession\",\n initialState,\n reducers: {\n setAuthenticated: (state, action) => {\n state.value = action.payload;\n },\n setUnAuthenticated: (state) => {\n state.value = {\n isAuthenticated: false,\n authorities: [],\n };\n },\n },\n});\n\nexport const UserSessionActions = UserSessionSlice.actions;\nexport default UserSessionSlice.reducer;\n","import { toast } from \"react-toastify\";\nimport axios, { ResponseType } from \"axios\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport useLoadingMask from \"./useLoadingMask\";\nimport { UserSessionActions } from \"../redux/features/common/UserSessionSlice\";\n\nexport interface APIRequest {\n endPointURI: string;\n parameters?: any;\n data?: any;\n showMask?: Boolean;\n loadingMessage?: string;\n successCallBkFn?: Function;\n failureCallBkFn?: Function;\n headers?: any;\n responseType?: ResponseType;\n}\n\nexport interface UploadAttachmentRequest {\n endPointURI: string;\n showMask?: Boolean;\n parameters?: any;\n loadingMessage?: string;\n successCallBkFn?: Function;\n failureCallBkFn?: Function;\n files: FileList;\n}\n\nconst useAxios = () => {\n const mask = useLoadingMask();\n const dispatch = useDispatch();\n const apiBaseUrl = useSelector(\n (state: any) => state.AppInfo.value.apiBaseUrl\n );\n const axiosInstance = axios.create({\n baseURL: apiBaseUrl,\n timeout: 600000,\n withCredentials: true,\n });\n\n axiosInstance.defaults.withCredentials = true;\n axiosInstance.interceptors.response.use(\n (response: any) => {\n return response;\n },\n (error: any) => {\n if (\n error\n ? error.response\n ? error.response.status\n ? error.response.status === 401\n : false\n : false\n : false\n ) {\n dispatch(UserSessionActions.setUnAuthenticated());\n toast.error(\"your session is now expired, you need to login again\", {\n autoClose: false,\n });\n } else if (\n error\n ? error.response\n ? error.response.status\n ? error.response.status === 403\n : false\n : false\n : false\n ) {\n toast.error(\"you aren't authorized to process this request\");\n } else if (\n error\n ? error.response\n ? error.response.status\n ? error.response.status === 500\n : false\n : false\n : false\n ) {\n if (error.response.data instanceof Blob) {\n const blob = error.response.data;\n blob.text().then((text) => {\n toast.error(text);\n });\n } else {\n toast.error(error.response.data);\n }\n } else {\n toast.error(\n \"failed to communicate with the server ... try again later\"\n );\n }\n return \"ERROR\";\n }\n );\n const handleGetRequest = async (props: APIRequest) => {\n if (\n props.showMask !== undefined &&\n props.showMask != null &&\n props.showMask === true\n ) {\n mask.show(props.loadingMessage);\n }\n const response: any = await axiosInstance.get(props.endPointURI, {\n params: { ...props.parameters },\n withCredentials: true,\n headers: props.headers,\n responseType: props?.responseType,\n });\n if (\n props.showMask !== undefined &&\n props.showMask != null &&\n props.showMask === true\n ) {\n mask.hide();\n }\n if (response !== \"ERROR\") {\n if (\n props.successCallBkFn !== undefined &&\n props.successCallBkFn != null\n ) {\n props.successCallBkFn(response);\n }\n return response;\n } else {\n if (\n props.failureCallBkFn !== undefined &&\n props.failureCallBkFn != null\n ) {\n props.failureCallBkFn(response);\n }\n return \"ERROR\";\n }\n };\n\n const HandleDownloadHTTPPostPDF = async (\n props: APIRequest = { endPointURI: \"\", parameters: {}, data: {} }\n ) => {\n if (\n props.showMask !== undefined &&\n props.showMask != null &&\n props.showMask === true\n ) {\n mask.show(props.loadingMessage);\n }\n const response: any = await axiosInstance.post(\n props.endPointURI,\n props.data,\n {\n responseType: \"blob\",\n }\n );\n if (\n props.showMask !== undefined &&\n props.showMask != null &&\n props.showMask === true\n ) {\n mask.hide();\n }\n if (response !== \"ERROR\") {\n if (\n props.successCallBkFn !== undefined &&\n props.successCallBkFn != null\n ) {\n props.successCallBkFn(response);\n }\n return response;\n } else {\n if (\n props.failureCallBkFn !== undefined &&\n props.failureCallBkFn != null\n ) {\n props.failureCallBkFn(response);\n }\n return \"ERROR\";\n }\n };\n const handlePostRequest = async (props: APIRequest) => {\n if (\n props.showMask !== undefined &&\n props.showMask != null &&\n props.showMask === true\n ) {\n mask.show(props.loadingMessage);\n }\n let response: any = await axiosInstance.post(\n props.endPointURI,\n props.data,\n {\n params: props.parameters,\n responseType: props?.responseType,\n headers: props?.headers,\n }\n );\n if (\n props.showMask !== undefined &&\n props.showMask != null &&\n props.showMask === true\n ) {\n mask.hide();\n }\n if (response !== \"ERROR\") {\n if (\n props.successCallBkFn !== undefined &&\n props.successCallBkFn != null\n ) {\n props.successCallBkFn(response);\n }\n return response;\n } else {\n if (\n props.failureCallBkFn !== undefined &&\n props.failureCallBkFn != null\n ) {\n props.failureCallBkFn(response);\n }\n return \"ERROR\";\n }\n };\n const handleDeleteRequest = async (props: APIRequest) => {\n if (\n props.showMask !== undefined &&\n props.showMask != null &&\n props.showMask === true\n ) {\n mask.show(props.loadingMessage);\n }\n let response: any = await axiosInstance.delete(props.endPointURI, {\n params: {\n ...props.parameters,\n },\n responseType: props?.responseType,\n headers: props?.headers,\n });\n if (\n props.showMask !== undefined &&\n props.showMask != null &&\n props.showMask === true\n ) {\n mask.hide();\n }\n if (response !== \"ERROR\") {\n if (\n props.successCallBkFn !== undefined &&\n props.successCallBkFn != null\n ) {\n props.successCallBkFn(response);\n }\n return response;\n } else {\n if (\n props.failureCallBkFn !== undefined &&\n props.failureCallBkFn != null\n ) {\n props.failureCallBkFn(response);\n }\n return \"ERROR\";\n }\n };\n\n const handleUploadRequest = async (props: UploadAttachmentRequest) => {\n if (props.files === null || props.files.length === 0) {\n toast.error(\"You must add files to upload\");\n return \"ERROR\";\n }\n const formData = new FormData();\n for (const file of props.files) {\n formData.append(\"files\", file);\n }\n if (\n props.showMask !== undefined &&\n props.showMask != null &&\n props.showMask === true\n ) {\n mask.show(props.loadingMessage);\n }\n let response: any = await axiosInstance.post(props.endPointURI, formData, {\n params: props?.parameters,\n headers: {\n \"Content-Type\": \"multipart/form-data\",\n },\n });\n if (\n props.showMask !== undefined &&\n props.showMask != null &&\n props.showMask === true\n ) {\n mask.hide();\n }\n if (response !== \"ERROR\") {\n if (\n props.successCallBkFn !== undefined &&\n props.successCallBkFn != null\n ) {\n props.successCallBkFn(response);\n }\n return response;\n } else {\n if (\n props.failureCallBkFn !== undefined &&\n props.failureCallBkFn != null\n ) {\n props.failureCallBkFn(response);\n }\n return \"ERROR\";\n }\n };\n return {\n handleGetRequest,\n handlePostRequest,\n handleDeleteRequest,\n HandleDownloadHTTPPostPDF,\n handleUploadRequest,\n };\n};\n\nexport default useAxios;\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from \"@mui/material\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ConfirmationWindowProps {\n title: string;\n body: string;\n onConfirmationCallBk: () => void;\n}\n\nexport const useConfirmationWindow = (props: ConfirmationWindowProps) => {\n const [open, setOpen] = useState<boolean>(false);\n const { t } = useTranslation();\n const ConfirmationWindow: React.FC = () => {\n return (\n <Dialog open={open}>\n <DialogTitle>{props.title}</DialogTitle>\n <DialogContent>\n <DialogContentText>{props.body}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n setOpen(false);\n }}\n >\n {t(\"NO_LABEL\")}\n </Button>\n <Button\n variant=\"contained\"\n color=\"error\"\n onClick={() => {\n props.onConfirmationCallBk();\n setOpen(false);\n }}\n autoFocus\n >\n {t(\"YES_LABEL\")}\n </Button>\n </DialogActions>\n </Dialog>\n );\n };\n return { ConfirmationWindow, open, setOpen };\n};\n","import { useSelector } from \"react-redux\";\n\nconst useSession = () => {\n const UserSession = useSelector((state: any) => state.UserSession);\n const UserInfo = UserSession.value;\n\n const isCurrentOrganizationAuthorizedToModule = (\n moduleCode: string\n ): Boolean => {\n if (UserInfo?.currentOrganization?.systemApplicationModules) {\n for (const subscripedModule of UserInfo.currentOrganization\n .systemApplicationModules) {\n if (subscripedModule.toLowerCase() == moduleCode.toLowerCase()) {\n return true;\n }\n }\n }\n return false;\n };\n const isUserAuthorized = (authorityCode: string): boolean => {\n if (UserSession?.value?.authorities) {\n for (let grantedAuthority of UserSession.value.authorities) {\n if (\n authorityCode === \"DEVELOPMENT_ADMIN\" &&\n (grantedAuthority?.authority === \"DEVELOPMENT_ADMIN\" ||\n grantedAuthority?.authority === \"ORGANIZATION_ADMIN\")\n ) {\n return true;\n } else if (\n authorityCode === \"ORGANIZATION_ADMIN\" &&\n grantedAuthority?.authority === \"ORGANIZATION_ADMIN\"\n ) {\n return true;\n } else if (\n authorityCode !== \"DEVELOPMENT_ADMIN\" &&\n authorityCode !== \"ORGANIZATION_ADMIN\"\n ) {\n if (\n grantedAuthority?.authority === \"ORGANIZATION_ADMIN\" ||\n grantedAuthority?.authority === \"DEVELOPMENT_ADMIN\" ||\n grantedAuthority?.authority === \"SYSTEM_ADMIN\" ||\n grantedAuthority?.authority === authorityCode\n ) {\n return true;\n }\n }\n }\n }\n return false;\n };\n return {\n UserSession,\n isUserAuthorized,\n isCurrentOrganizationAuthorizedToModule,\n UserInfo,\n };\n};\n\nexport default useSession;\n","import { useEffect, useState } from \"react\";\nimport {\n AppBar,\n Box,\n IconButton,\n Modal,\n Paper,\n Toolbar,\n Typography,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\n\nexport interface TemplateWindowProp {\n height?: any;\n width?: any;\n minWidth?: any;\n minHeight?: any;\n windowIcon?: IconProp;\n windowTitle?: string;\n onCloseCallBack?: any;\n}\n\ninterface WindowProps {\n children?: React.ReactNode;\n}\n\nexport const useWindow = (props: TemplateWindowProp) => {\n const [windowState, setWindowState] = useState(false);\n\n const Window: React.FC<WindowProps> = (windowProps: WindowProps) => {\n return (\n <Modal\n open={windowState}\n sx={{ zIndex: (theme) => theme.zIndex.drawer }}\n onClose={() => {\n if (!windowState && props?.onCloseCallBack) {\n props.onCloseCallBack();\n }\n }}\n >\n <Box\n sx={{\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n maxHeight: \"90%\",\n transform: \"translate(-50%, -50%)\",\n height: props?.height || \"80%\",\n width: props?.width || \"90%\",\n minWidth: props.minWidth || 400,\n minHeight: props.minHeight || 200,\n overflow: \"hidden\",\n bgcolor: \"modalBackground.main\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n }}\n >\n <AppBar position=\"static\">\n <Toolbar variant=\"dense\">\n <FontAwesomeIcon\n icon={props?.windowIcon || \"window-maximize\"}\n style={{ marginRight: 5 }}\n />\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\">\n {props?.windowTitle || \"window\"}\n </Typography>\n <div style={{ flexGrow: 1 }}></div>\n <IconButton\n onClick={() => {\n setWindowState(false);\n if (\n props.onCloseCallBack != undefined &&\n props.onCloseCallBack != null\n ) {\n props.onCloseCallBack();\n }\n }}\n color=\"secondary\"\n >\n <FontAwesomeIcon icon=\"xmark-square\" />\n </IconButton>\n </Toolbar>\n </AppBar>\n <Paper\n sx={{\n // flexGrow: 1,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n width: \"100%\",\n height: \"100%\",\n padding: 1,\n // justifyContent: \"center\",\n overflow: \"hidden\",\n }}\n >\n {windowProps?.children}\n </Paper>\n </Box>\n </Modal>\n );\n };\n return { windowState, setWindowState, Window };\n};\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\n\nexport type CommonStores = {\n [key: string]: StoreMetaData;\n};\n\nexport type CommonStoresInterface = {\n stores: { [key: string]: StoreMetaData };\n storeKeys: Array<String>;\n};\n\ninterface setStoreDataProps {\n storeKey: string;\n data: Array<any>;\n}\n\nexport type StoreMetaData = {\n url: string;\n data: Array<any>;\n autoLoad: boolean;\n authority?: string;\n};\n\nexport const commonStoresInitialState: CommonStoresInterface = {\n stores: {},\n storeKeys: [],\n};\n\nconst commonStoreSlice = createSlice({\n name: \"commonStores\",\n initialState: commonStoresInitialState,\n reducers: {\n setStoresMetaData: (state, action) => {\n state.stores = action.payload;\n state.storeKeys = Object.keys(action.payload);\n },\n setStoreData: (state, action: PayloadAction<setStoreDataProps>) => {\n state.stores[action.payload.storeKey].data = action.payload.data;\n },\n },\n});\n\nexport const { setStoreData, setStoresMetaData } = commonStoreSlice.actions;\nexport default commonStoreSlice.reducer;\n","import { useDispatch, useSelector } from \"react-redux\";\nimport useSession from \"./UseSession\";\nimport useAxios from \"./useAxios\";\nimport { setStoreData } from \"../redux/features/common/CommonStoreSlice\";\n\nexport type ApiActionsProps = {\n findAll?: string;\n commonStoreKey?: string;\n setData?: any;\n findById?: string;\n findByIdParamName?: string;\n save?: string;\n deleteById?: string;\n deleteByIdParamName?: string;\n};\n\nexport type ApiActions = {\n reloadData: (params?: any) => Promise<void>;\n saveRecord: (record: any) => Promise<any | null>;\n loadRecordById: (recordId: any) => Promise<any>;\n deleteRecordById: (recordId: any) => Promise<boolean>;\n};\n\nconst useApiActions: (apiActionsProps: ApiActionsProps) => ApiActions = (\n apiActionsProps: ApiActionsProps\n) => {\n const CommonStores = useSelector((state: any) => state.commonStores.stores);\n const dispatch = useDispatch();\n const session = useSession();\n const { handleGetRequest, handlePostRequest, handleDeleteRequest } =\n useAxios();\n const reloadData = async (params?: any) => {\n if (apiActionsProps?.commonStoreKey) {\n const storeKeys = Object.keys(CommonStores);\n for (const storeKey of storeKeys) {\n if (storeKey === apiActionsProps.commonStoreKey) {\n if (\n (CommonStores[storeKey]?.authority === undefined ||\n CommonStores[storeKey]?.authority === null ||\n session.isUserAuthorized(CommonStores[storeKey]?.authority)) &&\n CommonStores[storeKey]?.url != \"\"\n ) {\n await handleGetRequest({\n endPointURI: CommonStores[storeKey].url,\n showMask: false,\n successCallBkFn: (response: any) => {\n dispatch(setStoreData({ storeKey, data: response.data }));\n apiActionsProps.setData(response.data);\n },\n failureCallBkFn: () => {\n dispatch(setStoreData({ storeKey, data: [] }));\n apiActionsProps.setData([]);\n },\n });\n break;\n }\n }\n }\n } else if (apiActionsProps?.findAll) {\n await handleGetRequest({\n endPointURI: apiActionsProps.findAll,\n showMask: true,\n parameters: params || {},\n successCallBkFn: (response: any) => {\n apiActionsProps.setData(response.data);\n },\n });\n }\n };\n const saveRecord = async (record: any) => {\n let savedRecord = null;\n if (apiActionsProps?.save) {\n await handlePostRequest({\n endPointURI: apiActionsProps.save,\n data: record,\n showMask: true,\n successCallBkFn: (response: any) => {\n savedRecord = response.data;\n },\n });\n }\n return savedRecord;\n };\n const loadRecordById = async (recordId: any) => {\n let record: any = null;\n if (apiActionsProps?.findById) {\n const parameters: any = {};\n const keyParameterName = apiActionsProps?.findByIdParamName || \"id\";\n parameters[keyParameterName] = recordId;\n await handleGetRequest({\n endPointURI: apiActionsProps.findById,\n showMask: true,\n parameters,\n successCallBkFn: (response: any) => {\n record = response.data;\n },\n });\n }\n return record;\n };\n const deleteRecordById = async (recordId: any) => {\n let result = true;\n if (apiActionsProps?.deleteById) {\n const parameters: any = {};\n const keyParameterName = apiActionsProps?.deleteByIdParamName || \"id\";\n parameters[keyParameterName] = recordId;\n await handleDeleteRequest({\n endPointURI: apiActionsProps.deleteById,\n showMask: true,\n parameters,\n successCallBkFn: () => {\n result = true;\n },\n failureCallBkFn: () => {\n result = false;\n },\n });\n }\n return result;\n };\n return { reloadData, loadRecordById, saveRecord, deleteRecordById };\n};\n\nexport default useApiActions;\n","import { TextField, TextFieldProps } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\n\nconst TemplateTextField: React.FC<Omit<TextFieldProps, \"outlined\">> = (\n props\n) => {\n const { t } = useTranslation();\n return (\n <TextField\n {...props}\n slotProps={{ inputLabel: { shrink: true } }}\n label={<>{props?.label ? t(props.label) : \"\"}</>}\n />\n );\n};\n\nexport default TemplateTextField;\n","import * as React from \"react\";\nimport List from \"@mui/material/List\";\nimport Card from \"@mui/material/Card\";\nimport CardHeader from \"@mui/material/CardHeader\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\nimport Checkbox from \"@mui/material/Checkbox\";\nimport Button from \"@mui/material/Button\";\nimport Divider from \"@mui/material/Divider\";\nimport { Box, Grid2, ListItemButton } from \"@mui/material\";\nimport TemplateTextField from \"./DataEntryTemplates/TemplateDataForm/FormFields/TemplateTextField\";\n\nfunction not(a, b) {\n return a.filter((value) => b.indexOf(value) === -1);\n}\n\nfunction intersection(a, b) {\n return a.filter((value) => b.indexOf(value) !== -1);\n}\n\nfunction union(a, b) {\n return [...a, ...not(b, a)];\n}\n\nexport type TransferListProps = {\n valueField: string;\n displayField: string;\n options: Array<any>;\n selectedOptions: Array<any>;\n setSelection: any;\n};\n\nconst TransferList: React.FC<TransferListProps> = ({\n valueField = \"id\",\n displayField = \"name\",\n options = [],\n selectedOptions = [],\n setSelection,\n}) => {\n const [checked, setChecked] = React.useState([]);\n const [left, setLeft] = React.useState<Array<any>>([]);\n const [right, setRight] = React.useState<Array<any>>([]);\n const [leftFilterValue, setLeftFilterValue] = React.useState<string>(\"\");\n const [rightFilterValue, setRightFilterValue] = React.useState<string>(\"\");\n\n const leftChecked = intersection(checked, left);\n const rightChecked = intersection(checked, right);\n\n React.useEffect(() => {\n if (options) {\n setLeft([...options]);\n }\n }, [options]);\n React.useEffect(() => {\n if (selectedOptions) {\n setRight([...selectedOptions]);\n }\n }, [selectedOptions]);\n\n const handleToggle = (value) => () => {\n const currentIndex = checked.indexOf(value);\n const newChecked = [...checked];\n\n if (currentIndex === -1) {\n newChecked.push(value);\n } else {\n newChecked.splice(currentIndex, 1);\n }\n\n setChecked(newChecked);\n };\n\n const numberOfChecked = (items) => intersection(checked, items).length;\n\n const handleToggleAll = (items) => () => {\n if (numberOfChecked(items) === items.length) {\n setChecked(not(checked, items));\n } else {\n setChecked(union(checked, items));\n }\n };\n\n const handleCheckedRight = () => {\n setRight((oldState) => {\n let newState = right.concat(leftChecked);\n setSelection(newState);\n return newState;\n });\n setLeft(not(left, leftChecked));\n setChecked(not(checked, leftChecked));\n };\n\n const handleCheckedLeft = () => {\n setLeft(left.concat(rightChecked));\n setRight((oldState) => {\n let newState = not(right, rightChecked);\n setSelection(newState);\n return newState;\n });\n setChecked(not(checked, rightChecked));\n };\n\n const customList = (\n title: string,\n unfilteredItems: Array<any>,\n side: \"left\" | \"right\"\n ) => {\n const items = unfilteredItems.filter((option: any) => {\n if (option[displayField]) {\n const value: string = option[displayField];\n if (\n side === \"left\" &&\n value\n .toLocaleLowerCase()\n .includes(leftFilterValue.toLocaleLowerCase())\n ) {\n return true;\n } else if (\n side === \"right\" &&\n value\n .toLocaleLowerCase()\n .includes(rightFilterValue.toLocaleLowerCase())\n ) {\n return true;\n }\n }\n return false;\n });\n return (\n <Card sx={{ height: \"100%\" }}>\n <CardHeader\n sx={{ px: 2, py: 1 }}\n avatar={\n <Checkbox\n onClick={handleToggleAll(items)}\n checked={\n numberOfChecked(items) === items.length && items.length !== 0\n }\n indeterminate={\n numberOfChecked(items) !== items.length &&\n numberOfChecked(items) !== 0\n }\n disabled={items.length === 0}\n inputProps={{\n \"aria-label\": \"all items selected\",\n }}\n />\n }\n title={title}\n subheader={`${numberOfChecked(unfilteredItems)} / ${\n unfilteredItems.length\n } Selected`}\n />\n <Box sx={{ width: \"100%\", padding: 1 }}>\n <TemplateTextField\n fullWidth\n label=\"search\"\n value={side === \"left\" ? leftFilterValue : rightFilterValue}\n onChange={(event) => {\n if (side === \"left\") {\n setLeftFilterValue(event.target.value);\n } else {\n setRightFilterValue(event.target.value);\n }\n }}\n />\n </Box>\n <Divider />\n <List\n sx={{\n width: \"100%\",\n height: \"80%\",\n bgcolor: \"secondary\",\n overflow: \"auto\",\n }}\n dense\n component=\"div\"\n role=\"list\"\n >\n {items.map((value) => {\n const labelId = `transfer-list-all-item-${value[valueField]}-label`;\n\n return (\n <ListItemButton\n key={value[valueField]}\n role=\"listitem\"\n onClick={handleToggle(value)}\n sx={{ cursor: \"pointer\" }}\n >\n <ListItemIcon>\n <Checkbox\n checked={checked.indexOf(value) !== -1}\n tabIndex={-1}\n disableRipple\n />\n </ListItemIcon>\n <ListItemText\n id={value[valueField]}\n primary={value[displayField]}\n />\n </ListItemButton>\n );\n })}\n </List>\n </Card>\n );\n };\n return (\n <Grid2\n container\n spacing={2}\n sx={{\n flexGrow: 1,\n overflow: \"auto\",\n margin: 1,\n display: \"flex\",\n width: \"100%\",\n }}\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <Grid2 sx={{ height: \"100%\", flex: 1 }}>\n {customList(\"Available Items\", left, \"left\")}\n </Grid2>\n <Grid2>\n <Grid2 container direction=\"column\" alignItems=\"center\">\n <Button\n sx={{ my: 0.5 }}\n variant=\"outlined\"\n size=\"small\"\n onClick={handleCheckedRight}\n disabled={leftChecked.length === 0}\n aria-label=\"move selected right\"\n >\n >\n </Button>\n <Button\n sx={{ my: 0.5 }}\n variant=\"outlined\"\n size=\"small\"\n onClick={handleCheckedLeft}\n disabled={rightChecked.length === 0}\n aria-label=\"move selected left\"\n >\n <\n </Button>\n </Grid2>\n </Grid2>\n <Grid2 sx={{ height: \"100%\", flex: 1 }}>\n {customList(\"Currently Selected\", right, \"right\")}\n </Grid2>\n </Grid2>\n );\n};\n\nexport default TransferList;\n","import { Checkbox, FormControlLabel } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface CheckBoxProps {\n value: any;\n disabled?: boolean;\n required?: boolean;\n label: string;\n checkedValue?: any;\n unCheckedValue?: any;\n onChangeCallBack: Function;\n sx?: any;\n}\n\nconst CheckBox: React.FC<CheckBoxProps> = (props) => {\n const { t } = useTranslation();\n return (\n <FormControlLabel\n sx={props.sx}\n disabled={props.disabled || false}\n required={props.required || false}\n control={\n <Checkbox\n checked={\n props?.checkedValue == props.value ||\n props.value === \"true\" ||\n props.value == \"1\"\n ? true\n : false\n }\n onChange={(e) => {\n if (\n props.onChangeCallBack !== undefined &&\n props.onChangeCallBack != null\n ) {\n if (e.target.checked) {\n if (\n props.checkedValue !== undefined &&\n props.checkedValue != null\n ) {\n props.onChangeCallBack(props.checkedValue);\n } else {\n props.onChangeCallBack(true);\n }\n } else {\n if (\n props.unCheckedValue !== undefined &&\n props.unCheckedValue != null\n ) {\n props.onChangeCallBack(props.unCheckedValue);\n } else {\n props.onChangeCallBack(false);\n }\n }\n }\n }}\n />\n }\n label={t(props.label)}\n />\n );\n};\n\nexport default CheckBox;\n","import { useSelector } from \"react-redux\";\nimport { Autocomplete, Popper, TextField } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface ComboBoxProps {\n value: any;\n onChangeCallBack: Function;\n label: string;\n disabled?: boolean;\n required?: boolean;\n options: Array<any>;\n errorMessage?: any;\n displayField: string;\n valueField: string;\n sx?: any;\n}\n\nconst ComboBox: React.FC<ComboBoxProps> = (props) => {\n const AppLayoutState = useSelector((state: any) => state.AppLayout);\n const { t } = useTranslation();\n const getValue = (v: string) => {\n for (let option of props.options) {\n if (option[props.valueField] == v) {\n return option;\n }\n }\n return null;\n };\n return (\n <Autocomplete\n sx={props.sx}\n value={getValue(props.value)}\n options={props.options}\n disabled={props.disabled}\n onChange={(event, newValue) => {\n if (\n props.onChangeCallBack !== undefined &&\n props.onChangeCallBack != null\n ) {\n if (newValue != null) {\n let v = newValue[props.valueField];\n props.onChangeCallBack(v, newValue);\n } else {\n props.onChangeCallBack(null, null);\n }\n }\n }}\n clearOnBlur\n handleHomeEndKeys\n getOptionLabel={(option) => {\n return option != null ? t(option[props.displayField]) : \"\";\n }}\n renderOption={(props1, option) => {\n return (\n <li {...props1}>\n {option != null ? t(option[props.displayField]) : \"\"}\n </li>\n );\n }}\n slots={{\n popper: (props: any) => (\n <Popper\n {...props}\n style={{ ...props.style, direction: AppLayoutState.appDirection }}\n />\n ),\n }}\n renderInput={(params) => {\n return (\n <TextField\n {...params}\n required={props.required || false}\n variant=\"outlined\"\n InputLabelProps={{ shrink: true }}\n label={t(props.label)}\n error={\n props.errorMessage != null && props.errorMessage !== undefined\n ? true\n : false\n }\n helperText={\n props.errorMessage != null && props.errorMessage !== undefined\n ? t(props.errorMessage)\n : \"\"\n }\n />\n );\n }}\n />\n );\n};\n\nexport default ComboBox;\n","export const DATE_FORMAT = \"YYYY-MM-DD\";\nexport const DATE_TIME_FORMAT = \"YYYY-MM-DD HH:mm:ss\";\nexport const LIGHT_THEME_INITIAL_MAIN_COLOR = \"#37505C\";\nexport const LIGHT_THEME_INITIAL_SECANDARY_COLOR = \"#ff6d00\";\nexport const DARK_THEME_INITIAL_MAIN_COLOR = \"#ea690e\";\nexport const DARK_THEME_INITIAL_SECANDARY_COLOR = \"#74776B\";\n","import { DatePicker, LocalizationProvider } from \"@mui/x-date-pickers\";\nimport { AdapterMoment } from \"@mui/x-date-pickers/AdapterMoment\";\nimport moment from \"moment\";\nimport { DATE_FORMAT } from \"../../../../../util/constants\";\nimport { useTranslation } from \"react-i18next\";\n\ninterface DatefieldProps {\n value: string | null;\n label: string;\n disabled?: boolean;\n required?: boolean;\n sx?: any;\n format?: string;\n errorMessage?: any;\n onChangeCallBack: Function;\n [x: string | number | symbol]: unknown;\n}\n\nconst Datefield: React.FC<DatefieldProps> = (props) => {\n const { t } = useTranslation();\n return (\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <DatePicker\n value={\n props.value != null && props.value !== undefined && props.value !== \"\"\n ? moment(props.value, props?.format || DATE_FORMAT)\n : null\n }\n sx={props.sx}\n label={t(props.label)}\n format={props?.format || DATE_FORMAT}\n disabled={props.disabled}\n onChange={(momentValue) => {\n let v = null;\n if (momentValue != null && momentValue.isValid()) {\n v = momentValue.format(props?.format || DATE_FORMAT);\n }\n if (\n props.onChangeCallBack !== undefined &&\n props.onChangeCallBack != null\n ) {\n props.onChangeCallBack(v);\n }\n }}\n slotProps={{\n textField: {\n InputLabelProps: { shrink: true },\n variant: \"outlined\",\n required: props.required,\n error:\n props.errorMessage !== undefined && props.errorMessage != null,\n helperText:\n props.errorMessage !== undefined && props.errorMessage != null ? (\n <>{t(props.errorMessage)}</>\n ) : (\n <></>\n ),\n },\n }}\n />\n </LocalizationProvider>\n );\n};\n\nexport default Datefield;\n","import { DateTimePicker, LocalizationProvider } from \"@mui/x-date-pickers\";\nimport { AdapterMoment } from \"@mui/x-date-pickers/AdapterMoment\";\nimport moment from \"moment\";\nimport { useTranslation } from \"react-i18next\";\nimport { DATE_TIME_FORMAT } from \"../../../../../util/constants\";\n\ninterface DatetimeFieldProps {\n value: string | null;\n label: string;\n disabled?: boolean;\n required?: boolean;\n format?: string;\n sx?: any;\n errorMessage?: any;\n onChangeCallBack: Function;\n [x: string | number | symbol]: unknown;\n}\n\nconst DatetimeField: React.FC<DatetimeFieldProps> = (props) => {\n const { t } = useTranslation();\n return (\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <DateTimePicker\n value={\n props.value != null && props.value !== undefined && props.value !== \"\"\n ? moment(props.value, props?.format || DATE_TIME_FORMAT)\n : null\n }\n label={t(props.label)}\n sx={props.sx}\n format={props?.format || DATE_TIME_FORMAT}\n disabled={props.disabled}\n onChange={(momentValue) => {\n let v = null;\n if (momentValue != null && momentValue.isValid()) {\n v = momentValue.format(props?.format || DATE_TIME_FORMAT);\n }\n if (\n props.onChangeCallBack !== undefined &&\n props.onChangeCallBack != null\n ) {\n props.onChangeCallBack(v);\n }\n }}\n slotProps={{\n textField: {\n variant: \"outlined\",\n required: props.required,\n error:\n props.errorMessage !== undefined && props.errorMessage != null,\n helperText:\n props.errorMessage !== undefined && props.errorMessage != null ? (\n <>{t(props.errorMessage)}</>\n ) : (\n <></>\n ),\n },\n }}\n />\n </LocalizationProvider>\n );\n};\n\nexport default DatetimeField;\n","import { useEffect, useState } from \"react\";\nimport { useAxios, useSession } from \"../../../../../hooks\";\nimport ComboBox from \"./ComboBox\";\nimport { useSelector } from \"react-redux\";\n\ntype SystemLookupListProps = {\n lookupType: string;\n value: any;\n onChangeCallBack: Function;\n label: string;\n disabled?: boolean;\n required?: boolean;\n errorMessage?: any;\n sx?: any;\n};\n\nconst SystemLookupCombobox: React.FC<SystemLookupListProps> = (props) => {\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const session = useSession();\n const [options, setOptions] = useState<Array<any>>([]);\n const { handleGetRequest } = useAxios();\n\n const loadLookupOptions = async () => {\n await handleGetRequest({\n endPointURI: \"api/v1/public/system/lookup\",\n showMask: true,\n parameters: { lookupType: props.lookupType },\n successCallBkFn: (response: any) => {\n setOptions(response.data);\n },\n failureCallBkFn: () => {\n setOptions([]);\n },\n });\n };\n\n useEffect(() => {\n if (props.lookupType) {\n loadLookupOptions();\n }\n }, [props.lookupType, session.UserSession]);\n\n return (\n <ComboBox\n {...props}\n options={options}\n displayField={\n AppLayout.appDirection === \"ltr\" ? \"lookupEnDisplay\" : \"lookupArDisplay\"\n }\n valueField=\"lookupValue\"\n />\n );\n};\n\nexport default SystemLookupCombobox;\n","import moment from \"moment\";\nimport { TemplateGridColDef } from \"../DataEntryTypes\";\nimport Datefield from \"../TemplateDataForm/FormFields/Datefield\";\nimport { DATE_FORMAT, DATE_TIME_FORMAT } from \"../../../../util/constants\";\nimport DatetimeField from \"../TemplateDataForm/FormFields/DatetimeField\";\nimport ComboBox from \"../TemplateDataForm/FormFields/ComboBox\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport CheckBox from \"../TemplateDataForm/FormFields/CheckBox\";\n\nexport const generateDateColumn: any = (colDef: TemplateGridColDef) => {\n const column: TemplateGridColDef = {\n ...colDef,\n type: \"string\",\n renderEditCell: (params: any) => {\n return (\n <Datefield\n sx={{ width: \"100%\" }}\n label=\"\"\n value={params.value}\n onChangeCallBack={(v: any) => {\n params.api.setEditCellValue({\n id: params.id,\n field: params.field,\n value: v,\n });\n }}\n />\n );\n },\n valueParser: (value: any, row: any, column: any) => {\n let v = null;\n if (value !== null) {\n v = moment(value).format(DATE_FORMAT);\n }\n return v;\n },\n valueFormatter: (value: any, row: any, column: any) => {\n return row[column.field];\n },\n };\n return column;\n};\n\nexport const generateDateTimeColumn: any = (colDef: TemplateGridColDef) => {\n const column: TemplateGridColDef = {\n ...colDef,\n type: \"string\",\n renderEditCell: (params: any) => {\n return (\n <DatetimeField\n sx={{ width: \"100%\" }}\n label=\"\"\n value={params.value}\n onChangeCallBack={(v: any) => {\n params.api.setEditCellValue({\n id: params.id,\n field: params.field,\n value: v,\n });\n }}\n />\n );\n },\n valueParser: (value: any, row: any, column: any) => {\n let v = null;\n if (value !== null) {\n v = moment(value).format(DATE_TIME_FORMAT);\n }\n return v;\n },\n valueFormatter: (value: any, row: any, column: any) => {\n return row[column.field];\n },\n };\n return column;\n};\n\ntype ComboBoxColumnProps = TemplateGridColDef & {\n lookupType?: string;\n options: Array<any>;\n displayField: string;\n valueField: string;\n};\nexport const generateComboColumn: (\n props: ComboBoxColumnProps\n) => TemplateGridColDef = (colDef: ComboBoxColumnProps) => {\n const column: TemplateGridColDef = {\n ...colDef,\n type: \"custom\",\n valueGetter: (value) => {\n if (value) {\n return value + \"\";\n }\n return value;\n },\n renderCell: (parameters: any) => {\n let record = null;\n try {\n record = parameters.colDef.options.find(\n (item: any) => item[parameters.colDef.valueField] == parameters.value\n );\n } catch (e) {}\n return (\n <div>\n {record != null\n ? record[parameters.colDef.displayField]\n : parameters.value}\n </div>\n );\n },\n\n renderEditCell: (params: any) => {\n return (\n <ComboBox\n {...params}\n sx={{ width: \"100%\" }}\n options={params.colDef.options}\n valueField={params.colDef.valueField}\n displayField={params.colDef.displayField}\n onChangeCallBack={(v: any, selectedRecord: any) => {\n if (v === null) {\n params.api.setEditCellValue({\n id: params.id,\n field: params.field,\n value: null,\n });\n }\n params.api.setEditCellValue({\n id: params.id,\n field: params.field,\n value: v + \"\",\n });\n }}\n />\n );\n },\n };\n return column;\n};\n\ntype CheckBoxColumnProps = TemplateGridColDef & {\n checkedValue?: string;\n unCheckedValue?: string;\n};\n\nexport const generateCheckBoxColumn: (\n props: CheckBoxColumnProps\n) => TemplateGridColDef = (colDef: CheckBoxColumnProps) => {\n return {\n ...colDef,\n type: \"custom\",\n valueGetter: (value) => {\n if (value == null || value == undefined) {\n return null;\n } else {\n return value;\n }\n },\n renderCell: (parameters: any) => {\n const value = parameters?.value;\n if (\n value === colDef.checkedValue ||\n value === \"true\" ||\n value === 1 ||\n value === true\n ) {\n return <FontAwesomeIcon icon=\"check\" color=\"green\" />;\n } else {\n return <FontAwesomeIcon icon=\"xmark\" color=\"red\" />;\n }\n },\n renderEditCell: (params: any) => {\n return (\n <CheckBox\n {...params}\n checkedValue={colDef?.checkedValue || true}\n unCheckedValue={colDef?.unCheckedValue || false}\n onChangeCallBack={(v: any) => {\n params.api.setEditCellValue({\n id: params.id,\n field: params.field,\n value: v,\n });\n }}\n />\n );\n },\n };\n};\n","import { GridRowSelectionModel } from \"@mui/x-data-grid-premium\";\nimport {\n FormElementProps,\n RecordFieldProps,\n TemplateGridColDef,\n} from \"./DataEntryTypes\";\nimport {\n generateCheckBoxColumn,\n generateComboColumn,\n generateDateColumn,\n generateDateTimeColumn,\n} from \"./TemplateDataGrid/DataGridColumnsUtil\";\nimport * as z from \"zod\";\nimport { TFunction } from \"i18next\";\n\nexport const getElementFields: (\n element: FormElementProps\n) => Array<RecordFieldProps> = (element: FormElementProps) => {\n const fields: Array<RecordFieldProps> = [];\n if (element.type === \"field\" && element.mode === \"props\" && element?.props) {\n fields.push(element.props);\n } else if (\n element.type === \"group\" &&\n element?.props &&\n element?.props?.elements\n ) {\n for (const childElement of element.props.elements) {\n fields.push(...getElementFields(childElement));\n }\n }\n return fields;\n};\n\nexport const getAllFields: (\n elements: Array<FormElementProps>\n) => Array<RecordFieldProps> = (elements: Array<FormElementProps>) => {\n const fields: Array<RecordFieldProps> = [];\n for (const element of elements) {\n fields.push(...getElementFields(element));\n }\n return fields;\n};\n\nexport const constructGridColumnsFromFields: (\n fields: Array<RecordFieldProps>,\n isDefaultEditable: boolean,\n t: TFunction<\"translation\", undefined>\n) => Array<TemplateGridColDef> = (fields, isDefaultEditable, t) => {\n const columns: Array<TemplateGridColDef> = [];\n\n for (const tableField of fields) {\n if (\n tableField?.fieldType === \"text\" ||\n tableField?.fieldType === \"number\"\n ) {\n const column: TemplateGridColDef = {\n ...tableField?.gridProps?.muiProps,\n editable:\n tableField?.gridProps?.muiProps?.editable != undefined\n ? tableField?.gridProps?.muiProps?.editable\n : isDefaultEditable,\n type: tableField?.fieldType == \"number\" ? \"number\" : \"string\",\n field: tableField?.fieldName,\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\n headerAlign: \"center\",\n align: \"center\",\n hidden: tableField?.hidden,\n searchable: tableField?.gridProps?.searchable,\n flex: tableField?.gridProps?.muiProps?.width ? undefined : 1,\n minWidth: 200,\n };\n\n columns.push(column);\n } else if (tableField?.fieldType === \"date\") {\n const column: TemplateGridColDef = generateDateColumn({\n ...tableField?.gridProps?.muiProps,\n editable:\n tableField?.gridProps?.muiProps?.editable != undefined\n ? tableField?.gridProps?.muiProps?.editable\n : isDefaultEditable,\n field: tableField?.fieldName,\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\n headerAlign: \"center\",\n align: \"center\",\n hidden: tableField?.hidden,\n searchable: tableField?.gridProps?.searchable,\n flex: tableField?.gridProps?.muiProps?.width ? undefined : 1,\n minWidth: 200,\n });\n columns.push(column);\n } else if (tableField?.fieldType === \"datetime\") {\n const column: TemplateGridColDef = generateDateTimeColumn({\n ...tableField?.gridProps?.muiProps,\n editable:\n tableField?.gridProps?.muiProps?.editable != undefined\n ? tableField?.gridProps?.muiProps?.editable\n : isDefaultEditable,\n field: tableField?.fieldName,\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\n headerAlign: \"center\",\n align: \"center\",\n hidden: tableField?.hidden,\n searchable: tableField?.gridProps?.searchable,\n flex: tableField?.gridProps?.muiProps?.width ? undefined : 1,\n minWidth: 200,\n });\n columns.push(column);\n } else if (tableField?.fieldType === \"checkbox\") {\n const column = generateCheckBoxColumn({\n ...tableField?.gridProps?.muiProps,\n editable:\n tableField?.gridProps?.muiProps?.editable != undefined\n ? tableField?.gridProps?.muiProps?.editable\n : isDefaultEditable,\n field: tableField?.fieldName,\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\n headerAlign: \"center\",\n align: \"center\",\n hidden: tableField?.hidden,\n searchable: tableField?.gridProps?.searchable,\n checkedValue: tableField?.checkedValue,\n unCheckedValue: tableField?.unCheckedValue,\n width: 150,\n });\n columns.push(column);\n } else if (tableField?.fieldType === \"combobox\") {\n const column: TemplateGridColDef = generateComboColumn({\n ...tableField?.gridProps?.muiProps,\n editable:\n tableField?.gridProps?.muiProps?.editable != undefined\n ? tableField?.gridProps?.muiProps?.editable\n : isDefaultEditable,\n field: tableField?.fieldName,\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\n headerAlign: \"center\",\n align: \"center\",\n hidden: tableField?.hidden,\n searchable: tableField?.gridProps?.searchable,\n valueField: tableField?.optionValueField || \"value\",\n displayField: tableField?.optionDisplayField || \"display\",\n options: tableField?.options || [],\n flex: tableField?.gridProps?.muiProps?.width ? undefined : 1,\n minWidth: 200,\n });\n columns.push(column);\n } else if (tableField?.fieldType === \"lookup\") {\n const column: TemplateGridColDef = generateComboColumn({\n ...tableField?.gridProps?.muiProps,\n editable:\n tableField?.gridProps?.muiProps?.editable != undefined\n ? tableField?.gridProps?.muiProps?.editable\n : isDefaultEditable,\n lookupType: tableField?.lookupType,\n field: tableField?.fieldName,\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\n headerAlign: \"center\",\n align: \"center\",\n hidden: tableField?.hidden,\n searchable: tableField?.gridProps?.searchable,\n valueField: tableField?.optionValueField || \"value\",\n displayField: tableField?.optionDisplayField || \"display\",\n options: tableField?.options || [],\n flex: tableField?.gridProps?.muiProps?.width ? undefined : 1,\n minWidth: 200,\n });\n columns.push(column);\n } else {\n const column: TemplateGridColDef = {\n field: tableField.fieldName,\n ...tableField?.gridProps?.muiProps,\n };\n columns.push(column);\n }\n }\n return columns;\n};\n\nexport const constructValidationSchema = (fields: Array<RecordFieldProps>) => {\n const validationSchemaObj: any = {};\n for (const field of fields) {\n if (field?.fieldName) {\n const fieldName = field.fieldName;\n if (field.fieldType === \"number\") {\n if (field?.required === true) {\n validationSchemaObj[fieldName] = z.number({\n required_error: \"This field is required\",\n invalid_type_error: \"This field must be a number\",\n });\n } else {\n validationSchemaObj[fieldName] = z.number().optional().nullable();\n }\n } else if (field.fieldType === \"checkbox\") {\n if (field?.required === true) {\n validationSchemaObj[fieldName] = z.boolean({\n required_error: \"This field is required\",\n });\n } else {\n validationSchemaObj[fieldName] = z.boolean().optional().nullable();\n }\n } else {\n if (field?.required === true) {\n validationSchemaObj[fieldName] = z\n .string({ message: \"This field is required\" })\n .min(1, \"This field is required\");\n } else {\n validationSchemaObj[fieldName] = z.string().optional().nullable();\n }\n }\n }\n }\n return validationSchemaObj;\n};\n\nexport type GridSelection = {\n selectedRecords: Array<any>;\n selectedRecordIds: Array<any>;\n};\n\nexport const getGridSelection: (\n rowSelectionModel: GridRowSelectionModel,\n data: Array<any>,\n keyColumnName: string\n) => GridSelection = (\n rowSelectionModel: GridRowSelectionModel,\n data: Array<any>,\n keyColumnName: string\n) => {\n const sRecords = [];\n const sRecordIds = [];\n if (\n rowSelectionModel.type === \"exclude\" &&\n rowSelectionModel.ids.size === 0\n ) {\n for (const record of data) {\n sRecords.push(record);\n sRecordIds.push(record[keyColumnName]);\n }\n } else {\n if (rowSelectionModel?.ids) {\n for (const selectedId of rowSelectionModel.ids) {\n const record = data.find((x) => x[keyColumnName] === selectedId);\n sRecords.push(record);\n sRecordIds.push(selectedId);\n }\n }\n }\n return { selectedRecords: sRecords, selectedRecordIds: sRecordIds };\n};\n","/**\n * WARNING: Don't import this directly. It's imported by the code generated by\n * `@mui/interal-babel-plugin-minify-errors`. Make sure to always use string literals in `Error`\n * constructors to ensure the plugin works as expected. Supported patterns include:\n * throw new Error('My message');\n * throw new Error(`My message: ${foo}`);\n * throw new Error(`My message: ${foo}` + 'another string');\n * ...\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code, ...args) {\n const url = new URL(`https://mui.com/production-error/?code=${code}`);\n args.forEach(arg => url.searchParams.append('args[]', arg));\n return `Minified MUI error #${code}; visit ${url} for the full message.`;\n}","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = require('./lib/has');\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<<anonymous>>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bigint: createPrimitiveTypeChecker('bigint'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message, data) {\n this.message = message;\n this.data = data && typeof data === 'object' ? data: {};\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n {expectedType: expectedType}\n );\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var expectedTypes = [];\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n if (checkerResult == null) {\n return null;\n }\n if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n expectedTypes.push(checkerResult.data.expectedType);\n }\n }\n var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function invalidValidatorError(componentName, location, propFullName, key, type) {\n return new PropTypeError(\n (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n );\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (has(shapeTypes, key) && typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * @license React\n * react-is.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\nSymbol.for(\"react.provider\");\nvar REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction typeOf(object) {\n if (\"object\" === typeof object && null !== object) {\n var $$typeof = object.$$typeof;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n switch (((object = object.type), object)) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n case REACT_VIEW_TRANSITION_TYPE:\n return object;\n default:\n switch (((object = object && object.$$typeof), object)) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n}\nexports.ContextConsumer = REACT_CONSUMER_TYPE;\nexports.ContextProvider = REACT_CONTEXT_TYPE;\nexports.Element = REACT_ELEMENT_TYPE;\nexports.ForwardRef = REACT_FORWARD_REF_TYPE;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Lazy = REACT_LAZY_TYPE;\nexports.Memo = REACT_MEMO_TYPE;\nexports.Portal = REACT_PORTAL_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nexports.isContextConsumer = function (object) {\n return typeOf(object) === REACT_CONSUMER_TYPE;\n};\nexports.isContextProvider = function (object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n};\nexports.isElement = function (object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n};\nexports.isForwardRef = function (object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n};\nexports.isFragment = function (object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n};\nexports.isLazy = function (object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n};\nexports.isMemo = function (object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n};\nexports.isPortal = function (object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n};\nexports.isProfiler = function (object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n};\nexports.isStrictMode = function (object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n};\nexports.isSuspense = function (object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n};\nexports.isSuspenseList = function (object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n};\nexports.isValidElementType = function (type) {\n return \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n};\nexports.typeOf = typeOf;\n","/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function typeOf(object) {\n if (\"object\" === typeof object && null !== object) {\n var $$typeof = object.$$typeof;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n switch (((object = object.type), object)) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n case REACT_VIEW_TRANSITION_TYPE:\n return object;\n default:\n switch (((object = object && object.$$typeof), object)) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n }\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n exports.ContextConsumer = REACT_CONSUMER_TYPE;\n exports.ContextProvider = REACT_CONTEXT_TYPE;\n exports.Element = REACT_ELEMENT_TYPE;\n exports.ForwardRef = REACT_FORWARD_REF_TYPE;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Lazy = REACT_LAZY_TYPE;\n exports.Memo = REACT_MEMO_TYPE;\n exports.Portal = REACT_PORTAL_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n exports.isContextConsumer = function (object) {\n return typeOf(object) === REACT_CONSUMER_TYPE;\n };\n exports.isContextProvider = function (object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n };\n exports.isElement = function (object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n };\n exports.isForwardRef = function (object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n };\n exports.isFragment = function (object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n };\n exports.isLazy = function (object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n };\n exports.isMemo = function (object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n };\n exports.isPortal = function (object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n };\n exports.isProfiler = function (object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n };\n exports.isStrictMode = function (object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n };\n exports.isSuspense = function (object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n };\n exports.isSuspenseList = function (object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n };\n exports.isValidElementType = function (type) {\n return \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n };\n exports.typeOf = typeOf;\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","import * as React from 'react';\nimport { isValidElementType } from 'react-is';\n\n// https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\nexport function isPlainObject(item) {\n if (typeof item !== 'object' || item === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(item);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in item) && !(Symbol.iterator in item);\n}\nfunction deepClone(source) {\n if (/*#__PURE__*/React.isValidElement(source) || isValidElementType(source) || !isPlainObject(source)) {\n return source;\n }\n const output = {};\n Object.keys(source).forEach(key => {\n output[key] = deepClone(source[key]);\n });\n return output;\n}\n\n/**\n * Merge objects deeply.\n * It will shallow copy React elements.\n *\n * If `options.clone` is set to `false` the source object will be merged directly into the target object.\n *\n * @example\n * ```ts\n * deepmerge({ a: { b: 1 }, d: 2 }, { a: { c: 2 }, d: 4 });\n * // => { a: { b: 1, c: 2 }, d: 4 }\n * ````\n *\n * @param target The target object.\n * @param source The source object.\n * @param options The merge options.\n * @param options.clone Set to `false` to merge the source object directly into the target object.\n * @returns The merged object.\n */\nexport default function deepmerge(target, source, options = {\n clone: true\n}) {\n const output = options.clone ? {\n ...target\n } : target;\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach(key => {\n if (/*#__PURE__*/React.isValidElement(source[key]) || isValidElementType(source[key])) {\n output[key] = source[key];\n } else if (isPlainObject(source[key]) &&\n // Avoid prototype pollution\n Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {\n // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n output[key] = deepmerge(target[key], source[key], options);\n } else if (options.clone) {\n output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n } else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}","// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport const breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];\nconst sortBreakpointsValues = values => {\n const breakpointsAsArray = Object.keys(values).map(key => ({\n key,\n val: values[key]\n })) || [];\n // Sort in ascending order\n breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n return breakpointsAsArray.reduce((acc, obj) => {\n return {\n ...acc,\n [obj.key]: obj.val\n };\n }, {});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nexport default function createBreakpoints(breakpoints) {\n const {\n // The breakpoint **start** at this value.\n // For instance with the first breakpoint xs: [xs, sm).\n values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n },\n unit = 'px',\n step = 5,\n ...other\n } = breakpoints;\n const sortedValues = sortBreakpointsValues(values);\n const keys = Object.keys(sortedValues);\n function up(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (min-width:${value}${unit})`;\n }\n function down(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (max-width:${value - step / 100}${unit})`;\n }\n function between(start, end) {\n const endIndex = keys.indexOf(end);\n return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n }\n function only(key) {\n if (keys.indexOf(key) + 1 < keys.length) {\n return between(key, keys[keys.indexOf(key) + 1]);\n }\n return up(key);\n }\n function not(key) {\n // handle first and last key separately, for better readability\n const keyIndex = keys.indexOf(key);\n if (keyIndex === 0) {\n return up(keys[1]);\n }\n if (keyIndex === keys.length - 1) {\n return down(keys[keyIndex]);\n }\n return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n }\n return {\n keys,\n values: sortedValues,\n up,\n down,\n between,\n only,\n not,\n unit,\n ...other\n };\n}","const shape = {\n borderRadius: 4\n};\nexport default shape;","import PropTypes from 'prop-types';\nconst responsivePropType = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.object, PropTypes.array]) : {};\nexport default responsivePropType;","import deepmerge from '@mui/utils/deepmerge';\nfunction merge(acc, item) {\n if (!item) {\n return acc;\n }\n return deepmerge(acc, item, {\n clone: false // No need to clone deep, it's way faster.\n });\n}\nexport default merge;","import PropTypes from 'prop-types';\nimport deepmerge from '@mui/utils/deepmerge';\nimport merge from \"../merge/index.js\";\nimport { isCqShorthand, getContainerQuery } from \"../cssContainerQueries/index.js\";\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n};\nconst defaultBreakpoints = {\n // Sorted ASC by size. That's important.\n // It can't be configured as it's used statically for propTypes.\n keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n up: key => `@media (min-width:${values[key]}px)`\n};\nconst defaultContainerQueries = {\n containerQueries: containerName => ({\n up: key => {\n let result = typeof key === 'number' ? key : values[key] || key;\n if (typeof result === 'number') {\n result = `${result}px`;\n }\n return containerName ? `@container ${containerName} (min-width:${result})` : `@container (min-width:${result})`;\n }\n })\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n const theme = props.theme || {};\n if (Array.isArray(propValue)) {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return propValue.reduce((acc, item, index) => {\n acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n return acc;\n }, {});\n }\n if (typeof propValue === 'object') {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return Object.keys(propValue).reduce((acc, breakpoint) => {\n if (isCqShorthand(themeBreakpoints.keys, breakpoint)) {\n const containerKey = getContainerQuery(theme.containerQueries ? theme : defaultContainerQueries, breakpoint);\n if (containerKey) {\n acc[containerKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n }\n }\n // key is breakpoint\n else if (Object.keys(themeBreakpoints.values || values).includes(breakpoint)) {\n const mediaKey = themeBreakpoints.up(breakpoint);\n acc[mediaKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n } else {\n const cssKey = breakpoint;\n acc[cssKey] = propValue[cssKey];\n }\n return acc;\n }, {});\n }\n const output = styleFromPropValue(propValue);\n return output;\n}\nfunction breakpoints(styleFunction) {\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const newStyleFunction = props => {\n const theme = props.theme || {};\n const base = styleFunction(props);\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n const extended = themeBreakpoints.keys.reduce((acc, key) => {\n if (props[key]) {\n acc = acc || {};\n acc[themeBreakpoints.up(key)] = styleFunction({\n theme,\n ...props[key]\n });\n }\n return acc;\n }, null);\n return merge(base, extended);\n };\n newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? {\n ...styleFunction.propTypes,\n xs: PropTypes.object,\n sm: PropTypes.object,\n md: PropTypes.object,\n lg: PropTypes.object,\n xl: PropTypes.object\n } : {};\n newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl', ...styleFunction.filterProps];\n return newStyleFunction;\n}\nexport function createEmptyBreakpointObject(breakpointsInput = {}) {\n const breakpointsInOrder = breakpointsInput.keys?.reduce((acc, key) => {\n const breakpointStyleKey = breakpointsInput.up(key);\n acc[breakpointStyleKey] = {};\n return acc;\n }, {});\n return breakpointsInOrder || {};\n}\nexport function removeUnusedBreakpoints(breakpointKeys, style) {\n return breakpointKeys.reduce((acc, key) => {\n const breakpointOutput = acc[key];\n const isBreakpointUnused = !breakpointOutput || Object.keys(breakpointOutput).length === 0;\n if (isBreakpointUnused) {\n delete acc[key];\n }\n return acc;\n }, style);\n}\nexport function mergeBreakpointsInOrder(breakpointsInput, ...styles) {\n const emptyBreakpoints = createEmptyBreakpointObject(breakpointsInput);\n const mergedOutput = [emptyBreakpoints, ...styles].reduce((prev, next) => deepmerge(prev, next), {});\n return removeUnusedBreakpoints(Object.keys(emptyBreakpoints), mergedOutput);\n}\n\n// compute base for responsive values; e.g.,\n// [1,2,3] => {xs: true, sm: true, md: true}\n// {xs: 1, sm: 2, md: 3} => {xs: true, sm: true, md: true}\nexport function computeBreakpointsBase(breakpointValues, themeBreakpoints) {\n // fixed value\n if (typeof breakpointValues !== 'object') {\n return {};\n }\n const base = {};\n const breakpointsKeys = Object.keys(themeBreakpoints);\n if (Array.isArray(breakpointValues)) {\n breakpointsKeys.forEach((breakpoint, i) => {\n if (i < breakpointValues.length) {\n base[breakpoint] = true;\n }\n });\n } else {\n breakpointsKeys.forEach(breakpoint => {\n if (breakpointValues[breakpoint] != null) {\n base[breakpoint] = true;\n }\n });\n }\n return base;\n}\nexport function resolveBreakpointValues({\n values: breakpointValues,\n breakpoints: themeBreakpoints,\n base: customBase\n}) {\n const base = customBase || computeBreakpointsBase(breakpointValues, themeBreakpoints);\n const keys = Object.keys(base);\n if (keys.length === 0) {\n return breakpointValues;\n }\n let previous;\n return keys.reduce((acc, breakpoint, i) => {\n if (Array.isArray(breakpointValues)) {\n acc[breakpoint] = breakpointValues[i] != null ? breakpointValues[i] : breakpointValues[previous];\n previous = i;\n } else if (typeof breakpointValues === 'object') {\n acc[breakpoint] = breakpointValues[breakpoint] != null ? breakpointValues[breakpoint] : breakpointValues[previous];\n previous = breakpoint;\n } else {\n acc[breakpoint] = breakpointValues;\n }\n return acc;\n }, {});\n}\nexport default breakpoints;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/**\n * For using in `sx` prop to sort the breakpoint from low to high.\n * Note: this function does not work and will not support multiple units.\n * e.g. input: { '@container (min-width:300px)': '1rem', '@container (min-width:40rem)': '2rem' }\n * output: { '@container (min-width:40rem)': '2rem', '@container (min-width:300px)': '1rem' } // since 40 < 300 eventhough 40rem > 300px\n */\nexport function sortContainerQueries(theme, css) {\n if (!theme.containerQueries) {\n return css;\n }\n const sorted = Object.keys(css).filter(key => key.startsWith('@container')).sort((a, b) => {\n const regex = /min-width:\\s*([0-9.]+)/;\n return +(a.match(regex)?.[1] || 0) - +(b.match(regex)?.[1] || 0);\n });\n if (!sorted.length) {\n return css;\n }\n return sorted.reduce((acc, key) => {\n const value = css[key];\n delete acc[key];\n acc[key] = value;\n return acc;\n }, {\n ...css\n });\n}\nexport function isCqShorthand(breakpointKeys, value) {\n return value === '@' || value.startsWith('@') && (breakpointKeys.some(key => value.startsWith(`@${key}`)) || !!value.match(/^@\\d/));\n}\nexport function getContainerQuery(theme, shorthand) {\n const matches = shorthand.match(/^@([^/]+)?\\/?(.+)?$/);\n if (!matches) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The provided shorthand ${`(${shorthand})`} is invalid. The format should be \\`@<breakpoint | number>\\` or \\`@<breakpoint | number>/<container>\\`.\\n` + 'For example, `@sm` or `@600` or `@40rem/sidebar`.' : _formatErrorMessage(18, `(${shorthand})`));\n }\n return null;\n }\n const [, containerQuery, containerName] = matches;\n const value = Number.isNaN(+containerQuery) ? containerQuery || 0 : +containerQuery;\n return theme.containerQueries(containerName).up(value);\n}\nexport default function cssContainerQueries(themeInput) {\n const toContainerQuery = (mediaQuery, name) => mediaQuery.replace('@media', name ? `@container ${name}` : '@container');\n function attachCq(node, name) {\n node.up = (...args) => toContainerQuery(themeInput.breakpoints.up(...args), name);\n node.down = (...args) => toContainerQuery(themeInput.breakpoints.down(...args), name);\n node.between = (...args) => toContainerQuery(themeInput.breakpoints.between(...args), name);\n node.only = (...args) => toContainerQuery(themeInput.breakpoints.only(...args), name);\n node.not = (...args) => {\n const result = toContainerQuery(themeInput.breakpoints.not(...args), name);\n if (result.includes('not all and')) {\n // `@container` does not work with `not all and`, so need to invert the logic\n return result.replace('not all and ', '').replace('min-width:', 'width<').replace('max-width:', 'width>').replace('and', 'or');\n }\n return result;\n };\n }\n const node = {};\n const containerQueries = name => {\n attachCq(node, name);\n return node;\n };\n attachCq(containerQueries);\n return {\n ...themeInput,\n containerQueries\n };\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n if (typeof string !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `capitalize(string)` expects a string argument.' : _formatErrorMessage(7));\n }\n return string.charAt(0).toUpperCase() + string.slice(1);\n}","import capitalize from '@mui/utils/capitalize';\nimport responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function getPath(obj, path, checkVars = true) {\n if (!path || typeof path !== 'string') {\n return null;\n }\n\n // Check if CSS variables are used\n if (obj && obj.vars && checkVars) {\n const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);\n if (val != null) {\n return val;\n }\n }\n return path.split('.').reduce((acc, item) => {\n if (acc && acc[item] != null) {\n return acc[item];\n }\n return null;\n }, obj);\n}\nexport function getStyleValue(themeMapping, transform, propValueFinal, userValue = propValueFinal) {\n let value;\n if (typeof themeMapping === 'function') {\n value = themeMapping(propValueFinal);\n } else if (Array.isArray(themeMapping)) {\n value = themeMapping[propValueFinal] || userValue;\n } else {\n value = getPath(themeMapping, propValueFinal) || userValue;\n }\n if (transform) {\n value = transform(value, userValue, themeMapping);\n }\n return value;\n}\nfunction style(options) {\n const {\n prop,\n cssProperty = options.prop,\n themeKey,\n transform\n } = options;\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n if (props[prop] == null) {\n return null;\n }\n const propValue = props[prop];\n const theme = props.theme;\n const themeMapping = getPath(theme, themeKey) || {};\n const styleFromPropValue = propValueFinal => {\n let value = getStyleValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getStyleValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, propValue, styleFromPropValue);\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? {\n [prop]: responsivePropType\n } : {};\n fn.filterProps = [prop];\n return fn;\n}\nexport default style;","import responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport { getPath } from \"../style/index.js\";\nimport merge from \"../merge/index.js\";\nimport memoize from \"../memoize/index.js\";\nconst properties = {\n m: 'margin',\n p: 'padding'\n};\nconst directions = {\n t: 'Top',\n r: 'Right',\n b: 'Bottom',\n l: 'Left',\n x: ['Left', 'Right'],\n y: ['Top', 'Bottom']\n};\nconst aliases = {\n marginX: 'mx',\n marginY: 'my',\n paddingX: 'px',\n paddingY: 'py'\n};\n\n// memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\nconst getCssProperties = memoize(prop => {\n // It's not a shorthand notation.\n if (prop.length > 2) {\n if (aliases[prop]) {\n prop = aliases[prop];\n } else {\n return [prop];\n }\n }\n const [a, b] = prop.split('');\n const property = properties[a];\n const direction = directions[b] || '';\n return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];\n});\nexport const marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];\nexport const paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];\nconst spacingKeys = [...marginKeys, ...paddingKeys];\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n const themeSpacing = getPath(theme, themeKey, true) ?? defaultValue;\n if (typeof themeSpacing === 'number' || typeof themeSpacing === 'string') {\n return val => {\n if (typeof val === 'string') {\n return val;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (typeof val !== 'number') {\n console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${val}.`);\n }\n }\n if (typeof themeSpacing === 'string') {\n if (themeSpacing.startsWith('var(') && val === 0) {\n return 0;\n }\n if (themeSpacing.startsWith('var(') && val === 1) {\n return themeSpacing;\n }\n return `calc(${val} * ${themeSpacing})`;\n }\n return themeSpacing * val;\n };\n }\n if (Array.isArray(themeSpacing)) {\n return val => {\n if (typeof val === 'string') {\n return val;\n }\n const abs = Math.abs(val);\n if (process.env.NODE_ENV !== 'production') {\n if (!Number.isInteger(abs)) {\n console.error([`MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` + `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`].join('\\n'));\n } else if (abs > themeSpacing.length - 1) {\n console.error([`MUI: The value provided (${abs}) overflows.`, `The supported values are: ${JSON.stringify(themeSpacing)}.`, `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`].join('\\n'));\n }\n }\n const transformed = themeSpacing[abs];\n if (val >= 0) {\n return transformed;\n }\n if (typeof transformed === 'number') {\n return -transformed;\n }\n if (typeof transformed === 'string' && transformed.startsWith('var(')) {\n return `calc(-1 * ${transformed})`;\n }\n return `-${transformed}`;\n };\n }\n if (typeof themeSpacing === 'function') {\n return themeSpacing;\n }\n if (process.env.NODE_ENV !== 'production') {\n console.error([`MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`, 'It should be a number, an array or a function.'].join('\\n'));\n }\n return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n return createUnaryUnit(theme, 'spacing', 8, 'spacing');\n}\nexport function getValue(transformer, propValue) {\n if (typeof propValue === 'string' || propValue == null) {\n return propValue;\n }\n return transformer(propValue);\n}\nexport function getStyleFromPropValue(cssProperties, transformer) {\n return propValue => cssProperties.reduce((acc, cssProperty) => {\n acc[cssProperty] = getValue(transformer, propValue);\n return acc;\n }, {});\n}\nfunction resolveCssProperty(props, keys, prop, transformer) {\n // Using a hash computation over an array iteration could be faster, but with only 28 items,\n // it's doesn't worth the bundle size.\n if (!keys.includes(prop)) {\n return null;\n }\n const cssProperties = getCssProperties(prop);\n const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n const propValue = props[prop];\n return handleBreakpoints(props, propValue, styleFromPropValue);\n}\nfunction style(props, keys) {\n const transformer = createUnarySpacing(props.theme);\n return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge, {});\n}\nexport function margin(props) {\n return style(props, marginKeys);\n}\nmargin.propTypes = process.env.NODE_ENV !== 'production' ? marginKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nmargin.filterProps = marginKeys;\nexport function padding(props) {\n return style(props, paddingKeys);\n}\npadding.propTypes = process.env.NODE_ENV !== 'production' ? paddingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\npadding.filterProps = paddingKeys;\nfunction spacing(props) {\n return style(props, spacingKeys);\n}\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","export default function memoize(fn) {\n const cache = {};\n return arg => {\n if (cache[arg] === undefined) {\n cache[arg] = fn(arg);\n }\n return cache[arg];\n };\n}","import merge from \"../merge/index.js\";\nfunction compose(...styles) {\n const handlers = styles.reduce((acc, style) => {\n style.filterProps.forEach(prop => {\n acc[prop] = style;\n });\n return acc;\n }, {});\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n return Object.keys(props).reduce((acc, prop) => {\n if (handlers[prop]) {\n return merge(acc, handlers[prop](props));\n }\n return acc;\n }, {});\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? styles.reduce((acc, style) => Object.assign(acc, style.propTypes), {}) : {};\n fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);\n return fn;\n}\nexport default compose;","import responsivePropType from \"../responsivePropType/index.js\";\nimport style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function borderTransform(value) {\n if (typeof value !== 'number') {\n return value;\n }\n return `${value}px solid`;\n}\nfunction createBorderStyle(prop, transform) {\n return style({\n prop,\n themeKey: 'borders',\n transform\n });\n}\nexport const border = createBorderStyle('border', borderTransform);\nexport const borderTop = createBorderStyle('borderTop', borderTransform);\nexport const borderRight = createBorderStyle('borderRight', borderTransform);\nexport const borderBottom = createBorderStyle('borderBottom', borderTransform);\nexport const borderLeft = createBorderStyle('borderLeft', borderTransform);\nexport const borderColor = createBorderStyle('borderColor');\nexport const borderTopColor = createBorderStyle('borderTopColor');\nexport const borderRightColor = createBorderStyle('borderRightColor');\nexport const borderBottomColor = createBorderStyle('borderBottomColor');\nexport const borderLeftColor = createBorderStyle('borderLeftColor');\nexport const outline = createBorderStyle('outline', borderTransform);\nexport const outlineColor = createBorderStyle('outlineColor');\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const borderRadius = props => {\n if (props.borderRadius !== undefined && props.borderRadius !== null) {\n const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');\n const styleFromPropValue = propValue => ({\n borderRadius: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.borderRadius, styleFromPropValue);\n }\n return null;\n};\nborderRadius.propTypes = process.env.NODE_ENV !== 'production' ? {\n borderRadius: responsivePropType\n} : {};\nborderRadius.filterProps = ['borderRadius'];\nconst borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);\nexport default borders;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport responsivePropType from \"../responsivePropType/index.js\";\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const gap = props => {\n if (props.gap !== undefined && props.gap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap');\n const styleFromPropValue = propValue => ({\n gap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.gap, styleFromPropValue);\n }\n return null;\n};\ngap.propTypes = process.env.NODE_ENV !== 'production' ? {\n gap: responsivePropType\n} : {};\ngap.filterProps = ['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const columnGap = props => {\n if (props.columnGap !== undefined && props.columnGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap');\n const styleFromPropValue = propValue => ({\n columnGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.columnGap, styleFromPropValue);\n }\n return null;\n};\ncolumnGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n columnGap: responsivePropType\n} : {};\ncolumnGap.filterProps = ['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const rowGap = props => {\n if (props.rowGap !== undefined && props.rowGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap');\n const styleFromPropValue = propValue => ({\n rowGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.rowGap, styleFromPropValue);\n }\n return null;\n};\nrowGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n rowGap: responsivePropType\n} : {};\nrowGap.filterProps = ['rowGap'];\nexport const gridColumn = style({\n prop: 'gridColumn'\n});\nexport const gridRow = style({\n prop: 'gridRow'\n});\nexport const gridAutoFlow = style({\n prop: 'gridAutoFlow'\n});\nexport const gridAutoColumns = style({\n prop: 'gridAutoColumns'\n});\nexport const gridAutoRows = style({\n prop: 'gridAutoRows'\n});\nexport const gridTemplateColumns = style({\n prop: 'gridTemplateColumns'\n});\nexport const gridTemplateRows = style({\n prop: 'gridTemplateRows'\n});\nexport const gridTemplateAreas = style({\n prop: 'gridTemplateAreas'\n});\nexport const gridArea = style({\n prop: 'gridArea'\n});\nconst grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\nexport default grid;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nexport function paletteTransform(value, userValue) {\n if (userValue === 'grey') {\n return userValue;\n }\n return value;\n}\nexport const color = style({\n prop: 'color',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const bgcolor = style({\n prop: 'bgcolor',\n cssProperty: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const backgroundColor = style({\n prop: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nconst palette = compose(color, bgcolor, backgroundColor);\nexport default palette;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { handleBreakpoints, values as breakpointsValues } from \"../breakpoints/index.js\";\nexport function sizingTransform(value) {\n return value <= 1 && value !== 0 ? `${value * 100}%` : value;\n}\nexport const width = style({\n prop: 'width',\n transform: sizingTransform\n});\nexport const maxWidth = props => {\n if (props.maxWidth !== undefined && props.maxWidth !== null) {\n const styleFromPropValue = propValue => {\n const breakpoint = props.theme?.breakpoints?.values?.[propValue] || breakpointsValues[propValue];\n if (!breakpoint) {\n return {\n maxWidth: sizingTransform(propValue)\n };\n }\n if (props.theme?.breakpoints?.unit !== 'px') {\n return {\n maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`\n };\n }\n return {\n maxWidth: breakpoint\n };\n };\n return handleBreakpoints(props, props.maxWidth, styleFromPropValue);\n }\n return null;\n};\nmaxWidth.filterProps = ['maxWidth'];\nexport const minWidth = style({\n prop: 'minWidth',\n transform: sizingTransform\n});\nexport const height = style({\n prop: 'height',\n transform: sizingTransform\n});\nexport const maxHeight = style({\n prop: 'maxHeight',\n transform: sizingTransform\n});\nexport const minHeight = style({\n prop: 'minHeight',\n transform: sizingTransform\n});\nexport const sizeWidth = style({\n prop: 'size',\n cssProperty: 'width',\n transform: sizingTransform\n});\nexport const sizeHeight = style({\n prop: 'size',\n cssProperty: 'height',\n transform: sizingTransform\n});\nexport const boxSizing = style({\n prop: 'boxSizing'\n});\nconst sizing = compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\nexport default sizing;","import { padding, margin } from \"../spacing/index.js\";\nimport { borderRadius, borderTransform } from \"../borders/index.js\";\nimport { gap, rowGap, columnGap } from \"../cssGrid/index.js\";\nimport { paletteTransform } from \"../palette/index.js\";\nimport { maxWidth, sizingTransform } from \"../sizing/index.js\";\nconst defaultSxConfig = {\n // borders\n border: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderTop: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderRight: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderBottom: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderLeft: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderColor: {\n themeKey: 'palette'\n },\n borderTopColor: {\n themeKey: 'palette'\n },\n borderRightColor: {\n themeKey: 'palette'\n },\n borderBottomColor: {\n themeKey: 'palette'\n },\n borderLeftColor: {\n themeKey: 'palette'\n },\n outline: {\n themeKey: 'borders',\n transform: borderTransform\n },\n outlineColor: {\n themeKey: 'palette'\n },\n borderRadius: {\n themeKey: 'shape.borderRadius',\n style: borderRadius\n },\n // palette\n color: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n bgcolor: {\n themeKey: 'palette',\n cssProperty: 'backgroundColor',\n transform: paletteTransform\n },\n backgroundColor: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n // spacing\n p: {\n style: padding\n },\n pt: {\n style: padding\n },\n pr: {\n style: padding\n },\n pb: {\n style: padding\n },\n pl: {\n style: padding\n },\n px: {\n style: padding\n },\n py: {\n style: padding\n },\n padding: {\n style: padding\n },\n paddingTop: {\n style: padding\n },\n paddingRight: {\n style: padding\n },\n paddingBottom: {\n style: padding\n },\n paddingLeft: {\n style: padding\n },\n paddingX: {\n style: padding\n },\n paddingY: {\n style: padding\n },\n paddingInline: {\n style: padding\n },\n paddingInlineStart: {\n style: padding\n },\n paddingInlineEnd: {\n style: padding\n },\n paddingBlock: {\n style: padding\n },\n paddingBlockStart: {\n style: padding\n },\n paddingBlockEnd: {\n style: padding\n },\n m: {\n style: margin\n },\n mt: {\n style: margin\n },\n mr: {\n style: margin\n },\n mb: {\n style: margin\n },\n ml: {\n style: margin\n },\n mx: {\n style: margin\n },\n my: {\n style: margin\n },\n margin: {\n style: margin\n },\n marginTop: {\n style: margin\n },\n marginRight: {\n style: margin\n },\n marginBottom: {\n style: margin\n },\n marginLeft: {\n style: margin\n },\n marginX: {\n style: margin\n },\n marginY: {\n style: margin\n },\n marginInline: {\n style: margin\n },\n marginInlineStart: {\n style: margin\n },\n marginInlineEnd: {\n style: margin\n },\n marginBlock: {\n style: margin\n },\n marginBlockStart: {\n style: margin\n },\n marginBlockEnd: {\n style: margin\n },\n // display\n displayPrint: {\n cssProperty: false,\n transform: value => ({\n '@media print': {\n display: value\n }\n })\n },\n display: {},\n overflow: {},\n textOverflow: {},\n visibility: {},\n whiteSpace: {},\n // flexbox\n flexBasis: {},\n flexDirection: {},\n flexWrap: {},\n justifyContent: {},\n alignItems: {},\n alignContent: {},\n order: {},\n flex: {},\n flexGrow: {},\n flexShrink: {},\n alignSelf: {},\n justifyItems: {},\n justifySelf: {},\n // grid\n gap: {\n style: gap\n },\n rowGap: {\n style: rowGap\n },\n columnGap: {\n style: columnGap\n },\n gridColumn: {},\n gridRow: {},\n gridAutoFlow: {},\n gridAutoColumns: {},\n gridAutoRows: {},\n gridTemplateColumns: {},\n gridTemplateRows: {},\n gridTemplateAreas: {},\n gridArea: {},\n // positions\n position: {},\n zIndex: {\n themeKey: 'zIndex'\n },\n top: {},\n right: {},\n bottom: {},\n left: {},\n // shadows\n boxShadow: {\n themeKey: 'shadows'\n },\n // sizing\n width: {\n transform: sizingTransform\n },\n maxWidth: {\n style: maxWidth\n },\n minWidth: {\n transform: sizingTransform\n },\n height: {\n transform: sizingTransform\n },\n maxHeight: {\n transform: sizingTransform\n },\n minHeight: {\n transform: sizingTransform\n },\n boxSizing: {},\n // typography\n font: {\n themeKey: 'font'\n },\n fontFamily: {\n themeKey: 'typography'\n },\n fontSize: {\n themeKey: 'typography'\n },\n fontStyle: {\n themeKey: 'typography'\n },\n fontWeight: {\n themeKey: 'typography'\n },\n letterSpacing: {},\n textTransform: {},\n lineHeight: {},\n textAlign: {},\n typography: {\n cssProperty: false,\n themeKey: 'typography'\n }\n};\nexport default defaultSxConfig;","import capitalize from '@mui/utils/capitalize';\nimport merge from \"../merge/index.js\";\nimport { getPath, getStyleValue as getValue } from \"../style/index.js\";\nimport { handleBreakpoints, createEmptyBreakpointObject, removeUnusedBreakpoints } from \"../breakpoints/index.js\";\nimport { sortContainerQueries } from \"../cssContainerQueries/index.js\";\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nfunction objectsHaveSameKeys(...objects) {\n const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);\n const union = new Set(allKeys);\n return objects.every(object => union.size === Object.keys(object).length);\n}\nfunction callIfFn(maybeFn, arg) {\n return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function unstable_createStyleFunctionSx() {\n function getThemeValue(prop, val, theme, config) {\n const props = {\n [prop]: val,\n theme\n };\n const options = config[prop];\n if (!options) {\n return {\n [prop]: val\n };\n }\n const {\n cssProperty = prop,\n themeKey,\n transform,\n style\n } = options;\n if (val == null) {\n return null;\n }\n\n // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123\n if (themeKey === 'typography' && val === 'inherit') {\n return {\n [prop]: val\n };\n }\n const themeMapping = getPath(theme, themeKey) || {};\n if (style) {\n return style(props);\n }\n const styleFromPropValue = propValueFinal => {\n let value = getValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, val, styleFromPropValue);\n }\n function styleFunctionSx(props) {\n const {\n sx,\n theme = {}\n } = props || {};\n if (!sx) {\n return null; // Emotion & styled-components will neglect null\n }\n const config = theme.unstable_sxConfig ?? defaultSxConfig;\n\n /*\n * Receive `sxInput` as object or callback\n * and then recursively check keys & values to create media query object styles.\n * (the result will be used in `styled`)\n */\n function traverse(sxInput) {\n let sxObject = sxInput;\n if (typeof sxInput === 'function') {\n sxObject = sxInput(theme);\n } else if (typeof sxInput !== 'object') {\n // value\n return sxInput;\n }\n if (!sxObject) {\n return null;\n }\n const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);\n const breakpointsKeys = Object.keys(emptyBreakpoints);\n let css = emptyBreakpoints;\n Object.keys(sxObject).forEach(styleKey => {\n const value = callIfFn(sxObject[styleKey], theme);\n if (value !== null && value !== undefined) {\n if (typeof value === 'object') {\n if (config[styleKey]) {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n } else {\n const breakpointsValues = handleBreakpoints({\n theme\n }, value, x => ({\n [styleKey]: x\n }));\n if (objectsHaveSameKeys(breakpointsValues, value)) {\n css[styleKey] = styleFunctionSx({\n sx: value,\n theme\n });\n } else {\n css = merge(css, breakpointsValues);\n }\n }\n } else {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n }\n }\n });\n return sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css));\n }\n return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);\n }\n return styleFunctionSx;\n}\nconst styleFunctionSx = unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps = ['sx'];\nexport default styleFunctionSx;","/**\n * A universal utility to style components with multiple color modes. Always use it from the theme object.\n * It works with:\n * - [Basic theme](https://mui.com/material-ui/customization/dark-mode/)\n * - [CSS theme variables](https://mui.com/material-ui/customization/css-theme-variables/overview/)\n * - Zero-runtime engine\n *\n * Tips: Use an array over object spread and place `theme.applyStyles()` last.\n *\n * With the styled function:\n * ✅ [{ background: '#e5e5e5' }, theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * With the sx prop:\n * ✅ [{ background: '#e5e5e5' }, theme => theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme => theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * @example\n * 1. using with `styled`:\n * ```jsx\n * const Component = styled('div')(({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]);\n * ```\n *\n * @example\n * 2. using with `sx` prop:\n * ```jsx\n * <Box sx={[\n * { background: '#e5e5e5' },\n * theme => theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]}\n * />\n * ```\n *\n * @example\n * 3. theming a component:\n * ```jsx\n * extendTheme({\n * components: {\n * MuiButton: {\n * styleOverrides: {\n * root: ({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ],\n * },\n * }\n * }\n * })\n *```\n */\nexport default function applyStyles(key, styles) {\n // @ts-expect-error this is 'any' type\n const theme = this;\n if (theme.vars) {\n if (!theme.colorSchemes?.[key] || typeof theme.getColorSchemeSelector !== 'function') {\n return {};\n }\n // If CssVarsProvider is used as a provider, returns '*:where({selector}) &'\n let selector = theme.getColorSchemeSelector(key);\n if (selector === '&') {\n return styles;\n }\n if (selector.includes('data-') || selector.includes('.')) {\n // '*' is required as a workaround for Emotion issue (https://github.com/emotion-js/emotion/issues/2836)\n selector = `*:where(${selector.replace(/\\s*&$/, '')}) &`;\n }\n return {\n [selector]: styles\n };\n }\n if (theme.palette.mode === key) {\n return styles;\n }\n return {};\n}","'use client';\n\nimport * as React from 'react';\nimport { ThemeContext } from '@mui/styled-engine';\nfunction isObjectEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction useTheme(defaultTheme = null) {\n const contextTheme = React.useContext(ThemeContext);\n return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme : contextTheme;\n}\nexport default useTheme;","'use client';\n\nimport createTheme from \"../createTheme/index.js\";\nimport useThemeWithoutDefault from \"../useThemeWithoutDefault/index.js\";\nexport const systemDefaultTheme = createTheme();\nfunction useTheme(defaultTheme = systemDefaultTheme) {\n return useThemeWithoutDefault(defaultTheme);\n}\nexport default useTheme;","import deepmerge from '@mui/utils/deepmerge';\nimport createBreakpoints from \"../createBreakpoints/createBreakpoints.js\";\nimport cssContainerQueries from \"../cssContainerQueries/index.js\";\nimport shape from \"./shape.js\";\nimport createSpacing from \"./createSpacing.js\";\nimport styleFunctionSx from \"../styleFunctionSx/styleFunctionSx.js\";\nimport defaultSxConfig from \"../styleFunctionSx/defaultSxConfig.js\";\nimport applyStyles from \"./applyStyles.js\";\nfunction createTheme(options = {}, ...args) {\n const {\n breakpoints: breakpointsInput = {},\n palette: paletteInput = {},\n spacing: spacingInput,\n shape: shapeInput = {},\n ...other\n } = options;\n const breakpoints = createBreakpoints(breakpointsInput);\n const spacing = createSpacing(spacingInput);\n let muiTheme = deepmerge({\n breakpoints,\n direction: 'ltr',\n components: {},\n // Inject component definitions.\n palette: {\n mode: 'light',\n ...paletteInput\n },\n spacing,\n shape: {\n ...shape,\n ...shapeInput\n }\n }, other);\n muiTheme = cssContainerQueries(muiTheme);\n muiTheme.applyStyles = applyStyles;\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n muiTheme.unstable_sxConfig = {\n ...defaultSxConfig,\n ...other?.unstable_sxConfig\n };\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n return muiTheme;\n}\nexport default createTheme;","import { createUnarySpacing } from \"../spacing/index.js\";\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n\nexport default function createSpacing(spacingInput = 8,\n// Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.\n// Smaller components, such as icons, can align to a 4dp grid.\n// https://m2.material.io/design/layout/understanding-layout.html\ntransform = createUnarySpacing({\n spacing: spacingInput\n})) {\n // Already transformed.\n if (spacingInput.mui) {\n return spacingInput;\n }\n const spacing = (...argsInput) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!(argsInput.length <= 4)) {\n console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);\n }\n }\n const args = argsInput.length === 0 ? [1] : argsInput;\n return args.map(argument => {\n const output = transform(argument);\n return typeof output === 'number' ? `${output}px` : output;\n }).join(' ');\n };\n spacing.mui = true;\n return spacing;\n}","import { isPlainObject } from '@mui/utils/deepmerge';\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nconst splitProps = props => {\n const result = {\n systemProps: {},\n otherProps: {}\n };\n const config = props?.theme?.unstable_sxConfig ?? defaultSxConfig;\n Object.keys(props).forEach(prop => {\n if (config[prop]) {\n result.systemProps[prop] = props[prop];\n } else {\n result.otherProps[prop] = props[prop];\n }\n });\n return result;\n};\nexport default function extendSxProp(props) {\n const {\n sx: inSx,\n ...other\n } = props;\n const {\n systemProps,\n otherProps\n } = splitProps(other);\n let finalSx;\n if (Array.isArray(inSx)) {\n finalSx = [systemProps, ...inSx];\n } else if (typeof inSx === 'function') {\n finalSx = (...args) => {\n const result = inSx(...args);\n if (!isPlainObject(result)) {\n return systemProps;\n }\n return {\n ...systemProps,\n ...result\n };\n };\n } else {\n finalSx = {\n ...systemProps,\n ...inSx\n };\n }\n return {\n ...otherProps,\n sx: finalSx\n };\n}","const defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n let generate = defaultGenerator;\n return {\n configure(generator) {\n generate = generator;\n },\n generate(componentName) {\n return generate(componentName);\n },\n reset() {\n generate = defaultGenerator;\n }\n };\n};\nconst ClassNameGenerator = createClassNameGenerator();\nexport default ClassNameGenerator;","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import ClassNameGenerator from \"../ClassNameGenerator/index.js\";\nexport const globalStateClasses = {\n active: 'active',\n checked: 'checked',\n completed: 'completed',\n disabled: 'disabled',\n error: 'error',\n expanded: 'expanded',\n focused: 'focused',\n focusVisible: 'focusVisible',\n open: 'open',\n readOnly: 'readOnly',\n required: 'required',\n selected: 'selected'\n};\nexport default function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n const globalStateClass = globalStateClasses[slot];\n return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator.generate(componentName)}-${slot}`;\n}\nexport function isGlobalState(slot) {\n return globalStateClasses[slot] !== undefined;\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nconst boxClasses = generateUtilityClasses('MuiBox', ['root']);\nexport default boxClasses;","'use client';\n\nimport PropTypes from 'prop-types';\nimport ClassNameGenerator from '@mui/utils/ClassNameGenerator';\nimport createBox from \"../createBox/index.js\";\nimport boxClasses from \"./boxClasses.js\";\nconst Box = createBox({\n defaultClassName: boxClasses.root,\n generateClassName: ClassNameGenerator.generate\n});\nprocess.env.NODE_ENV !== \"production\" ? Box.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Box;","'use client';\n\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport styled from '@mui/styled-engine';\nimport styleFunctionSx, { extendSxProp } from \"../styleFunctionSx/index.js\";\nimport useTheme from \"../useTheme/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createBox(options = {}) {\n const {\n themeId,\n defaultTheme,\n defaultClassName = 'MuiBox-root',\n generateClassName\n } = options;\n const BoxRoot = styled('div', {\n shouldForwardProp: prop => prop !== 'theme' && prop !== 'sx' && prop !== 'as'\n })(styleFunctionSx);\n const Box = /*#__PURE__*/React.forwardRef(function Box(inProps, ref) {\n const theme = useTheme(defaultTheme);\n const {\n className,\n component = 'div',\n ...other\n } = extendSxProp(inProps);\n return /*#__PURE__*/_jsx(BoxRoot, {\n as: component,\n ref: ref,\n className: clsx(className, generateClassName ? generateClassName(defaultClassName) : defaultClassName),\n theme: themeId ? theme[themeId] || theme : theme,\n ...other\n });\n });\n return Box;\n}","/**\n * @mui/styled-engine v7.1.1\n *\n * @license MIT\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use client';\n\n/* eslint-disable no-underscore-dangle */\nimport emStyled from '@emotion/styled';\nimport { serializeStyles as emSerializeStyles } from '@emotion/serialize';\nexport default function styled(tag, options) {\n const stylesFactory = emStyled(tag, options);\n if (process.env.NODE_ENV !== 'production') {\n return (...styles) => {\n const component = typeof tag === 'string' ? `\"${tag}\"` : 'component';\n if (styles.length === 0) {\n console.error([`MUI: Seems like you called \\`styled(${component})()\\` without a \\`style\\` argument.`, 'You must provide a `styles` argument: `styled(\"div\")(styleYouForgotToPass)`.'].join('\\n'));\n } else if (styles.some(style => style === undefined)) {\n console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);\n }\n return stylesFactory(...styles);\n };\n }\n return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_mutateStyles(tag, processor) {\n // Emotion attaches all the styles as `__emotion_styles`.\n // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n if (Array.isArray(tag.__emotion_styles)) {\n tag.__emotion_styles = processor(tag.__emotion_styles);\n }\n}\n\n// Emotion only accepts an array, but we want to avoid allocations\nconst wrapper = [];\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_serializeStyles(styles) {\n wrapper[0] = styles;\n return emSerializeStyles(wrapper);\n}\nexport { ThemeContext, keyframes, css } from '@emotion/react';\nexport { default as StyledEngineProvider } from \"./StyledEngineProvider/index.js\";\nexport { default as GlobalStyles } from \"./GlobalStyles/index.js\";","import generateUtilityClass from \"../generateUtilityClass/index.js\";\nexport default function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n const result = {};\n slots.forEach(slot => {\n result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);\n });\n return result;\n}","export function hasDigitsOnly(str: string) {\n return /^\\d+$/.test(str);\n}\n\nexport function isNumber(value: any) {\n return typeof value === \"number\" && !isNaN(value);\n}\n\nexport function isNumeric(value: string) {\n return (\n typeof value === \"string\" && value.trim() !== \"\" && !isNaN(Number(value))\n );\n}\n\nexport function capitalizeFirstLetter(str: string) {\n if (!str) return \"\";\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function isValidEmail(email) {\n const re = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return re.test(email);\n}\n\nexport function timeAgo(dateInput, appDirection: \"ltr\" | \"rtl\") {\n const date = new Date(dateInput);\n const now = new Date();\n const diffInSeconds = Math.floor((date - now) / 1000); // Note: future is positive\n const absDiff = Math.abs(diffInSeconds);\n\n const locale = appDirection === \"rtl\" ? \"ar\" : \"en\";\n\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: \"auto\" });\n\n const units = [\n { unit: \"year\", seconds: 31536000 },\n { unit: \"month\", seconds: 2592000 },\n { unit: \"week\", seconds: 604800 },\n { unit: \"day\", seconds: 86400 },\n { unit: \"hour\", seconds: 3600 },\n { unit: \"minute\", seconds: 60 },\n { unit: \"second\", seconds: 1 },\n ];\n\n for (const { unit, seconds } of units) {\n const delta = Math.floor(diffInSeconds / seconds);\n if (Math.abs(delta) > 1) {\n return rtf.format(delta, unit);\n }\n }\n\n return locale === \"ar\" ? \"الآن\" : \"just now\";\n}\n","import { Grid2 } from \"@mui/material\";\nimport TemplateTextField from \"./FormFields/TemplateTextField\";\nimport Datefield from \"./FormFields/Datefield\";\nimport DatetimeField from \"./FormFields/DatetimeField\";\nimport ComboBox from \"./FormFields/ComboBox\";\nimport CheckBox from \"./FormFields/CheckBox\";\nimport { DATE_FORMAT, DATE_TIME_FORMAT } from \"../../../../util/constants\";\nimport { isNumeric } from \"../../../../util/AppUtils\";\nimport { FormElementFieldProps } from \"../DataEntryTypes\";\nimport SystemLookupCombobox from \"./FormFields/SystemLookupCombobox\";\n\nconst FormElementField: React.FC<FormElementFieldProps> = (\n element: FormElementFieldProps\n) => {\n if (element?.fieldInfo) {\n const props = element.fieldInfo;\n const formManager = element?.formManager || null;\n const formActions = element?.formActions || null;\n const formValues = element?.formValues || null;\n const fieldName: any = element?.fieldInfo?.fieldName || null;\n const fieldType = element?.fieldInfo?.fieldType || null;\n if (!(props && formManager && formValues && fieldName && fieldType)) {\n return <></>;\n }\n return !element.hiddenFields.includes(fieldName) ? (\n <Grid2\n size={\n props?.formProps?.fieldSize || {\n lg: 12,\n md: 12,\n sm: 12,\n }\n }\n sx={{\n padding: 1,\n width: \"100%\",\n }}\n >\n {fieldType === \"text\" || fieldType === \"number\" ? (\n <TemplateTextField\n {...props.muiTextFieldProps}\n fullWidth\n type={fieldType}\n disabled={\n props?.disabled || element.disabledFields.includes(fieldName)\n ? true\n : false\n }\n hidden={props?.hidden || false}\n label={props?.fieldLabel}\n value={formValues[fieldName]}\n onChange={(event) => {\n let newValue = null;\n if (event.target.value != \"\") {\n if (fieldType === \"number\" && isNumeric(event.target.value)) {\n newValue = Number(event.target.value);\n } else {\n newValue = event.target.value;\n }\n }\n formManager.setValue(fieldName, newValue);\n if (props?.formProps?.onValueChangeCallBack) {\n props?.formProps?.onValueChangeCallBack(\n newValue,\n formManager,\n formActions\n );\n }\n }}\n sx={{\n \"& .MuiInputBase-root\": {\n height: `${props?.formProps?.fieldHeight}px` || undefined,\n },\n \"& .MuiInputBase-input\": {\n height: \"100% !important\", // forces full height usage\n },\n ...props?.formProps?.style,\n }}\n error={formManager.formState.errors[fieldName] != undefined}\n helperText={formManager?.formState?.errors[\n fieldName\n ]?.message?.toString()}\n />\n ) : props?.fieldType === \"date\" ? (\n <Datefield\n format={props?.dateFormat || DATE_FORMAT}\n sx={props?.formProps?.style || { width: \"100%\" }}\n disabled={\n props?.disabled || element.disabledFields.includes(fieldName)\n ? true\n : false\n }\n label={props?.fieldLabel}\n onChangeCallBack={(v: any) => {\n formManager.setValue(fieldName, v);\n if (props?.formProps?.onValueChangeCallBack) {\n props?.formProps?.onValueChangeCallBack(\n v,\n formManager,\n formActions\n );\n }\n }}\n value={formValues[fieldName]}\n error={formManager.formState.errors[fieldName] != undefined}\n errorMessage={formManager?.formState?.errors[\n fieldName\n ]?.message?.toString()}\n />\n ) : props?.fieldType === \"datetime\" ? (\n <DatetimeField\n format={props?.dateFormat || DATE_TIME_FORMAT}\n sx={props?.formProps?.style || { width: \"100%\" }}\n disabled={\n props?.disabled || element.disabledFields.includes(fieldName)\n ? true\n : false\n }\n label={props?.fieldLabel}\n onChangeCallBack={(v: any) => {\n formManager.setValue(fieldName, v);\n if (props?.formProps?.onValueChangeCallBack) {\n props?.formProps?.onValueChangeCallBack(\n v,\n formManager,\n formActions\n );\n }\n }}\n value={formValues[fieldName]}\n error={formManager.formState.errors[fieldName] != undefined}\n errorMessage={formManager?.formState?.errors[\n fieldName\n ]?.message?.toString()}\n />\n ) : props?.fieldType === \"checkbox\" ? (\n <CheckBox\n label={props?.fieldLabel}\n onChangeCallBack={(v: any) => {\n formManager.setValue(fieldName, v);\n if (props?.formProps?.onValueChangeCallBack) {\n props?.formProps?.onValueChangeCallBack(\n v,\n formManager,\n formActions\n );\n }\n }}\n value={formValues[fieldName]}\n checkedValue={props?.checkedValue || true}\n unCheckedValue={props?.unCheckedValue || false}\n disabled={\n props?.disabled || element.disabledFields.includes(fieldName)\n ? true\n : false\n }\n sx={props?.formProps?.style}\n />\n ) : props?.fieldType === \"combobox\" ? (\n <ComboBox\n sx={props?.formProps?.style || { width: \"100%\" }}\n label={props?.fieldLabel}\n disabled={\n props?.disabled || element.disabledFields.includes(fieldName)\n ? true\n : false\n }\n onChangeCallBack={(v: any, selectedRecord: any) => {\n let newValue = null;\n if (v) {\n newValue = v + \"\";\n }\n formManager.setValue(fieldName, newValue);\n if (props?.formProps?.onValueChangeCallBack) {\n props?.formProps?.onValueChangeCallBack(\n newValue,\n formManager,\n formActions,\n selectedRecord\n );\n }\n }}\n options={props?.options || []}\n displayField={props?.optionDisplayField || \"\"}\n valueField={props?.optionValueField || \"\"}\n value={formValues[fieldName]}\n errorMessage={formManager?.formState?.errors[\n fieldName\n ]?.message?.toString()}\n />\n ) : props?.fieldType === \"lookup\" ? (\n <SystemLookupCombobox\n sx={props?.formProps?.style || { width: \"100%\" }}\n label={props?.fieldLabel}\n disabled={\n props?.disabled || element.disabledFields.includes(fieldName)\n ? true\n : false\n }\n onChangeCallBack={(v: any, selectedRecord: any) => {\n let newValue = null;\n if (v) {\n newValue = v + \"\";\n }\n formManager.setValue(fieldName, newValue);\n if (props?.formProps?.onValueChangeCallBack) {\n props?.formProps?.onValueChangeCallBack(\n newValue,\n formManager,\n formActions,\n selectedRecord\n );\n }\n }}\n lookupType={props.lookupType}\n value={formValues[fieldName]}\n errorMessage={formManager?.formState?.errors[\n fieldName\n ]?.message?.toString()}\n />\n ) : null}\n </Grid2>\n ) : (\n <></>\n );\n } else {\n return <></>;\n }\n};\n\nexport default FormElementField;\n","import { Button } from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { RecordAction } from \"../DataEntryTypes\";\nimport useSession from \"../../../../hooks/UseSession\";\nimport { useConfirmationWindow } from \"../../../../hooks/UseConfirmationWindow\";\n\nconst FormAction: React.FC<RecordAction> = (action: RecordAction) => {\n const session = useSession();\n const { ConfirmationWindow, setOpen: setConfirmationWindowState } =\n useConfirmationWindow({\n body: action?.confirmationMessage || \"\",\n title: \"Confirmation\",\n onConfirmationCallBk: () => {\n action?.actionFn(action?.record);\n },\n });\n if (\n action?.authority === undefined ||\n action?.authority === null ||\n session.isUserAuthorized(action.authority)\n ) {\n return (\n <>\n <ConfirmationWindow />\n <Button\n variant={action?.formActionProps?.actionButtonVariant}\n color={action?.formActionProps?.actionButtonColor}\n onClick={() => {\n if (action?.actionFn) {\n if (action?.preActionValidation) {\n if (!action.preActionValidation(action.record)) {\n return;\n }\n }\n if (action?.isConfirmationRequired === true) {\n setConfirmationWindowState(true);\n } else {\n action?.actionFn(action.record);\n }\n }\n }}\n >\n {action?.icon ? (\n <FontAwesomeIcon\n icon={action.icon}\n style={{ marginRight: 5, marginLeft: 5 }}\n />\n ) : (\n <></>\n )}\n <div>{action?.label}</div>\n </Button>\n </>\n );\n } else {\n return <></>;\n }\n};\n\nexport default FormAction;\n","import { Grid2 } from \"@mui/material\";\nimport FormElementField from \"./FormElementField\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport FormAction from \"./FormAction\";\nimport {\n FormElementGroupProps,\n FormElementProps,\n RecordAction,\n} from \"../DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\n\nconst FormElementGroup: React.FC<FormElementGroupProps> = (\n props: FormElementGroupProps\n) => {\n const { t } = useTranslation();\n return (\n <>\n <Grid2 container sx={props?.style} alignItems=\"flex-start\">\n {props?.label ? (\n <Grid2\n size={12}\n sx={{\n padding: 1,\n fontWeight: \"bold\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n }}\n >\n {props?.icon ? (\n <>\n <FontAwesomeIcon\n icon={props.icon}\n style={{ marginRight: 5, marginLeft: 5 }}\n />\n <div>{t(props.label)}</div>\n </>\n ) : (\n <>{t(props.label)}</>\n )}\n </Grid2>\n ) : (\n <></>\n )}\n {props?.elements\n ? props.elements.map((element: FormElementProps) => {\n if (element.type === \"group\") {\n return (\n <FormElementGroup\n {...element.props}\n formManager={props.formManager}\n formValues={props.formValues}\n formActions={props.formActions}\n hiddenFields={props.hiddenFields}\n disabledFields={props.disabledFields}\n />\n );\n } else if (element.type === \"field\" && element.mode === \"props\") {\n return (\n <FormElementField\n fieldInfo={element.props}\n formManager={props.formManager}\n formValues={props.formValues}\n formActions={props.formActions}\n hiddenFields={props.hiddenFields}\n disabledFields={props.disabledFields}\n />\n );\n } else if (element.type === \"field\" && element.mode === \"node\") {\n return (\n <Grid2\n size={\n element?.props?.formProps?.fieldSize || {\n lg: 3,\n md: 6,\n sm: 12,\n }\n }\n sx={{ padding: 1, width: \"100%\" }}\n >\n <element.node\n formManager={props.formManager}\n formValues={props.formValues}\n formActions={props.formActions}\n />\n </Grid2>\n );\n }\n })\n : null}\n\n {props?.actions ? (\n <Grid2 size={{ sm: 12 }} sx={{ padding: 1 }}>\n {props.actions.map((action: RecordAction) => {\n return <FormAction {...action} record={props.formValues} />;\n })}\n </Grid2>\n ) : (\n <></>\n )}\n </Grid2>\n </>\n );\n};\n\nexport default FormElementGroup;\n","import { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Avatar, SxProps } from \"@mui/material\";\n\ntype AttachmentImageViewerProps = {\n attachmentId?: number;\n attachmentCode?: string;\n refKey?: string;\n category?: string;\n showAsAvatar?: boolean;\n onErrorImage?: string;\n style?: SxProps;\n};\n\nconst AttachmentImageViewer: React.FC<AttachmentImageViewerProps> = (props) => {\n const apiBaseUrl = useSelector(\n (state: any) => state.AppInfo.value.apiBaseUrl\n );\n const [imgSrc, setImgSrc] = useState(null);\n const handleImageSrc = () => {\n let imagePath = apiBaseUrl + \"/api/v1/attachment/\";\n if (props?.attachmentId) {\n imagePath += \"download?attachmentId=\" + props.attachmentId;\n } else {\n imagePath += `downloadImage?attachmentCode=${props.attachmentCode}&refKey=${props.refKey}`;\n if (props?.category) {\n imagePath += `&category=${props.category}`;\n }\n }\n setImgSrc(imagePath);\n };\n useEffect(() => {\n handleImageSrc();\n }, [props]);\n {\n /* </Avatar>\n src={imgSrc}\n loading={}\n sx={props.style}\n onError={() => {\n if (props?.onErrorImage) {\n setImgSrc(props.onErrorImage);\n } else {\n setImgSrc(\"/no_image.png\");\n }\n }}\n /> */\n }\n return props?.showAsAvatar ? (\n <Avatar\n sx={props.style}\n onError={() => {\n if (props?.onErrorImage) {\n setImgSrc(props.onErrorImage);\n } else {\n setImgSrc(\"/no_image.png\");\n }\n }}\n src={imgSrc}\n />\n ) : (\n <img\n src={imgSrc}\n loading=\"lazy\"\n alt=\"image\"\n onError={() => {\n if (props?.onErrorImage) {\n setImgSrc(props.onErrorImage);\n } else {\n setImgSrc(\"/no_image.png\");\n }\n }}\n style={{\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n display: \"block\",\n }}\n />\n );\n};\n\nexport default AttachmentImageViewer;\n","import Card from \"@mui/material/Card\";\nimport CardActions from \"@mui/material/CardActions\";\nimport CardContent from \"@mui/material/CardContent\";\nimport CardMedia from \"@mui/material/CardMedia\";\nimport Button from \"@mui/material/Button\";\nimport Typography from \"@mui/material/Typography\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { IconButton, Tooltip } from \"@mui/material\";\nimport { useAxios, useConfirmationWindow, useSession } from \"../../../hooks\";\nimport AttachmentImageViewer from \"./AttachmentImageViewer\";\n\nexport type attachment = {\n attachmentCode: string;\n setAttachmentConfig: (props: any) => void;\n id: number;\n attachmentConfigId: number;\n attachmentSize: number;\n category: string;\n docType: string;\n fileName: string;\n refKey: string;\n allowDelete?: boolean;\n downloadAuthorityKey?: string;\n remark: string;\n};\n\nconst AttachmentCard: React.FC<attachment> = (props) => {\n const { handleGetRequest, handleDeleteRequest } = useAxios();\n const { isUserAuthorized } = useSession();\n let allowDownload = true;\n if (props?.downloadAuthorityKey) {\n allowDownload = isUserAuthorized(props.downloadAuthorityKey);\n }\n const handleDelete = async () => {\n await handleDeleteRequest({\n endPointURI: \"api/v1/attachment/archive\",\n parameters: {\n attachmentCode: props.attachmentCode,\n refKey: props.refKey,\n attachmentId: props.id,\n },\n successCallBkFn: (response) => {\n props.setAttachmentConfig(response.data);\n },\n showMask: true,\n });\n };\n const { ConfirmationWindow, setOpen } = useConfirmationWindow({\n title: \"Confirmation\",\n body: \"Are you sure you want to delete this attachment?\",\n onConfirmationCallBk: () => {\n handleDelete();\n },\n });\n\n const handleDownload = async () => {\n await handleGetRequest({\n endPointURI: \"api/v1/attachment/download\",\n parameters: {\n attachmentId: props.id,\n },\n showMask: true,\n responseType: \"blob\",\n successCallBkFn: (response) => {\n const url = window.URL.createObjectURL(new Blob([response.data]));\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", props.fileName);\n document.body.appendChild(link);\n link.click();\n link.remove();\n },\n });\n };\n\n return (\n <>\n <ConfirmationWindow />\n <Card sx={{ width: 300, border: \"0.5px solid gray\" }}>\n <CardMedia\n sx={{\n height: 140,\n width: 300,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {props?.docType.toLocaleLowerCase().includes(\"image\") ? (\n <AttachmentImageViewer attachmentId={props.id} />\n ) : (\n <FontAwesomeIcon icon=\"file\" size=\"3x\" />\n )}\n </CardMedia>\n <CardContent>\n <Typography gutterBottom variant=\"h6\" component=\"div\">\n {props.fileName}\n </Typography>\n <Typography variant=\"body2\" sx={{ color: \"text.secondary\" }}>\n {`File Size: ${props?.attachmentSize || \"unknown\"} kb`}\n </Typography>\n <Typography variant=\"body2\" sx={{ color: \"text.secondary\" }}>\n {`File Type: ${props?.category || \"NA\"}`}\n </Typography>\n <Typography variant=\"body2\" sx={{ color: \"text.secondary\" }}>\n {props.remark}\n </Typography>\n </CardContent>\n <CardActions>\n {props?.allowDelete ? (\n <IconButton\n size=\"small\"\n onClick={() => {\n setOpen(true);\n }}\n >\n <Tooltip title=\"Delete Attachment\">\n <FontAwesomeIcon icon=\"trash\" />\n </Tooltip>\n </IconButton>\n ) : (\n <></>\n )}\n\n <div style={{ flex: 1 }}></div>\n {allowDownload ? (\n <IconButton size=\"small\" onClick={handleDownload}>\n <Tooltip title=\"Download Attachment\">\n <FontAwesomeIcon icon=\"download\" />\n </Tooltip>\n </IconButton>\n ) : (\n <></>\n )}\n </CardActions>\n </Card>\n </>\n );\n};\n\nexport default AttachmentCard;\n","import { useEffect, useState } from \"react\";\nimport { useAxios, useSession } from \"../../../hooks\";\nimport { toast } from \"react-toastify\";\nimport { Box, Button, Grid2, Paper } from \"@mui/material\";\nimport ComboBox from \"../DataEntryTemplates/TemplateDataForm/FormFields/ComboBox\";\nimport TemplateTextField from \"../DataEntryTemplates/TemplateDataForm/FormFields/TemplateTextField\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport AttachmentCard from \"./AttachmentCard\";\n\nexport type AttachmentPanelProps = {\n attachmentCode: string;\n enableAttachment?: boolean;\n refKey: string;\n};\n\ntype AttachmentConfig = {\n id: number;\n attachmentCode: string;\n uploadDirectory: string;\n storageType: \"FILE_SYSTEM\" | \"SFTP\";\n maxAllowedNumberOfFiles: number;\n isCategoryRequired?: boolean;\n attachmentCategories?: string;\n uploadAuthorityKey?: string;\n downloadAuthorityKey?: string;\n allowedFileTypes?: string;\n refKeyAttachments?: Array<any>;\n};\n\nconst AttachmentPanel: React.FC<AttachmentPanelProps> = (props) => {\n const { handleUploadRequest, handleGetRequest } = useAxios();\n const [files, setFiles] = useState<FileList | null>(null);\n const [attachmentCategories, setAttachmentCategories] = useState<\n Array<string>\n >([]);\n const [remark, setRemark] = useState(null);\n const [selectedCategory, setSelectedCategory] = useState(null);\n const [allowedTypes, setAllowedTypes] = useState<Array<string>>([]);\n const [attachmentConfig, setAttachmentConfig] =\n useState<AttachmentConfig>(null);\n\n const loadAttachmentConfig = async () => {\n await handleGetRequest({\n endPointURI: \"api/v1/attachment/info\",\n showMask: true,\n parameters: {\n attachmentCode: props.attachmentCode,\n refKey: props.refKey,\n },\n successCallBkFn: (response: any) => {\n setAttachmentConfig(response.data);\n },\n });\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) {\n for (const file of e.target.files) {\n const fileExt = getFileExtension(file.name);\n if (allowedTypes.length > 0 && !allowedTypes.includes(fileExt)) {\n toast.error(fileExt + \" is not allowed\");\n return;\n }\n }\n }\n setFiles(e.target.files);\n };\n const { isUserAuthorized } = useSession();\n\n const handleUpload = async () => {\n let existingAttachments = attachmentConfig?.refKeyAttachments.length || 0;\n if (\n attachmentConfig?.maxAllowedNumberOfFiles &&\n files.length + existingAttachments >\n attachmentConfig.maxAllowedNumberOfFiles\n ) {\n toast.error(\n \"Maximum number of attachments is \" +\n attachmentConfig.maxAllowedNumberOfFiles\n );\n return;\n }\n if (\n attachmentConfig?.isCategoryRequired === true &&\n attachmentCategories.length > 0 &&\n (selectedCategory == null ||\n selectedCategory === undefined ||\n selectedCategory === \"\")\n ) {\n toast.error(\"You must selected document type to process your request\");\n return;\n }\n if (!files) {\n toast.error(\"You must add files to upload\");\n return;\n }\n debugger;\n for (const file of files) {\n if (file.type.startsWith(\"image/\")) {\n const MAX_SIZE_KB = 600;\n const maxSizeBytes = MAX_SIZE_KB * 1024;\n if (file.size > maxSizeBytes) {\n toast.error(\n `File ${file.name} is too large. Max allowed is ${MAX_SIZE_KB}KB.`\n );\n return;\n }\n }\n }\n\n await handleUploadRequest({\n endPointURI: \"api/v1/attachment/upload\",\n showMask: true,\n loadingMessage: \"Uploading files ... please wait\",\n parameters: {\n refKey: props.refKey,\n attachmentCode: props.attachmentCode,\n remark,\n category: selectedCategory,\n },\n files,\n successCallBkFn: (response) => {\n setAttachmentConfig(response.data);\n setFiles(null);\n setSelectedCategory(null);\n setRemark(null);\n toast.success(\"Your request has been process successfully\");\n },\n });\n };\n const getFileExtension = (name: string) => {\n return name.split(\".\").pop()?.toLowerCase() || \"\";\n };\n\n useEffect(() => {\n loadAttachmentConfig();\n }, [props.refKey, props.attachmentCode]);\n\n useEffect(() => {\n if (attachmentConfig?.allowedFileTypes) {\n setAllowedTypes(attachmentConfig.allowedFileTypes.split(\",\"));\n } else {\n setAllowedTypes([]);\n }\n if (attachmentConfig?.attachmentCategories) {\n const cats = [];\n for (const category of attachmentConfig.attachmentCategories.split(\",\")) {\n cats.push({ value: category });\n }\n setAttachmentCategories(cats);\n } else {\n setAttachmentCategories([]);\n }\n }, [attachmentConfig]);\n let showAttachments = true;\n if (\n attachmentConfig?.downloadAuthorityKey &&\n !isUserAuthorized(attachmentConfig?.downloadAuthorityKey)\n ) {\n showAttachments = false;\n }\n let allowUpload = true;\n if (props?.enableAttachment === false) {\n allowUpload = false;\n }\n if (\n attachmentConfig?.uploadAuthorityKey &&\n !isUserAuthorized(attachmentConfig.uploadAuthorityKey)\n ) {\n allowUpload = false;\n }\n\n return (\n <Paper\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n overflow: \"hidden\",\n flexGrow: 1,\n }}\n >\n {allowUpload ? (\n <>\n {attachmentConfig?.maxAllowedNumberOfFiles === undefined ||\n attachmentConfig?.maxAllowedNumberOfFiles === null ||\n attachmentConfig?.maxAllowedNumberOfFiles >\n attachmentConfig.refKeyAttachments.length ? (\n <>\n <h3>\n <FontAwesomeIcon\n icon=\"paperclip\"\n style={{ marginRight: 10, marginLeft: 10 }}\n />\n Attachment Uploader\n </h3>\n <input\n type=\"file\"\n style={{ margin: 20 }}\n accept={attachmentConfig?.allowedFileTypes}\n multiple\n onChange={handleChange}\n />\n {attachmentCategories.length > 0 ? (\n <ComboBox\n label=\"Attachment Type\"\n sx={{ width: 300, m: 1 }}\n options={attachmentCategories}\n displayField=\"value\"\n valueField=\"value\"\n value={selectedCategory}\n onChangeCallBack={(v) => {\n setSelectedCategory(v);\n }}\n />\n ) : (\n <></>\n )}\n\n <TemplateTextField\n label=\"Remark\"\n value={remark}\n onChange={(event) => setRemark(event.target.value)}\n multiline={true}\n sx={{ width: 300, m: 1 }}\n rows={3}\n />\n <Button sx={{ m: 1 }} variant=\"contained\" onClick={handleUpload}>\n Upload\n </Button>\n </>\n ) : (\n <></>\n )}\n </>\n ) : (\n <></>\n )}\n\n {showAttachments && attachmentConfig?.refKeyAttachments?.length > 0 ? (\n <>\n <h3>\n <FontAwesomeIcon\n style={{ marginRight: 10, marginLeft: 10 }}\n icon=\"paperclip\"\n />\n Attachments\n </h3>\n <Grid2\n container\n spacing={2}\n sx={{ overflow: \"auto\", padding: 1, justifyContent: \"center\" }}\n >\n {attachmentConfig?.refKeyAttachments.map((refKeyAttachment) => {\n return (\n <Grid2\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <AttachmentCard\n {...refKeyAttachment}\n attachmentCode={props.attachmentCode}\n setAttachmentConfig={setAttachmentConfig}\n downloadAuthorityKey={attachmentConfig.downloadAuthorityKey}\n allowDelete={allowUpload}\n />\n </Grid2>\n );\n })}\n </Grid2>\n </>\n ) : (\n <></>\n )}\n </Paper>\n );\n};\n\nexport default AttachmentPanel;\n","import Typography from \"@mui/material/Typography\";\nimport { workflowDocumentActionHistory } from \"./WorkflowDocumentPanel\";\nimport { useSelector } from \"react-redux\";\nimport { Avatar, Box, Divider, Paper, Stack } from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { useTranslation } from \"react-i18next\";\nimport AttachmentImageViewer from \"../attachment/AttachmentImageViewer\";\n\ntype WorkflowDocumentTimeLineProp = {\n actionHistory: Array<workflowDocumentActionHistory>;\n};\n\nconst WorkflowDocumentTimeLine: React.FC<WorkflowDocumentTimeLineProp> = (\n props\n) => {\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const { t } = useTranslation();\n return (\n <Paper\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n flexGrow: 1,\n padding: 1,\n margin: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Box\n sx={{\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 18,\n fontWeight: \"bold\",\n }}\n >\n <FontAwesomeIcon\n icon=\"history\"\n style={{ marginRight: 10, marginLeft: 10 }}\n />\n {t(\"WF_ACTION_HISTORY_LABEL\")}\n </Box>\n <Box\n sx={{\n flexGrow: 1,\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n overflowY: \"auto\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n }}\n >\n {props.actionHistory.map((actionHistoryRecord, index) => {\n return (\n <>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n marginBottom: 2,\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n flex: 1,\n flexDirection: \"column\",\n alignItems: \"flex-end\",\n justifyContent: \"center\",\n }}\n >\n <Box sx={{ marginBottom: 0.2 }}>\n {actionHistoryRecord.actionTime}\n </Box>\n <Typography>\n via {actionHistoryRecord.actionMethod}\n </Typography>\n </Box>\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: \"relative\",\n marginRight: 2,\n marginLeft: 2,\n }}\n >\n <AttachmentImageViewer\n showAsAvatar={true}\n attachmentCode=\"EMPLOYEE_PHOTOS\"\n refKey={actionHistoryRecord?.personId + \"\" || \"0\"}\n style={{ m: 1, width: 70, height: 70 }}\n />\n {index !== props.actionHistory.length - 1 ? (\n <Box sx={{ marginTop: 11, position: \"absolute\" }}>|</Box>\n ) : (\n <></>\n )}\n </Box>\n <Box\n sx={{\n display: \"flex\",\n flex: 1,\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n justifyContent: \"center\",\n }}\n >\n <Box sx={{ width: \"100%\" }}>\n {AppLayout.appDirection === \"ltr\"\n ? `${actionHistoryRecord?.documentActionEnName}`\n : `${actionHistoryRecord?.documentActionArName}`}\n {actionHistoryRecord?.actionComment\n ? \" - \" + actionHistoryRecord.actionComment\n : \"\"}\n </Box>\n <Box sx={{ width: \"100%\" }}>\n {AppLayout.appDirection === \"ltr\"\n ? `${actionHistoryRecord?.employeeEnName}`\n : `${actionHistoryRecord?.employeeArName}`}\n </Box>\n </Box>\n </Box>\n </>\n );\n })}\n </Box>\n </Paper>\n );\n};\n\nexport default WorkflowDocumentTimeLine;\n","import { Button } from \"@mui/material\";\nimport { RecordAction } from \"../DataEntryTypes\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { toast } from \"react-toastify\";\nimport { useTranslation } from \"react-i18next\";\nimport useSession from \"../../../../hooks/UseSession\";\nimport { useConfirmationWindow } from \"../../../../hooks/UseConfirmationWindow\";\n\nconst TemplateGridMultiRecordAction: React.FC<RecordAction> = (\n rowAction: RecordAction\n) => {\n const { t } = useTranslation();\n const session = useSession();\n const { ConfirmationWindow, setOpen } = useConfirmationWindow({\n body: t(rowAction?.confirmationMessage || \"ACTION_CONFIRMATION\"),\n title: t(\"CONFIRMATION\"),\n onConfirmationCallBk: async () => {\n await rowAction?.actionFn(\n rowAction.recordsToProcessActionOn,\n rowAction.recordIdsToProcessActionOn\n );\n if (rowAction?.reloadData) {\n rowAction.reloadData();\n }\n },\n });\n let isActionAllowed = true;\n if (rowAction.authority) {\n isActionAllowed = session.isUserAuthorized(rowAction.authority);\n }\n\n if (isActionAllowed) {\n return (\n <>\n <ConfirmationWindow />\n <Button\n onClick={async () => {\n if (\n rowAction?.recordsToProcessActionOn &&\n rowAction?.recordsToProcessActionOn.length > 0\n ) {\n if (rowAction?.preActionValidation) {\n for (const record of rowAction.recordsToProcessActionOn) {\n if (!rowAction.preActionValidation(record)) {\n return;\n }\n }\n }\n if (rowAction?.isConfirmationRequired === true) {\n setOpen(true);\n } else {\n await rowAction.actionFn(\n rowAction.recordsToProcessActionOn,\n rowAction.recordIdsToProcessActionOn\n );\n if (rowAction?.reloadData) {\n rowAction.reloadData();\n }\n }\n } else {\n toast.error(t(\"AT_LEAST_ONE_RECORD_SELECTED_MESSAGE\"));\n }\n }}\n variant={\n rowAction?.label\n ? \"outlined\"\n : rowAction?.formActionProps?.actionButtonVariant\n ? rowAction.formActionProps.actionButtonVariant\n : \"text\"\n }\n size=\"small\"\n color={rowAction?.formActionProps?.actionButtonColor || \"primary\"}\n >\n {rowAction?.icon ? (\n <FontAwesomeIcon\n style={{ marginRight: 5, marginLeft: 5 }}\n icon={rowAction.icon}\n />\n ) : (\n <></>\n )}\n {rowAction?.label ? t(rowAction.label) : <></>}\n </Button>\n </>\n );\n }\n};\n\nexport default TemplateGridMultiRecordAction;\n","import {\n Badge,\n Box,\n Button,\n Divider,\n IconButton,\n InputAdornment,\n MenuItem,\n styled,\n TextField,\n Tooltip,\n} from \"@mui/material\";\nimport {\n Toolbar,\n ToolbarButton,\n ColumnsPanelTrigger,\n FilterPanelTrigger,\n QuickFilter,\n QuickFilterControl,\n QuickFilterClear,\n QuickFilterTrigger,\n GridViewColumnIcon,\n GridFilterListIcon,\n ExportExcel,\n} from \"@mui/x-data-grid-premium\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport TemplateGridMultiRecordAction from \"./TemplateGridMultiRecordAction\";\nimport { getGridSelection } from \"../DataEntryUtil\";\nimport { useTranslation } from \"react-i18next\";\nimport { TemplateGridTopBarProps } from \"../DataEntryTypes\";\nimport useSession from \"../../../../hooks/UseSession\";\n\ntype OwnerState = {\n expanded: boolean;\n};\n\nconst StyledQuickFilter = styled(QuickFilter)({\n display: \"grid\",\n alignItems: \"center\",\n});\n\nconst StyledToolbarButton = styled(ToolbarButton)<{ ownerState: OwnerState }>(\n ({ theme, ownerState }) => ({\n gridArea: \"1 / 1\",\n width: \"min-content\",\n height: \"min-content\",\n zIndex: 1,\n opacity: ownerState.expanded ? 0 : 1,\n pointerEvents: ownerState.expanded ? \"none\" : \"auto\",\n transition: theme.transitions.create([\"opacity\"]),\n })\n);\n\nconst StyledTextField = styled(TextField)<{\n ownerState: OwnerState;\n}>(({ theme, ownerState }) => ({\n gridArea: \"1 / 1\",\n overflowX: \"clip\",\n width: ownerState.expanded ? 260 : \"var(--trigger-width)\",\n opacity: ownerState.expanded ? 1 : 0,\n transition: theme.transitions.create([\"width\", \"opacity\"]),\n}));\n\nconst TemplateGridTopBar: React.FC<TemplateGridTopBarProps> = (\n props: TemplateGridTopBarProps\n) => {\n const { t } = useTranslation();\n const session = useSession();\n const isCreationAuthorized = props?.templateProps?.editAction?.authority\n ? session.isUserAuthorized(props.templateProps.editAction.authority)\n : true;\n const isCreationEnabled = props?.templateProps?.disableDefaultAction || true;\n const gridSelection = getGridSelection(\n props?.templateProps?.rowSelectionModel || {\n ids: new Set(),\n type: \"include\",\n },\n props?.templateProps?.data || [],\n props?.templateProps?.keyColumnName || \"id\"\n );\n return (\n <Toolbar>\n {isCreationEnabled &&\n isCreationAuthorized &&\n props?.templateProps?.editMode?.editMode != \"none\" ? (\n <Button onClick={props?.handleCreateNewRecord}>\n <FontAwesomeIcon\n icon=\"add\"\n style={{ marginRight: 5, marginLeft: 5 }}\n />\n {t(\"ADD_BTN_LABEL\")}\n </Button>\n ) : (\n <></>\n )}\n {props?.templateProps?.rowActions ? (\n props.templateProps.rowActions.map((rowAction, index) =>\n rowAction?.gridActionProps?.multiRecord === true ? (\n <TemplateGridMultiRecordAction\n {...rowAction}\n key={index}\n reloadData={async () => {\n props.templateProps.apiActions.reloadData(\n props?.templateProps?.gridLoadParametersValues\n );\n }}\n recordIdsToProcessActionOn={gridSelection.selectedRecordIds}\n recordsToProcessActionOn={gridSelection.selectedRecords}\n />\n ) : null\n )\n ) : (\n <></>\n )}\n <Box sx={{ flex: 1, mx: 0.5 }}>{props?.templateProps?.tBar}</Box>\n\n <Tooltip title=\"Columns\">\n <ColumnsPanelTrigger render={<ToolbarButton />}>\n <GridViewColumnIcon fontSize=\"small\" />\n </ColumnsPanelTrigger>\n </Tooltip>\n\n <Tooltip title=\"Filters\">\n <FilterPanelTrigger\n render={(props, state) => (\n <ToolbarButton {...props} color=\"default\">\n <Badge\n badgeContent={state.filterCount}\n color=\"primary\"\n variant=\"dot\"\n >\n <GridFilterListIcon fontSize=\"small\" />\n </Badge>\n </ToolbarButton>\n )}\n />\n </Tooltip>\n\n {props?.templateProps?.gridStateKey ? (\n <Tooltip title={t(\"RESET_GRID_STATE\")}>\n <IconButton onClick={props?.clearGridState}>\n <FontAwesomeIcon icon=\"eraser\" />\n </IconButton>\n </Tooltip>\n ) : (\n <></>\n )}\n\n <Divider\n orientation=\"vertical\"\n variant=\"middle\"\n flexItem\n sx={{ mx: 0.5 }}\n />\n\n <Tooltip title={t(\"EXPORT_EXECL_LABEL\")}>\n <ExportExcel render={<MenuItem />}>\n <FontAwesomeIcon icon=\"file-excel\" color=\"green\" />\n </ExportExcel>\n </Tooltip>\n\n <StyledQuickFilter>\n <QuickFilterTrigger\n render={(triggerProps, state) => (\n <Tooltip title={t(\"SEARCH_BTN_LABEL\")} enterDelay={0}>\n <StyledToolbarButton\n {...triggerProps}\n ownerState={{ expanded: state.expanded }}\n color=\"default\"\n aria-disabled={state.expanded}\n >\n <FontAwesomeIcon icon=\"search\" />\n </StyledToolbarButton>\n </Tooltip>\n )}\n />\n <QuickFilterControl\n render={({ ref, ...controlProps }, state) => (\n <StyledTextField\n {...controlProps}\n ownerState={{ expanded: state.expanded }}\n inputRef={ref}\n aria-label=\"Search\"\n placeholder={`${t(\"SEARCH_BTN_LABEL\")}...`}\n size=\"small\"\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcon icon=\"search\" />\n </InputAdornment>\n ),\n endAdornment: state.value ? (\n <InputAdornment position=\"end\">\n <QuickFilterClear\n edge=\"end\"\n size=\"small\"\n aria-label=\"Clear search\"\n // material={{ sx: { marginRight: -0.75 } }}\n >\n <FontAwesomeIcon icon=\"xmark\" />\n </QuickFilterClear>\n </InputAdornment>\n ) : null,\n ...controlProps.slotProps?.input,\n },\n ...controlProps.slotProps,\n }}\n />\n )}\n />\n </StyledQuickFilter>\n\n <IconButton\n onClick={() => {\n props.templateProps.apiActions.reloadData(\n props?.templateProps?.gridLoadParametersValues\n );\n }}\n >\n <FontAwesomeIcon icon=\"refresh\" />\n </IconButton>\n </Toolbar>\n );\n};\n\nexport default TemplateGridTopBar;\n","import { Tooltip } from \"@mui/material\";\nimport { GridActionsCellItem } from \"@mui/x-data-grid-premium\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { RecordAction } from \"../DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport useSession from \"../../../../hooks/UseSession\";\nimport { useConfirmationWindow } from \"../../../../hooks/UseConfirmationWindow\";\n\nconst TemplateGridRecordAction: React.FC<RecordAction> = (\n rowAction: RecordAction\n) => {\n const { t } = useTranslation();\n const session = useSession();\n const { ConfirmationWindow, setOpen } = useConfirmationWindow({\n body: t(rowAction?.confirmationMessage || \"ACTION_CONFIRMATION\"),\n title: t(\"CONFIRMATION\"),\n onConfirmationCallBk: async () => {\n await rowAction?.actionFn(rowAction.record);\n if (rowAction?.reloadData) {\n rowAction.reloadData();\n }\n },\n });\n let isActionAllowed = true;\n if (rowAction.authority) {\n isActionAllowed = session.isUserAuthorized(rowAction.authority);\n }\n let iconStyle: any = {};\n if (rowAction?.getActionIconStyleForRecord) {\n iconStyle = rowAction.getActionIconStyleForRecord(rowAction.record);\n }\n let isActionVisibleForRecord = true;\n if (rowAction?.isActionVisibleForRecord) {\n isActionVisibleForRecord = rowAction?.isActionVisibleForRecord(\n rowAction.record\n );\n }\n let isActionDisabledForRecord = false;\n if (rowAction?.isActionDisabledForRecord) {\n isActionDisabledForRecord = rowAction.isActionDisabledForRecord(\n rowAction.record\n );\n }\n if (isActionAllowed && isActionVisibleForRecord) {\n return (\n <>\n <ConfirmationWindow />\n <GridActionsCellItem\n disabled={isActionDisabledForRecord}\n icon={\n <Tooltip title={rowAction?.label ? t(rowAction.label) : \"\"}>\n <FontAwesomeIcon\n icon={rowAction.icon}\n style={{\n ...iconStyle,\n color: isActionDisabledForRecord\n ? \"gray\"\n : iconStyle?.color != undefined\n ? iconStyle.color\n : undefined,\n }}\n />\n </Tooltip>\n }\n showInMenu={rowAction?.gridActionProps?.showInMenu || false}\n label={\"\"}\n className=\"textPrimary\"\n color=\"inherit\"\n onClick={async () => {\n if (!isActionDisabledForRecord) {\n if (rowAction?.preActionValidation) {\n if (!rowAction.preActionValidation(rowAction.record)) {\n return;\n }\n }\n if (rowAction?.isConfirmationRequired === true) {\n setOpen(true);\n } else {\n await rowAction.actionFn(rowAction.record);\n if (\n rowAction?.gridActionProps?.reloadGridAfterAction === true &&\n rowAction?.reloadData\n ) {\n rowAction.reloadData();\n }\n }\n }\n }}\n />\n </>\n );\n }\n};\n\nexport default TemplateGridRecordAction;\n","import {\n DataGridPremium,\n GridActionsCellItem,\n GridActionsCellItemProps,\n GridColumnOrderChangeParams,\n GridColumnResizeParams,\n GridColumnVisibilityModel,\n GridEventListener,\n GridExpandMoreIcon,\n GridPinnedColumnFields,\n GridRowGroupingModel,\n GridRowModes,\n GridRowModesModel,\n GridRowParams,\n GridRowSelectionModel,\n} from \"@mui/x-data-grid-premium\";\nimport { TemplateGridColDef, TemplateGridProps } from \"../DataEntryTypes\";\nimport TemplateGridTopBar from \"./TemplateGridTopBar\";\nimport { useNavigate } from \"react-router-dom\";\nimport React, { useEffect, useState } from \"react\";\nimport { z } from \"zod\";\nimport {\n constructGridColumnsFromFields,\n constructValidationSchema,\n getAllFields,\n} from \"../DataEntryUtil\";\nimport { toast } from \"react-toastify\";\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Box,\n Divider,\n IconButton,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport { capitalizeFirstLetter, isNumber } from \"../../../../util/AppUtils\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport TemplateGridRecordAction from \"./TemplateGridRecordAction\";\nimport TemplateForm from \"../TemplateDataForm/TemplateForm\";\nimport { useSelector } from \"react-redux\";\nimport { useTranslation } from \"react-i18next\";\nimport useSession from \"../../../../hooks/UseSession\";\nimport { useConfirmationWindow } from \"../../../../hooks/UseConfirmationWindow\";\nimport { useWindow } from \"../../../../hooks/UseWindow\";\nimport { useAxios } from \"../../../../hooks\";\nimport useLookupGridColumn from \"../../../../hooks/useLookupGridColumn\";\nimport { ContinuousColorLegend } from \"@mui/x-charts\";\nimport AttachmentPanel from \"../../attachment/AttachmentPanel\";\nimport WorkflowDocumentPanel from \"../../workflow/WorkflowDocumentPanel\";\nlet currentNewRecordIndex = -1;\n\ninterface GridState {\n columnVisibilityModel?: GridColumnVisibilityModel;\n columnOrder?: string[];\n columnWidths?: { [key: string]: number };\n columnGroupingModel?: GridRowGroupingModel;\n pinnedColumns?: GridPinnedColumnFields;\n}\n\nconst loadGridState = (gridStateKey: string): GridState => {\n try {\n const saved = localStorage.getItem(gridStateKey);\n return saved ? JSON.parse(saved) : {};\n } catch (e) {\n console.error(\"Failed to load grid state\", e);\n return {};\n }\n};\n\nconst saveGridState = (gridStateKey: string, statePart: GridState) => {\n const current = loadGridState(gridStateKey);\n localStorage.setItem(\n gridStateKey,\n JSON.stringify({ ...current, ...statePart })\n );\n};\n\nconst PIN_FIXED_COLUMNS = [\"__check__\", \"actions\"];\n\nconst TemplateGrid: React.FC<TemplateGridProps> = (props) => {\n const { t } = useTranslation();\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const [selectedRecord, setSelectedRecord] = useState<any>({});\n const [attachmentPanelEnabledForRecord, setAttachmentPanelEnabledForRecord] =\n useState<boolean>(true);\n const { getLookupOptions } = useLookupGridColumn();\n const { Window: AttachmentWindow, setWindowState: setAttachmentWindowState } =\n useWindow({\n windowTitle: t(props.gridTitle) + \" Attachments\",\n windowIcon: \"paperclip\",\n width: \"fit-content\",\n height: \"fit-content\",\n minHeight: 500,\n minWidth: \"50%\",\n onCloseCallBack: () => {\n props?.apiActions?.reloadData(props.gridLoadParametersValues);\n },\n });\n const { Window: WorkFlowWindow, setWindowState: setWorkFlowWindowState } =\n useWindow({\n windowTitle: t(props.gridTitle) + \" Approvals\",\n windowIcon: \"stamp\",\n width: \"fit-content\",\n height: \"fit-content\",\n minHeight: 500,\n minWidth: \"80%\",\n onCloseCallBack: () => {\n props?.apiActions?.reloadData(props.gridLoadParametersValues);\n },\n });\n const [generatedColumns, setGeneratedColumns] = useState<\n Array<TemplateGridColDef>\n >([]);\n const fields = getAllFields(props.formElements);\n const hiddenFields = [];\n const savedState = React.useMemo<GridState>(\n () => (props?.gridStateKey ? loadGridState(props.gridStateKey) : {}),\n []\n );\n for (const field of fields) {\n if (field?.gridProps?.hidden === true) {\n hiddenFields.push(field.fieldName);\n }\n }\n let initialVisibilityState: GridColumnVisibilityModel = {};\n if (savedState?.columnVisibilityModel) {\n initialVisibilityState = savedState.columnVisibilityModel;\n const existingFields = Object.keys(initialVisibilityState);\n for (const field of hiddenFields) {\n if (!existingFields.includes(field)) {\n initialVisibilityState[field] = false;\n }\n }\n } else {\n for (const field of hiddenFields) {\n initialVisibilityState[field] = false;\n }\n }\n\n const themeDirection = useSelector(\n (state: any) => state.AppLayout.appDirection\n );\n\n const clearGridState = () => {\n if (props?.gridStateKey) {\n localStorage.removeItem(props.gridStateKey);\n }\n setColumnVisibilityModel({});\n setColumnOrder([]);\n setColumnWidths({});\n setGridRowGroupingModel([]);\n setPinnedColumns({\n left: [...(themeDirection === \"ltr\" ? PIN_FIXED_COLUMNS : [])],\n right: [...(themeDirection === \"rtl\" ? PIN_FIXED_COLUMNS : [])],\n });\n };\n const [columnVisibilityModel, setColumnVisibilityModel] =\n React.useState<GridColumnVisibilityModel>(initialVisibilityState);\n const [columnOrder, setColumnOrder] = React.useState<string[]>(\n savedState.columnOrder || []\n );\n const [columnWidths, setColumnWidths] = React.useState<{\n [key: string]: number;\n }>(savedState.columnWidths || {});\n const [gridRowGroupingModel, setGridRowGroupingModel] =\n useState<GridRowGroupingModel>(savedState.columnGroupingModel || []);\n let newLeft = savedState?.pinnedColumns?.left || [];\n newLeft = newLeft.filter(\n (record: any) => !PIN_FIXED_COLUMNS.includes(record)\n );\n let newRight = savedState?.pinnedColumns?.right || [] || [];\n newRight = newRight.filter(\n (record: any) => !PIN_FIXED_COLUMNS.includes(record)\n );\n\n const [pinnedColumns, setPinnedColumns] = useState<GridPinnedColumnFields>({\n left: [...(themeDirection === \"ltr\" ? PIN_FIXED_COLUMNS : []), ...newLeft],\n right: [\n ...(themeDirection === \"rtl\" ? PIN_FIXED_COLUMNS : []),\n ...newRight,\n ],\n });\n\n const session = useSession();\n const navigate = useNavigate();\n const [recordToDelete, setRecordToDelete] = useState<any>(null);\n const [recordToEdit, setRecordToEdit] = useState<any>(null);\n const [rowModesModel, setRowModesModel] = useState<GridRowModesModel>({});\n const adjustGridColumns = async () => {\n let gridColumns = constructGridColumnsFromFields(\n fields,\n props?.editMode?.editMode === \"row\" || false,\n t\n );\n for (let gridColumn of gridColumns) {\n if (gridColumn?.lookupType) {\n gridColumn.displayField =\n AppLayout.appDirection === \"ltr\"\n ? \"lookupEnDisplay\"\n : \"lookupArDisplay\";\n gridColumn.options = await getLookupOptions(gridColumn.lookupType);\n gridColumn.valueField = \"lookupValue\";\n }\n }\n setGeneratedColumns(gridColumns);\n };\n const [rowSelectionModel, setRowSelectionModel] =\n useState<GridRowSelectionModel>({ ids: new Set(), type: \"include\" });\n let keyColumnName: string = \"id\";\n if (props?.keyColumnName) {\n keyColumnName = props?.keyColumnName;\n }\n const setData = props.setData;\n const validationSchema = z.object(constructValidationSchema(fields));\n let isEditAllowed = true;\n if (props?.editAction?.authority) {\n isEditAllowed = session.isUserAuthorized(props.editAction.authority);\n }\n let isDeleteAllowed = true;\n if (props?.deleteAction?.authority) {\n isDeleteAllowed = session.isUserAuthorized(props.deleteAction.authority);\n }\n\n const handleRowModesModelChange = (newModel: GridRowModesModel) => {\n setRowModesModel(newModel);\n };\n\n const handlePinnedColumnsChange = (newModel: GridPinnedColumnFields) => {\n let newLeft = newModel?.left || [];\n newLeft = newLeft.filter(\n (record: any) => !PIN_FIXED_COLUMNS.includes(record)\n );\n let newRight = newModel?.right || [];\n newRight = newRight.filter(\n (record: any) => !PIN_FIXED_COLUMNS.includes(record)\n );\n const newPinedColumns: GridPinnedColumnFields = {\n left: [\n ...(themeDirection === \"ltr\" ? PIN_FIXED_COLUMNS : []),\n ...newLeft,\n ],\n right: [\n ...(themeDirection === \"rtl\" ? PIN_FIXED_COLUMNS : []),\n ...newRight,\n ],\n };\n setPinnedColumns(newPinedColumns);\n if (props?.gridStateKey) {\n saveGridState(props.gridStateKey, { pinnedColumns: newPinedColumns });\n }\n };\n\n const handleDeleteRecord = async () => {\n let result = true;\n if (!(recordToDelete && recordToDelete?.isNew === true)) {\n result = await props.apiActions.deleteRecordById(\n recordToDelete[keyColumnName]\n );\n }\n if (result) {\n if (props?.deleteAction?.postActionCallBack) {\n await props.deleteAction.postActionCallBack(recordToDelete);\n }\n\n setData((oldData: any) => {\n const newData = oldData.filter(\n (record: any) =>\n record[keyColumnName] != recordToDelete[keyColumnName]\n );\n return newData;\n });\n }\n };\n\n const { ConfirmationWindow, setOpen: setConfirmationWindowOpened } =\n useConfirmationWindow({\n title: \"Confirmation\",\n body: \"Are you sure you want to delete this record ?\",\n onConfirmationCallBk: handleDeleteRecord,\n });\n\n let formModalHeight = undefined;\n let formModalWidth = undefined;\n let formModalMinHeight = undefined;\n let formModalMinWidth = undefined;\n let formModalIcon = undefined;\n let formModalTitle = undefined;\n\n if (props?.editMode?.editMode === \"modal\") {\n formModalHeight = props?.editMode?.specs?.modalHeight || \"fit-content\";\n formModalWidth = props?.editMode?.specs?.modalWidth || \"300\";\n formModalMinHeight = props?.editMode?.specs?.modalMinHeight;\n formModalMinWidth = props?.editMode?.specs?.modalMinWidth;\n formModalIcon = props?.editMode?.specs?.modalIcon || \"window\";\n formModalTitle = props?.editMode?.specs?.modalTitle || \"Record Form\";\n }\n\n const { Window: FormWindow, setWindowState: setFormWindowState } = useWindow({\n height: formModalHeight,\n minHeight: formModalMinHeight,\n minWidth: formModalMinWidth,\n onCloseCallBack: () => {\n props.apiActions.reloadData(props?.gridLoadParametersValues);\n },\n width: formModalWidth,\n windowIcon: formModalIcon,\n windowTitle: formModalTitle,\n });\n\n const handleCreateNewRecord = () => {\n if (props?.editMode?.editMode === \"form\") {\n navigate(props.editMode.specs.formRoute);\n } else if (props?.editMode?.editMode === \"modal\") {\n setRecordToEdit(null);\n setFormWindowState(true);\n } else if (props?.editMode?.editMode === \"row\") {\n currentNewRecordIndex = currentNewRecordIndex - 1;\n const newRecord: any = {};\n newRecord[keyColumnName] = currentNewRecordIndex;\n newRecord.isNew = true;\n for (const gridColumn of generatedColumns) {\n if (\n gridColumn?.type != \"actions\" &&\n gridColumn?.field != keyColumnName\n ) {\n if (gridColumn?.field) {\n newRecord[gridColumn.field] = null;\n }\n }\n }\n setData((oldRows: any) => [newRecord, ...oldRows]);\n setRowModesModel((oldModel: any) => ({\n ...oldModel,\n [currentNewRecordIndex]: { mode: GridRowModes.Edit },\n }));\n }\n };\n\n const handleEditRecord = async (record: any) => {\n if (record) {\n setRecordToEdit(record);\n if (props.editMode.editMode === \"form\") {\n navigate(props.editMode.specs.formRoute + \"/\" + record[keyColumnName]);\n } else if (props.editMode.editMode === \"modal\") {\n setFormWindowState(true);\n } else if (props?.editMode?.editMode === \"row\") {\n const id = record[keyColumnName];\n setRowModesModel({\n ...rowModesModel,\n [id]: { mode: GridRowModes.Edit },\n });\n }\n }\n };\n\n const validateRecord = (record: any) => {\n try {\n validationSchema.parse(record);\n } catch (err) {\n console.log(\"validateRecord err\", err);\n let errorMessage: any = null;\n if (err instanceof z.ZodError) {\n errorMessage = err.errors\n .map(\n (error) => \"Error in field (\" + error.path + \") : \" + error.message\n )\n .join(\",\");\n } else {\n errorMessage = \"invalid record data\";\n }\n return errorMessage;\n }\n };\n\n const handleSaveRowClick = (record: any) => {\n const id = record[keyColumnName];\n setRowModesModel({\n ...rowModesModel,\n [id]: { mode: GridRowModes.View },\n });\n };\n\n const processRowUpdate = async (record: any) => {\n if (props.editMode.editMode === \"row\") {\n let savedRecord: any = null;\n const errorMessage = validateRecord(record);\n if (errorMessage) {\n const errors = errorMessage.split(\",\");\n toast.error(\n <div style={{}}>\n {errors.map((error: any) => (\n <>\n <div>{error}</div>\n <Divider />\n </>\n ))}\n </div>\n );\n throw new Error(errorMessage);\n }\n if (props?.editAction?.preActionValidation) {\n if (!props.editAction.preActionValidation(record)) {\n throw new Error(\"error on the configured presave validation\");\n }\n }\n const requestObject: any = { ...record };\n if (\n record[keyColumnName] &&\n isNumber(record[keyColumnName]) &&\n Number(record[keyColumnName]) < 0\n ) {\n requestObject[keyColumnName] = null;\n }\n savedRecord = await props.apiActions.saveRecord(requestObject);\n if (savedRecord == null) {\n throw new Error(\n \"Failed to process your request, contact your administrator\"\n );\n }\n if (props?.editAction?.postActionCallBack) {\n await props.editAction.postActionCallBack(record);\n }\n if (record?.isNew === true) {\n setData((oldData: any) => {\n const newData = oldData.filter(\n (x: any) => x[keyColumnName] !== record[keyColumnName]\n );\n return [savedRecord, ...newData];\n });\n }\n if (\n props?.editMode?.reloadAfterSave === true &&\n props?.apiActions?.reloadData\n ) {\n props?.apiActions?.reloadData(props?.gridLoadParametersValues);\n }\n return savedRecord;\n }\n };\n\n const handleCancelRowEditClick = (record: any) => {\n const id = record[keyColumnName];\n if (id && isNumber(id) && id < 0) {\n setRowModesModel({\n ...rowModesModel,\n [id]: { mode: GridRowModes.View, ignoreModifications: true },\n });\n setData((oldData: any) => {\n const newData = oldData.filter(\n (record: any) => record[keyColumnName] != id\n );\n return newData;\n });\n } else {\n setRowModesModel({\n ...rowModesModel,\n [id]: { mode: GridRowModes.View, ignoreModifications: true },\n });\n }\n };\n\n const getActionColumnActions = (params: GridRowParams<any>) => {\n const record: any = params.row;\n const actions: Array<React.ReactElement<GridActionsCellItemProps>> = [];\n if (props?.editMode?.editMode != \"none\") {\n if (\n props?.disableDefaultAction === undefined ||\n !props.disableDefaultAction\n ) {\n const isInEditMode: boolean =\n rowModesModel[record[keyColumnName]]?.mode === GridRowModes.Edit;\n if (props.editMode.editMode === \"row\" && isInEditMode) {\n if (isEditAllowed) {\n actions.push(\n <GridActionsCellItem\n icon={<FontAwesomeIcon icon=\"save\" />}\n label={t(\"SAVE_BTN_LABEL\")}\n onClick={() => {\n handleSaveRowClick(record);\n }}\n />\n );\n actions.push(\n <GridActionsCellItem\n icon={<FontAwesomeIcon icon=\"cancel\" />}\n label={t(\"CANCEL_BTN_LABEL\")}\n onClick={() => {\n handleCancelRowEditClick(record);\n }}\n color=\"inherit\"\n />\n );\n }\n } else {\n if (props?.editAction && props?.editAction?.isEnabled === true) {\n let isEditActionVisibleForRecord = true;\n if (props?.editAction?.isActionVisibleForRecord) {\n isEditActionVisibleForRecord =\n props?.editAction?.isActionVisibleForRecord(record);\n }\n let isActionEditDisabledForRecord = false;\n if (props?.editAction?.isActionDisabledForRecord) {\n isActionEditDisabledForRecord =\n props?.editAction?.isActionDisabledForRecord(record);\n }\n if (isEditAllowed && isEditActionVisibleForRecord) {\n actions.push(\n <GridActionsCellItem\n disabled={isActionEditDisabledForRecord}\n icon={\n <Tooltip title={t(\"EDIT_BTN_LABEL\")}>\n <FontAwesomeIcon\n icon={\"edit\"}\n style={{\n color: isActionEditDisabledForRecord\n ? \"gray\"\n : undefined,\n }}\n />\n </Tooltip>\n }\n showInMenu={\n props?.editAction?.gridActionProps?.showInMenu || false\n }\n label={t(\"EDIT_BTN_LABEL\")}\n className=\"textPrimary\"\n color=\"inherit\"\n onClick={() => {\n if (isEditAllowed && !isActionEditDisabledForRecord) {\n handleEditRecord(record);\n }\n }}\n />\n );\n }\n }\n if (props?.deleteAction && props?.deleteAction?.isEnabled === true) {\n let isDeleteActionVisibleForRecord = true;\n if (props?.deleteAction?.isActionVisibleForRecord) {\n isDeleteActionVisibleForRecord =\n props?.deleteAction?.isActionVisibleForRecord(record);\n }\n let isDeleteActionDisabledForRecord = false;\n if (props?.deleteAction?.isActionDisabledForRecord) {\n isDeleteActionDisabledForRecord =\n props?.deleteAction?.isActionDisabledForRecord(record);\n }\n if (isDeleteAllowed && isDeleteActionVisibleForRecord) {\n actions.push(\n <GridActionsCellItem\n disabled={isDeleteActionDisabledForRecord}\n icon={\n <Tooltip title={t(\"DELETE_BTN_LABEL\")}>\n <FontAwesomeIcon\n icon={\"trash\"}\n style={{\n color: isDeleteActionDisabledForRecord\n ? \"gray\"\n : undefined,\n }}\n />\n </Tooltip>\n }\n showInMenu={\n props?.deleteAction?.gridActionProps?.showInMenu || false\n }\n label={t(\"DELETE_BTN_LABEL\")}\n className=\"textPrimary\"\n color=\"inherit\"\n onClick={() => {\n if (isDeleteAllowed && !isDeleteActionDisabledForRecord) {\n if (props?.deleteAction?.preActionValidation) {\n if (!props.deleteAction.preActionValidation(record)) {\n return;\n }\n }\n setRecordToDelete(record);\n setConfirmationWindowOpened(true);\n }\n }}\n />\n );\n }\n }\n }\n }\n }\n if (\n record[props?.keyColumnName || \"id\"] &&\n record[props?.keyColumnName || \"id\"] > 0 &&\n props?.attachment\n ) {\n actions?.push(\n <GridActionsCellItem\n icon={\n <Tooltip title={\"Attachments\"}>\n <FontAwesomeIcon icon={\"paperclip\"} />\n </Tooltip>\n }\n label={\"Attachments\"}\n className=\"textPrimary\"\n color=\"inherit\"\n onClick={() => {\n setSelectedRecord(record);\n if (props?.attachment?.enableAttachFn) {\n setAttachmentPanelEnabledForRecord(\n props.attachment.enableAttachFn(record)\n );\n } else {\n setAttachmentPanelEnabledForRecord(true);\n }\n setAttachmentWindowState(true);\n }}\n />\n );\n }\n if (\n record[props?.keyColumnName || \"id\"] &&\n record[props?.keyColumnName || \"id\"] > 0 &&\n props?.workFlowDocumentCode\n ) {\n actions?.push(\n <GridActionsCellItem\n icon={\n <Tooltip title={\"Approvals\"}>\n <FontAwesomeIcon icon={\"stamp\"} />\n </Tooltip>\n }\n label={\"Approvals\"}\n className=\"textPrimary\"\n color=\"inherit\"\n onClick={() => {\n setSelectedRecord(record);\n setWorkFlowWindowState(true);\n }}\n />\n );\n }\n if (\n record[props?.keyColumnName || \"id\"] &&\n record[props?.keyColumnName || \"id\"] > 0 &&\n props?.rowActions\n ) {\n for (const rowAction of props.rowActions) {\n if (\n !(\n rowAction?.gridActionProps?.multiRecord &&\n rowAction?.gridActionProps?.multiRecord === true\n )\n ) {\n actions.push(\n <TemplateGridRecordAction\n {...rowAction}\n record={record}\n reloadData={async () => {\n props.apiActions.reloadData(props?.gridLoadParametersValues);\n }}\n />\n );\n }\n }\n }\n\n return actions;\n };\n\n const actionColumn: TemplateGridColDef = {\n type: \"actions\",\n field: \"actions\",\n headerName: \"\",\n headerAlign: \"center\",\n width:\n (props?.rowActions ? props.rowActions.length * 30 : 0) +\n (props?.editAction && props?.editAction?.isEnabled ? 30 : 0) +\n (props?.deleteAction && props?.deleteAction?.isEnabled ? 30 : 0) +\n (props?.attachment ? 30 : 0) +\n (props?.workFlowDocumentCode ? 30 : 0),\n getActions: getActionColumnActions,\n };\n\n let structuredColumns: Array<TemplateGridColDef> = [];\n if (\n props?.disableDefaultAction === undefined ||\n !props.disableDefaultAction ||\n (props?.rowActions && props?.rowActions.length > 0)\n ) {\n structuredColumns.push(actionColumn);\n }\n\n structuredColumns = [...structuredColumns, ...generatedColumns];\n const handleRowSelection = (gridSelectionModel: GridRowSelectionModel) => {\n setRowSelectionModel(gridSelectionModel);\n };\n useEffect(() => {\n if (props?.autoLoad === undefined || props.autoLoad === true) {\n props.apiActions.reloadData(props?.gridLoadParametersValues);\n }\n adjustGridColumns();\n }, []);\n\n useEffect(() => {\n props.apiActions.reloadData(props?.gridLoadParametersValues);\n }, [session.UserInfo?.currentOrganization]);\n\n useEffect(() => {\n adjustGridColumns();\n }, [themeDirection, props.formElements]);\n\n const handleColumnVisibilityChange = (model: GridColumnVisibilityModel) => {\n setColumnVisibilityModel(model);\n if (props?.gridStateKey) {\n saveGridState(props.gridStateKey, { columnVisibilityModel: model });\n }\n };\n\n const handleColumnOrderChange: GridEventListener<\"columnOrderChange\"> = (\n params: GridColumnOrderChangeParams\n ) => {\n const { column, targetIndex } = params;\n setColumnOrder((prevOrder) => {\n const currentOrder = prevOrder.length\n ? [...prevOrder]\n : structuredColumns.map((col) => col.field);\n const fromIndex = currentOrder.indexOf(column.field);\n if (fromIndex === -1) return currentOrder;\n\n currentOrder.splice(fromIndex, 1); // remove\n currentOrder.splice(targetIndex, 0, column.field); // insert at new index\n\n if (props?.gridStateKey) {\n saveGridState(props.gridStateKey, { columnOrder: currentOrder });\n }\n\n return currentOrder;\n });\n };\n\n const handleRowGroupChange = (model: GridRowGroupingModel) => {\n setGridRowGroupingModel(model);\n if (props?.gridStateKey) {\n saveGridState(props.gridStateKey, { columnGroupingModel: model });\n }\n };\n\n const handleColumnWidthChange: GridEventListener<\"columnWidthChange\"> = (\n params: GridColumnResizeParams\n ) => {\n const updatedWidths = {\n ...columnWidths,\n [params.colDef.field]: params.width,\n };\n setColumnWidths(updatedWidths);\n if (props?.gridStateKey) {\n saveGridState(props.gridStateKey, { columnWidths: updatedWidths });\n }\n };\n\n const adjustedColumns: Array<TemplateGridColDef> = React.useMemo(() => {\n const baseCols = structuredColumns.map((col) => ({\n ...col,\n width: columnWidths[col.field] || col.width,\n }));\n\n // Reorder based on saved columnOrder\n if (columnOrder.length) {\n const fieldToCol = new Map(baseCols.map((col) => [col.field, col]));\n return columnOrder.map((field) => fieldToCol.get(field)!).filter(Boolean);\n }\n\n return baseCols;\n }, [columnOrder, columnWidths, structuredColumns]);\n return (\n <>\n <ConfirmationWindow />\n {props?.editMode?.editMode === \"modal\" ? (\n <FormWindow>\n {props?.editMode?.specs?.formComponent ? (\n <props.editMode.specs.formComponent\n recordIdToEdit={\n recordToEdit ? recordToEdit[keyColumnName] : undefined\n }\n formCloseCallBk={() => {\n setFormWindowState(false);\n props.apiActions.reloadData(props?.gridLoadParametersValues);\n }}\n />\n ) : (\n <TemplateForm\n keyColumnName={props.keyColumnName}\n attachment={props.attachment}\n formLoadCallBk={props.formLoadCallBk}\n recordIdToEdit={\n recordToEdit ? recordToEdit[keyColumnName] : undefined\n }\n formCloseCallBk={() => {\n setFormWindowState(false);\n props.apiActions.reloadData(props?.gridLoadParametersValues);\n }}\n elements={props.formElements}\n apiActions={props.apiActions}\n editAuthorityKey={props?.editAction?.authority}\n formSavedSuccessfullyCallBk={\n props?.editAction?.postActionCallBack\n }\n preSaveValidation={props?.editAction?.preActionValidation}\n actions={props?.rowActions}\n />\n )}\n </FormWindow>\n ) : (\n <></>\n )}\n {props?.hideInfoBar === undefined && !props?.hideInfoBar ? (\n <Box sx={{ display: \"flex\" }}>\n {props?.hideBackButton === undefined && !props?.hideBackButton ? (\n <IconButton\n onClick={() => {\n navigate(-1, { replace: true });\n }}\n >\n <FontAwesomeIcon icon=\"arrow-left\" />\n </IconButton>\n ) : (\n <></>\n )}\n <Box\n sx={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {props?.girdIcon ? (\n <FontAwesomeIcon\n icon={props.girdIcon}\n style={{ marginRight: 5, marginLeft: 5 }}\n />\n ) : (\n <></>\n )}\n <Typography variant=\"h5\">\n {props?.gridTitle\n ? capitalizeFirstLetter(t(props?.gridTitle))\n : \"\"}\n </Typography>\n </Box>\n </Box>\n ) : (\n <></>\n )}\n\n {props?.gridLoadParameters &&\n props?.gridLoadParameters.length > 0 &&\n props?.gridLoadParametersValues &&\n props?.setGridLoadParametersValues ? (\n <Accordion defaultExpanded sx={{ width: \"100%\" }}>\n <AccordionSummary expandIcon={<GridExpandMoreIcon />}>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <FontAwesomeIcon\n style={{ marginLeft: 5, marginRight: 5 }}\n icon=\"search\"\n />\n <Typography component=\"span\">Filters</Typography>\n </Box>\n </AccordionSummary>\n <AccordionDetails>\n <Box>\n <TemplateForm\n saveButtonSpecs={{\n label: t(\"SEARCH_BTN_LABEL\"),\n icon: \"search\",\n actionButtonVariant: \"outlined\",\n actionButtonColor: \"success\",\n }}\n cancelButtonSpecs={{\n label: t(\"RESET_BTN_LABEL\"),\n icon: \"eraser\",\n actionButtonVariant: \"outlined\",\n actionButtonColor: \"error\",\n }}\n apiActions={{\n deleteRecordById: async () => {\n return true;\n },\n saveRecord: async (params) => {\n if (params != undefined) {\n props.setGridLoadParametersValues(params);\n } else {\n props.setGridLoadParametersValues({});\n }\n props.apiActions.reloadData(params);\n },\n reloadData: async () => {},\n loadRecordById: async () => {},\n }}\n elements={props.gridLoadParameters}\n />\n </Box>\n </AccordionDetails>\n </Accordion>\n ) : (\n <></>\n )}\n {props?.attachment ? (\n <AttachmentWindow>\n <AttachmentPanel\n attachmentCode={props.attachment.attachmentCode}\n refKey={selectedRecord[props?.keyColumnName || \"id\"]}\n enableAttachment={attachmentPanelEnabledForRecord}\n />\n </AttachmentWindow>\n ) : (\n <></>\n )}\n {props?.workFlowDocumentCode ? (\n <WorkFlowWindow>\n <WorkflowDocumentPanel\n workFlowDocumentCode={props.workFlowDocumentCode}\n refDocumentId={selectedRecord[props?.keyColumnName || \"id\"]}\n postActionCallBk={() => {\n debugger;\n setWorkFlowWindowState(false);\n props.apiActions.reloadData(props.gridLoadParametersValues);\n }}\n cancelActionCallBk={() => {\n setWorkFlowWindowState(false);\n props.apiActions.reloadData(props.gridLoadParametersValues);\n }}\n />\n </WorkFlowWindow>\n ) : (\n <></>\n )}\n <DataGridPremium\n {...props?.muiProps}\n slots={{ toolbar: TemplateGridTopBar }}\n slotProps={{\n toolbar: {\n templateProps: {\n ...props,\n rowSelectionModel: rowSelectionModel,\n data: props?.data,\n },\n handleCreateNewRecord,\n clearGridState,\n } as any,\n }}\n getRowId={(record: any) => {\n return record[keyColumnName];\n }}\n showToolbar={true}\n rows={props?.data}\n columns={adjustedColumns}\n checkboxSelection\n editMode=\"row\"\n onRowEditStop={(params, event) => {\n if (params.reason === \"rowFocusOut\") {\n event.defaultMuiPrevented = true;\n }\n }}\n rowModesModel={\n props.editMode.editMode == \"row\" ? rowModesModel : undefined\n }\n onRowModesModelChange={\n props.editMode.editMode == \"row\"\n ? handleRowModesModelChange\n : undefined\n }\n rowGroupingColumnMode=\"multiple\"\n processRowUpdate={processRowUpdate}\n rowSelectionModel={rowSelectionModel}\n onRowSelectionModelChange={handleRowSelection}\n columnVisibilityModel={columnVisibilityModel}\n onColumnVisibilityModelChange={handleColumnVisibilityChange}\n onColumnOrderChange={handleColumnOrderChange}\n onColumnWidthChange={handleColumnWidthChange}\n rowGroupingModel={gridRowGroupingModel}\n onRowGroupingModelChange={(model: GridRowGroupingModel) => {\n handleRowGroupChange(model);\n }}\n // pinnedColumns={pinnedColumns}\n // onPinnedColumnsChange={handlePinnedColumnsChange}\n sx={{ width: \"100%\" }}\n />\n </>\n );\n};\n\nexport default TemplateGrid;\n","import { useSelector } from \"react-redux\";\nimport { TemplateGridColDef } from \"../components\";\nimport useAxios from \"./useAxios\";\n\nconst useLookupGridColumn = () => {\n const { handleGetRequest } = useAxios();\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const getLookupOptions = async (lookupType: string) => {\n let options = [];\n await handleGetRequest({\n endPointURI: \"api/v1/public/system/lookup\",\n showMask: true,\n parameters: { lookupType },\n successCallBkFn: (response: any) => {\n options = response.data;\n },\n });\n return options;\n };\n const generateLookupGridColumn = async (props: TemplateGridColDef) => {\n let options = await getLookupOptions(props.lookupType);\n return {\n ...props,\n options,\n displayField:\n AppLayout.appDirection === \"ltr\"\n ? \"lookupEnDisplay\"\n : \"lookupArDisplay\",\n valueField: \"lookupValue\",\n };\n };\n return { generateLookupGridColumn, getLookupOptions };\n};\n\nexport default useLookupGridColumn;\n","import { useEffect, useState } from \"react\";\nimport TemplateGrid from \"../DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../DataEntryTemplates/DataEntryTypes\";\n\ntype ExcelReportViewerProps = {\n reportData: Array<any>;\n setReportData: (data) => void;\n reloadReport: () => void;\n gridLoadParameters?: Array<FormElementProps>;\n gridLoadParametersValues?: { [key: string]: any };\n setGridLoadParametersValues?: any;\n};\n\nconst getGridColumnsFromRecord = (data: Array<any>) => {\n if (data.length === 0) {\n return [];\n }\n const formElements: Array<FormElementProps> = [];\n for (const key of Object.keys(data[0])) {\n const formElement: FormElementProps = {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: key,\n fieldName: key,\n fieldType: \"text\",\n },\n };\n formElements.push(formElement);\n } \n return formElements;\n};\n\nconst ExcelReportViewer: React.FC<ExcelReportViewerProps> = (props) => {\n const [data, setData] = useState([]);\n useEffect(() => {\n const newData = props.reportData.map((record, index) => {\n return { ...record, report_record_data_key: index };\n });\n setData(newData);\n }, [props.reportData]);\n return (\n <TemplateGrid\n data={data}\n disableDefaultAction={true}\n setData={props.setReportData}\n formElements={getGridColumnsFromRecord(props.reportData)}\n gridLoadParameters={props.gridLoadParameters}\n gridLoadParametersValues={props.gridLoadParametersValues}\n setGridLoadParametersValues={props.setGridLoadParametersValues}\n editMode={{ editMode: \"none\" }}\n girdIcon={\"file-excel\"}\n gridTitle=\"Report\"\n autoLoad={true}\n keyColumnName={\"report_record_data_key\"}\n hideInfoBar={true}\n apiActions={{\n deleteRecordById: async () => {\n return true;\n },\n loadRecordById: async () => {},\n reloadData: async () => {\n props.reloadReport();\n },\n saveRecord: async () => {},\n }}\n />\n );\n};\n\nexport default ExcelReportViewer;\n","import { useEffect, useState } from \"react\";\nimport { useAxios, useWindow } from \"../../../hooks\";\nimport TemplateForm from \"../DataEntryTemplates/TemplateDataForm/TemplateForm\";\nimport { useTranslation } from \"react-i18next\";\nimport { FormElementProps } from \"../DataEntryTemplates/DataEntryTypes\";\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Box,\n Icon,\n IconButton,\n Typography,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport ExcelReportViewer from \"./ExcelReportViewer\";\nimport { GridExpandMoreIcon } from \"@mui/x-data-grid-premium\";\n\ntype ReportViewerState =\n | \"ERROR\"\n | \"WAITING_REPORT_CODE\"\n | \"LOADING_METADATA\"\n | \"WAITING_PARAMETER_INPUT\"\n | \"WAITING_RESULT\"\n | \"SHOWING_RESULT\";\n\ntype ReportViewerProps = {\n reportCode: string;\n resultMode: \"Request\" | \"App\";\n reportParametersValues?: { [key: string]: any };\n byPassParameterEntry?: boolean;\n jasperOutPutFileType?: \"pdf\" | \"word\" | \"excel\";\n};\n\ntype ReportParameter = {\n parameterCode: string;\n parameterLabel: string;\n parameterValueFormat?: string;\n parameterValueField?: string;\n parameterDisplayField?: string;\n parameterDataset?: Array<any>;\n parameterDataQueryId?: number;\n hidden?: boolean;\n mandatory?: boolean;\n defaultValue?: any;\n parameterType:\n | \"text\"\n | \"number\"\n | \"date\"\n | \"datetime\"\n | \"combobox\"\n | \"checkbox\"\n | \"html\"\n | \"lookup\";\n};\n\nconst ReportViewer: React.FC<ReportViewerProps> = (props) => {\n const [blobUrl, setBlobUrl] = useState(null);\n const [errorMessage, setErrorMessage] = useState(null);\n const [excelReportData, setExcelReportData] = useState<Array<any>>([]);\n const [reportViewerState, setReportViewerState] = useState<ReportViewerState>(\n \"WAITING_REPORT_CODE\"\n );\n const { handleGetRequest, handlePostRequest, HandleDownloadHTTPPostPDF } =\n useAxios();\n const [reportInfo, setReportInfo] = useState<any>(null);\n const [reportParametersValues, setReportParametersValues] = useState<any>({\n ...props?.reportParametersValues,\n });\n const [reportParametersElements, setReportParametersElements] = useState<\n Array<FormElementProps>\n >([]);\n const { t } = useTranslation();\n\n const getFormElementsFromReportParameters = (\n reportParameters: Array<ReportParameter>\n ) => {\n const formElements: Array<FormElementProps> = [];\n for (const reportParameter of reportParameters) {\n const formElement: FormElementProps = {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: reportParameter?.parameterLabel,\n fieldName: reportParameter?.parameterCode,\n fieldType: reportParameter?.parameterType,\n hidden: reportParameter?.hidden,\n formProps: { fieldSize: { lg: 4, md: 6, sm: 12 } },\n required: reportParameter?.mandatory,\n defaultValue:\n reportParametersValues[reportParameter?.parameterCode] ||\n reportParameter?.defaultValue,\n },\n };\n formElements.push(formElement);\n }\n return formElements;\n };\n const loadReportData = async () => {\n setReportViewerState(\"LOADING_METADATA\");\n await handleGetRequest({\n endPointURI: \"api/v1/public/report/metadata\",\n showMask: true,\n parameters: { reportCode: props.reportCode },\n successCallBkFn: (response: any) => {\n setReportInfo(response.data);\n setReportParametersElements(\n getFormElementsFromReportParameters(response.data.reportParameters)\n );\n if (\n props?.byPassParameterEntry === true ||\n response.data.reportParameters.length == 0\n ) {\n runReport(response.data, reportParametersValues);\n setReportViewerState(\"WAITING_RESULT\");\n } else {\n setReportViewerState(\"WAITING_PARAMETER_INPUT\");\n }\n },\n failureCallBkFn: (response) => {\n setErrorMessage(\n \"Failed loading report metadata ... contact your administrator\"\n );\n setReportViewerState(\"ERROR\");\n },\n });\n };\n\n const runReport = async (reportInfoProp, params) => {\n setReportViewerState(\"WAITING_RESULT\");\n if (reportInfoProp?.reportType === \"Excel\") {\n await handlePostRequest({\n endPointURI: \"api/v1/public/report/run\",\n showMask: true,\n data: {\n reportCode: props.reportCode,\n parameters: params,\n resultMode: props.resultMode,\n jasperOutPutFileType: props.jasperOutPutFileType,\n },\n successCallBkFn: (response: any) => {\n setReportViewerState(\"SHOWING_RESULT\");\n setExcelReportData(response.data);\n },\n });\n } else if (reportInfoProp?.reportType) {\n await HandleDownloadHTTPPostPDF({\n endPointURI: \"api/v1/public/report/run\",\n showMask: true,\n data: {\n reportCode: props.reportCode,\n parameters: params,\n resultMode: props.resultMode,\n jasperOutPutFileType: props.jasperOutPutFileType,\n },\n successCallBkFn: (response: any) => {\n setReportViewerState(\"SHOWING_RESULT\");\n const contentDisposition = response.headers[\"content-disposition\"];\n debugger;\n let filename = \"downloaded_file\";\n if (\n contentDisposition &&\n contentDisposition.indexOf(\"filename=\") !== -1\n ) {\n const match = contentDisposition.match(/filename=\"?([^\"]+)\"?/);\n if (match && match[1]) filename = match[1];\n }\n if (filename.includes(\"pdf\")) {\n const file = new Blob([response.data], { type: \"application/pdf\" });\n const url = URL.createObjectURL(file);\n setBlobUrl(url);\n } else {\n const blob = new Blob([response.data], {\n type: response.headers[\"content-type\"],\n });\n // Create a temporary anchor element\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n // Optional: Try to get filename from response headers\n\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n\n // Clean up\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n } \n },\n failureCallBkFn: (response) => {\n setErrorMessage(\n \"Failed To run report ... contact your administrator\"\n );\n setReportViewerState(\"ERROR\");\n },\n });\n }\n };\n\n useEffect(() => {\n if (props?.reportCode) {\n loadReportData();\n }\n }, [\n props.reportCode,\n props.byPassParameterEntry,\n props.reportParametersValues,\n props.jasperOutPutFileType,\n props.resultMode,\n ]);\n\n return (\n <>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n }}\n >\n <Box sx={{ flex: 1, textAlign: \"center\", marginBottom: 1 }}>\n <FontAwesomeIcon\n icon={\n reportInfo?.reportType === \"Excel\" ? \"file-excel\" : \"file-pdf\"\n }\n color={reportInfo?.reportType === \"Excel\" ? \"darkgreen\" : \"darkred\"}\n style={{ marginRight: 10, marginLeft: 10 }}\n />\n {reportInfo?.reportName}\n </Box>\n {reportInfo?.reportType != \"Excel\" ? (\n reportViewerState === \"SHOWING_RESULT\" ? (\n <>\n {props?.byPassParameterEntry === true ? (\n <></>\n ) : reportParametersElements.length > 0 ? (\n <IconButton\n onClick={() => {\n setReportParametersElements(\n getFormElementsFromReportParameters(\n reportInfo.reportParameters\n )\n );\n setReportViewerState(\"WAITING_PARAMETER_INPUT\");\n }}\n >\n <FontAwesomeIcon icon=\"filter\" />\n </IconButton>\n ) : (\n <></>\n )}\n <IconButton>\n <FontAwesomeIcon\n icon=\"refresh\"\n onClick={() => {\n runReport(reportInfo, reportParametersValues);\n }}\n />\n </IconButton>\n </>\n ) : (\n <></>\n )\n ) : (\n <></>\n )}\n </Box>\n <Box\n sx={{\n flexGrow: 1,\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n }}\n >\n {reportViewerState === \"WAITING_PARAMETER_INPUT\" &&\n reportInfo?.reportType != \"Excel\" ? (\n <Accordion defaultExpanded sx={{ width: \"100%\" }} expanded={true}>\n <AccordionSummary>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <FontAwesomeIcon\n style={{ marginLeft: 5, marginRight: 5 }}\n icon=\"search\"\n />\n <Typography component=\"span\">Filters</Typography>\n </Box>\n </AccordionSummary>\n <AccordionDetails>\n <Box>\n <TemplateForm\n saveButtonSpecs={{\n label: t(\"SHOW_REPORT_BTN_LABEL\"),\n icon: \"search\",\n actionButtonVariant: \"outlined\",\n actionButtonColor: \"success\",\n hidden: true,\n }}\n cancelButtonSpecs={{\n label: t(\"RESET_BTN_LABEL\"),\n icon: \"eraser\",\n actionButtonVariant: \"outlined\",\n actionButtonColor: \"error\",\n }}\n apiActions={{\n deleteRecordById: async () => {\n return true;\n },\n saveRecord: async (params) => {\n if (params != undefined) {\n setReportParametersValues(params);\n } else {\n setReportParametersValues({});\n }\n runReport(reportInfo, params);\n },\n reloadData: async () => {},\n loadRecordById: async () => {},\n }}\n elements={reportParametersElements}\n />\n </Box>\n </AccordionDetails>\n </Accordion>\n ) : reportViewerState === \"SHOWING_RESULT\" ||\n ((reportViewerState === \"WAITING_PARAMETER_INPUT\" ||\n reportViewerState === \"WAITING_RESULT\") &&\n reportInfo?.reportType === \"Excel\") ? (\n reportInfo?.reportType === \"Excel\" ? (\n <ExcelReportViewer\n reportData={excelReportData}\n setReportData={setExcelReportData}\n reloadReport={async () => {\n runReport(reportInfo, reportParametersValues);\n }}\n gridLoadParameters={reportParametersElements}\n gridLoadParametersValues={reportParametersValues}\n setGridLoadParametersValues={setReportParametersValues}\n />\n ) : (\n <iframe\n src={blobUrl}\n width=\"100%\"\n height=\"100%\"\n title=\"PDF Preview\"\n style={{ border: \"1px solid #ccc\", marginTop: \"20px\" }}\n ></iframe>\n )\n ) : reportViewerState === \"ERROR\" ? (\n <Box\n sx={{\n display: \"flex\",\n flex: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <FontAwesomeIcon\n icon=\"circle-exclamation\"\n color=\"darkred\"\n style={{ marginRight: 10, marginLeft: 10 }}\n />\n {errorMessage}\n </Box>\n ) : (\n <></>\n )}\n </Box>\n </>\n );\n};\n\nexport default ReportViewer;\n","import { useEffect, useState } from \"react\";\nimport { useAxios, useSession, useWindow } from \"../../../hooks\";\nimport {\n Avatar,\n Box,\n Button,\n Divider,\n Grid2,\n IconButton,\n Paper,\n} from \"@mui/material\";\nimport TemplateTextField from \"../DataEntryTemplates/TemplateDataForm/FormFields/TemplateTextField\";\nimport ComboBox from \"../DataEntryTemplates/TemplateDataForm/FormFields/ComboBox\";\nimport { useSelector } from \"react-redux\";\nimport { useTranslation } from \"react-i18next\";\nimport WorkflowDocumentTimeLine from \"./WorkflowDocumentTimeLine\";\nimport { toast } from \"react-toastify\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport ReportViewer from \"../report/ReportViewer\";\nimport AttachmentImageViewer from \"../attachment/AttachmentImageViewer\";\nimport { useNavigate } from \"react-router-dom\";\n\nexport type WorkflowDocumentPanelProps = {\n workFlowDocumentCode: string;\n refDocumentId: any;\n postActionCallBk?: () => void;\n cancelActionCallBk?: () => void;\n};\n\nexport type workflowDocumentAction = {\n id: number;\n document_action_code: string;\n document_action_ar_name: string;\n document_action_en_name: string;\n post_action_endpoint?: string;\n pre_action_endpoint?: string;\n next_document_status_id?: number;\n next_action_takers?: Array<person>;\n require_comment: any;\n};\n\nexport type person = {\n id: number;\n email: string;\n employeeArName: string;\n employeeEnName: string;\n mobileNumber: string;\n username: string;\n};\n\nexport type workflowDocumentActionHistory = {\n id: number;\n actionTime: string;\n actionMethod: string;\n actionComment: string;\n documentActionArName: string;\n documentActionEnName: string;\n employeeArName: string;\n employeeEnName: string;\n personId: number;\n};\n\ntype WorkflowDocumentInfo = {\n workflowDocument: any;\n referencedDocument: any;\n workflowDocumentReport: any;\n workflowDocumentStatus: any;\n actionsHistory: Array<workflowDocumentActionHistory>;\n nextActions: Array<workflowDocumentAction>;\n nextActionTakers: any;\n};\n\nconst WorkflowDocumentPanel: React.FC<WorkflowDocumentPanelProps> = (props) => {\n const navigate = useNavigate();\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const { isUserAuthorized, UserInfo } = useSession();\n const { handleGetRequest, handlePostRequest } = useAxios();\n const [action, setAction] = useState<workflowDocumentAction>(null);\n const [authorizedActions, setAuthorizedActions] = useState<\n Array<workflowDocumentAction>\n >([]);\n const { t } = useTranslation();\n const [actionComment, setActionComment] = useState(null);\n const [workflowDocumentInfo, setWorkflowDocumentInfo] =\n useState<WorkflowDocumentInfo>({\n referencedDocument: null,\n workflowDocumentReport: null,\n workflowDocument: null,\n workflowDocumentStatus: null,\n actionsHistory: [],\n nextActionTakers: null,\n nextActions: [],\n });\n const { Window: ReporTViewWindow, setWindowState: setReportViewWindowState } =\n useWindow({\n windowTitle:\n AppLayout.appDirection === \"ltr\"\n ? workflowDocumentInfo?.workflowDocument &&\n workflowDocumentInfo?.referencedDocument\n ? `${workflowDocumentInfo?.workflowDocument?.documentEnName} # ${\n workflowDocumentInfo?.referencedDocument[\n workflowDocumentInfo?.workflowDocument?.documentNumberField\n ]\n }`\n : \"Document\"\n : workflowDocumentInfo?.workflowDocument &&\n workflowDocumentInfo?.referencedDocument\n ? `${workflowDocumentInfo?.workflowDocument?.documentArName} # ${\n workflowDocumentInfo?.referencedDocument[\n workflowDocumentInfo?.workflowDocument?.documentNumberField\n ]\n }`\n : \"وثيقة\",\n windowIcon: \"eye\",\n width: \"80%\",\n });\n const loadWorkFlowDocumentInfo = async () => {\n await handleGetRequest({\n endPointURI: \"api/v1/public/workflow/doc/info\",\n showMask: true,\n parameters: {\n workflowDocumentCode: props.workFlowDocumentCode,\n refDocumentId: props.refDocumentId,\n },\n successCallBkFn: (response: any) => {\n setWorkflowDocumentInfo(response.data);\n },\n failureCallBkFn: () => {\n setWorkflowDocumentInfo({\n referencedDocument: null,\n workflowDocumentReport: null,\n workflowDocument: null,\n workflowDocumentStatus: null,\n actionsHistory: [],\n nextActions: [],\n nextActionTakers: null,\n });\n },\n });\n };\n\n const validateBeforeProcessWorkflowDocumentAction = async () => {\n if (\n action === undefined ||\n action === null ||\n action?.id === undefined ||\n action?.id === null\n ) {\n toast.error(\"You must select action to process\");\n return;\n }\n if (\n (action.require_comment === true ||\n action.require_comment === 1 ||\n action.require_comment === \"true\") &&\n (actionComment === null || actionComment === \"\")\n ) {\n toast.error(\"You must enter comment for the action to be processed\");\n return;\n }\n if (action?.pre_action_endpoint) {\n await handlePostRequest({\n endPointURI: action.pre_action_endpoint,\n showMask: true,\n loadingMessage: \"Processing pre action validation ... please wait\",\n parameters: {\n refDocumentId: props.refDocumentId,\n actionId: action.id,\n },\n successCallBkFn: () => {\n processWorkflowDocumentAction();\n },\n });\n return;\n }\n processWorkflowDocumentAction();\n };\n const processWorkflowDocumentAction = async () => {\n await handlePostRequest({\n endPointURI: \"api/v1/public/workflow/doc/action\",\n showMask: true,\n data: {\n workflowDocumentId: workflowDocumentInfo?.workflowDocument?.id,\n refDocumentId: props.refDocumentId,\n actionId: action.id,\n refDocumentStatus:\n workflowDocumentInfo?.workflowDocumentStatus?.documentStatusCode,\n actionComment: actionComment,\n },\n successCallBkFn: async (response) => {\n if (action?.post_action_endpoint) {\n await handlePostRequest({\n endPointURI: action.post_action_endpoint,\n showMask: true,\n loadingMessage: \"Processing post action process ... please wait\",\n parameters: {\n refDocumentId: props.refDocumentId,\n actionId: action.id,\n },\n successCallBkFn: () => {\n loadWorkFlowDocumentInfo();\n if (props?.postActionCallBk) {\n props.postActionCallBk();\n }\n },\n });\n return;\n }\n loadWorkFlowDocumentInfo();\n },\n });\n };\n\n const adjustAuthorizedActions = () => {\n if (workflowDocumentInfo?.nextActions?.length > 0) {\n setAuthorizedActions(\n workflowDocumentInfo.nextActions.filter((action) => {\n if (\n !(\n workflowDocumentInfo?.workflowDocumentStatus\n ?.nextActionTakersAuthority ||\n workflowDocumentInfo?.nextActionTakers\n )\n ) {\n return true;\n }\n if (\n workflowDocumentInfo?.workflowDocumentStatus\n ?.nextActionTakersAuthority\n ) {\n if (\n isUserAuthorized(\n workflowDocumentInfo.workflowDocumentStatus\n .nextActionTakersAuthority\n )\n ) {\n return true;\n }\n }\n if (workflowDocumentInfo?.nextActionTakers) {\n for (const actionTaker of workflowDocumentInfo.nextActionTakers) {\n if (\n UserInfo?.username === actionTaker?.username ||\n UserInfo?.username === actionTaker?.USERNAME\n ) {\n return true;\n }\n }\n }\n return false;\n })\n );\n } else {\n setAuthorizedActions([]);\n }\n };\n\n useEffect(() => {\n if (props.refDocumentId && props.workFlowDocumentCode) {\n loadWorkFlowDocumentInfo();\n }\n }, [props.refDocumentId, props.workFlowDocumentCode]);\n\n useEffect(() => {\n if (workflowDocumentInfo?.nextActions) {\n adjustAuthorizedActions();\n } else {\n setAuthorizedActions([]);\n }\n }, [workflowDocumentInfo.nextActions, workflowDocumentInfo.nextActionTakers]);\n return (\n <>\n {workflowDocumentInfo?.workflowDocumentReport?.id ? (\n <ReporTViewWindow>\n <ReportViewer\n reportCode={\n workflowDocumentInfo?.workflowDocumentReport?.reportCode\n }\n resultMode=\"App\"\n byPassParameterEntry={true}\n reportParametersValues={{ doc_id: props.refDocumentId + \"\" }}\n />\n </ReporTViewWindow>\n ) : (\n <></>\n )}\n\n {workflowDocumentInfo?.workflowDocument ? (\n <Box\n sx={{\n width: \"100%\",\n textAlign: \"center\",\n fontSize: 20,\n fontWeight: \"bold\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <IconButton\n onClick={() => {\n navigate(-1, { replace: true });\n }}\n >\n <FontAwesomeIcon icon=\"arrow-left\" />\n </IconButton>\n <Box sx={{ flex: 1 }}></Box>\n <FontAwesomeIcon\n icon=\"file\"\n style={{ marginRight: 10, marginLeft: 10 }}\n />\n {AppLayout.appDirection === \"ltr\"\n ? `${workflowDocumentInfo?.workflowDocument?.documentEnName} # ${\n workflowDocumentInfo?.referencedDocument[\n workflowDocumentInfo?.workflowDocument?.documentNumberField\n ]\n }`\n : `${workflowDocumentInfo?.workflowDocument?.documentArName} # ${\n workflowDocumentInfo?.referencedDocument[\n workflowDocumentInfo?.workflowDocument?.documentNumberField\n ]\n }`}\n {workflowDocumentInfo?.workflowDocumentStatus\n ? AppLayout.appDirection === \"ltr\"\n ? ` ( ${workflowDocumentInfo?.workflowDocumentStatus?.documentStatusEnName} )`\n : ` ( ${workflowDocumentInfo?.workflowDocumentStatus?.documentStatusArName} )`\n : \"\"}\n <Box sx={{ flex: 1 }}></Box>\n {workflowDocumentInfo?.workflowDocumentReport?.id ? (\n <Button\n onClick={() => {\n setReportViewWindowState(true);\n }}\n variant=\"outlined\"\n startIcon={<FontAwesomeIcon icon=\"eye\" />}\n >\n {t(\"VIEW_LABEL\")}\n </Button>\n ) : (\n <></>\n )}\n </Box>\n ) : (\n <></>\n )}\n\n <Box\n sx={{\n flex: 1,\n width: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n // flexDirection: \"column\",\n }}\n >\n {authorizedActions?.length > 0 ? (\n <Paper\n sx={{\n padding: 2,\n display: \"flex\",\n flex: 1,\n margin: 1,\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n overflow: \"hidden\",\n }}\n >\n <ComboBox\n sx={{ marginBottom: 2, width: 400 }}\n label={t(\"WE_AVAILABLE_ACTIONS_LABEL\")}\n displayField={\n AppLayout.appDirection === \"ltr\"\n ? \"document_action_en_name\"\n : \"document_action_ar_name\"\n }\n valueField={\"id\"}\n value={action?.id}\n options={authorizedActions}\n onChangeCallBack={(v, selectedRecord) => {\n setAction(selectedRecord);\n }}\n />\n {/* <ComboBox\n sx={{ marginBottom: 2, width: 400 }}\n label={t(\"WE_NEXT_APPROVER_LABEL\")}\n displayField={\n AppLayout.appDirection === \"ltr\"\n ? \"employeeEnName\"\n : \"employeeArName\"\n }\n valueField={\"id\"}\n value={nextActionTaker?.id}\n options={action?.nextActionTakers || []}\n onChangeCallBack={(v, selectedRecord) => {\n setNextActionTaker(selectedRecord);\n }}\n /> */}\n <TemplateTextField\n sx={{ width: 400 }}\n rows={3}\n value={actionComment}\n onChange={(event) => {\n setActionComment(event.target.value);\n }}\n multiline={true}\n label={t(\"WF_COMMENT_LABEL\")}\n />\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Button\n color=\"success\"\n variant=\"contained\"\n sx={{ width: 200, m: 1 }}\n onClick={validateBeforeProcessWorkflowDocumentAction}\n >\n {t(\"WF_TAKE_ACTION_BTN_LABEL\")}\n </Button>\n {props?.cancelActionCallBk ? (\n <Button\n variant=\"contained\"\n sx={{ width: 200, m: 1 }}\n color=\"error\"\n onClick={() => {\n if (props?.cancelActionCallBk) {\n props.cancelActionCallBk();\n }\n }}\n >\n {t(\"WF_CANCEL_BTN_LABEL\")}\n </Button>\n ) : (\n <></>\n )}\n </Box>\n {workflowDocumentInfo?.nextActionTakers &&\n workflowDocumentInfo.nextActionTakers.length > 0 ? (\n <>\n <Divider\n variant=\"fullWidth\"\n flexItem\n sx={{ marginTop: 1, marginBottom: 1 }}\n >\n <Box\n sx={{\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 18,\n fontWeight: \"bold\",\n }}\n >\n <FontAwesomeIcon\n icon=\"users\"\n style={{ marginRight: 10, marginLeft: 10 }}\n />{\" \"}\n {t(\"WF_WAITING_FOR_LABEL\")}\n </Box>\n </Divider>\n\n <Box\n sx={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n overflow: \"auto\",\n padding: 1,\n width: \"100%\",\n }}\n >\n {workflowDocumentInfo.nextActionTakers.map(\n (nextActionTaker: any) => {\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n border: \"1px dotted black\",\n width: 400,\n marginBottom: 2,\n padding: 2,\n }}\n >\n <AttachmentImageViewer\n showAsAvatar={true}\n attachmentCode=\"EMPLOYEE_PHOTOS\"\n refKey={nextActionTaker?.id || \"0\"}\n style={{\n marginRight: 2,\n marginLeft: 2,\n width: 60,\n height: 60,\n }}\n />\n <Box\n sx={{\n flex: 2,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n justifyContent: \"center\",\n }}\n >\n <div>\n {AppLayout.appDirection === \"ltr\"\n ? nextActionTaker?.employee_en_name\n : nextActionTaker?.employee_ar_name}\n </div>\n <div>\n {nextActionTaker?.email ? (\n <>\n <FontAwesomeIcon\n icon=\"envelope\"\n style={{ marginRight: 10, marginLeft: 10 }}\n />\n {nextActionTaker?.email}\n </>\n ) : (\n <></>\n )}\n </div>\n <div>\n {nextActionTaker?.mobile_number ? (\n <>\n <FontAwesomeIcon\n icon=\"mobile\"\n style={{ marginRight: 10, marginLeft: 10 }}\n />\n {nextActionTaker?.mobile_number}\n </>\n ) : (\n <></>\n )}\n </div>\n </Box>\n </Box>\n );\n }\n )}\n </Box>\n </>\n ) : (\n <></>\n )}\n </Paper>\n ) : (\n <></>\n )}\n {workflowDocumentInfo?.actionsHistory.length > 0 ? (\n <WorkflowDocumentTimeLine\n actionHistory={workflowDocumentInfo.actionsHistory}\n />\n ) : (\n <Paper\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n flexGrow: 1,\n padding: 2,\n margin: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Box\n sx={{\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 18,\n fontWeight: \"bold\",\n }}\n >\n <FontAwesomeIcon\n icon=\"history\"\n style={{ marginRight: 10, marginLeft: 10 }}\n />\n {t(\"WF_ACTION_HISTORY_LABEL\")}\n </Box>\n <Box\n sx={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n No Action Log available\n </Box>\n </Paper>\n )}\n </Box>\n </>\n );\n};\n\nexport default WorkflowDocumentPanel;\n","import { Box } from \"@mui/system\";\nimport React, { useEffect, useState } from \"react\";\nimport * as z from \"zod\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { useParams } from \"react-router-dom\";\nimport { Button, Grid2, Icon, IconButton, Tooltip } from \"@mui/material\";\nimport { toast } from \"react-toastify\";\nimport FormElementGroup from \"./FormElementGroup\";\nimport FormElementField from \"./FormElementField\";\nimport FormAction from \"./FormAction\";\nimport { constructValidationSchema, getAllFields } from \"../DataEntryUtil\";\nimport {\n FormElementProps,\n RecordAction,\n TemplateFormProps,\n} from \"../DataEntryTypes\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { useTranslation } from \"react-i18next\";\nimport { useWindow } from \"../../../../hooks\";\nimport AttachmentPanel from \"../../attachment/AttachmentPanel\";\nimport WorkflowDocumentPanel from \"../../workflow/WorkflowDocumentPanel\";\n\nconst TemplateForm: React.FC<TemplateFormProps> = (\n props: TemplateFormProps\n) => {\n const { Window: AttachmentWindow, setWindowState: setAttachmentWindowState } =\n useWindow({\n windowTitle: \"Attachments\",\n windowIcon: \"paperclip\",\n width: \"fit-content\",\n height: \"fit-content\",\n minHeight: 500,\n minWidth: 400,\n });\n const { Window: WorkflowWindow, setWindowState: setWorkflowWindowState } =\n useWindow({\n windowTitle: \"Approvals\",\n windowIcon: \"stamp\",\n width: \"fit-content\",\n height: \"fit-content\",\n minHeight: 500,\n minWidth: 400,\n });\n const [attachmentPanelEnabledForRecord, setAttachmentPanelEnabledForRecord] =\n useState<boolean>(true);\n const { t } = useTranslation();\n const fields = getAllFields(props.elements);\n const initiallyHiddenFields = [];\n for (const field of fields) {\n if (field?.hidden) {\n initiallyHiddenFields.push(field.fieldName);\n }\n }\n const [hiddenFields, setHiddenFields] = useState<string[]>(\n initiallyHiddenFields\n );\n const initialValues: any = {};\n for (const element of props.elements) {\n if (\n element?.type === \"field\" &&\n element?.mode === \"props\" &&\n element?.props?.defaultValue\n ) {\n initialValues[element.props.fieldName] = element.props.defaultValue;\n }\n }\n const [disabledFields, setDisabledFields] = useState<string[]>([]);\n const formSchema = z.object(constructValidationSchema(fields));\n type FormData = z.infer<typeof formSchema>;\n const formManager = useForm<FormData>({\n resolver: zodResolver(formSchema),\n defaultValues: initialValues,\n });\n const formValues = formManager.watch();\n const pathParameters = useParams();\n const formRouteRecordIdParamName: any = props?.formRouteRecordIdParamName;\n\n const loadRecord = async () => {\n let idToLoad = null;\n if (props?.recordIdToEdit) {\n idToLoad = props.recordIdToEdit;\n } else if (\n formRouteRecordIdParamName &&\n pathParameters[formRouteRecordIdParamName]\n ) {\n idToLoad = pathParameters[formRouteRecordIdParamName];\n }\n if (idToLoad) {\n const retrievedRecord: any = await props.apiActions.loadRecordById(\n idToLoad\n );\n if (retrievedRecord) {\n formManager.reset({ ...retrievedRecord });\n if (props?.formLoadCallBk) {\n props?.formLoadCallBk(formActions, formManager, retrievedRecord);\n }\n for (const field of fields) {\n if (\n field?.fieldType === \"combobox\" &&\n retrievedRecord[field.fieldName]\n ) {\n formManager.setValue(\n field.fieldName,\n retrievedRecord[field.fieldName] + \"\"\n );\n }\n }\n }\n } else {\n formManager.reset({});\n }\n };\n\n const saveRecord = async (record: any) => {\n if (props?.preSaveValidation && !props.preSaveValidation(record)) {\n return;\n }\n if (record) {\n const savedRecord: any = await props.apiActions.saveRecord(record);\n if (savedRecord) {\n formManager.reset({ ...savedRecord });\n if (props?.formSavedSuccessfullyCallBk) {\n props.formSavedSuccessfullyCallBk(savedRecord);\n }\n if (props?.formCloseCallBk) {\n props.formCloseCallBk();\n }\n }\n }\n };\n\n const formActions = {\n setFieldValue: (fieldName: string, fieldValue: any) => {\n formManager.setValue(fieldName, fieldValue);\n },\n hideField: (fieldName: string) => {\n setHiddenFields((oldValues) => {\n const newValues = [...oldValues, fieldName];\n return newValues;\n });\n },\n showField: (fieldName: string) => {\n setHiddenFields((oldValues) => {\n const newValues = oldValues.filter((x) => x !== fieldName);\n return newValues;\n });\n },\n disableField: (fieldName: string) => {\n setDisabledFields((oldValues) => {\n const newValues = [...oldValues, fieldName];\n return newValues;\n });\n },\n enableField: (fieldName: string) => {\n setDisabledFields((oldValues) => {\n const newValues = oldValues.filter((x) => x !== fieldName);\n return newValues;\n });\n },\n };\n\n useEffect(() => {\n loadRecord();\n }, [props?.recordIdToEdit]);\n\n useEffect(() => {\n if (props?.attachment && props?.attachment?.enableAttachFn) {\n setAttachmentPanelEnabledForRecord(\n props.attachment.enableAttachFn(formValues)\n );\n } else {\n setAttachmentPanelEnabledForRecord(true);\n }\n }, [formValues]);\n\n return (\n <>\n {props?.attachment ? (\n <AttachmentWindow>\n <AttachmentPanel\n attachmentCode={props.attachment.attachmentCode}\n refKey={formValues[props?.keyColumnName || \"id\"]}\n enableAttachment={attachmentPanelEnabledForRecord}\n />\n </AttachmentWindow>\n ) : (\n <></>\n )}\n {props?.workFlowDocumentCode ? (\n <WorkflowWindow>\n <WorkflowDocumentPanel\n workFlowDocumentCode={props.workFlowDocumentCode}\n refDocumentId={formValues[props?.keyColumnName || \"id\"]}\n postActionCallBk={() => {\n setWorkflowWindowState(false);\n loadRecord();\n }}\n cancelActionCallBk={() => {\n setWorkflowWindowState(false);\n }}\n />\n </WorkflowWindow>\n ) : (\n <></>\n )}\n\n <Box\n sx={{\n display: \"flex\",\n flex: 1,\n width: \"100%\",\n height: \"fit-content\",\n flexDirection: \"column\",\n alignItems: \"center\",\n overflow: \"auto\",\n }}\n >\n <Grid2 sx={{ width: \"100%\" }} container>\n {props.elements.map((formElement: FormElementProps, index) => {\n if (formElement.type === \"group\") {\n return (\n <FormElementGroup\n key={index}\n {...formElement.props}\n formManager={formManager}\n formValues={formValues}\n formActions={formActions}\n hiddenFields={hiddenFields}\n disabledFields={disabledFields}\n />\n );\n } else if (\n formElement.type === \"field\" &&\n formElement.mode === \"props\"\n ) {\n return (\n <FormElementField\n key={index}\n fieldInfo={formElement.props}\n formManager={formManager}\n formValues={formValues}\n formActions={formActions}\n hiddenFields={hiddenFields}\n disabledFields={disabledFields}\n />\n );\n } else if (\n formElement.type === \"field\" &&\n formElement.mode === \"node\"\n ) {\n return (\n <Grid2\n key={index}\n size={\n formElement?.props?.formProps?.fieldSize || {\n lg: 3,\n md: 6,\n xs: 12,\n }\n }\n sx={{ padding: 1, width: \"100%\" }}\n >\n <formElement.node\n formManager={formManager}\n formValues={formValues}\n />\n </Grid2>\n );\n }\n })}\n </Grid2>\n </Box>\n\n <Box\n sx={{\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n }}\n >\n {formValues[props?.keyColumnName || \"id\"] ? (\n props?.attachment ? (\n <Tooltip title=\"Attachments\">\n <IconButton\n onClick={() => {\n setAttachmentWindowState(true);\n }}\n >\n <FontAwesomeIcon icon=\"paperclip\" />\n </IconButton>\n </Tooltip>\n ) : null\n ) : null}\n {formValues[props?.keyColumnName || \"id\"] ? (\n props?.workFlowDocumentCode ? (\n <Tooltip title=\"Approvals\">\n <IconButton\n onClick={() => {\n setWorkflowWindowState(true);\n }}\n >\n <FontAwesomeIcon icon=\"stamp\" />\n </IconButton>\n </Tooltip>\n ) : null\n ) : null}\n {props?.actions ? (\n formValues[props?.keyColumnName || \"id\"] ? (\n props.actions.map((action: RecordAction) => {\n if (action?.formActionProps?.enabled === true) {\n return <FormAction {...action} record={formValues} />;\n } else {\n return <></>;\n }\n })\n ) : (\n <></>\n )\n ) : (\n <></>\n )}\n <div style={{ flex: 1 }}></div>\n <Button\n variant={\n props?.saveButtonSpecs?.actionButtonVariant\n ? props.saveButtonSpecs.actionButtonVariant\n : \"contained\"\n }\n sx={{ m: 1 }}\n startIcon={\n props?.saveButtonSpecs?.icon ? (\n <FontAwesomeIcon icon={props.saveButtonSpecs.icon} />\n ) : null\n }\n color={\n props?.saveButtonSpecs?.actionButtonColor\n ? props.saveButtonSpecs.actionButtonColor\n : \"primary\"\n }\n onClick={formManager.handleSubmit(\n (values) => {\n saveRecord(values);\n },\n (errors) => {\n toast.error(\n \"Form Data is not valid, make sure you have all field with valid data\"\n );\n console.log(\"form validation error\", errors);\n }\n )}\n >\n {t(props?.saveButtonSpecs?.label || \"SAVE_BTN_LABEL\")}\n </Button>\n <Button\n variant={\n props?.cancelButtonSpecs?.actionButtonVariant\n ? props.cancelButtonSpecs.actionButtonVariant\n : \"contained\"\n }\n startIcon={\n props?.cancelButtonSpecs?.icon ? (\n <FontAwesomeIcon icon={props.cancelButtonSpecs.icon} />\n ) : null\n }\n color={\n props?.cancelButtonSpecs?.actionButtonColor\n ? props.cancelButtonSpecs.actionButtonColor\n : \"error\"\n }\n sx={{ m: 1 }}\n onClick={() => {\n if (props?.formCloseCallBk) {\n props.formCloseCallBk();\n }\n formManager.reset(initialValues);\n }}\n >\n {t(props?.cancelButtonSpecs?.label || \"CANCEL_BTN_LABEL\")}\n </Button>\n </Box>\n </>\n );\n};\n\nexport default TemplateForm;\n","import { useParams } from \"react-router-dom\";\nimport WorkflowDocumentPanel from \"./WorkflowDocumentPanel\";\n\nconst WorkflowRouteComponent: React.FC = () => {\n const { workflowDocumentCode, refDocumentId } = useParams();\n return (\n <WorkflowDocumentPanel\n workFlowDocumentCode={workflowDocumentCode}\n refDocumentId={refDocumentId}\n />\n );\n};\n\nexport default WorkflowRouteComponent;\n","import { BarChart } from \"@mui/x-charts\";\nimport { WidgetProps } from \"../DashboardViewer\";\n\n\nconst TemplateBarChart: React.FC<WidgetProps> = (props) => {\n return (\n <BarChart\n dataset={props.data}\n xAxis={[\n {\n dataKey: props.valueField,\n scaleType: \"band\",\n label: props.valueLabel,\n },\n ]}\n series={props.labelField?.split(\",\").map((labelField) => {\n return { dataKey: labelField, label: labelField };\n })}\n />\n );\n};\n\nexport default TemplateBarChart;\n","import { Box, Paper, Typography } from \"@mui/material\";\nimport { SingleRecordWidgetProps } from \"../DashboardViewer\";\n\n\nconst TemplateDataCard: React.FC<SingleRecordWidgetProps> = (props: any) => {\n return (\n <Paper\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n height: 150,\n padding: 1,\n flexGrow: 1,\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n width: \"100%\",\n justifyContent: \"space-evenly\",\n alignItems: \"center\",\n }}\n >\n <div>{props.record[props.valueField]}</div>\n </Box>\n <Typography sx={{ fontSize: 16, fontWeight: \"bold\" }}>\n {props.record[props.labelField]}\n </Typography>\n </Paper>\n );\n};\n\nexport default TemplateDataCard;\n","import { Gauge } from \"@mui/x-charts\";\nimport { SingleRecordWidgetProps } from \"../DashboardViewer\";\nimport { Typography } from \"@mui/material\";\n\nconst TemplateGauge: React.FC<SingleRecordWidgetProps> = (props: any) => {\n return (\n <>\n <Typography sx={{ fontSize: 16, fontWeight: \"bold\" }}>\n {props.record[props.labelField]}\n </Typography>\n <Gauge\n width={200}\n height={200}\n value={props.record[props.valueField]}\n valueMax={props.total}\n />\n </>\n );\n};\n\nexport default TemplateGauge;\n","import { LineChart } from \"@mui/x-charts\";\nimport { WidgetProps } from \"../DashboardViewer\";\n\nconst TemplateLineChart: React.FC<WidgetProps> = (props) => {\n return (\n <LineChart\n dataset={props.data}\n xAxis={[\n {\n dataKey: props.valueField,\n scaleType: \"band\",\n label: props.valueLabel,\n },\n ]}\n series={props.labelField?.split(\",\").map((labelField) => {\n return { dataKey: labelField, label: labelField };\n })}\n />\n );\n};\n\nexport default TemplateLineChart;\n","import * as React from \"react\";\nimport LinearProgress, {\n LinearProgressProps,\n} from \"@mui/material/LinearProgress\";\nimport Typography from \"@mui/material/Typography\";\nimport Box from \"@mui/material/Box\";\nimport { SingleRecordWidgetProps } from \"../DashboardViewer\";\n\nfunction LinearProgressWithLabel(\n props: LinearProgressProps & { value: number }\n) {\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\n <Box sx={{ width: \"100%\", mr: 1 }}>\n <LinearProgress variant=\"determinate\" {...props} />\n </Box>\n <Box sx={{ minWidth: 35 }}>\n <Typography\n variant=\"body2\"\n sx={{ color: \"text.secondary\" }}\n >{`${Math.round(props.value)}%`}</Typography>\n </Box>\n </Box>\n );\n}\n\nconst TemplateLineProgress: React.FC<SingleRecordWidgetProps> = (\n props: any\n) => {\n return (\n <Box sx={{ width: \"100%\" }}>\n <Typography sx={{ fontSize: 16, fontWeight: \"bold\" }}>\n {props.record[props.labelField]}\n </Typography>\n <LinearProgressWithLabel\n value={100 * (props.record[props.valueField] / props.total)}\n />\n </Box>\n );\n};\n\nexport default TemplateLineProgress;\n","import { PieChart } from \"@mui/x-charts/PieChart\";\nimport { WidgetProps } from \"../DashboardViewer\";\n\nconst TemplatePieChart: React.FC<WidgetProps> = (props) => {\n // construct data object\n const chartData = props.data.map((record: any, index: any) => {\n return {\n id: index,\n value: record[props.valueField],\n label: record[props.labelField] + \"\",\n };\n });\n return (\n <PieChart\n series={[\n {\n data: chartData,\n },\n ]}\n />\n );\n};\n\nexport default TemplatePieChart;\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { WidgetType } from \"../../administration/dev/WidgetGrid\";\nimport { Backdrop, Box, CircularProgress, Grid2 } from \"@mui/material\";\nimport { useEffect, useState } from \"react\";\nimport LoadingMask from \"../../common/LoadingMask\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\nimport { useAxios } from \"../../../hooks\";\nimport TemplateLineChart from \"./charts/TemplateLineChart\";\nimport TemplateBarChart from \"./charts/TemplateBarChart\";\nimport TemplatePieChart from \"./charts/TemplatePieChart\";\nimport TemplateDataCard from \"./charts/TemplateDataCard\";\nimport TemplateGauge from \"./charts/TemplateGauge\";\nimport TemplateLineProgress from \"./charts/TemplateLineProgress\";\n\nexport type Widget = {\n widgetName: string;\n widgetDescription: string;\n title: string;\n icon: any;\n dataQueryId: number;\n widgetType: WidgetType;\n width: any;\n height: any;\n horizontalAxisField: any;\n horizontalAxisLabel: any;\n verticalAxisField: string;\n verticalAxisLabel: string;\n seriesKeys: any;\n parameterValues: {\n [key: string]: any;\n };\n};\n\nconst WidgetViewer: React.FC<Widget> = (props) => {\n const [isWidgetLoading, setWidgetLoading] = useState(true);\n const [data, setData] = useState([]);\n const { handleGetRequest } = useAxios();\n const getWidgetData = async () => {\n setWidgetLoading(true);\n await handleGetRequest({\n endPointURI: \"api/v1/dev/query/result\",\n showMask: false,\n parameters: {\n queryId: props.dataQueryId,\n ...props.parameterValues,\n },\n successCallBkFn: (response) => {\n setWidgetLoading(false);\n setData(response.data);\n },\n failureCallBkFn: () => {\n setWidgetLoading(false);\n setData(null);\n },\n });\n };\n useEffect(() => {\n getWidgetData();\n }, [props.parameterValues]);\n\n let total = 0;\n if (data.length == 1) {\n total = 100;\n }\n if (\n props.widgetType === \"CircularProgress\" ||\n props.widgetType === \"LinearProgress\"\n ) {\n for (const record of data) {\n total += record[props.verticalAxisField];\n }\n }\n return (\n <>\n {props.widgetType === \"LineChart\" ||\n props.widgetType === \"PieChart\" ||\n props.widgetType === \"ColumnChart\" ? (\n <Box>\n <FontAwesomeIcon\n style={{ marginRight: 10, marginLeft: 10 }}\n icon={props?.icon || \"chart-pie\"}\n />\n {props?.title}\n </Box>\n ) : (\n <></>\n )}\n\n <Box\n sx={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n }}\n >\n {isWidgetLoading ? (\n <>\n <FontAwesomeIcon\n icon={{ prefix: \"fas\", iconName: \"arrows-spin\" }}\n style={{ marginRight: 10, marginLeft: 10 }}\n spin\n size=\"2x\"\n />\n <div>Loading</div>\n </>\n ) : props.widgetType === \"ColumnChart\" ? (\n <TemplateBarChart\n data={data}\n widgetTitle={props.title}\n labelField={props.verticalAxisField}\n valueField={props.horizontalAxisField}\n valueLabel={props.horizontalAxisLabel}\n widgetType=\"Line\"\n />\n ) : props.widgetType === \"LineChart\" ? (\n <TemplateLineChart\n data={data}\n widgetTitle={props.title}\n labelField={props.verticalAxisField}\n valueField={props.horizontalAxisField}\n valueLabel={props.horizontalAxisLabel}\n widgetType=\"Line\"\n />\n ) : props.widgetType === \"PieChart\" ? (\n <TemplatePieChart\n data={data}\n widgetTitle={props.title}\n labelField={props.horizontalAxisField}\n valueField={props.verticalAxisField}\n widgetType=\"Line\"\n />\n ) : (\n <Grid2\n container\n sx={{\n width: \"100%\",\n alignItems: \"flex-start\",\n justifyContent: \"flex-start\",\n }}\n spacing={2}\n size={{ xs: 12 }}\n >\n <Grid2 size={{ xs: 12 }} sx={{ textAlign: \"center\" }}>\n {props.title}\n </Grid2>\n\n {data.map((record, index) => {\n if (props.widgetType === \"Card\") {\n return (\n <Grid2 size={{ md: 3, xs: 12 }}>\n <TemplateDataCard\n key={index}\n widgetTitle={\"\"}\n record={record}\n labelField={props.verticalAxisField}\n valueField={props.horizontalAxisField}\n />\n </Grid2>\n );\n } else if (props.widgetType === \"CircularProgress\") {\n return (\n <Grid2 size={{ md: 3, xs: 12 }}>\n <TemplateGauge\n key={index}\n widgetTitle={\"\"}\n record={record}\n labelField={props.horizontalAxisField}\n valueField={props.verticalAxisField}\n total={total}\n />\n </Grid2>\n );\n } else if (props.widgetType === \"LinearProgress\") {\n return (\n <Grid2 size={{ md: 3, xs: 12 }}>\n <TemplateLineProgress\n key={index}\n widgetTitle={\"\"}\n record={record}\n labelField={props.horizontalAxisField}\n valueField={props.verticalAxisField}\n total={total}\n />\n </Grid2>\n );\n }\n })}\n </Grid2>\n )}\n </Box>\n </>\n );\n};\n\nexport default WidgetViewer;\n","import { Box, Grid2, IconButton } from \"@mui/material\";\nimport { useEffect, useState } from \"react\";\nimport { useAxios } from \"../../../hooks\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport WidgetViewer, { Widget } from \"./WidgetViewer\";\nimport { useNavigate } from \"react-router-dom\";\n\ntype DashboardViewerProps = {\n dashboardCode: string;\n parameters?: { [key: string]: any };\n};\n\nexport interface WidgetProps {\n widgetTitle?: string;\n widgetType: \"Line\" | \"Bar\" | \"Pie\" | \"Card\" | \"Gauge\" | \"Progress\";\n data: any;\n valueLabel?: string;\n valueField: string; //x-axis field in case of line/bar chart\n labelField: string; //y-axis field in case of line/bar chart, it can also be a comma separated string for multiple series\n}\n\nexport interface SingleRecordWidgetProps {\n widgetTitle?: string;\n record: object;\n valueField: string;\n labelField: string;\n total?: number;\n}\n\ntype DashboardInfo = {\n dashboardCode: string;\n dashboardName: string;\n dashboardTitle: string;\n widgets: Array<Widget>;\n dashboardParameters: Array<any>;\n};\n\nconst DashboardViewer: React.FC<DashboardViewerProps> = (props) => {\n const [dashboardInfo, setDashboardInfo] = useState<DashboardInfo>({\n dashboardCode: \"\",\n dashboardName: \"\",\n dashboardTitle: \"\",\n dashboardParameters: [],\n widgets: [],\n });\n const [dashboardParameterValues, setDashboardParameterValues] = useState<{\n [key: string]: any;\n }>(props?.parameters || {});\n const navigate = useNavigate();\n const { handleGetRequest, handlePostRequest } = useAxios();\n const loadDashboardInfo = async () => {\n await handleGetRequest({\n endPointURI: \"api/v1/dev/dashboard/metadata\",\n showMask: true,\n parameters: {\n dashboardCode: props.dashboardCode,\n },\n successCallBkFn: (response) => {\n setDashboardInfo(response.data);\n },\n failureCallBkFn: () => {\n setDashboardInfo(null);\n },\n });\n };\n useEffect(() => {\n if (props.dashboardCode) {\n loadDashboardInfo();\n }\n }, [props.dashboardCode, props.parameters]);\n return (\n <>\n {dashboardInfo ? (\n <>\n <Box\n sx={{\n fontSize: 20,\n fontWeight: \"bold\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <IconButton\n onClick={() => {\n navigate(-1, { replace: true });\n }}\n >\n <FontAwesomeIcon icon=\"arrow-left\" />\n </IconButton>\n <Box sx={{ flex: 1 }}></Box>\n <FontAwesomeIcon\n style={{ marginLeft: 10, marginRight: 10 }}\n icon={\"square-poll-vertical\"}\n />\n <Box>{dashboardInfo?.dashboardTitle}</Box>\n <Box sx={{ flex: 1 }}></Box>\n </Box>\n <Grid2\n container\n spacing={1}\n sx={{\n flexGrow: 1,\n overflowY: \"auto\",\n padding: 1,\n }}\n >\n {dashboardInfo?.widgets.map((widget, index) => {\n return (\n <Grid2\n key={index}\n sx={{\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 1,\n display: \"flex\",\n overflow: \"auto\",\n flexDirection:\n widget.widgetType != \"Card\" ? \"column\" : undefined,\n height: widget?.height || 300,\n }}\n size={{ md: widget?.width, sm: 12 }}\n >\n <WidgetViewer {...widget} />\n </Grid2>\n );\n })}\n </Grid2>\n </>\n ) : (\n <Box\n sx={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 24,\n fontWeight: \"bold\",\n }}\n >\n No Dashboard Found\n </Box>\n )}\n </>\n );\n};\n\nexport default DashboardViewer;\n","import { useParams } from \"react-router-dom\";\nimport DashboardViewer from \"./DashboardViewer\";\n\nconst DashboardRouteView: React.FC = () => {\n const { dashboardCode } = useParams();\n return <DashboardViewer dashboardCode={dashboardCode} />;\n};\n\nexport default DashboardRouteView;\n","import { useState } from \"react\";\nimport { useAxios, useSession } from \"../../hooks\";\nimport { ComboBox } from \"../templates\";\nimport { Box, Button } from \"@mui/material\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { UserSessionActions } from \"../../redux/features/common/UserSessionSlice\";\n\ntype ChangeOrgFormProps = {\n successChangeCallBackFn: () => void;\n};\n\nconst ChangeOrgForm: React.FC<ChangeOrgFormProps> = (props) => {\n const { UserSession } = useSession();\n const AppLayoutState = useSelector((state: any) => state.AppLayout);\n const dispatch = useDispatch();\n const { handlePostRequest } = useAxios();\n const [newOrgId, setNewOrgId] = useState(\n UserSession.value.currentOrganization.id\n );\n return (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 1,\n }}\n >\n <ComboBox\n sx={{ width: \"100%\" }}\n displayField={\n AppLayoutState.appDirection === \"ltr\"\n ? \"organizationEnName\"\n : \"organizationArName\"\n }\n valueField=\"id\"\n label=\"\"\n options={UserSession.value.userOrganizations}\n value={newOrgId}\n onChangeCallBack={(value) => {\n setNewOrgId(value);\n }}\n />\n <Button\n sx={{ m: 1 }}\n variant=\"contained\"\n disabled={\n newOrgId == null ||\n newOrgId === UserSession.value.currentOrganization.id\n }\n onClick={async () => {\n await handlePostRequest({\n endPointURI: \"api/auth/changeCurrentOrg\",\n showMask: true,\n parameters: {\n username: UserSession.value.username,\n orgId: newOrgId,\n },\n data: {},\n successCallBkFn: (response) => {\n const UserSession = {\n ...response.data,\n isAuthenticated: true,\n };\n dispatch(UserSessionActions.setAuthenticated(UserSession));\n if (props.successChangeCallBackFn) {\n props.successChangeCallBackFn();\n }\n },\n });\n }}\n >\n Change Organization\n </Button>\n </Box>\n );\n};\n\nexport default ChangeOrgForm;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport const DRAWER_WIDTH = 350;\n\ninterface SideBarState {\n isOpened: boolean;\n}\n\nconst initialState: SideBarState = {\n isOpened: false,\n};\n\nconst SideBarSlice = createSlice({\n name: \"SideBar\",\n initialState,\n reducers: {\n toggleSideBarState: (state) => {\n state.isOpened = !state.isOpened;\n },\n setSideBarState: (state, action) => {\n state.isOpened = action.payload;\n },\n },\n});\n\nexport const { toggleSideBarState, setSideBarState } = SideBarSlice.actions;\nexport default SideBarSlice.reducer;\n","import { useEffect, useRef } from \"react\";\n\nexport default function useInterval(\n callback: () => void,\n delay: number | null\n) {\n const savedCallback = useRef<() => void>(callback);\n\n // Remember the latest callback\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval\n useEffect(() => {\n if (delay === null) return;\n\n const tick = () => savedCallback.current?.();\n\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }, [delay]);\n}\n","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { Box, Button, Divider, keyframes, Typography } from \"@mui/material\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useAxios, useSession } from \"../../hooks\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { timeAgo } from \"../../util\";\n\nconst beatFade = keyframes`\n 0% { transform: scale(1); opacity: 1; }\n 25% { transform: scale(1); opacity: 0.6; }\n 50% { transform: scale(1); opacity: 1; }\n 75% { transform: scale(1); opacity: 0.6; }\n 100% { transform: scale(1); opacity: 1; }\n`;\n\nexport type Notification = {\n id: number;\n notificationIcon?: IconProp;\n notificationIconColor?: string;\n notificationEnText: string;\n notificationArText: string;\n notificationTextColor?: string;\n notificationAction?: \"NAVIGATION\";\n notificationActionPayload?: string;\n isNotified?: boolean;\n createTime: string;\n setOpen?: (state: boolean) => void;\n showDivider?: boolean;\n};\nconst NotificationItem: React.FC<Notification> = (notification) => {\n const navigate = useNavigate();\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const { handlePostRequest } = useAxios();\n const acknowledgeNotification = (notificationId) => {\n handlePostRequest({\n endPointURI: \"api/v1/public/notification/notified\",\n showMask: false,\n parameters: { notificationQueueId: notificationId },\n });\n };\n return (\n <>\n <Button\n fullWidth\n onClick={() => {\n if (\n notification?.notificationAction === \"NAVIGATION\" &&\n notification?.notificationActionPayload\n ) {\n navigate(notification.notificationActionPayload);\n }\n if (!notification?.isNotified) {\n acknowledgeNotification(notification.id);\n }\n if (notification?.setOpen) {\n notification.setOpen(false);\n }\n }}\n sx={{\n marginBottom: 1,\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n color: notification?.notificationTextColor,\n display: \"flex\",\n flexDirection: \"column\",\n cursor: \"pointer\",\n }}\n >\n <Box\n sx={{\n cursor: \"pointer\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n width: \"100%\",\n }}\n >\n {notification?.notificationIcon ? (\n <FontAwesomeIcon\n icon={notification.notificationIcon}\n style={{\n marginRight: 10,\n marginLeft: 10,\n color: notification?.notificationIconColor,\n }}\n />\n ) : (\n <></>\n )}\n {AppLayout.appDirection === \"ltr\"\n ? notification.notificationEnText\n : notification.notificationArText}\n <Box sx={{ flex: 1 }}></Box>\n {!notification?.isNotified ? (\n <Typography\n color=\"warning\"\n sx={{\n animation: `${beatFade} 2s infinite ease-in-out`,\n textTransform: \"none\",\n display: \"inline-block\",\n }}\n >\n <FontAwesomeIcon\n icon=\"bell\"\n style={{ marginRight: 5, marginLeft: 5 }}\n />\n {AppLayout.appDirection === \"ltr\" ? \"New\" : \"جديد\"}\n </Typography>\n ) : (\n <></>\n )}\n </Box>\n <Box\n sx={{\n width: \"100%\",\n fontSize: 12,\n display: \"flex\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n cursor: \"pointer\",\n }}\n >\n <Box sx={{ marginRight: 1, marginLeft: 1 }}>\n {timeAgo(notification.createTime, AppLayout.appDirection)}\n </Box>\n <Box sx={{ flex: 1 }}></Box>\n <Box sx={{ marginRight: 1, marginLeft: 1 }}>\n {notification.createTime}\n </Box>\n </Box>\n </Button>\n {notification?.showDivider ? <Divider flexItem /> : <></>}\n </>\n );\n};\n\nexport default NotificationItem;\n","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n Badge,\n Box,\n Button,\n ClickAwayListener,\n Divider,\n Fade,\n IconButton,\n keyframes,\n Paper,\n Popper,\n PopperPlacementType,\n Typography,\n} from \"@mui/material\";\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\nimport { useNavigate } from \"react-router-dom\";\nimport { timeAgo } from \"../util\";\nimport useInterval from \"../hooks/useInterval\";\nimport { useAxios, useSession } from \"../hooks\";\nimport { toast } from \"react-toastify\";\nimport NotificationItem, {\n Notification,\n} from \"../components/common/NotificationItem\";\n\nexport const notificationsCheckIntervalSeconds = 1;\n\nconst NotificationButton: React.FC = () => {\n const { UserInfo } = useSession();\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n const { handleGetRequest, handlePostRequest } = useAxios();\n const navigate = useNavigate();\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const [open, setOpen] = useState(false);\n const [notifications, setNotifications] = useState<Array<Notification>>([]);\n const loadUseNotifications = () => {\n if (UserInfo.isAuthenticated === true) {\n handleGetRequest({\n endPointURI: \"api/v1/public/notifications/new\",\n showMask: false,\n successCallBkFn: (response: any) => {\n if (response.data.length > notifications.length) {\n toast.info(\n AppLayout.appDirection === \"ltr\"\n ? `You have new notifications`\n : `لديك اشعارات جديدة`,\n {\n autoClose: 3000,\n position:\n AppLayout.appDirection === \"ltr\"\n ? \"bottom-right\"\n : \"bottom-left\",\n closeOnClick: true,\n }\n );\n }\n setNotifications(response.data);\n },\n });\n }\n };\n\n useInterval(() => {\n loadUseNotifications();\n }, notificationsCheckIntervalSeconds * 1000);\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n setOpen(!open);\n };\n return (\n <ClickAwayListener\n onClickAway={() => {\n setOpen(false);\n }}\n >\n <div style={{ cursor: \"pointer\" }}>\n <IconButton\n color=\"inherit\"\n onClick={handleClick}\n sx={{ marginRight: 1, marginLeft: 1 }}\n >\n <Badge\n anchorOrigin={{\n vertical: \"top\",\n horizontal: AppLayout.appDirection === \"ltr\" ? \"right\" : \"left\",\n }}\n badgeContent={\n notifications.filter(\n (notificaiton) =>\n notificaiton.isNotified === undefined ||\n notificaiton.isNotified === null\n ).length\n }\n color=\"error\"\n >\n <FontAwesomeIcon icon=\"bell\" />\n </Badge>\n </IconButton>\n\n <Popper\n // Note: The following zIndex style is specifically for documentation purposes and may not be necessary in your application.\n sx={{\n zIndex: 1200,\n width: \"fit-content\",\n minWidth: 350,\n display: \"flex\",\n flexDirection: \"column\",\n }}\n open={open}\n anchorEl={anchorEl}\n dir={AppLayout.appDirection}\n placement={\"bottom\"}\n transition\n >\n {({ TransitionProps }) => (\n <Fade {...TransitionProps} timeout={350}>\n <Paper\n sx={{\n padding: 1,\n m: 1,\n maxHeight: 500,\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <Divider variant=\"fullWidth\" flexItem>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginTop: 2,\n marginBottom: 1,\n }}\n >\n <FontAwesomeIcon\n icon=\"bell\"\n style={{ marginRight: 10, marginLeft: 10 }}\n />\n {AppLayout.appDirection === \"ltr\"\n ? \"Notifications\"\n : \"الاشعارات\"}\n </Box>\n </Divider>\n {notifications.length == 0 ? (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n flex: 1,\n justifyContent: \"center\",\n }}\n >\n <Box>\n {AppLayout.appDirection === \"ltr\"\n ? \"You don't have any notifications\"\n : \"لا يوجد اشعارات\"}\n </Box>\n </Box>\n ) : (\n <></>\n )}\n <Box\n sx={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n overflowY: \"auto\",\n }}\n >\n {notifications.map((notification, index) => {\n return (\n <NotificationItem\n {...notification}\n setOpen={setOpen}\n showDivider={index < notifications.length - 1}\n />\n );\n })}\n </Box>\n <Divider variant=\"fullWidth\" flexItem>\n <Button\n sx={{ textTransform: \"none\" }}\n onClick={() => {\n navigate(\"myNotifications\");\n }}\n >\n {AppLayout.appDirection === \"ltr\"\n ? \"Show Old Notifications\"\n : \"عرض الاشعارات القديمة\"}\n </Button>\n </Divider>\n </Paper>\n </Fade>\n )}\n </Popper>\n </div>\n </ClickAwayListener>\n );\n};\n\nexport default NotificationButton;\n","import { Box, Button, Divider, Paper } from \"@mui/material\";\nimport { TemplateTextField } from \"../../templates\";\nimport { useState } from \"react\";\nimport { toast } from \"react-toastify\";\nimport { useAxios } from \"../../../hooks\";\n\ninterface ChangePasswordPanelProps {\n selectedPerson: any;\n isSelfService: boolean;\n onSuccessCallBk: () => void;\n}\n\nconst ChangePasswordPanel: React.FC<ChangePasswordPanelProps> = (props) => {\n const [currentPassword, setCurrentPassword] = useState(\"\");\n const [password1, setPassword1] = useState(\"\");\n const [password2, setPassword2] = useState(\"\");\n const { handlePostRequest } = useAxios();\n const handleChangePasswordRequest = async () => {\n if (props.isSelfService) {\n if (currentPassword === null || currentPassword.trim() === \"\") {\n toast.error(\n \"You must enter your current password to process your request\"\n );\n return;\n }\n }\n if (\n password1 === null ||\n password1 === \"\" ||\n password2 === null ||\n password2 === \"\" ||\n password1 != password2\n ) {\n toast.error(\n \"You must enter new password in required fields and must be identical\"\n );\n return;\n }\n await handlePostRequest({\n endPointURI: props.isSelfService\n ? \"api/v1/ss/changeMyPassword\"\n : \"api/v1/admin/changeUserPassword\",\n data: {\n personId: props?.selectedPerson?.id,\n currentPassword,\n newPassword: password1,\n },\n successCallBkFn: () => {\n props.onSuccessCallBk();\n toast.success(\"Your request has been processed successfully\");\n },\n showMask: true,\n });\n };\n return (\n <Paper\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 400,\n padding: 1,\n }}\n >\n <Box\n sx={{\n m: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n width: \"100%\",\n fontWeight: \"bold\",\n fontSize: 16,\n }}\n >\n Changing Password For : {props?.selectedPerson?.employeeEnName}\n </Box>\n <Divider variant=\"fullWidth\" sx={{ width: \"100%\", marginBottom: 2 }} />\n {props.isSelfService ? (\n <TemplateTextField\n label=\"Current Password\"\n value={currentPassword}\n onChange={(e) => {\n setCurrentPassword(e.target.value);\n }}\n sx={{ m: 1 }}\n fullWidth\n type=\"password\"\n />\n ) : (\n <></>\n )}\n\n <TemplateTextField\n label=\"New Password\"\n value={password1}\n onChange={(e) => {\n setPassword1(e.target.value);\n }}\n sx={{ m: 1 }}\n fullWidth\n type=\"password\"\n />\n <TemplateTextField\n label=\"Confirm New Password\"\n value={password2}\n onChange={(e) => {\n setPassword2(e.target.value);\n }}\n sx={{ m: 1 }}\n fullWidth\n type=\"password\"\n />\n <Button\n sx={{ m: 1 }}\n variant=\"contained\"\n onClick={() => {\n handleChangePasswordRequest();\n }}\n >\n Change Password\n </Button>\n </Paper>\n );\n};\n\nexport default ChangePasswordPanel;\n","import {\n Avatar,\n Box,\n IconButton,\n Menu,\n MenuItem,\n styled,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport MuiAppBar, { AppBarProps as MuiAppBarProps } from \"@mui/material/AppBar\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { useIsMobile } from \"../hooks/UseMobile\";\nimport {\n AppLayoutActions,\n DRAWER_WIDTH,\n} from \"../redux/features/common/AppLayoutSlice\";\nimport useAxios from \"../hooks/useAxios\";\nimport { UserSessionActions } from \"../redux/features/common/UserSessionSlice\";\nimport i18n, { changeLanguage } from \"../locales/i18n\";\nimport { useSession, useWindow } from \"../hooks\";\nimport ChangeOrgForm from \"../components/common/ChangeOrgForm\";\nimport { toggleSideBarState } from \"../redux/features/common/SideBarSlice\";\nimport AttachmentImageViewer from \"../components/templates/attachment/AttachmentImageViewer\";\nimport NotificationButton from \"./NotificationButton\";\nimport { useState } from \"react\";\nimport ChangePasswordPanel from \"../components/administration/admin/ChangePasswordPanel\";\n\ninterface AppBarProps extends MuiAppBarProps {\n open?: boolean;\n}\n\nconst AppBar = styled(MuiAppBar, {\n shouldForwardProp: (prop) => prop !== \"open\",\n})<AppBarProps>(({ theme }) => {\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const isMobile = useIsMobile();\n return {\n transition: theme.transitions.create([\"margin\", \"width\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n variants: [\n {\n props: ({ open }) => open,\n style: {\n width: !isMobile ? `calc(100% - ${DRAWER_WIDTH}px)` : undefined,\n marginLeft:\n !isMobile && AppLayout.appDirection === \"ltr\"\n ? `${DRAWER_WIDTH}px`\n : undefined,\n marginRight:\n !isMobile && AppLayout.appDirection === \"rtl\"\n ? `${DRAWER_WIDTH}px`\n : undefined,\n transition: theme.transitions.create([\"margin\", \"width\"], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n },\n ],\n };\n});\n\nconst TopBar: React.FC = () => {\n const { Window: ChangeOrgWindow, setWindowState: setChangeOrgWindowState } =\n useWindow({\n windowTitle: \"Change Current Organization\",\n windowIcon: \"globe\",\n width: \"fit-content\",\n height: \"fit-content\",\n });\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\n const [anchorElUser, setAnchorElUser] = useState<null | HTMLElement>(null);\n const handleCloseUserMenu = () => {\n setAnchorElUser(null);\n };\n const handleOpenUserMenu = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorElUser(event.currentTarget);\n };\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const SideBarState = useSelector((state: any) => state.SideBar);\n const { UserSession } = useSession();\n const currentOrganization = UserSession.value.currentOrganization;\n const {\n Window: ChangePasswordWindow,\n setWindowState: setChangePasswordWindow,\n } = useWindow({\n windowIcon: \"key\",\n windowTitle: \"Change Password\",\n width: \"fit-content\",\n height: \"fit-content\",\n });\n const { handleGetRequest } = useAxios();\n const isMobile = useIsMobile();\n const dispatch = useDispatch();\n const handleLogout = async () => {\n try {\n await handleGetRequest({ endPointURI: \"api/auth/logout\" });\n } catch (error) {}\n dispatch(UserSessionActions.setUnAuthenticated());\n };\n const toggleSideBar = () => {\n dispatch(toggleSideBarState());\n };\n return (\n <>\n <ChangePasswordWindow>\n <ChangePasswordPanel\n selectedPerson={UserSession.value}\n isSelfService={true}\n onSuccessCallBk={() => {\n setChangePasswordWindow(false);\n }}\n />\n </ChangePasswordWindow>\n <Menu\n sx={{ mt: \"45px\" }}\n id=\"menu-appbar\"\n anchorEl={anchorElUser}\n anchorOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n keepMounted\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n open={Boolean(anchorElUser)}\n onClose={handleCloseUserMenu}\n >\n <MenuItem\n onClick={() => {\n setChangePasswordWindow(true);\n handleCloseUserMenu();\n }}\n >\n <Typography sx={{ textAlign: \"center\" }}>Change Password</Typography>\n </MenuItem>\n </Menu>\n <ChangeOrgWindow>\n <ChangeOrgForm\n successChangeCallBackFn={() => {\n setChangeOrgWindowState(false);\n }}\n />\n </ChangeOrgWindow>\n <AppBar position=\"fixed\" open={SideBarState.isOpened}>\n <Toolbar>\n <IconButton\n color=\"inherit\"\n aria-label=\"open drawer\"\n onClick={toggleSideBar}\n edge=\"start\"\n sx={[\n {\n mr: AppLayout.appDirection === \"ltr\" ? 2 : undefined,\n ml: AppLayout.appDirection === \"rtl\" ? 2 : undefined,\n },\n SideBarState.isOpened && { display: \"none\" },\n ]}\n >\n <FontAwesomeIcon icon=\"bars\" />\n </IconButton>\n <AttachmentImageViewer\n showAsAvatar={true}\n attachmentCode=\"ORGANIZATION_LOGOS\"\n refKey={UserSession.value.currentOrganization.id + \"\"}\n onErrorImage=\"/logo.png\"\n style={{\n marginRight: 1,\n marginLeft: 1,\n }}\n />\n {/* <Avatar\n src={AppInfo.appLogo}\n sx={{ marginRight: 1, marginLeft: 1 }}\n /> */}\n <Typography variant=\"h6\" noWrap component=\"div\" sx={{ flex: 1 }}>\n {isMobile\n ? \"\"\n : `${AppInfo.appName} - ${\n AppLayout.appDirection === \"ltr\"\n ? currentOrganization?.organizationEnName\n : currentOrganization?.organizationArName\n }`}\n </Typography>\n <Tooltip\n title={\n AppLayout.themeMode === \"light\"\n ? \"Switch Theme to Dark\"\n : \"Switch Theme to Light\"\n }\n >\n <IconButton\n color=\"inherit\"\n onClick={() => {\n dispatch(\n AppLayoutActions.setThemeMode(\n AppLayout.themeMode === \"light\" ? \"dark\" : \"light\"\n )\n );\n localStorage.setItem(\n \"themeMode\",\n AppLayout.themeMode === \"light\" ? \"dark\" : \"light\"\n );\n }}\n >\n {AppLayout.themeMode === \"light\" ? (\n <FontAwesomeIcon icon=\"moon\" />\n ) : (\n <FontAwesomeIcon icon={{ prefix: \"far\", iconName: \"sun\" }} />\n )}\n </IconButton>\n </Tooltip>\n <Tooltip\n title={\n i18n.language === \"ar\"\n ? \"Change Language To English\"\n : \"Change Language To Arabic\"\n }\n >\n <IconButton\n color=\"inherit\"\n onClick={() => {\n let nextLanguage = i18n.language === \"ar\" ? \"en\" : \"ar\";\n changeLanguage(nextLanguage);\n dispatch(\n AppLayoutActions.setAppDirection(\n nextLanguage === \"ar\" ? \"rtl\" : \"ltr\"\n )\n );\n }}\n >\n <FontAwesomeIcon icon=\"language\" />\n </IconButton>\n </Tooltip>\n {UserSession.value?.userOrganizations &&\n UserSession.value?.userOrganizations.length > 1 ? (\n <Tooltip title=\"Change Current Organization\">\n <IconButton\n color=\"inherit\"\n onClick={() => {\n setChangeOrgWindowState(true);\n }}\n >\n <FontAwesomeIcon icon=\"globe\" />\n </IconButton>\n </Tooltip>\n ) : (\n <></>\n )}\n {AppInfo?.enableUINotifications === true ? (\n <NotificationButton />\n ) : (\n <></>\n )}\n <div onClick={handleOpenUserMenu} style={{ cursor: \"pointer\" }}>\n <AttachmentImageViewer\n showAsAvatar={true}\n onErrorImage=\"/no_user.png\"\n attachmentCode=\"EMPLOYEE_PHOTOS\"\n refKey={UserSession.value?.id + \"\"}\n />\n </div>\n\n <div\n style={{ marginLeft: 5, marginRight: 5, cursor: \"pointer\" }}\n onClick={handleOpenUserMenu}\n >\n {isMobile ? \"\" : UserSession.value?.username}\n </div>\n <IconButton color=\"inherit\" onClick={handleLogout}>\n <FontAwesomeIcon\n rotation={AppLayout.appDirection === \"rtl\" ? 180 : undefined}\n icon=\"arrow-right-from-bracket\"\n />\n </IconButton>\n </Toolbar>\n </AppBar>\n </>\n );\n};\n\nexport default TopBar;\n","import i18n from \"i18next\";\n\nexport const changeLanguage = (lng: string) => {\n i18n.changeLanguage(lng);\n localStorage.setItem(\"language\", lng); // Persist user choice\n};\n\nexport default i18n;\n","import { styled } from \"@mui/material\";\n\nexport const DrawerHeader = styled(\"div\")(({ theme }) => ({\n display: \"flex\",\n alignItems: \"center\", \n // padding: theme.spacing(0, 1),\n // necessary for content to be below app bar\n ...theme.mixins.toolbar,\n justifyContent: \"flex-end\",\n}));\n","import { TreeViewBaseItem } from \"@mui/x-tree-view/models\";\nimport { AdministrationItems } from \"./Administration\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\n\nexport type ExtendedTreeItemProps = {\n icon: IconProp;\n id: string;\n label: string;\n action?: \"NAVIGATION\";\n authority?: string;\n applicationModule?: string;\n actionPayload?: {\n path?: string;\n parameters?: object;\n };\n children?: ExtendedTreeItemProps[];\n};\n\nexport const findNavigationItemById = (\n id: string,\n nodes: ExtendedTreeItemProps[]\n): ExtendedTreeItemProps | undefined => {\n for (const node of nodes) {\n if (node.id === id) return node;\n if (node.children) {\n const found = findNavigationItemById(id, node.children);\n if (found) return found;\n }\n }\n return undefined;\n};\n\nexport const NavigationItems: TreeViewBaseItem<ExtendedTreeItemProps>[] = [\n ...AdministrationItems,\n];\n","import { TreeViewBaseItem } from \"@mui/x-tree-view/models\";\nimport { ExtendedTreeItemProps } from \"..\";\nimport { adminNavigationItems } from \"./adminNavigationItems\";\n\nexport const AdministrationItems: TreeViewBaseItem<ExtendedTreeItemProps>[] = [\n {\n id: \"home\",\n icon: \"home\",\n label: \"Home\",\n action: \"NAVIGATION\",\n actionPayload: {\n path: \"/\",\n },\n },\n ...adminNavigationItems,\n];\n","import { TreeViewBaseItem } from \"@mui/x-tree-view/models\";\nimport { ExtendedTreeItemProps } from \"..\";\n\nexport const adminNavigationItems: TreeViewBaseItem<ExtendedTreeItemProps>[] = [\n {\n id: \"system_admin\",\n label: \"System Administration\",\n authority: \"SYSTEM_ADMIN\",\n icon: \"cog\",\n children: [\n {\n id: \"system_admin.Person\",\n label: \"PERSON_PLURAL\",\n icon: \"users\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"admin/persons\" },\n },\n {\n id: \"development_admin.SystemApplication\",\n label: \"SYSTEM_APPLICATION_PLURAL\",\n authority: \"ORGANIZATION_ADMIN\",\n icon: \"window-restore\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"admin/systemapplications\" },\n },\n {\n id: \"development_admin.organizations\",\n label: \"ORGANIZATION_PLURAL\",\n authority: \"ORGANIZATION_ADMIN\",\n icon: \"globe\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"admin/organizations\" },\n },\n {\n id: \"development_admin.organization\",\n label: \"Organization Info\",\n authority: \"DEVELOPMENT_ADMIN\",\n icon: \"globe\",\n children: [\n {\n id: \"development_admin.organization.modules\",\n label: \"Subscriped Modules\",\n icon: \"layer-group\",\n authority: \"ORGANIZATION_ADMIN\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"admin/org/apps\" },\n },\n {\n id: \"development_admin.organization.unitTypes\",\n label: \"Organization Unit Types\",\n icon: \"tags\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"admin/org/unit/types\" },\n },\n {\n id: \"development_admin.organization.units\",\n label: \"Organization Units\",\n icon: \"folder-tree\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"admin/org/units\" },\n },\n {\n id: \"development_admin.organization.ranks\",\n label: \"Organization Ranks\",\n icon: \"street-view\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"admin/org/ranks\" },\n },\n ],\n },\n\n {\n id: \"system_admin.devtools\",\n label: \"DEVELOPMENT_TOOLS\",\n authority: \"DEVELOPMENT_ADMIN\",\n icon: \"code\",\n children: [\n {\n id: \"system_admin.devtools.modules\",\n label: \"System Modules\",\n icon: \"layer-group\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/system/modules\" },\n },\n {\n id: \"system_admin.devtools.authorities\",\n label: \"System Authorities\",\n icon: \"key\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/system/authorities\" },\n },\n {\n id: \"system_admin.devtools.roles\",\n label: \"System Roles\",\n icon: \"tag\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/system/roles\" },\n },\n {\n id: \"system_admin.devtools.lookups\",\n label: \"System Lookups\",\n icon: \"list-check\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/system/lookups\" },\n },\n {\n id: \"system_admin.devtools.DatasourceConnection\",\n label: \"DATASOURCE_CONNECTION_PLURAL\",\n icon: \"plug\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/datasourceconnections\" },\n },\n {\n id: \"system_admin.devtools.EntityParameter\",\n label: \"ENTITY_PARAMETER_PLURAL\",\n icon: \"p\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/entityparameters\" },\n },\n {\n id: \"system_admin.devtools.DataQuery\",\n label: \"DATA_QUERY_PLURAL\",\n icon: \"file-code\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/dataqueries\" },\n },\n {\n id: \"system_admin.devtools.Report\",\n label: \"REPORT_PLURAL\",\n icon: \"file\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/reports\" },\n },\n {\n id: \"system_admin.devtools.MailConfig\",\n label: \"Mail Sender Config\",\n icon: { iconName: \"paper-plane\", prefix: \"fas\" },\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/mailsender/config\" },\n },\n {\n id: \"system_admin.devtools.MailTemplate\",\n label: \"MAIL_TEMPLATE_PLURAL\",\n icon: \"envelope\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/mailtemplates\" },\n },\n {\n id: \"system_admin.devtools.WorkflowDocument\",\n label: \"WORKFLOW_DOCUMENT_PLURAL\",\n icon: \"chart-diagram\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/workflowdocuments\" },\n },\n {\n id: \"system_admin.devtools.Widget\",\n label: \"WIDGET_PLURAL\",\n icon: \"chart-pie\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/widgets\" },\n },\n {\n id: \"system_admin.devtools.Dashboard\",\n label: \"DASHBOARD_PLURAL\",\n icon: \"square-poll-vertical\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/dashboards\" },\n },\n {\n id: \"system_admin.devtools.AttachmentConfig\",\n label: \"ATTACHMENT_CONFIG_PLURAL\",\n icon: \"paperclip\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/attachmentconfigs\" },\n },\n {\n id: \"system_admin.devtools.BluePrint\",\n label: \"BLUE_PRINT_PLURAL\",\n icon: \"fingerprint\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/blueprints\" },\n },\n {\n id: \"system_admin.devtools.Notification\",\n label: \"NOTIFICATION_PLURAL\",\n icon: \"bell\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/notifications\" },\n },\n ],\n },\n {\n id: \"system_admin.followup\",\n label: \"SYSTEM_MONITORING\",\n authority: \"SYSTEM_ADMIN\",\n icon: \"tv\",\n children: [\n {\n id: \"system_admin.WorkflowDocumentMailLog\",\n label: \"Action Mail Logs\",\n icon: \"envelopes-bulk\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/workflowdocumentmaillogs\" },\n },\n {\n id: \"system_admin.MailNotificationQueue\",\n label: \"Mail Notification Queue\",\n icon: \"envelope-open-text\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/mailnotificationqueues\" },\n },\n {\n id: \"system_admin.NotificationQueue\",\n label: \"NOTIFICATION_QUEUE_PLURAL\",\n icon: \"bell\",\n action: \"NAVIGATION\",\n actionPayload: { path: \"dev/notificationqueues\" },\n },\n ],\n },\n ],\n },\n];\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { animated, useSpring } from \"@react-spring/web\";\nimport { styled, alpha } from \"@mui/material/styles\";\nimport { TransitionProps } from \"@mui/material/transitions\";\nimport Box from \"@mui/material/Box\";\nimport Collapse from \"@mui/material/Collapse\";\nimport Typography from \"@mui/material/Typography\";\nimport { RichTreeView } from \"@mui/x-tree-view/RichTreeView\";\nimport { treeItemClasses } from \"@mui/x-tree-view/TreeItem\";\nimport {\n useTreeItem2,\n UseTreeItem2Parameters,\n} from \"@mui/x-tree-view/useTreeItem2\";\nimport {\n TreeItem2Checkbox,\n TreeItem2Content,\n TreeItem2IconContainer,\n TreeItem2Label,\n TreeItem2Root,\n} from \"@mui/x-tree-view/TreeItem2\";\nimport { TreeItem2Icon } from \"@mui/x-tree-view/TreeItem2Icon\";\nimport { TreeItem2Provider } from \"@mui/x-tree-view/TreeItem2Provider\";\nimport { TreeItem2DragAndDropOverlay } from \"@mui/x-tree-view/TreeItem2DragAndDropOverlay\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\nimport { useIsMobile } from \"../hooks/UseMobile\";\nimport useSession from \"../hooks/UseSession\";\nimport { findNavigationItemById, NavigationItems } from \"../navigationItems\";\nimport { DRAWER_WIDTH } from \"../redux/features/common/AppLayoutSlice\";\n\nfunction DotIcon() {\n return (\n <Box\n sx={{\n width: 6,\n height: 6,\n borderRadius: \"70%\",\n bgcolor: \"warning.main\",\n display: \"inline-block\",\n verticalAlign: \"middle\",\n zIndex: 1,\n mx: 1,\n }}\n />\n );\n}\ndeclare module \"react\" {\n interface CSSProperties {\n \"--tree-view-color\"?: string;\n \"--tree-view-bg-color\"?: string;\n }\n}\n\nconst StyledTreeItemRoot = styled(TreeItem2Root)(({ theme }) => ({\n color: theme.palette.grey[400],\n position: \"relative\",\n [`& .${treeItemClasses.groupTransition}`]: {\n marginLeft: theme.spacing(2.5),\n },\n ...theme.applyStyles(\"light\", {\n color: theme.palette.grey[800],\n }),\n})) as unknown as typeof TreeItem2Root;\n\nconst CustomTreeItemContent = styled(TreeItem2Content)(({ theme }) => ({\n flexDirection: \"row-reverse\",\n borderRadius: theme.spacing(0.7),\n marginBottom: theme.spacing(0.5),\n marginTop: theme.spacing(0.5),\n padding: theme.spacing(0.5),\n paddingRight: theme.spacing(1),\n [`&.Mui-expanded `]: {\n \"&:not(.Mui-focused, .Mui-selected, .Mui-selected.Mui-focused) .labelIcon\":\n {\n color: theme.palette.primary.dark,\n ...theme.applyStyles(\"light\", {\n color: theme.palette.primary.main,\n }),\n },\n \"&::before\": {\n content: '\"\"',\n display: \"block\",\n position: \"absolute\",\n left: \"16px\",\n top: \"44px\",\n height: \"calc(100% - 48px)\",\n width: \"1.5px\",\n backgroundColor: theme.palette.grey[700],\n ...theme.applyStyles(\"light\", {\n backgroundColor: theme.palette.grey[300],\n }),\n },\n },\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n color: \"white\",\n ...theme.applyStyles(\"light\", {\n color: theme.palette.primary.main,\n }),\n },\n [`&.Mui-focused, &.Mui-selected, &.Mui-selected.Mui-focused`]: {\n backgroundColor: theme.palette.primary.dark,\n color: theme.palette.primary.contrastText,\n ...theme.applyStyles(\"light\", {\n backgroundColor: theme.palette.primary.main,\n }),\n },\n}));\n\nconst AnimatedCollapse = animated(Collapse);\n\nfunction TransitionComponent(props: TransitionProps) {\n const style = useSpring({\n to: {\n opacity: props.in ? 1 : 0,\n transform: `translate3d(0,${props.in ? 0 : 20}px,0)`,\n },\n });\n\n return <AnimatedCollapse style={style} {...props} />;\n}\n\nconst StyledTreeItemLabelText = styled(Typography)({\n color: \"inherit\",\n fontWeight: 500,\n}) as unknown as typeof Typography;\n\ninterface CustomLabelProps {\n children: any;\n icon: IconProp;\n expandable?: boolean;\n}\n\nfunction CustomLabel({\n icon,\n expandable,\n children,\n ...other\n}: CustomLabelProps) {\n const { t } = useTranslation();\n const appLayoutState = useSelector((state: any) => state.AppLayout);\n return (\n <TreeItem2Label\n {...other}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n padding: 1,\n }}\n >\n <FontAwesomeIcon\n style={{\n marginRight: appLayoutState.appDirection === \"ltr\" ? 7 : undefined,\n marginLeft: appLayoutState.appDirection === \"rtl\" ? 7 : undefined,\n fontSize: \"1.2rem\",\n }}\n icon={icon}\n />\n <StyledTreeItemLabelText variant=\"body2\" sx={{ fontSize: 16 }}>\n {t(children)}\n </StyledTreeItemLabelText>\n {expandable && <DotIcon />}\n </TreeItem2Label>\n );\n}\n\nconst isExpandable = (reactChildren: React.ReactNode) => {\n if (Array.isArray(reactChildren)) {\n return reactChildren.length > 0 && reactChildren.some(isExpandable);\n }\n return Boolean(reactChildren);\n};\n\ninterface CustomTreeItemProps\n extends Omit<UseTreeItem2Parameters, \"rootRef\">,\n Omit<React.HTMLAttributes<HTMLLIElement>, \"onFocus\"> {}\n\nconst CustomTreeItem = React.forwardRef(function CustomTreeItem(\n props: CustomTreeItemProps,\n ref: React.Ref<HTMLLIElement>\n) {\n const { id, itemId, label, disabled, children, ...other } = props;\n const {\n getRootProps,\n getContentProps,\n getIconContainerProps,\n getCheckboxProps,\n getLabelProps,\n getGroupTransitionProps,\n getDragAndDropOverlayProps,\n status,\n publicAPI,\n } = useTreeItem2({ id, itemId, children, label, disabled, rootRef: ref });\n const item = publicAPI.getItem(itemId);\n const expandable = isExpandable(children);\n return (\n <TreeItem2Provider itemId={itemId}>\n <StyledTreeItemRoot {...getRootProps(other)}>\n <CustomTreeItemContent\n {...getContentProps({\n className: clsx(\"content\", {\n \"Mui-expanded\": status.expanded,\n \"Mui-selected\": status.selected,\n \"Mui-focused\": status.focused,\n \"Mui-disabled\": status.disabled,\n }),\n })}\n >\n <TreeItem2IconContainer {...getIconContainerProps()}>\n <TreeItem2Icon status={status} />\n </TreeItem2IconContainer>\n <TreeItem2Checkbox {...getCheckboxProps()} />\n <CustomLabel\n {...getLabelProps({\n icon: item?.icon || \"book\",\n expandable: expandable && status.expanded,\n })}\n />\n <TreeItem2DragAndDropOverlay {...getDragAndDropOverlayProps()} />\n </CustomTreeItemContent>\n {children && <TransitionComponent {...getGroupTransitionProps()} />}\n </StyledTreeItemRoot>\n </TreeItem2Provider>\n );\n});\n\nexport default function NavigationTree() {\n const navigate = useNavigate();\n const appLayoutState = useSelector((state: any) => state.AppLayout);\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\n const dispatch = useDispatch();\n const isMobile = useIsMobile();\n const { isUserAuthorized, isCurrentOrganizationAuthorizedToModule } =\n useSession();\n const filterData = (data) => {\n const parentItems = [];\n for (let parentItem of data) {\n if (\n (parentItem.authority === undefined ||\n parentItem.authority == null ||\n isUserAuthorized(parentItem.authority)) &&\n (parentItem.applicationModule === undefined ||\n parentItem.applicationModule === null ||\n isCurrentOrganizationAuthorizedToModule(parentItem.applicationModule))\n ) {\n let newParentItem = structuredClone(parentItem);\n if (parentItem?.children) {\n newParentItem.children = filterData(parentItem.children);\n }\n parentItems.push(newParentItem);\n }\n }\n return parentItems;\n };\n\n const mergedNavigationItems = [];\n if (AppInfo.enableAdministrationModule) {\n mergedNavigationItems.push(...structuredClone(NavigationItems));\n }\n mergedNavigationItems.push(\n ...structuredClone(AppInfo.businessNavigationItems)\n );\n const authoriedNavigationItems = filterData(mergedNavigationItems);\n return (\n <RichTreeView\n items={authoriedNavigationItems}\n onItemClick={(event, itemId) => {\n const navigationItem = findNavigationItemById(\n itemId,\n mergedNavigationItems\n );\n if (\n navigationItem?.action === \"NAVIGATION\" &&\n navigationItem?.actionPayload != null &&\n (navigationItem.children === undefined ||\n navigationItem.children === null ||\n navigationItem.children.length == 0)\n ) {\n navigate(navigationItem?.actionPayload?.path || \"\");\n }\n }}\n sx={{\n height: \"fit-content\",\n flexGrow: 1,\n maxWidth: DRAWER_WIDTH,\n direction: appLayoutState.appDirection,\n maxHeight: isMobile ? 300 : undefined,\n overflowY: \"auto\",\n overflowX: \"auto\",\n }}\n slots={{ item: CustomTreeItem }}\n />\n );\n}\n","import Divider from \"@mui/material/Divider\";\nimport IconButton from \"@mui/material/IconButton\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport Drawer from \"@mui/material/Drawer\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { DrawerHeader } from \"./DrawerHeader\";\nimport { Box, Typography, useTheme } from \"@mui/material\";\nimport { DRAWER_WIDTH } from \"../redux/features/common/AppLayoutSlice\";\nimport NavigationTree from \"./NavigationTree\";\nimport { useSession } from \"../hooks\";\nimport { toggleSideBarState } from \"../redux/features/common/SideBarSlice\";\n\nconst SideBar: React.FC = () => {\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\n const { UserSession } = useSession();\n const currentOrganization = UserSession.value.currentOrganization;\n const theme = useTheme();\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const SideBarState = useSelector((state: any) => state.SideBar);\n const dispatch = useDispatch();\n const toggleSideBar = () => {\n dispatch(toggleSideBarState());\n };\n return (\n <Drawer\n sx={{\n width: DRAWER_WIDTH,\n flexShrink: 0,\n \"& .MuiDrawer-paper\": {\n width: DRAWER_WIDTH,\n boxSizing: \"border-box\",\n },\n }}\n variant=\"persistent\"\n anchor={AppLayout.appDirection === \"ltr\" ? \"left\" : \"right\"}\n open={SideBarState.isOpened}\n >\n <DrawerHeader>\n <Box sx={{ width: \"100%\" }}>\n <Typography\n color=\"primary\"\n sx={{\n width: \"100%\",\n textAlign: \"center\",\n fontSize: 18,\n fontWeight: \"bold\",\n }}\n >\n System Content\n </Typography>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-around\",\n marginTop: 1,\n }}\n >\n <Typography sx={{ fontSize: 12 }} color=\"textDisabled\">\n {`${AppInfo.appName} - ${\n AppLayout.appDirection === \"ltr\"\n ? currentOrganization?.organizationEnName\n : currentOrganization?.organizationArName\n }`}\n </Typography>\n <Typography sx={{ fontSize: 12 }} color=\"textDisabled\">\n V.{AppInfo.appVersion}\n </Typography>\n </Box>\n </Box>\n <IconButton onClick={toggleSideBar}>\n {theme.direction === \"ltr\" ? (\n <FontAwesomeIcon icon=\"angle-left\" />\n ) : (\n <FontAwesomeIcon icon=\"angle-right\" />\n )}\n </IconButton>\n </DrawerHeader>\n <Divider />\n <NavigationTree />\n </Drawer>\n );\n};\n\nexport default SideBar;\n","import rtlPlugin from \"stylis-plugin-rtl\";\nimport { prefixer } from \"stylis\";\nimport createCache from \"@emotion/cache\";\n\nexport const cacheRtl = createCache({\n key: \"muirtl\",\n stylisPlugins: [prefixer, rtlPlugin],\n});\n\nexport const cacheLtr = createCache({\n key: \"mui\",\n});","import { useEffect, useState } from \"react\";\nimport TransferList from \"../../templates/TransferList\";\nimport { Box, Button } from \"@mui/material\";\nimport { toast } from \"react-toastify\";\nimport { useAxios } from \"../../../hooks\";\n\ntype OrgMemberRoleFormProps = {\n selectedRecord: any;\n closeModalFn: () => void;\n};\n\nconst OrgMemberRoleForm: React.FC<OrgMemberRoleFormProps> = (props) => {\n const [selectedOptions, setSelectedOptions] = useState([]);\n const [availableOptions, setAvailableOptions] = useState([]);\n const { handlePostRequest, handleGetRequest } = useAxios();\n\n const getOrgMemberRoles = async () => {\n await handleGetRequest({\n endPointURI: \"api/v1/admin/organization/member/roles\",\n showMask: true,\n parameters: {\n orgMemberId: props.selectedRecord.id,\n organizationId: props.selectedRecord.organizationId,\n },\n successCallBkFn: (response: any) => {\n setSelectedOptions(response.data.currentRoles);\n setAvailableOptions(response.data.availableRoles);\n },\n });\n };\n\n useEffect(() => {\n if (props.selectedRecord) {\n getOrgMemberRoles();\n }\n }, [props.selectedRecord]);\n const saveOrgMemberRoles = async () => {\n await handlePostRequest({\n endPointURI: \"api/v1/admin/organization/member/roles\",\n showMask: true,\n parameters: { orgMemberId: props.selectedRecord.id },\n data: selectedOptions,\n successCallBkFn: () => {\n toast.success(\"Your request has been proccesed successfully\");\n if (props.closeModalFn) {\n props.closeModalFn();\n }\n },\n });\n };\n return (\n <>\n <TransferList\n displayField=\"roleName\"\n options={availableOptions}\n valueField=\"id\"\n selectedOptions={selectedOptions}\n setSelection={setSelectedOptions}\n />\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n width: \"100%\",\n }}\n >\n <Button\n variant=\"contained\"\n onClick={saveOrgMemberRoles}\n sx={{ marginRight: 1, marginLeft: 1 }}\n >\n Save\n </Button>\n <Button variant=\"contained\" color=\"error\" onClick={props.closeModalFn}>\n Cancel\n </Button>\n </Box>\n </>\n );\n};\n\nexport default OrgMemberRoleForm;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useWindow } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\nimport OrgMemberRoleForm from \"./OrgMemberRoleForm\";\n\ntype OrganizationMemberGridProps = {\n selectedPerson: any;\n};\nconst OrganizationMemberGrid: React.FC<OrganizationMemberGridProps> = (\n props\n) => {\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\n const {\n Window: OrganizationMemberRolesWindow,\n setWindowState: setOrganizationMemberRolesWindowState,\n } = useWindow({\n windowIcon: \"tag\",\n windowTitle: \"Organization Member Roles\",\n width: \"50%\",\n });\n const SystemOrganizations = useSelector(\n (state: any) => state.commonStores.stores.SystemOrganizations.data\n );\n const SystemOrganizationRanks = useSelector(\n (state: any) => state.commonStores.stores.SystemOrganizationRanks.data\n );\n const SystemOrganizationUnits = useSelector(\n (state: any) => state.commonStores.stores.SystemOrganizationUnits.data\n );\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/admin/organizationmember/all\",\n deleteById: \"api/v1/admin/organizationmember\",\n save: \"api/v1/admin/organizationmember\",\n findById: \"api/v1/admin/organizationmember\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_MEMBER_IS_ACTIVE\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_MEMBER_IS_DEFAULT\",\n fieldName: \"isDefault\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_MEMBER_ORGANIZATION_ID\",\n fieldName: \"organizationId\",\n required: true,\n fieldType: \"combobox\",\n options: SystemOrganizations,\n optionValueField: \"id\",\n optionDisplayField: \"organizationEnName\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_MEMBER_ORGANIZATION_RANK_ID\",\n fieldName: \"organizationRankId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemOrganizationRanks,\n optionValueField: \"id\",\n optionDisplayField: \"rankDisplay\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_MEMBER_ORGANIZATION_UNIT_ID\",\n fieldName: \"organizationUnitId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemOrganizationUnits,\n optionValueField: \"id\",\n optionDisplayField: \"fullPath\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Membership number\",\n fieldName: \"organizationMembershipNumber\",\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n hidden: true,\n gridProps: {\n hidden: true,\n },\n fieldLabel: \"ORGANIZATION_MEMBER_PERSON_ID\",\n fieldName: \"personId\",\n required: false,\n fieldType: \"number\",\n },\n },\n ];\n\n return (\n <>\n <OrganizationMemberRolesWindow>\n <OrgMemberRoleForm\n selectedRecord={selectedRecord}\n closeModalFn={() => {\n setOrganizationMemberRolesWindowState(false);\n }}\n />\n </OrganizationMemberRolesWindow>\n <TemplateGrid\n apiActions={apiActions}\n hideInfoBar={true}\n data={data}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n rowActions={[\n {\n icon: \"tag\",\n label: \"Roles\",\n actionFn: async (data) => {\n setSelectedRecord(data);\n setOrganizationMemberRolesWindowState(true);\n },\n },\n ]}\n gridLoadParametersValues={{ personId: props.selectedPerson.id }}\n keyColumnName={\"id\"}\n gridTitle=\"ORGANIZATION_MEMBER_PLURAL\"\n girdIcon=\"table-cells\"\n editAction={{\n isEnabled: true,\n authority: \"ORGANIZATION_MEMBER_EDIT\",\n preActionValidation: async (data) => {\n data.personId = props.selectedPerson.id;\n return true;\n },\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"ORGANIZATION_MEMBER_DELETE\",\n }}\n />\n </>\n );\n};\n\nexport default OrganizationMemberGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useAxios } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setStoreData } from \"../../../redux/features/common/CommonStoreSlice\";\n\nconst OrganizationRankGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n commonStoreKey: \"CurrentOrganizationRanks\",\n deleteById: \"api/v1/admin/organizationrank\",\n save: \"api/v1/admin/organizationrank\",\n findById: \"api/v1/admin/organizationrank\",\n setData: setData,\n });\n\n const { handleGetRequest } = useAxios();\n const SystemOrganizationRanks = useSelector(\n (state: any) => state.commonStores.stores.SystemOrganizationRanks\n );\n const dispatch = useDispatch();\n const loadOrganizationRanks = async () => {\n await handleGetRequest({\n endPointURI: SystemOrganizationRanks.url,\n showMask: false,\n successCallBkFn: (response) => {\n dispatch(\n setStoreData({\n storeKey: \"SystemOrganizationRanks\",\n data: response.data,\n })\n );\n },\n failureCallBkFn: () => {\n dispatch(\n setStoreData({ storeKey: \"SystemOrganizationRanks\", data: [] })\n );\n },\n });\n };\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n hidden: true,\n gridProps: { hidden: true },\n fieldLabel: \"ORGANIZATION_RANK_ORGANIZATION_ID\",\n fieldName: \"organizationId\",\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_RANK_RANK_ORDER\",\n fieldName: \"rankOrder\",\n required: true,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_RANK_RANK_CODE\",\n fieldName: \"rankCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_RANK_RANK_AR_NAME\",\n fieldName: \"rankArName\",\n required: true,\n fieldType: \"text\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_RANK_RANK_EN_NAME\",\n fieldName: \"rankEnName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_RANK_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n setData={setData}\n editMode={{ editMode: \"row\", reloadAfterSave: true }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle=\"ORGANIZATION_RANK_PLURAL\"\n girdIcon=\"street-view\"\n editAction={{\n isEnabled: true,\n authority: \"ORGANIZATION_RANK_EDIT\",\n postActionCallBack: () => {\n loadOrganizationRanks();\n },\n }}\n deleteAction={{ isEnabled: true, authority: \"ORGANIZATION_RANK_DELETE\" }}\n />\n );\n};\n\nexport default OrganizationRankGrid;\n","import { useEffect, useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useAxios } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setStoreData } from \"../../../redux/features/common/CommonStoreSlice\";\n\nconst OrganizationUnitGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const { handleGetRequest } = useAxios();\n const SystemOrganizationUnits = useSelector(\n (state: any) => state.commonStores.stores.SystemOrganizationUnits\n );\n const dispatch = useDispatch();\n const loadOrganizationUnits = async () => {\n await handleGetRequest({\n endPointURI: SystemOrganizationUnits.url,\n showMask: false,\n successCallBkFn: (response) => {\n dispatch(\n setStoreData({\n storeKey: \"SystemOrganizationUnits\",\n data: response.data,\n })\n );\n },\n failureCallBkFn: () => {\n dispatch(\n setStoreData({ storeKey: \"SystemOrganizationUnits\", data: [] })\n );\n },\n });\n };\n const apiActions = useApiActions({\n findAll: \"api/v1/public/organizationunit/all\",\n deleteById: \"api/v1/admin/organizationunit\",\n save: \"api/v1/admin/organizationunit\",\n findById: \"api/v1/admin/organizationunit\",\n setData: setData,\n });\n\n const organizationUnitTypes = useSelector(\n (state: any) => state.commonStores.stores.SystemOrganizationUnitType.data\n );\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n hidden: true,\n gridProps: { hidden: true },\n fieldLabel: \"ORGANIZATION_UNIT_ORGANIZATION_ID\",\n fieldName: \"organizationId\",\n required: false,\n fieldType: \"number\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_UNIT_ORGANIZATION_UNIT_TYPE_ID\",\n fieldName: \"organizationUnitTypeId\",\n required: true,\n fieldType: \"combobox\",\n options: organizationUnitTypes,\n optionValueField: \"id\",\n optionDisplayField: \"unitTypeEnName\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_UNIT_ORGANIZATION_UNIT_AR_NAME\",\n fieldName: \"organizationUnitArName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_UNIT_ORGANIZATION_UNIT_EN_NAME\",\n fieldName: \"organizationUnitEnName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_UNIT_ORGANIZATION_UNIT_PARENT_ID\",\n fieldName: \"organizationUnitParentId\",\n required: false,\n fieldType: \"combobox\",\n options: data,\n optionValueField: \"id\",\n optionDisplayField: \"organizationUnitEnName\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_UNIT_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle=\"ORGANIZATION_UNIT_PLURAL\"\n girdIcon=\"folder-tree\"\n editAction={{\n isEnabled: true,\n authority: \"ORGANIZATION_UNIT_EDIT\",\n postActionCallBack: () => {\n loadOrganizationUnits();\n },\n }}\n deleteAction={{ isEnabled: true, authority: \"ORGANIZATION_UNIT_DELETE\" }}\n />\n );\n};\n\nexport default OrganizationUnitGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\n\nconst OrganizationUnitTypeGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n commonStoreKey: \"SystemOrganizationUnitType\",\n deleteById: \"api/v1/admin/organizationunittype\",\n save: \"api/v1/admin/organizationunittype\",\n findById: \"api/v1/admin/organizationunittype\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_ORGANIZATION_ID\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n fieldName: \"organizationId\",\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_ORGANIZATION_UNIT_TYPE_ORDER\",\n fieldName: \"organizationUnitTypeOrder\",\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_UNIT_TYPE_CODE\",\n fieldName: \"unitTypeCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_UNIT_TYPE_AR_NAME\",\n fieldName: \"unitTypeArName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_UNIT_TYPE_EN_NAME\",\n fieldName: \"unitTypeEnName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_IS_ACTIVE\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n setData={setData}\n editMode={{ editMode: \"row\", reloadAfterSave: true }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle=\"ORGANIZATION_UNIT_TYPE_PLURAL\"\n girdIcon=\"tags\"\n editAction={{\n isEnabled: true,\n authority: \"ORGANIZATION_UNIT_TYPE_EDIT\",\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"ORGANIZATION_UNIT_TYPE_DELETE\",\n }}\n />\n );\n};\n\nexport default OrganizationUnitTypeGrid;\n","import { useEffect, useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useAxios } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\n\nconst SystemApplicationAuthorityGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n commonStoreKey: \"SystemApplicationAuthorities\",\n deleteById: \"api/v1/admin/systemapplicationauthority\",\n save: \"api/v1/admin/systemapplicationauthority\",\n findById: \"api/v1/admin/systemapplicationauthority\",\n setData: setData,\n });\n\n const SystemApplicationModules = useSelector(\n (state: any) => state.commonStores.stores.SystemApplicationModules.data\n );\n const { handleGetRequest } = useAxios();\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_SYSTEM_APPLICATION_ID\",\n fieldName: \"systemApplicationId\",\n required: false,\n hidden: true,\n gridProps: { hidden: true },\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_SYSTEM_MODULE_ID\",\n fieldName: \"systemModuleId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemApplicationModules,\n optionValueField: \"id\",\n optionDisplayField: \"moduleName\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_AUTHORITY_NAME\",\n fieldName: \"authorityName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_AUTHORITY_CODE\",\n fieldName: \"authorityCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_AUTHORITY_DESCRIPTION\",\n fieldName: \"authorityDescription\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_IS_ACTIVE\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle=\"SYSTEM_APPLICATION_AUTHORITY_PLURAL\"\n girdIcon=\"key\"\n editAction={{\n isEnabled: true,\n authority: \"SYSTEM_APPLICATION_AUTHORITY_EDIT\",\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"SYSTEM_APPLICATION_AUTHORITY_DELETE\",\n }}\n />\n );\n};\n\nexport default SystemApplicationAuthorityGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\n\nconst SystemApplicationModuleGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n commonStoreKey: \"SystemApplicationModules\",\n deleteById: \"api/v1/admin/systemapplicationmodule\",\n save: \"api/v1/admin/systemapplicationmodule\",\n findById: \"api/v1/admin/systemapplicationmodule\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_MODULE_MODULE_CODE\",\n fieldName: \"moduleCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_MODULE_MODULE_NAME\",\n fieldName: \"moduleName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_MODULE_MODULE_DESCRIPTION\",\n fieldName: \"moduleDescription\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_IS_ACTIVE\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_MODULE_SYSTEM_APPLICATION_ID\",\n fieldName: \"systemApplicationId\",\n hidden: true,\n gridProps: { hidden: true },\n required: false,\n fieldType: \"text\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{ editMode: \"row\", reloadAfterSave: true }}\n formElements={formElements}\n keyColumnName={\"id\"}\n hideInfoBar={true}\n gridTitle=\"SYSTEM_APPLICATION_MODULE_PLURAL\"\n girdIcon=\"layer-group\"\n editAction={{\n isEnabled: true,\n authority: \"SYSTEM_APPLICATION_MODULE_EDIT\",\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"SYSTEM_APPLICATION_MODULE_DELETE\",\n }}\n />\n );\n};\n\nexport default SystemApplicationModuleGrid;\n","import { useEffect, useState } from \"react\";\nimport TransferList from \"../../templates/TransferList\";\nimport { Box, Button } from \"@mui/material\";\nimport { toast } from \"react-toastify\";\nimport { useAxios } from \"../../../hooks\";\n\ntype RoleAuthoritiesFormProps = {\n roleId: number;\n closeModalFn: () => void;\n};\n\nconst RoleAuthoritiesForm: React.FC<RoleAuthoritiesFormProps> = (props) => {\n const [selectedOptions, setSelectedOptions] = useState([]);\n const [availableAuthorities, setAvailableAuthorities] = useState([]);\n const { handlePostRequest, handleGetRequest } = useAxios();\n\n const getRoleAuthorities = async () => {\n await handleGetRequest({\n endPointURI: \"api/v1/admin/systemApplicationRoleAuthorities\",\n showMask: true,\n parameters: {\n roleId: props.roleId,\n },\n successCallBkFn: (response: any) => {\n setSelectedOptions(response.data.selectedAuthorities);\n setAvailableAuthorities(response.data.availableAuthorities);\n },\n });\n };\n\n useEffect(() => {\n if (props.roleId) {\n getRoleAuthorities();\n }\n }, [props.roleId]);\n const saveRoleAuthorities = async () => {\n await handlePostRequest({\n endPointURI: \"api/v1/admin/systemApplicationRoleAuthorities\",\n showMask: true,\n parameters: { roleId: props.roleId },\n data: selectedOptions,\n successCallBkFn: () => {\n toast.success(\"Your request has been proccesed successfully\");\n if (props.closeModalFn) {\n props.closeModalFn();\n }\n },\n });\n };\n return (\n <>\n <TransferList\n displayField=\"authorityName\"\n options={availableAuthorities}\n valueField=\"id\"\n selectedOptions={selectedOptions}\n setSelection={setSelectedOptions}\n />\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n width: \"100%\",\n }}\n >\n <Button\n variant=\"contained\"\n onClick={saveRoleAuthorities}\n sx={{ marginRight: 1, marginLeft: 1 }}\n >\n Save\n </Button>\n <Button variant=\"contained\" color=\"error\" onClick={props.closeModalFn}>\n Cancel\n </Button>\n </Box>\n </>\n );\n};\n\nexport default RoleAuthoritiesForm;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useWindow } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport RoleAuthoritiesForm from \"./RoleAuthoritiesForm\";\n\nconst SystemApplicationRoleGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const [selectedRole, setSelectedRole] = useState(null);\n const {\n Window: RoleaAuthoritiesWindow,\n setWindowState: setRoleAuthoritiesWindowState,\n } = useWindow({\n windowTitle: \"System Application Role Authorities\",\n windowIcon: \"key\",\n width: \"50%\",\n });\n const apiActions = useApiActions({\n commonStoreKey: \"SystemApplicationRoles\",\n deleteById: \"api/v1/admin/systemapplicationrole\",\n save: \"api/v1/admin/systemapplicationrole\",\n findById: \"api/v1/admin/systemapplicationrole\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_ROLE_SYSTEM_APPLICATION_ID\",\n fieldName: \"systemApplicationId\",\n required: false,\n hidden: true,\n gridProps: { hidden: true },\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_ROLE_ROLE_NAME\",\n fieldName: \"roleName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_ROLE_ROLE_DESCRIPTION\",\n fieldName: \"roleDescription\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_ROLE_IS_ACTIVE\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <>\n <RoleaAuthoritiesWindow>\n <RoleAuthoritiesForm\n roleId={selectedRole?.id}\n closeModalFn={() => {\n setRoleAuthoritiesWindowState(false);\n }}\n />\n </RoleaAuthoritiesWindow>\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n setData={setData}\n editMode={{ editMode: \"row\", reloadAfterSave: true }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle=\"SYSTEM_APPLICATION_ROLE_PLURAL\"\n girdIcon=\"tag\"\n rowActions={[\n {\n icon: \"key\",\n actionFn: async (data) => {\n setSelectedRole(data);\n setRoleAuthoritiesWindowState(true);\n },\n label: \"Authorities\",\n },\n ]}\n editAction={{\n isEnabled: true,\n authority: \"SYSTEM_APPLICATION_ROLE_EDIT\",\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"SYSTEM_APPLICATION_ROLE_DELETE\",\n }}\n />\n </>\n );\n};\n\nexport default SystemApplicationRoleGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\n\ntype DataQueryParameterGridProps = {\n selectedRecord: any;\n};\n\nconst DataQueryParameterGrid: React.FC<DataQueryParameterGridProps> = (\n props\n) => {\n const SystemEntityParameters = useSelector(\n (state: any) => state.commonStores.stores.SystemEntityParameters.data\n );\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/dataqueryparameter/all\",\n deleteById: \"api/v1/dev/dataqueryparameter\",\n save: \"api/v1/dev/dataqueryparameter\",\n findById: \"api/v1/dev/dataqueryparameter\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATA_QUERY_PARAMETER_DATA_QUERY_ID\",\n fieldName: \"dataQueryId\",\n required: false,\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATA_QUERY_PARAMETER_ENTITY_PARAMETER_ID\",\n fieldName: \"entityParameterId\",\n required: true,\n fieldType: \"combobox\",\n options: SystemEntityParameters,\n optionValueField: \"id\",\n optionDisplayField: \"parameterCode\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATA_QUERY_PARAMETER_DEFAULT_VALUE\",\n fieldName: \"defaultValue\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATA_QUERY_PARAMETER_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATA_QUERY_PARAMETER_HIDDEN\",\n fieldName: \"hidden\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATA_QUERY_PARAMETER_MANDATORY\",\n fieldName: \"mandatory\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n hideInfoBar={true}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridLoadParametersValues={{ dataQueryId: props.selectedRecord.id }}\n gridTitle={t(\"DATA_QUERY_PARAMETER_PLURAL\")}\n girdIcon=\"table-cells\"\n editAction={{\n isEnabled: true,\n authority: \"DATA_QUERY_PARAMETER_EDIT\",\n preActionValidation: async (data) => {\n data.dataQueryId = props.selectedRecord.id;\n return true;\n },\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"DATA_QUERY_PARAMETER_DELETE\",\n }}\n />\n );\n};\n\nexport default DataQueryParameterGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\n\nconst LookupGrid: React.FC = () => {\n const SystemOrganizations = useSelector(\n (state: any) => state.commonStores.stores.SystemOrganizations.data\n );\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/lookup/all\",\n deleteById: \"api/v1/dev/lookup\",\n save: \"api/v1/dev/lookup\",\n findById: \"api/v1/dev/lookup\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Organization\",\n fieldName: \"organizationId\",\n options: SystemOrganizations,\n optionDisplayField: \"organizationEnName\",\n optionValueField: \"id\",\n required: false,\n fieldType: \"combobox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"LOOKUP_LOOKUP_TYPE\",\n fieldName: \"lookupType\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"LOOKUP_LOOKUP_AR_DISPLAY\",\n fieldName: \"lookupArDisplay\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"LOOKUP_LOOKUP_EN_DISPLAY\",\n fieldName: \"lookupEnDisplay\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"LOOKUP_LOOKUP_VALUE\",\n fieldName: \"lookupValue\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"LOOKUP_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"System Application\",\n fieldName: \"systemApplicationId\",\n hidden: true,\n gridProps: { hidden: true },\n required: false,\n fieldType: \"number\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n hideInfoBar={true}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"LOOKUP_PLURAL\")}\n girdIcon=\"list-check\"\n editAction={{\n isEnabled: true,\n authority: \"LOOKUP_EDIT\",\n }}\n deleteAction={{ isEnabled: true, authority: \"LOOKUP_DELETE\" }}\n />\n );\n};\n\nexport default LookupGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\n\ntype ReportParameterGridProps = {\n selectedRecord: any;\n};\n\nconst ReportParameterGrid: React.FC<ReportParameterGridProps> = (props) => {\n const { t } = useTranslation();\n const SystemEntityParameters = useSelector(\n (state: any) => state.commonStores.stores.SystemEntityParameters.data\n );\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/reportparameter/all\",\n deleteById: \"api/v1/dev/reportparameter\",\n save: \"api/v1/dev/reportparameter\",\n findById: \"api/v1/dev/reportparameter\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_PARAMETER_ENTITY_PARAMETER_ID\",\n fieldName: \"entityParameterId\",\n required: true,\n fieldType: \"combobox\",\n options: SystemEntityParameters,\n optionValueField: \"id\",\n optionDisplayField: \"parameterCode\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_PARAMETER_DEFAULT_VALUE\",\n fieldName: \"defaultValue\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_PARAMETER_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_PARAMETER_HIDDEN\",\n fieldName: \"hidden\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_PARAMETER_MANDATORY\",\n fieldName: \"mandatory\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_PARAMETER_REPORT_ID\",\n fieldName: \"reportId\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n required: false,\n fieldType: \"number\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n setData={setData}\n gridLoadParametersValues={{ reportId: props.selectedRecord.id }}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"REPORT_PARAMETER_PLURAL\")}\n girdIcon=\"p\"\n editAction={{\n isEnabled: true,\n authority: \"REPORT_PARAMETER_EDIT\",\n preActionValidation: async (data) => {\n data.reportId = props.selectedRecord.id;\n return true;\n },\n }}\n deleteAction={{ isEnabled: true, authority: \"REPORT_PARAMETER_DELETE\" }}\n />\n );\n};\n\nexport default ReportParameterGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\n\nexport const storageTypes = [{ value: \"FILE_SYSTEM\" }, { value: \"SFTP\" }];\n\nconst AttachmentConfigGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/attachmentconfig/all\",\n deleteById: \"api/v1/dev/attachmentconfig\",\n save: \"api/v1/dev/attachmentconfig\",\n findById: \"api/v1/dev/attachmentconfig\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ATTACHMENT_CONFIG_ATTACHMENT_CODE\",\n fieldName: \"attachmentCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ATTACHMENT_CONFIG_RELATED_DATABASE_TABLE\",\n fieldName: \"relatedDatabaseTable\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ATTACHMENT_CONFIG_STORAGE_TYPE\",\n fieldName: \"storageType\",\n required: true,\n fieldType: \"combobox\",\n options: storageTypes,\n optionDisplayField: \"value\",\n optionValueField: \"value\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Include App Code in attachment path\",\n fieldName: \"includeAppCodeInPath\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ATTACHMENT_CONFIG_UPLOAD_DIRECTORY\",\n fieldName: \"uploadDirectory\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ATTACHMENT_CONFIG_ALLOWED_FILE_TYPES\",\n fieldName: \"allowedFileTypes\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ATTACHMENT_CONFIG_ATTACHMENT_CATEGORIES\",\n fieldName: \"attachmentCategories\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Is Category Mandatory\",\n fieldName: \"isCategoryRequired\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ATTACHMENT_CONFIG_MAX_ALLOWED_NUMBER_OF_FILES\",\n fieldName: \"maxAllowedNumberOfFiles\",\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ATTACHMENT_CONFIG_DOWNLOAD_AUTHORITY_KEY\",\n fieldName: \"downloadAuthorityKey\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ATTACHMENT_CONFIG_UPLOAD_AUTHORITY_KEY\",\n fieldName: \"uploadAuthorityKey\",\n required: false,\n fieldType: \"text\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalIcon: \"paperclip\",\n modalTitle: \"Attachment Configuration\",\n },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"ATTACHMENT_CONFIG_PLURAL\")}\n girdIcon=\"paperclip\"\n editAction={{ isEnabled: true, authority: \"ATTACHMENT_CONFIG_EDIT\" }}\n deleteAction={{ isEnabled: true, authority: \"ATTACHMENT_CONFIG_DELETE\" }}\n />\n );\n};\n\nexport default AttachmentConfigGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useWindow } from \"../../../hooks\";\nimport {\n FormActionProps,\n FormElementProps,\n} from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { UseFormReturn } from \"react-hook-form\";\nimport { useSelector } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport ReportParametersForm from \"./ReportParametersForm\";\nimport ReportParameterGrid from \"./ReportParameterGrid\";\nimport ReportViewer from \"../../templates/report/ReportViewer\";\nimport { storageTypes } from \"./AttachmentConfigGrid\";\n\ntype ValidationCritria = {\n isVisible: boolean;\n isMandatory: boolean;\n};\n\nexport type ReportType = \"Jasper\" | \"Excel\" | \"Blueprint\";\n\ntype ReportValidationOptions = {\n useSysDatasource: ValidationCritria;\n datasourceConId: ValidationCritria;\n reportBluePrintId: ValidationCritria;\n reportExcelDataQueryId: ValidationCritria;\n reportJasperName: ValidationCritria;\n};\n\ntype validationObjectType = {\n [key in ReportType]: ReportValidationOptions;\n};\n\nconst validationObject: validationObjectType = {\n Blueprint: {\n useSysDatasource: { isMandatory: false, isVisible: false },\n datasourceConId: { isMandatory: false, isVisible: false },\n reportBluePrintId: { isMandatory: true, isVisible: true },\n reportExcelDataQueryId: { isMandatory: false, isVisible: false },\n reportJasperName: { isMandatory: false, isVisible: false },\n },\n Jasper: {\n useSysDatasource: { isMandatory: false, isVisible: true },\n datasourceConId: { isMandatory: false, isVisible: true },\n reportBluePrintId: { isMandatory: false, isVisible: false },\n reportExcelDataQueryId: { isMandatory: false, isVisible: false },\n reportJasperName: { isMandatory: true, isVisible: true },\n },\n Excel: {\n useSysDatasource: { isMandatory: false, isVisible: false },\n datasourceConId: { isMandatory: false, isVisible: false },\n reportBluePrintId: { isMandatory: false, isVisible: false },\n reportExcelDataQueryId: { isMandatory: true, isVisible: true },\n reportJasperName: { isMandatory: false, isVisible: false },\n },\n};\n\nconst adjustFormAccordingToReportType = (\n value: any,\n formActions: FormActionProps,\n formManager: UseFormReturn\n) => {\n if (value && validationObject[value]) {\n const validationObjects: ReportValidationOptions = validationObject[value];\n const fields = Object.keys(validationObjects);\n for (const field of fields) {\n const validationCritria: ValidationCritria = validationObjects[field];\n if (validationCritria.isVisible) {\n formActions.showField(field);\n } else {\n formActions.hideField(field);\n formManager.setValue(field, null);\n }\n }\n } else {\n formActions.hideField(\"useSysDatasource\");\n formActions.hideField(\"datasourceConId\");\n formActions.hideField(\"reportBluePrintId\");\n formActions.hideField(\"reportExcelDataQueryId\");\n formActions.hideField(\"reportJasperName\");\n formManager.setValue(\"useSysDatasource\", null);\n formManager.setValue(\"datasourceConId\", null);\n formManager.setValue(\"reportBluePrintId\", null);\n formManager.setValue(\"reportExcelDataQueryId\", null);\n formManager.setValue(\"reportJasperName\", null);\n }\n};\n\nconst ReportGrid: React.FC = () => {\n const { t } = useTranslation();\n const [selectedRecord, setSelectedRecord] = useState(null);\n const {\n Window: ReporTrialWindow,\n setWindowState: setReportTrialWindowState,\n } = useWindow({\n windowTitle: \"Report View\",\n windowIcon: \"eye\",\n width: \"80%\",\n });\n const {\n Window: ReportParameterWindow,\n setWindowState: setReportParameterWindowState,\n } = useWindow({\n windowTitle: \"Report Parameters\",\n windowIcon: \"p\",\n width: \"80%\",\n });\n const [data, setData] = useState([]);\n const SystemDataSources = useSelector(\n (state: any) => state.commonStores.stores.SystemDataSources.data\n );\n const SystemDataQueries = useSelector(\n (state: any) => state.commonStores.stores.SystemDataQueries.data\n );\n const SystemBluePrints = useSelector(\n (state: any) => state.commonStores.stores.SystemBluePrints.data\n );\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/report/all\",\n deleteById: \"api/v1/dev/report\",\n save: \"api/v1/dev/report\",\n findById: \"api/v1/dev/report\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_REPORT_TYPE\",\n fieldName: \"reportType\",\n options: [\n { value: \"Excel\" },\n { value: \"Jasper\" },\n { value: \"Blueprint\" },\n ],\n optionDisplayField: \"value\",\n optionValueField: \"value\",\n required: true,\n fieldType: \"combobox\",\n formProps: {\n onValueChangeCallBack(\n value,\n formManager,\n formActions,\n selectedRecord\n ) {\n adjustFormAccordingToReportType(value, formActions, formManager);\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_REPORT_CODE\",\n fieldName: \"reportCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_REPORT_NAME\",\n fieldName: \"reportName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ATTACHMENT_CONFIG_STORAGE_TYPE\",\n fieldName: \"storageType\",\n required: true,\n fieldType: \"combobox\",\n options: storageTypes,\n optionDisplayField: \"value\",\n optionValueField: \"value\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_REPORT_CATEGORY\",\n fieldName: \"reportCategory\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Authority Code\",\n fieldName: \"reportAuthorityCode\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_REPORT_EXPORT_NAME\",\n fieldName: \"reportExportName\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_USE_SYS_DATASOURCE\",\n fieldName: \"useSysDatasource\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n formProps: {\n onValueChangeCallBack(\n value,\n formManager,\n formActions,\n selectedRecord\n ) {\n if (value) {\n formActions.hideField(\"datasourceConId\");\n formManager.setValue(\"datasourceConId\", null);\n } else {\n formActions.showField(\"datasourceConId\");\n }\n },\n },\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_DATASOURCE_CON_ID\",\n fieldName: \"datasourceConId\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n required: false,\n fieldType: \"combobox\",\n options: SystemDataSources,\n optionValueField: \"id\",\n optionDisplayField: \"connectionName\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_REPORT_BLUE_PRINT_ID\",\n fieldName: \"reportBluePrintId\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n required: false,\n fieldType: \"combobox\",\n options: SystemBluePrints,\n optionDisplayField: \"bluePrintCode\",\n optionValueField: \"id\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_REPORT_EXCEL_DATA_QUERY_ID\",\n fieldName: \"reportExcelDataQueryId\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n required: false,\n fieldType: \"combobox\",\n options: SystemDataQueries,\n optionValueField: \"id\",\n optionDisplayField: \"queryName\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"REPORT_REPORT_JASPER_NAME\",\n fieldName: \"reportJasperName\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Include App Code in attachment path\",\n fieldName: \"includeAppCodeInPath\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Active\",\n fieldName: \"isActive\",\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <>\n <ReporTrialWindow>\n <ReportViewer\n reportCode={selectedRecord?.reportCode}\n resultMode=\"App\"\n />\n </ReporTrialWindow>\n <ReportParameterWindow>\n <ReportParameterGrid selectedRecord={selectedRecord} />\n </ReportParameterWindow>\n <TemplateGrid\n attachment={{ attachmentCode: \"JASPER_REPORTS\" }}\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalTitle: \"Report\",\n modalIcon: \"file\",\n modalWidth: 300,\n },\n }}\n rowActions={[\n {\n icon: \"p\",\n label: \"Report Parameters\",\n isActionVisibleForRecord: (record) => {\n return record.reportType === \"Jasper\";\n },\n actionFn: async (data, recordIdsToProcessActionOn) => {\n setSelectedRecord(data);\n setReportParameterWindowState(true);\n },\n },\n {\n icon: \"eye\",\n label: \"View Report\",\n actionFn: async (data, recordIdsToProcessActionOn) => {\n setSelectedRecord(data);\n setReportTrialWindowState(true);\n },\n },\n ]}\n formLoadCallBk={(\n formActions: FormActionProps,\n formManager: UseFormReturn,\n record: any\n ) => {\n adjustFormAccordingToReportType(\n record.reportType,\n formActions,\n formManager\n );\n if (record?.useSysDatasource === true) {\n formActions.hideField(\"datasourceConId\");\n }\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"REPORT_PLURAL\")}\n girdIcon=\"table-cells\"\n editAction={{\n isEnabled: true,\n authority: \"REPORT_EDIT\",\n preActionValidation: (record) => {\n if (\n record?.reportType === \"Jasper\" &&\n record?.useSysDatasource === false &&\n !record?.datasourceConId\n ) {\n toast.error(\"You must choose the datasource\");\n return false;\n }\n if (record?.reportType === \"Jasper\" && !record?.reportJasperName) {\n toast.error(\"You must enter the jasper report name\");\n return false;\n }\n\n if (\n record?.reportType === \"Blueprint\" &&\n !record?.reportBluePrintId\n ) {\n toast.error(\"You must choose the report blueprint\");\n return false;\n }\n if (\n record?.reportType === \"Excel\" &&\n !record?.reportExcelDataQueryId\n ) {\n toast.error(\"You must choose the report query\");\n return false;\n }\n return true;\n },\n }}\n deleteAction={{ isEnabled: true, authority: \"REPORT_DELETE\" }}\n />\n </>\n );\n};\n\nexport default ReportGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { isValidEmail } from \"../../../util\";\nimport { toast } from \"react-toastify\";\n\ntype MailRecipientGridProps = {\n selectedRecord: any;\n callBkFn: () => void;\n};\n\nconst MailRecipientGrid: React.FC<MailRecipientGridProps> = (props) => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/mailrecipient/all\",\n deleteById: \"api/v1/dev/mailrecipient\",\n save: \"api/v1/dev/mailrecipient\",\n findById: \"api/v1/dev/mailrecipient\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_RECIPIENT_MAIL_TEMPLATE_ID\",\n fieldName: \"mailTemplateId\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_RECIPIENT_RECIPIENT_TYPE\",\n fieldName: \"recipientType\",\n required: true,\n fieldType: \"combobox\",\n options: [{ value: \"To\" }, { value: \"CC\" }],\n optionDisplayField: \"value\",\n optionValueField: \"value\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_RECIPIENT_RECIPIENT_MAIL\",\n fieldName: \"recipientMail\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_RECIPIENT_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n gridLoadParametersValues={{mailTemplateId:props.selectedRecord.id}}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"MAIL_RECIPIENT_PLURAL\")}\n girdIcon=\"users\"\n editAction={{\n isEnabled: true,\n authority: \"MAIL_RECIPIENT_EDIT\",\n preActionValidation: (record) => {\n if (record?.recipientMail && !isValidEmail(record.recipientMail)) {\n toast.error(\"You must enter a valid email address\");\n return false;\n }\n record.mailTemplateId = props.selectedRecord.id;\n return true;\n },\n }}\n deleteAction={{ isEnabled: true, authority: \"MAIL_RECIPIENT_DELETE\" }}\n />\n );\n};\n\nexport default MailRecipientGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\n\ntype MailBodyGridProps = {\n selectedRecord: any;\n callBkFn: () => void;\n};\n\nconst MailBodyGrid: React.FC<MailBodyGridProps> = (props) => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const SystemDataQueries = useSelector(\n (state: any) => state.commonStores.stores.SystemDataQueries.data\n );\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/mailbody/all\",\n deleteById: \"api/v1/dev/mailbody\",\n save: \"api/v1/dev/mailbody\",\n findById: \"api/v1/dev/mailbody\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_BODY_BODY_NAME\",\n fieldName: \"bodyName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_BODY_BODY_ORDER\",\n fieldName: \"bodyOrder\",\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_BODY_BODY_CONTENT\",\n fieldName: \"bodyContent\",\n required: true,\n fieldType: \"text\",\n muiTextFieldProps: { multiline: true, rows: 6 },\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_BODY_BODY_CONTENT_DATA_QUERY_ID\",\n fieldName: \"bodyContentDataQueryId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemDataQueries,\n optionDisplayField: \"queryName\",\n optionValueField: \"id\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_BODY_PRINT_FOR_EACH_RECORD\",\n fieldName: \"printForEachRecord\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_BODY_IS_MAIN\",\n fieldName: \"isMain\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_BODY_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_BODY_MAIL_TEMPLATE_ID\",\n fieldName: \"mailTemplateId\",\n required: false,\n hidden: true,\n gridProps: {\n hidden: true,\n },\n fieldType: \"number\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n gridLoadParametersValues={{ mailTemplateId: props.selectedRecord.id }}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalIcon: { prefix: \"fas\", iconName: \"envelope-open-text\" },\n modalTitle: \"Mail Body\",\n modalWidth: \"50%\",\n },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"MAIL_BODY_PLURAL\")}\n girdIcon={{ prefix: \"fas\", iconName: \"envelope-open-text\" }}\n editAction={{\n isEnabled: true,\n authority: \"MAIL_BODY_EDIT\",\n preActionValidation: async (record) => {\n record.mailTemplateId = props.selectedRecord.id;\n return true;\n },\n }}\n deleteAction={{ isEnabled: true, authority: \"MAIL_BODY_DELETE\" }}\n />\n );\n};\n\nexport default MailBodyGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\n\ntype MailAttachmentGridProps = {\n selectedRecord: any;\n callBkFn: () => void;\n};\n\nconst MailAttachmentGrid: React.FC<MailAttachmentGridProps> = (props) => {\n const SystemReports = useSelector(\n (state: any) => state.commonStores.stores.SystemReports.data\n );\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/mailattachment/all\",\n deleteById: \"api/v1/dev/mailattachment\",\n save: \"api/v1/dev/mailattachment\",\n findById: \"api/v1/dev/mailattachment\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n options: SystemReports,\n optionValueField: \"id\",\n optionDisplayField: \"reportName\",\n fieldLabel: \"REPORT_REPORT_NAME\",\n fieldName: \"reportId\",\n required: true,\n fieldType: \"combobox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_ATTACHMENT_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_ATTACHMENT_MAIL_TEMPLATE_ID\",\n fieldName: \"mailTemplateId\",\n required: false,\n hidden: true,\n gridProps: { hidden: true },\n fieldType: \"number\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n gridLoadParametersValues={{ mailTemplateId: props.selectedRecord.id }}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"MAIL_ATTACHMENT_PLURAL\")}\n girdIcon=\"paperclip\"\n editAction={{\n isEnabled: true,\n authority: \"MAIL_ATTACHMENT_EDIT\",\n preActionValidation: (record) => {\n record.mailTemplateId = props.selectedRecord.id;\n return true;\n },\n }}\n deleteAction={{ isEnabled: true, authority: \"MAIL_ATTACHMENT_DELETE\" }}\n />\n );\n};\n\nexport default MailAttachmentGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport {\n FormActionProps,\n FormElementProps,\n} from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { UseFormReturn } from \"react-hook-form\";\n\ntype ValidationCritria = {\n isVisible: boolean;\n isMandatory: boolean;\n};\n\nexport type EngineType = \"Gmail\" | \"Azure\";\n\ntype ReportValidationOptions = {\n mailHost: ValidationCritria;\n mailPort: ValidationCritria;\n mailUsername: ValidationCritria;\n mailPassword: ValidationCritria; \n mailProtocol: ValidationCritria;\n isMailSmtpAuthEnabled: ValidationCritria;\n isMailStarttlsEnabled: ValidationCritria;\n isSmtpSSlEnabled: ValidationCritria;\n azureGraphApiClientId: ValidationCritria;\n azureGraphApiClientSecret: ValidationCritria;\n azureGraphApiTenantId: ValidationCritria;\n azureGraphApiScope: ValidationCritria;\n azureGraphApiEmailId: ValidationCritria;\n};\n\ntype validationObjectType = {\n [key in EngineType]: ReportValidationOptions;\n};\n\nconst validationObject: validationObjectType = {\n Gmail: {\n mailHost: { isMandatory: true, isVisible: true },\n mailPort: { isMandatory: true, isVisible: true },\n mailUsername: { isMandatory: true, isVisible: true },\n mailPassword: { isMandatory: true, isVisible: true }, \n mailProtocol: { isMandatory: true, isVisible: true },\n isMailSmtpAuthEnabled: { isMandatory: true, isVisible: true },\n isMailStarttlsEnabled: { isMandatory: true, isVisible: true },\n isSmtpSSlEnabled: { isMandatory: true, isVisible: true },\n azureGraphApiClientId: { isMandatory: false, isVisible: false },\n azureGraphApiClientSecret: { isMandatory: false, isVisible: false },\n azureGraphApiTenantId: { isMandatory: false, isVisible: false },\n azureGraphApiScope: { isMandatory: false, isVisible: false },\n azureGraphApiEmailId: { isMandatory: false, isVisible: false },\n },\n Azure: {\n mailHost: { isMandatory: false, isVisible: false },\n mailPort: { isMandatory: false, isVisible: false },\n mailUsername: { isMandatory: false, isVisible: false },\n mailPassword: { isMandatory: false, isVisible: false }, \n mailProtocol: { isMandatory: false, isVisible: false },\n isMailSmtpAuthEnabled: { isMandatory: false, isVisible: false },\n isMailStarttlsEnabled: { isMandatory: false, isVisible: false },\n isSmtpSSlEnabled: { isMandatory: false, isVisible: false },\n azureGraphApiClientId: { isMandatory: true, isVisible: true },\n azureGraphApiClientSecret: { isMandatory: true, isVisible: true },\n azureGraphApiTenantId: { isMandatory: true, isVisible: true },\n azureGraphApiScope: { isMandatory: true, isVisible: true },\n azureGraphApiEmailId: { isMandatory: true, isVisible: true },\n },\n};\n\nconst adjustFormAccordingToEngineType = (\n value: any,\n formActions: FormActionProps,\n formManager: UseFormReturn\n) => {\n if (value && validationObject[value]) {\n const validationObjects: ReportValidationOptions = validationObject[value];\n const fields = Object.keys(validationObjects);\n for (const field of fields) {\n const validationCritria: ValidationCritria = validationObjects[field];\n if (validationCritria.isVisible) {\n formActions.showField(field);\n } else {\n formActions.hideField(field);\n formManager.setValue(field, null);\n }\n }\n } else {\n formActions.hideField(\"mailHost\");\n formManager.setValue(\"mailHost\", null);\n formActions.hideField(\"mailPort\");\n formManager.setValue(\"mailPort\", null);\n formActions.hideField(\"mailUsername\");\n formManager.setValue(\"mailUsername\", null);\n formActions.hideField(\"mailPassword\");\n formManager.setValue(\"mailPassword\", null); \n formActions.hideField(\"mailProtocol\");\n formManager.setValue(\"mailProtocol\", null);\n formActions.hideField(\"isMailSmtpAuthEnabled\");\n formManager.setValue(\"isMailSmtpAuthEnabled\", null);\n formActions.hideField(\"isMailStarttlsEnabled\");\n formManager.setValue(\"isMailStarttlsEnabled\", null);\n formActions.hideField(\"isSmtpSSlEnabled\");\n formManager.setValue(\"isSmtpSSlEnabled\", null);\n formActions.hideField(\"azureGraphApiClientId\");\n formManager.setValue(\"azureGraphApiClientId\", null);\n formActions.hideField(\"azureGraphApiClientSecret\");\n formManager.setValue(\"azureGraphApiClientSecret\", null);\n formActions.hideField(\"azureGraphApiTenantId\");\n formManager.setValue(\"azureGraphApiTenantId\", null);\n formActions.hideField(\"azureGraphApiScope\");\n formManager.setValue(\"azureGraphApiScope\", null);\n formActions.hideField(\"azureGraphApiEmailId\");\n formManager.setValue(\"azureGraphApiEmailId\", null);\n }\n};\n\nconst MailSenderConfigGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/mailsenderconfig/all\",\n deleteById: \"api/v1/dev/mailsenderconfig\",\n save: \"api/v1/dev/mailsenderconfig\",\n findById: \"api/v1/dev/mailsenderconfig\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Name\",\n fieldName: \"configName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Engine\",\n fieldName: \"mailEngine\",\n required: true,\n fieldType: \"combobox\",\n options: [{ value: \"Gmail\" }, { value: \"Azure\" }],\n optionDisplayField: \"value\",\n optionValueField: \"value\",\n formProps: {\n onValueChangeCallBack(\n value,\n formManager,\n formActions,\n selectedRecord\n ) {\n adjustFormAccordingToEngineType(value, formActions, formManager);\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Hostname\",\n fieldName: \"mailHost\",\n required: false,\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"port\",\n fieldName: \"mailPort\",\n required: false,\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"username\",\n fieldName: \"mailUsername\",\n required: false,\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"password\",\n fieldName: \"mailPassword\",\n required: false,\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Workflow Approval Receive Email\",\n fieldName: \"workFlowApprovalReceiveEmail\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Protocol\",\n fieldName: \"mailProtocol\",\n required: false,\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Enable Smtp Auth\",\n fieldName: \"isMailSmtpAuthEnabled\",\n required: false,\n fieldType: \"checkbox\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Enable Start TLS\",\n fieldName: \"isMailStarttlsEnabled\",\n required: false,\n fieldType: \"checkbox\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Enable SSL\",\n fieldName: \"isSmtpSSlEnabled\",\n required: false,\n fieldType: \"checkbox\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Azure Graph API Client Id\",\n fieldName: \"azureGraphApiClientId\",\n required: false,\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Azure Graph API Secret\",\n fieldName: \"azureGraphApiClientSecret\",\n required: false,\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Azure Graph API Tenant Id\",\n fieldName: \"azureGraphApiTenantId\",\n required: false,\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Azure Graph API Scope\",\n fieldName: \"azureGraphApiScope\",\n required: false,\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Azure Graph API Email Id\",\n fieldName: \"azureGraphApiEmailId\",\n required: false,\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Default\",\n fieldName: \"isDefault\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Active\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalIcon: { iconName: \"paper-plane\", prefix: \"fas\" },\n modalTitle: \"Mail Sender Configuration\",\n modalWidth: 300,\n },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"Mail Sender Configuration\")}\n girdIcon={{ iconName: \"paper-plane\", prefix: \"fas\" }}\n editAction={{ isEnabled: true, authority: \"MAIL_SENDER_CONFIG_EDIT\" }}\n deleteAction={{ isEnabled: true, authority: \"MAIL_SENDER_CONFIG_DELETE\" }}\n formLoadCallBk={(\n formActions: FormActionProps,\n formManager: UseFormReturn,\n record: any\n ) => {\n adjustFormAccordingToEngineType(\n record.mailEngine,\n formActions,\n formManager\n );\n }}\n />\n );\n};\n\nexport default MailSenderConfigGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\n\ntype WorkflowDocumentStatusGridProps = {\n selectedRecord: any;\n};\n\nconst WorkflowDocumentStatusGrid: React.FC<WorkflowDocumentStatusGridProps> = (\n props\n) => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/workflowdocumentstatus/all\",\n deleteById: \"api/v1/dev/workflowdocumentstatus\",\n save: \"api/v1/dev/workflowdocumentstatus\",\n findById: \"api/v1/dev/workflowdocumentstatus\",\n setData: setData,\n });\n const SystemDataQueries = useSelector(\n (state: any) => state.commonStores.stores.SystemDataQueries.data\n );\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_STATUS_DOCUMENT_STATUS_CODE\",\n fieldName: \"documentStatusCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Status Arabic Name\",\n fieldName: \"documentStatusArName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Status English Name\",\n fieldName: \"documentStatusEnName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_STATUS_DOCUMENT_STATUS_ORDER\",\n fieldName: \"documentStatusOrder\",\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_STATUS_IS_ZERO_STATE\",\n fieldName: \"isZeroState\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"Next Actions Query (must return array of actions in table named workflow_document_action)\",\n fieldName: \"nextActionsQueryId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemDataQueries,\n optionValueField: \"id\",\n optionDisplayField: \"queryName\",\n gridProps: { hidden: true },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"Next Action Takers Query (must return array of persons in table named person)\",\n fieldName: \"nextActionTakersQueryId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemDataQueries,\n optionValueField: \"id\",\n optionDisplayField: \"queryName\",\n gridProps: { hidden: true },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Next Action Takers Authority\",\n fieldName: \"nextActionTakersAuthority\",\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_STATUS_WORKFLOW_DOCUMENT_ID\",\n fieldName: \"workflowDocumentId\",\n required: false,\n hidden: true,\n gridProps: { hidden: true },\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_STATUS_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n hideInfoBar={true}\n gridLoadParametersValues={{\n workflowDocumentId: props.selectedRecord.id,\n }}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalIcon: \"tag\",\n modalTitle: \"Workflow Document Status\",\n modalWidth: 600,\n },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"WORKFLOW_DOCUMENT_STATUS_PLURAL\")}\n girdIcon=\"tags\"\n editAction={{\n isEnabled: true,\n authority: \"WORKFLOW_DOCUMENT_STATUS_EDIT\",\n preActionValidation: (record) => {\n record.workflowDocumentId = props.selectedRecord.id;\n return true;\n },\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"WORKFLOW_DOCUMENT_STATUS_DELETE\",\n }}\n />\n );\n};\n\nexport default WorkflowDocumentStatusGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\n\ntype WorkflowDocumentActionMailGridProps = {\n selectedRecord: any;\n};\n\nconst WorkflowDocumentActionMailGrid: React.FC<\n WorkflowDocumentActionMailGridProps\n> = (props) => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/workflowdocumentactionmail/all\",\n deleteById: \"api/v1/dev/workflowdocumentactionmail\",\n save: \"api/v1/dev/workflowdocumentactionmail\",\n findById: \"api/v1/dev/workflowdocumentactionmail\",\n setData: setData,\n });\n\n const SystemMailTemplates = useSelector(\n (state: any) => state.commonStores.stores.SystemMailTemplates.data\n );\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_MAIL_DOCUMENT_ACTION_ID\",\n fieldName: \"documentActionId\",\n required: false,\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_MAIL_MAIL_TEMPLATE_ID\",\n fieldName: \"mailTemplateId\",\n required: true,\n fieldType: \"combobox\",\n options: SystemMailTemplates,\n optionDisplayField: \"mailTemplateName\",\n optionValueField: \"id\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_MAIL_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n gridLoadParametersValues={{ actionId: props.selectedRecord.id }}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"WORKFLOW_DOCUMENT_ACTION_MAIL_PLURAL\")}\n girdIcon=\"table-cells\"\n editAction={{\n isEnabled: true,\n authority: \"WORKFLOW_DOCUMENT_ACTION_MAIL_EDIT\",\n preActionValidation: (record) => {\n record.documentActionId = props.selectedRecord.id;\n return true;\n },\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"WORKFLOW_DOCUMENT_ACTION_MAIL_DELETE\",\n }}\n />\n );\n};\n\nexport default WorkflowDocumentActionMailGrid;\n","import { useEffect, useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions, useAxios, useWindow } from \"../../../hooks\";\nimport WorkflowDocumentActionMailGrid from \"./WorkflowDocumentActionMailGrid\";\n\ntype WorkflowDocumentActionGridProps = {\n selectedRecord: any;\n};\n\nconst WorkflowDocumentActionGrid: React.FC<WorkflowDocumentActionGridProps> = (\n props\n) => {\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\n const {\n Window: ActionMailsWindow,\n setWindowState: setActionMailWindowState,\n } = useWindow({\n windowTitle: \"Action Mail Notification\",\n windowIcon: \"envelope\",\n width: \"50%\",\n });\n const { t } = useTranslation();\n const { handleGetRequest } = useAxios();\n const [workflowStates, setWorkflowStates] = useState<Array<any>>([]);\n const loadWorkFlowDocumentStates = async () => {\n await handleGetRequest({\n endPointURI: \"api/v1/dev/workflowdocumentstatus/all\",\n showMask: true,\n parameters: {\n workflowDocumentId: props.selectedRecord.id,\n },\n successCallBkFn: (response: any) => {\n setWorkflowStates(response.data);\n },\n });\n };\n useEffect(() => {\n loadWorkFlowDocumentStates();\n }, [props.selectedRecord]);\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/workflowdocumentaction/all\",\n deleteById: \"api/v1/dev/workflowdocumentaction\",\n save: \"api/v1/dev/workflowdocumentaction\",\n findById: \"api/v1/dev/workflowdocumentaction\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_DOCUMENT_ACTION_CODE\",\n fieldName: \"documentActionCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Action Arabic Name\",\n fieldName: \"documentActionArName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Action English Name\",\n fieldName: \"documentActionEnName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_NEXT_DOCUMENT_STATUS_ID\",\n fieldName: \"nextDocumentStatusId\",\n required: true,\n fieldType: \"combobox\",\n options: workflowStates,\n optionDisplayField: \"documentStatusCode\",\n optionValueField: \"id\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"Post Action Endpoint ( system will call it with post method and parameters refDocumentId , workflowActionId)\",\n fieldName: \"postActionEndpoint\",\n required: false,\n fieldType: \"text\",\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"Pre Action Endpoint ( system will call it with post method and parameters refDocumentId , workflowActionId)\",\n fieldName: \"preActionEndpoint\",\n required: false,\n fieldType: \"text\",\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_REQUIRE_COMMENT\",\n fieldName: \"requireComment\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_WORKFLOW_DOCUMENT_ID\",\n fieldName: \"workflowDocumentId\",\n required: false,\n fieldType: \"number\",\n hidden: true,\n gridProps: { hidden: true },\n },\n },\n ];\n\n return (\n <>\n <ActionMailsWindow>\n <WorkflowDocumentActionMailGrid selectedRecord={selectedRecord} />\n </ActionMailsWindow>\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n gridLoadParametersValues={{\n workflowDocumentId: props.selectedRecord.id,\n }}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalIcon: \"stamp\",\n modalTitle: \"Workflow Document Action\",\n modalWidth: 700,\n },\n }}\n rowActions={[\n {\n label: \"Action Mail Notifications\",\n icon: \"envelope\",\n actionFn: async (data) => {\n setSelectedRecord(data);\n setActionMailWindowState(true);\n },\n },\n ]}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"WORKFLOW_DOCUMENT_ACTION_PLURAL\")}\n girdIcon=\"stamp\"\n editAction={{\n isEnabled: true,\n authority: \"WORKFLOW_DOCUMENT_ACTION_EDIT\",\n preActionValidation: (record) => {\n record.workflowDocumentId = props.selectedRecord.id;\n return true;\n },\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"WORKFLOW_DOCUMENT_ACTION_DELETE\",\n }}\n />\n </>\n );\n};\n\nexport default WorkflowDocumentActionGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport {\n FormActionProps,\n FormElementProps,\n} from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\nimport { UseFormReturn } from \"react-hook-form\";\n\ntype ValidationCritria = {\n isVisible: boolean;\n isMandatory: boolean;\n};\n\nexport type WidgetType =\n | \"LineChart\"\n | \"ColumnChart\"\n | \"PieChart\"\n | \"Card\"\n | \"CircularProgress\"\n | \"LinearProgress\";\n\ntype WidgetValidationOptions = {\n height: ValidationCritria;\n width: ValidationCritria;\n horizontalAxisField: ValidationCritria;\n horizontalAxisLabel: ValidationCritria;\n seriesKeys: ValidationCritria;\n verticalAxisField: ValidationCritria;\n verticalAxisLabel: ValidationCritria;\n};\n\ntype validationObjectType = {\n [key in WidgetType]: WidgetValidationOptions;\n};\n\nconst validationObject: validationObjectType = {\n LineChart: {\n height: { isMandatory: true, isVisible: true },\n width: { isMandatory: true, isVisible: true },\n horizontalAxisField: { isMandatory: true, isVisible: true },\n horizontalAxisLabel: { isMandatory: true, isVisible: true },\n seriesKeys: { isMandatory: false, isVisible: false },\n verticalAxisField: { isMandatory: true, isVisible: true },\n verticalAxisLabel: { isMandatory: true, isVisible: true },\n },\n ColumnChart: {\n height: { isMandatory: true, isVisible: true },\n width: { isMandatory: true, isVisible: true },\n horizontalAxisField: { isMandatory: true, isVisible: true },\n horizontalAxisLabel: { isMandatory: true, isVisible: true },\n seriesKeys: { isMandatory: false, isVisible: false },\n verticalAxisField: { isMandatory: true, isVisible: true },\n verticalAxisLabel: { isMandatory: true, isVisible: true },\n },\n PieChart: {\n height: { isMandatory: true, isVisible: true },\n width: { isMandatory: true, isVisible: true },\n horizontalAxisField: { isMandatory: true, isVisible: true },\n horizontalAxisLabel: { isMandatory: false, isVisible: false },\n seriesKeys: { isMandatory: false, isVisible: false },\n verticalAxisField: { isMandatory: true, isVisible: true },\n verticalAxisLabel: { isMandatory: false, isVisible: false },\n },\n Card: {\n height: { isMandatory: true, isVisible: true },\n width: { isMandatory: true, isVisible: true },\n horizontalAxisField: { isMandatory: true, isVisible: true },\n horizontalAxisLabel: { isMandatory: false, isVisible: false },\n seriesKeys: { isMandatory: false, isVisible: false },\n verticalAxisField: { isMandatory: true, isVisible: true },\n verticalAxisLabel: { isMandatory: false, isVisible: false },\n },\n CircularProgress: {\n height: { isMandatory: false, isVisible: false },\n width: { isMandatory: false, isVisible: false },\n horizontalAxisField: { isMandatory: false, isVisible: false },\n horizontalAxisLabel: { isMandatory: false, isVisible: false },\n seriesKeys: { isMandatory: false, isVisible: false },\n verticalAxisField: { isMandatory: false, isVisible: false },\n verticalAxisLabel: { isMandatory: false, isVisible: false },\n },\n LinearProgress: {\n height: { isMandatory: false, isVisible: false },\n width: { isMandatory: false, isVisible: false },\n horizontalAxisField: { isMandatory: false, isVisible: false },\n horizontalAxisLabel: { isMandatory: false, isVisible: false },\n seriesKeys: { isMandatory: false, isVisible: false },\n verticalAxisField: { isMandatory: false, isVisible: false },\n verticalAxisLabel: { isMandatory: false, isVisible: false },\n },\n};\n\nconst adjustFormAccordingToWidgetType = (\n value: any,\n formActions: FormActionProps,\n formManager: UseFormReturn\n) => {\n if (value && validationObject[value]) {\n const validationObjects: WidgetValidationOptions = validationObject[value];\n const fields = Object.keys(validationObjects);\n for (const field of fields) {\n const validationCritria: ValidationCritria = validationObjects[field];\n if (validationCritria.isVisible) {\n formActions.showField(field);\n } else {\n formActions.hideField(field);\n formManager.setValue(field, null);\n }\n }\n } else {\n formActions.hideField(\"height\");\n formManager.setValue(\"height\", null);\n formActions.hideField(\"width\");\n formManager.setValue(\"width\", null);\n formActions.hideField(\"horizontalAxisField\");\n formManager.setValue(\"horizontalAxisField\", null);\n formActions.hideField(\"horizontalAxisLabel\");\n formManager.setValue(\"horizontalAxisLabel\", null);\n formActions.hideField(\"seriesKeys\");\n formManager.setValue(\"seriesKeys\", null);\n formActions.hideField(\"verticalAxisField\");\n formManager.setValue(\"verticalAxisField\", null);\n formActions.hideField(\"verticalAxisLabel\");\n formManager.setValue(\"verticalAxisLabel\", null);\n }\n};\n\nconst WidgetGrid: React.FC = () => {\n const { t } = useTranslation();\n const SystemDataQueries = useSelector(\n (state: any) => state.commonStores.stores.SystemDataQueries.data\n );\n const SystemWidgetTypes = useSelector(\n (state: any) => state.commonStores.stores.SystemWidgetTypes.data\n );\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n commonStoreKey: \"SystemWidgets\",\n deleteById: \"api/v1/dev/widget\",\n save: \"api/v1/dev/widget\",\n findById: \"api/v1/dev/widget\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_WIDGET_TYPE\",\n fieldName: \"widgetType\",\n required: true,\n fieldType: \"combobox\",\n options: SystemWidgetTypes,\n optionDisplayField: \"name\",\n optionValueField: \"name\",\n formProps: {\n onValueChangeCallBack(\n value,\n formManager,\n formActions,\n selectedRecord\n ) {\n adjustFormAccordingToWidgetType(value, formActions, formManager);\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Query\",\n fieldName: \"dataQueryId\",\n required: true,\n fieldType: \"combobox\",\n options: SystemDataQueries,\n optionDisplayField: \"queryName\",\n optionValueField: \"id\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_WIDGET_NAME\",\n fieldName: \"widgetName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_ICON\",\n fieldName: \"icon\",\n required: false,\n fieldType: \"text\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_TITLE\",\n fieldName: \"title\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_WIDGET_DESCRIPTION\",\n fieldName: \"widgetDescription\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_HEIGHT\",\n fieldName: \"height\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_WIDTH\",\n fieldName: \"width\",\n required: false,\n fieldType: \"combobox\",\n options: [\n { value: 1 },\n { value: 2 },\n { value: 3 },\n { value: 4 },\n { value: 5 },\n { value: 6 },\n { value: 7 },\n { value: 8 },\n { value: 9 },\n { value: 10 },\n { value: 11 },\n { value: 12 },\n ],\n optionDisplayField: \"value\",\n optionValueField: \"value\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"group\",\n props: {\n style: { padding: 1, border: \"1px solid black\", width: \"100%\" },\n label: \"Data Specs\",\n elements: [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_HORIZONTAL_AXIS_FIELD\",\n fieldName: \"horizontalAxisField\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_HORIZONTAL_AXIS_LABEL\",\n fieldName: \"horizontalAxisLabel\",\n required: false,\n fieldType: \"text\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_SERIES_KEYS\",\n fieldName: \"seriesKeys\",\n required: false,\n fieldType: \"text\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_VERTICAL_AXIS_FIELD\",\n fieldName: \"verticalAxisField\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WIDGET_VERTICAL_AXIS_LABEL\",\n fieldName: \"verticalAxisLabel\",\n required: false,\n fieldType: \"text\",\n },\n },\n ],\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: { modalIcon: \"chart-pie\", modalTitle: \"Widget\" },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"WIDGET_PLURAL\")}\n girdIcon=\"chart-pie\"\n editAction={{ isEnabled: true, authority: \"WIDGET_EDIT\" }}\n deleteAction={{ isEnabled: true, authority: \"WIDGET_DELETE\" }}\n formLoadCallBk={(\n formActions: FormActionProps,\n formManager: UseFormReturn,\n record: any\n ) => {\n adjustFormAccordingToWidgetType(\n record.widgetType,\n formActions,\n formManager\n );\n }}\n />\n );\n};\n\nexport default WidgetGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\n\ntype DashboardWidgetGridProps = {\n selectedRecord: any;\n};\n\nconst DashboardWidgetGrid: React.FC<DashboardWidgetGridProps> = (props) => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const SystemWidgets = useSelector(\n (state: any) => state.commonStores.stores.SystemWidgets.data\n );\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/dashboardwidget/all\",\n deleteById: \"api/v1/dev/dashboardwidget\",\n save: \"api/v1/dev/dashboardwidget\",\n findById: \"api/v1/dev/dashboardwidget\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DASHBOARD_WIDGET_DASHBOARD_ID\",\n fieldName: \"dashboardId\",\n required: false,\n hidden: true,\n gridProps: { hidden: true },\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DASHBOARD_WIDGET_WIDGET_ID\",\n fieldName: \"widgetId\",\n required: true,\n fieldType: \"combobox\",\n options: SystemWidgets,\n optionValueField: \"id\",\n optionDisplayField: \"widgetName\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DASHBOARD_WIDGET_WIDGET_ORDER\",\n fieldName: \"widgetOrder\",\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DASHBOARD_WIDGET_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n hideInfoBar={true}\n formElements={formElements}\n gridLoadParametersValues={{ dashboardId: props.selectedRecord.id }}\n keyColumnName={\"id\"}\n gridTitle={t(\"DASHBOARD_WIDGET_PLURAL\")}\n girdIcon=\"table-cells\"\n editAction={{\n isEnabled: true,\n authority: \"DASHBOARD_WIDGET_EDIT\",\n preActionValidation: async (data) => {\n data.dashboardId = props.selectedRecord.id;\n return true;\n },\n }}\n deleteAction={{ isEnabled: true, authority: \"DASHBOARD_WIDGET_DELETE\" }}\n />\n );\n};\n\nexport default DashboardWidgetGrid;\n","import Home from \"../components/common/Home\";\nimport { ADMINISTRATION_ROUTES } from \"./administration\";\nimport { SystemRoute } from \"./types\";\n\nexport const SYSTEM_ROUTES: Array<SystemRoute> = [\n {\n path: \"/\",\n component: Home,\n },\n ...ADMINISTRATION_ROUTES,\n];\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Box } from \"@mui/material\";\nimport { TemplateForm } from \"../templates\";\nimport ReportViewer from \"../templates/report/ReportViewer\";\nimport WorkflowDocumentPanel from \"../templates/workflow/WorkflowDocumentPanel\";\nimport DashboardViewer from \"../templates/visuals/DashboardViewer\";\nimport AttachmentPanel from \"../templates/attachment/AttachmentPanel\";\nimport { useSelector } from \"react-redux\";\n\nconst Home: React.FC = () => {\n const AppInfo = useSelector((state: any) => state.AppInfo.value); \n return (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flex: 1,\n fontSize: 24,\n fontWeight: \"bold\",\n }}\n >\n <img\n src={AppInfo.appLogo}\n style={{ margin: 5, height: 200, width: 200 }}\n />\n <div>\n Welcome to {AppInfo.appName} v.{AppInfo.appVersion}\n </div>\n <div style={{ fontSize: 16 }}>\n Use side menu [\n <FontAwesomeIcon\n icon=\"bars\"\n style={{ marginLeft: 10, marginRight: 10 }}\n />\n ] to navigate to your authorized system modules\n </div>\n </Box>\n );\n};\n\nexport default Home;\n","import { SystemRoute } from \"../types\";\nimport { adminRoutes } from \"./adminRoutes\";\nimport { devRoutes } from \"./devRoutes\";\n\nexport const ADMINISTRATION_ROUTES: Array<SystemRoute> = [\n ...adminRoutes,\n ...devRoutes,\n];\n","import { SystemRoute } from \"../types\";\nimport OrganizationGrid from \"../../components/administration/admin/OrganizationGrid\";\nimport OrganizationMemberGrid from \"../../components/administration/admin/OrganizationMemberGrid\";\nimport OrganizationMemberRoleGrid from \"../../components/administration/admin/OrganizationMemberRoleGrid\";\nimport OrganizationRankGrid from \"../../components/administration/admin/OrganizationRankGrid\";\nimport OrganizationUnitGrid from \"../../components/administration/admin/OrganizationUnitGrid\";\nimport OrganizationUnitTypeGrid from \"../../components/administration/admin/OrganizationUnitTypeGrid\";\nimport PersonGrid from \"../../components/administration/admin/PersonGrid\";\nimport SystemApplicationGrid from \"../../components/administration/admin/SystemApplicationGrid\";\nimport SystemApplicationAuthorityGrid from \"../../components/administration/admin/SystemApplicationAuthorityGrid\";\nimport SystemApplicationModuleGrid from \"../../components/administration/admin/SystemApplicationModuleGrid\";\nimport SystemApplicationRoleGrid from \"../../components/administration/admin/SystemApplicationRoleGrid\";\nimport SystemApplicationRoleAuthorityGrid from \"../../components/administration/admin/SystemApplicationRoleAuthorityGrid\";\nimport OrganizationApplicationModuleGrid from \"../../components/administration/admin/OrganizationApplicationModuleGrid\";\nexport const adminRoutes: Array<SystemRoute> = [\n {\n path: \"admin/organizations\",\n component: OrganizationGrid,\n authority: \"ORGANIZATION_VIEW\",\n },\n {\n path: \"admin/organizationmembers\",\n component: OrganizationMemberGrid,\n authority: \"ORGANIZATION_MEMBER_VIEW\",\n },\n {\n path: \"admin/organizationmemberroles\",\n component: OrganizationMemberRoleGrid,\n authority: \"ORGANIZATION_MEMBER_ROLE_VIEW\",\n },\n {\n path: \"admin/organizationranks\",\n component: OrganizationRankGrid,\n authority: \"ORGANIZATION_RANK_VIEW\",\n },\n {\n path: \"admin/organizationunits\",\n component: OrganizationUnitGrid,\n authority: \"ORGANIZATION_UNIT_VIEW\",\n },\n {\n path: \"admin/organizationunittypes\",\n component: OrganizationUnitTypeGrid,\n authority: \"ORGANIZATION_UNIT_TYPE_VIEW\",\n },\n {\n path: \"admin/persons\",\n component: PersonGrid,\n authority: \"PERSON_VIEW\",\n },\n {\n path: \"admin/systemapplications\",\n component: SystemApplicationGrid,\n authority: \"SYSTEM_APPLICATION_VIEW\",\n },\n {\n path: \"admin/systemapplicationauthorities\",\n component: SystemApplicationAuthorityGrid,\n authority: \"SYSTEM_APPLICATION_AUTHORITY_VIEW\",\n },\n {\n path: \"admin/systemapplicationmodules\",\n component: SystemApplicationModuleGrid,\n authority: \"SYSTEM_APPLICATION_MODULE_VIEW\",\n },\n {\n path: \"admin/systemapplicationroles\",\n component: SystemApplicationRoleGrid,\n authority: \"SYSTEM_APPLICATION_ROLE_VIEW\",\n },\n {\n path: \"admin/systemapplicationroleauthorities\",\n component: SystemApplicationRoleAuthorityGrid,\n authority: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_VIEW\",\n },\n {\n path: \"admin/org/apps\",\n component: OrganizationApplicationModuleGrid,\n authority: \"ORGANIZATION_ADMIN\",\n },\n {\n path: \"admin/org/unit/types\",\n component: OrganizationUnitTypeGrid,\n authority: \"DEVELOPMENT_ADMIN\",\n },\n {\n path: \"admin/org/units\",\n component: OrganizationUnitGrid,\n authority: \"DEVELOPMENT_ADMIN\",\n },\n {\n path: \"admin/org/ranks\",\n component: OrganizationRankGrid,\n authority: \"DEVELOPMENT_ADMIN\",\n },\n];\n\n// import { adminRoutes } from \"./adminRoutes\";\n// [...adminRoutes]\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useWindow } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport OrganizationApplicationModuleGrid from \"./OrganizationApplicationModuleGrid\";\nimport OrganizationUnitTypeGrid from \"./OrganizationUnitTypeGrid\";\nimport OrganizationUnitGrid from \"./OrganizationUnitGrid\";\nimport OrganizationRankGrid from \"./OrganizationRankGrid\";\nimport { Box } from \"@mui/material\";\nimport { AttachmentImageViewer } from \"../../templates\";\n\nconst OrganizationGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n commonStoreKey: \"SystemOrganizations\",\n deleteById: \"api/v1/org/admin/organization\",\n save: \"api/v1/org/admin/organization\",\n findById: \"api/v1/org/admin/organization\",\n setData: setData,\n });\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Logo\",\n fieldName: \"custom\",\n fieldType: \"custom\",\n gridProps: {\n muiProps: {\n align: \"center\",\n headerAlign: \"center\",\n renderCell: (params) => {\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n }}\n >\n <AttachmentImageViewer\n showAsAvatar={true}\n attachmentCode=\"ORGANIZATION_LOGOS\"\n refKey={params.id + \"\"}\n />\n </Box>\n );\n },\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_ORGANIZATION_CODE\",\n fieldName: \"organizationCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_ORGANIZATION_AR_NAME\",\n fieldName: \"organizationArName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_ORGANIZATION_EN_NAME\",\n fieldName: \"organizationEnName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_IS_ACTIVE\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <>\n <TemplateGrid\n attachment={{ attachmentCode: \"ORGANIZATION_LOGOS\" }}\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle=\"ORGANIZATION_PLURAL\"\n girdIcon=\"globe\"\n editAction={{ isEnabled: true, authority: \"ORGANIZATION_EDIT\" }}\n deleteAction={{ isEnabled: true, authority: \"ORGANIZATION_DELETE\" }}\n />\n </>\n );\n};\n\nexport default OrganizationGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport {useApiActions} from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\n\nconst OrganizationMemberRoleGrid: React.FC = () => {\n\tconst { t } = useTranslation();\n\tconst [data, setData] = useState([]);\n const apiActions = useApiActions({\n \tfindAll: \"api/v1/admin/organizationmemberrole/all\",\n \tdeleteById: \"api/v1/admin/organizationmemberrole\",\n \tsave: \"api/v1/admin/organizationmemberrole\",\n\t\tfindById: \"api/v1/admin/organizationmemberrole\",\n \tsetData: setData,\n \t});\n\t\n\tconst formElements: Array<FormElementProps> = [\n\t\t\t\t\t\t\t\t\t\t\t{\n \t\t\t\ttype: \"field\",\n \t\t\t\tmode: \"props\",\n \t\t\t\tprops: {\n \t\t\t\tfieldLabel: \"ORGANIZATION_MEMBER_ROLE_IS_ACTIVE\",\n \t\t\t\tfieldName: \"isActive\",\n \t\t\t\trequired: false,\n \t\t\t\tfieldType: \"checkbox\",\n \t\t\t\t},\n \t\t\t},\n\t\t\t\t\t \t\t\t \t\t\t \t\t\t \t\t\t\t\t\t\t\t\t\t{\n \t\t\t\ttype: \"field\",\n \t\t\t\tmode: \"props\",\n \t\t\t\tprops: {\n \t\t\t\tfieldLabel: \"ORGANIZATION_MEMBER_ROLE_END_DATE\",\n \t\t\t\tfieldName: \"endDate\",\n \t\t\t\trequired: false,\n \t\t\t\tfieldType: \"datetime\",\n \t\t\t\t},\n \t\t\t},\n\t\t\t\t\t \t\t\t \t\t\t \t\t\t\t\t\t \t\t\t{\n \t\t\t\ttype: \"field\",\n \t\t\t\tmode: \"props\",\n \t\t\t\tprops: {\n \t\t\t\tfieldLabel: \"ORGANIZATION_MEMBER_ROLE_ORGANIZATION_MEMBER_ID\",\n \t\t\t\tfieldName: \"organizationMemberId\",\n \t\t\t\trequired: true,\n \t\t\t\tfieldType: \"text\",\n \t\t\t\t},\n \t\t\t},\t\t\t\n\t\t\t\t\t \t\t\t\t\t\t\t\t\t\t{\n \t\t\t\ttype: \"field\",\n \t\t\t\tmode: \"props\",\n \t\t\t\tprops: {\n \t\t\t\tfieldLabel: \"ORGANIZATION_MEMBER_ROLE_START_DATE\",\n \t\t\t\tfieldName: \"startDate\",\n \t\t\t\trequired: false,\n \t\t\t\tfieldType: \"datetime\",\n \t\t\t\t},\n \t\t\t},\n\t\t\t\t\t \t\t\t\t\t\t \t\t\t{\n \t\t\t\ttype: \"field\",\n \t\t\t\tmode: \"props\",\n \t\t\t\tprops: {\n \t\t\t\tfieldLabel: \"ORGANIZATION_MEMBER_ROLE_SYSTEM_APPLICATION_ROLE_ID\",\n \t\t\t\tfieldName: \"systemApplicationRoleId\",\n \t\t\t\trequired: true,\n \t\t\t\tfieldType: \"text\",\n \t\t\t\t},\n \t\t\t},\t\t\t\n\t\t\t\t\t \t\t\t \t\t\t \t\t\t \t\t];\n\n\treturn (\n \t<TemplateGrid\n \t\tapiActions={apiActions}\n \t\tdata={data}\n \t\tsetData={setData}\n \t\teditMode={{ editMode: \"row\"}}\n \t\tformElements={formElements}\n\t\t\tkeyColumnName={\"id\"}\n \t\tgridTitle=\"ORGANIZATION_MEMBER_ROLE_PLURAL\"\n \t\tgirdIcon=\"table-cells\"\n \t\teditAction={{ isEnabled: true, authority: \"ORGANIZATION_MEMBER_ROLE_EDIT\" }}\n \t\tdeleteAction={{ isEnabled: true, authority: \"ORGANIZATION_MEMBER_ROLE_DELETE\" }}\n \t/>\n );\n};\n\nexport default OrganizationMemberRoleGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useSession, useWindow } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { toast } from \"react-toastify\";\nimport OrganizationMemberGrid from \"./OrganizationMemberGrid\";\nimport { Box } from \"@mui/material\";\nimport AttachmentImageViewer from \"../../templates/attachment/AttachmentImageViewer\";\nimport { useSelector } from \"react-redux\";\nimport OrgMemberRoleForm from \"./OrgMemberRoleForm\";\nimport ChangePasswordPanel from \"./ChangePasswordPanel\";\n\nconst PersonGrid: React.FC = () => {\n const { t } = useTranslation();\n const [selectedPerson, setSelectedPerson] = useState<any>(null);\n const { UserInfo } = useSession();\n const CurrentOrganizationRanks = useSelector(\n (state: any) => state.commonStores.stores.CurrentOrganizationRanks.data\n );\n const CurrentOrganizationUnits = useSelector(\n (state: any) => state.commonStores.stores.CurrentOrganizationUnits.data\n );\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/public/person/all\",\n deleteById: \"api/v1/admin/person\",\n save: \"api/v1/admin/person\",\n findById: \"api/v1/admin/person\",\n setData: setData,\n });\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\n const {\n Window: OrganizationMembersWindow,\n setWindowState: setOrganizationMemberWindowState,\n } = useWindow({\n windowTitle: \"Organizations Membership\",\n windowIcon: \"globe\",\n });\n const {\n Window: OrganizationMemberRolesWindow,\n setWindowState: setOrganizationMemberRolesWindowState,\n } = useWindow({\n windowIcon: \"tag\",\n windowTitle: \"Organization Member Roles\",\n width: \"50%\",\n });\n const {\n Window: ChangePasswordWindow,\n setWindowState: setChangePasswordWindow,\n } = useWindow({\n windowIcon: \"key\",\n windowTitle: \"Change Password\",\n width: \"fit-content\",\n height: \"fit-content\",\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n hidden: true,\n fieldLabel: \"id\",\n fieldName: \"id\",\n gridProps: {\n hidden: true,\n },\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n hidden: true,\n fieldLabel: \"organizationMemberId\",\n fieldName: \"organizationMemberId\",\n gridProps: {\n hidden: true,\n },\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Image\",\n fieldName: \"custom\",\n fieldType: \"custom\",\n gridProps: {\n muiProps: {\n align: \"center\",\n headerAlign: \"center\",\n renderCell: (params) => {\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n }}\n >\n <AttachmentImageViewer\n showAsAvatar={true}\n attachmentCode=\"EMPLOYEE_PHOTOS\"\n refKey={params.id + \"\"}\n />\n </Box>\n );\n },\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"PERSON_EMPLOYEE_AR_NAME\",\n fieldName: \"employeeArName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"PERSON_EMPLOYEE_EN_NAME\",\n fieldName: \"employeeEnName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"PERSON_EMAIL\",\n fieldName: \"email\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"PERSON_MOBILE_NUMBER\",\n fieldName: \"mobileNumber\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_MEMBER_ORGANIZATION_RANK_ID\",\n fieldName: \"organizationRankId\",\n required: false,\n fieldType: \"combobox\",\n options: CurrentOrganizationRanks,\n optionValueField: \"id\",\n optionDisplayField: \"rankEnName\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_MEMBER_ORGANIZATION_UNIT_ID\",\n fieldName: \"organizationUnitId\",\n required: false,\n fieldType: \"combobox\",\n options: CurrentOrganizationUnits,\n optionValueField: \"id\",\n optionDisplayField: \"organizationUnitEnName\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Membership number\",\n fieldName: \"organizationMembershipNumber\",\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n hidden: true,\n gridProps: { hidden: true },\n fieldLabel: \"PERSON_PASSWORD\",\n fieldName: \"password\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"PERSON_USERNAME\",\n fieldName: \"username\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n hidden: true,\n fieldLabel: \"Ref Source\",\n fieldName: \"refSource\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n hidden: true,\n fieldLabel: \"PERSON_EMPLOYEE_NUMBER\",\n fieldName: \"refSyncNumber\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"PERSON_IS_ACTIVE\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <>\n <OrganizationMemberRolesWindow>\n <OrgMemberRoleForm\n selectedRecord={selectedRecord}\n closeModalFn={() => {\n setOrganizationMemberRolesWindowState(false);\n }}\n />\n </OrganizationMemberRolesWindow>\n <OrganizationMembersWindow>\n <OrganizationMemberGrid selectedPerson={selectedPerson} />\n </OrganizationMembersWindow>\n <ChangePasswordWindow>\n <ChangePasswordPanel\n selectedPerson={selectedPerson}\n isSelfService={false}\n onSuccessCallBk={() => {\n setChangePasswordWindow(false);\n }}\n />\n </ChangePasswordWindow>\n <TemplateGrid\n attachment={{ attachmentCode: \"EMPLOYEE_PHOTOS\" }}\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalIcon: \"user\",\n modalTitle: \"Person Profile\",\n modalWidth: 300,\n },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle=\"PERSON_PLURAL\"\n rowActions={[\n {\n icon: \"key\",\n label: \"Change User Password\",\n actionFn: async (data) => {\n setSelectedPerson(data);\n setChangePasswordWindow(true);\n },\n },\n {\n icon: \"tags\",\n label: \"Current Organization User Roles\",\n isActionDisabledForRecord: (data) => {\n return !data?.organizationMemberId;\n },\n actionFn: async (data) => {\n setSelectedRecord({\n organizationId: UserInfo?.currentOrganization?.id,\n id: data?.organizationMemberId,\n });\n setOrganizationMemberRolesWindowState(true);\n },\n },\n {\n icon: \"globe\",\n label: \"User Organizations\",\n actionFn: async (data) => {\n setSelectedPerson(data);\n setOrganizationMemberWindowState(true);\n },\n },\n ]}\n girdIcon=\"users\"\n editAction={{\n isEnabled: true,\n authority: \"PERSON_EDIT\",\n preActionValidation: (data) => {\n if (\n data.refSource != undefined &&\n data.refSource != null &&\n data.refSource != \"\"\n ) {\n toast.error(\n \"This Person Was synced from other system therefore you can't modify this record\"\n );\n return false;\n }\n return true;\n },\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"PERSON_DELETE\",\n preActionValidation: (data) => {\n if (\n data.refSource != undefined &&\n data.refSource != null &&\n data.refSource != \"\"\n ) {\n toast.error(\n \"This Person Was synced from other system therefore you can't modify this record\"\n );\n return false;\n }\n return true;\n },\n }}\n />\n </>\n );\n};\n\nexport default PersonGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useWindow } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\n\nconst SystemApplicationGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/org/admin/systemapplication/all\",\n deleteById: \"api/v1/org/admin/systemapplication\",\n save: \"api/v1/org/admin/systemapplication\",\n findById: \"api/v1/org/admin/systemapplication\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_APPLICATION_CODE\",\n fieldName: \"applicationCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_APPLICATION_NAME\",\n fieldName: \"applicationName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_APPLICATION_DESCRIPTION\",\n fieldName: \"applicationDescription\",\n required: false,\n fieldType: \"text\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_IS_ACTIVE\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <>\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle=\"SYSTEM_APPLICATION_PLURAL\"\n girdIcon=\"window-restore\"\n editAction={{ isEnabled: true, authority: \"SYSTEM_APPLICATION_EDIT\" }}\n deleteAction={{\n isEnabled: true,\n authority: \"SYSTEM_APPLICATION_DELETE\",\n }}\n />\n </>\n );\n};\n\nexport default SystemApplicationGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\n\nconst SystemApplicationRoleAuthorityGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/admin/systemapplicationroleauthority/all\",\n deleteById: \"api/v1/admin/systemapplicationroleauthority\",\n save: \"api/v1/admin/systemapplicationroleauthority\",\n findById: \"api/v1/admin/systemapplicationroleauthority\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_IS_ACTIVE\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"SYSTEM_APPLICATION_ROLE_AUTHORITY_SYSTEM_APPLICATION_AUTHORITY_ID\",\n fieldName: \"systemApplicationAuthorityId\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"SYSTEM_APPLICATION_ROLE_AUTHORITY_SYSTEM_APPLICATION_ROLE_ID\",\n fieldName: \"systemApplicationRoleId\",\n required: true,\n fieldType: \"text\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle=\"SYSTEM_APPLICATION_ROLE_AUTHORITY_PLURAL\"\n girdIcon=\"table-cells\"\n editAction={{\n isEnabled: true,\n authority: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_EDIT\",\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_DELETE\",\n }}\n />\n );\n};\n\nexport default SystemApplicationRoleAuthorityGrid;\n","import { useEffect, useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useAxios } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\n\nconst OrganizationApplicationModuleGrid: React.FC = () => {\n const { t } = useTranslation();\n const { handleGetRequest } = useAxios();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/org/admin/organizationapplicationmodule/all\",\n deleteById: \"api/org/v1/admin/organizationapplicationmodule\",\n save: \"api/v1/org/admin/organizationapplicationmodule\",\n findById: \"api/org/v1/admin/organizationapplicationmodule\",\n setData: setData,\n });\n const SystemApplicationModules = useSelector(\n (state: any) => state.commonStores.stores.SystemApplicationModules.data\n );\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"ORGANIZATION_APPLICATION_MODULE_SYSTEM_APPLICATION_MODULE_ID\",\n fieldName: \"systemApplicationModuleId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemApplicationModules,\n optionDisplayField: \"moduleName\",\n optionValueField: \"id\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n hidden: true,\n gridProps: {\n hidden: true,\n },\n fieldLabel: \"ORGANIZATION_APPLICATION_MODULE_ORGANIZATION_ID\",\n fieldName: \"organizationId\",\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_APPLICATION_MODULE_SUBSCRIPTION_DATE\",\n fieldName: \"subscriptionDate\",\n required: true,\n fieldType: \"date\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_APPLICATION_MODULE_EXPIRATION_DATE\",\n fieldName: \"expirationDate\",\n required: false,\n fieldType: \"date\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ORGANIZATION_APPLICATION_MODULE_IS_ACTIVE\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n hideInfoBar={true}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle=\"ORGANIZATION_APPLICATION_MODULE_PLURAL\"\n girdIcon=\"layer-group\"\n editAction={{\n isEnabled: true,\n authority: \"ORGANIZATION_APPLICATION_MODULE_EDIT\",\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"ORGANIZATION_APPLICATION_MODULE_DELETE\",\n }}\n />\n );\n};\n\nexport default OrganizationApplicationModuleGrid;\n","import { SystemRoute } from \"../types\";\nimport BluePrintGrid from \"../../components/administration/dev/BluePrintGrid\";\nimport DataQueryGrid from \"../../components/administration/dev/DataQueryGrid\";\nimport DatasourceConnectionGrid from \"../../components/administration/dev/DatasourceConnectionGrid\";\nimport EntityParameterGrid from \"../../components/administration/dev/EntityParameterGrid\";\n\nimport LookupGrid from \"../../components/administration/dev/LookupGrid\";\n\nimport ReportGrid from \"../../components/administration/dev/ReportGrid\";\nimport MailTemplateGrid from \"../../components/administration/dev/MailTemplateGrid\";\nimport MailSenderConfigGrid from \"../../components/administration/dev/MailSenderConfigGrid\";\nimport WorkflowDocumentGrid from \"../../components/administration/dev/WorkflowDocumentGrid\";\nimport WidgetGrid from \"../../components/administration/dev/WidgetGrid\";\nimport DashboardGrid from \"../../components/administration/dev/DashboardGrid\";\nimport DashboardRouteView from \"../../components/templates/visuals/DashboardRouteView\";\nimport WorkflowDocumentMailLogGrid from \"../../components/administration/dev/WorkflowDocumentMailLogGrid\";\nimport MailNotificationQueueGrid from \"../../components/administration/dev/MailNotificationQueueGrid\";\nimport SystemApplicationAuthorityGrid from \"../../components/administration/admin/SystemApplicationAuthorityGrid\";\nimport SystemApplicationRoleGrid from \"../../components/administration/admin/SystemApplicationRoleGrid\";\nimport SystemApplicationModuleGrid from \"../../components/administration/admin/SystemApplicationModuleGrid\";\nimport AttachmentConfigGrid from \"../../components/administration/dev/AttachmentConfigGrid\";\nimport NotificationGrid from \"../../components/administration/dev/NotificationGrid\";\nimport MyNotificationsPanel from \"../../components/common/MyNotificationsPanel\";\nimport WorkflowRouteComponent from \"../../components/templates/workflow/WorkflowRouteComponent\";\n\nexport const devRoutes: Array<SystemRoute> = [\n {\n path: \"dev/blueprints\",\n component: BluePrintGrid,\n authority: \"BLUE_PRINT_VIEW\",\n },\n {\n path: \"dev/dataqueries\",\n component: DataQueryGrid,\n authority: \"DATA_QUERY_VIEW\",\n },\n {\n path: \"dev/datasourceconnections\",\n component: DatasourceConnectionGrid,\n authority: \"DATASOURCE_CONNECTION_VIEW\",\n },\n {\n path: \"dev/entityparameters\",\n component: EntityParameterGrid,\n authority: \"ENTITY_PARAMETER_VIEW\",\n },\n {\n path: \"dev/lookups\",\n component: LookupGrid,\n authority: \"LOOKUP_VIEW\",\n },\n {\n path: \"dev/reports\",\n component: ReportGrid,\n authority: \"REPORT_VIEW\",\n },\n {\n path: \"dev/mailtemplates\",\n component: MailTemplateGrid,\n authority: \"MAILTEMPLATE_VIEW\",\n },\n {\n path: \"dev/mailsender/config\",\n component: MailSenderConfigGrid,\n authority: \"MAILTEMPLATE_VIEW\",\n },\n {\n path: \"dev/workflowdocuments\",\n component: WorkflowDocumentGrid,\n authority: \"WORKFLOW_DOCUMENT_VIEW\",\n },\n {\n path: \"dev/widgets\",\n component: WidgetGrid,\n authority: \"WIDGET_VIEW\",\n },\n {\n path: \"dev/dashboards\",\n component: DashboardGrid,\n authority: \"DASHBOARD_VIEW\",\n },\n {\n path: \"dashboard/:dashboardCode\",\n component: DashboardRouteView,\n },\n {\n path: \"dev/workflowdocumentmaillogs\",\n component: WorkflowDocumentMailLogGrid,\n },\n {\n path: \"dev/mailnotificationqueues\",\n component: MailNotificationQueueGrid,\n },\n {\n path: \"dev/system/authorities\",\n component: SystemApplicationAuthorityGrid,\n },\n {\n path: \"dev/system/roles\",\n component: SystemApplicationRoleGrid,\n },\n {\n path: \"dev/system/lookups\",\n component: LookupGrid,\n },\n {\n path: \"dev/system/modules\",\n component: SystemApplicationModuleGrid,\n },\n {\n path: \"dev/attachmentconfigs\",\n component: AttachmentConfigGrid,\n },\n {\n path: \"dev/notifications\",\n component: NotificationGrid,\n },\n {\n path: \"myNotifications\",\n component: MyNotificationsPanel,\n },\n {\n path: \"workflow/:workflowDocumentCode/:refDocumentId\",\n component: WorkflowRouteComponent,\n },\n];\n\n// import { devRoutes } from \"./devRoutes\";\n// [...devRoutes]\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\n\nconst BluePrintGrid: React.FC = () => {\n const { t } = useTranslation();\n const SystemDataQueries = useSelector(\n (state: any) => state.commonStores.stores.SystemDataQueries.data\n );\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n commonStoreKey: \"SystemBluePrints\",\n deleteById: \"api/v1/dev/blueprint\",\n save: \"api/v1/dev/blueprint\",\n findById: \"api/v1/dev/blueprint\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"BLUE_PRINT_BLUE_PRINT_CODE\",\n fieldName: \"bluePrintCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"BLUE_PRINT_QUERY_ID\",\n fieldName: \"queryId\",\n required: true,\n fieldType: \"combobox\",\n options: SystemDataQueries,\n optionDisplayField: \"queryName\",\n optionValueField: \"id\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{ editMode: \"row\", reloadAfterSave: true }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"BLUE_PRINT_PLURAL\")}\n girdIcon=\"table-cells\"\n editAction={{ isEnabled: true, authority: \"BLUE_PRINT_EDIT\" }}\n deleteAction={{ isEnabled: true, authority: \"BLUE_PRINT_DELETE\" }}\n />\n );\n};\n\nexport default BluePrintGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useWindow } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\nimport DataQueryParametersForm from \"./DataQueryParametersForm\";\nimport DataQueryParameterGrid from \"./DataQueryParameterGrid\";\n\nconst DataQueryGrid: React.FC = () => {\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\n const {\n Window: DataQueryParameterWindow,\n setWindowState: setDataQueryParameterWindow,\n } = useWindow({\n width: \"50%\",\n windowTitle: \"Data query parameters\",\n windowIcon: \"p\",\n });\n const SystemDataSources = useSelector(\n (state: any) => state.commonStores.stores.SystemDataSources.data\n );\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n commonStoreKey: \"SystemDataQueries\",\n deleteById: \"api/v1/dev/dataquery\",\n save: \"api/v1/dev/dataquery\",\n findById: \"api/v1/dev/dataquery\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATA_QUERY_QUERY_NAME\",\n fieldName: \"queryName\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATA_QUERY_USE_SYS_CON\",\n fieldName: \"useSysCon\",\n required: false,\n fieldType: \"checkbox\",\n formProps: {\n onValueChangeCallBack(\n value,\n formManager,\n formActions,\n selectedRecord\n ) {\n if (value) {\n formActions.hideField(\"datasourceConId\");\n formManager.setValue(\"datasourceConId\", null);\n } else {\n formActions.showField(\"datasourceConId\");\n }\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATA_QUERY_DATASOURCE_CON_ID\",\n fieldName: \"datasourceConId\",\n required: false,\n options: SystemDataSources,\n optionDisplayField: \"connectionName\",\n optionValueField: \"id\",\n fieldType: \"combobox\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATA_QUERY_QUERY_STR\",\n fieldName: \"queryStr\",\n formProps: { fieldHeight: 400 },\n gridProps: {\n hidden: true,\n },\n muiTextFieldProps: {\n multiline: true,\n rows: 4,\n },\n required: false,\n fieldType: \"text\",\n },\n },\n ];\n\n return (\n <>\n <DataQueryParameterWindow>\n <DataQueryParameterGrid selectedRecord={selectedRecord} />\n </DataQueryParameterWindow>\n <TemplateGrid\n apiActions={apiActions}\n rowActions={[\n {\n label: \"Query Parameters\",\n actionFn: async (data) => {\n setSelectedRecord(data);\n setDataQueryParameterWindow(true);\n },\n icon: \"p\",\n },\n ]}\n data={data}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalTitle: \"System Query\",\n modalWidth: 600,\n modalIcon: \"file-code\",\n },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"DATA_QUERY_PLURAL\")}\n girdIcon=\"table-cells\"\n editAction={{ isEnabled: true, authority: \"DATA_QUERY_EDIT\" }}\n deleteAction={{ isEnabled: true, authority: \"DATA_QUERY_DELETE\" }}\n />\n </>\n );\n};\n\nexport default DataQueryGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions, useAxios } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\nimport { toast } from \"react-toastify\";\n\nconst DatasourceConnectionGrid: React.FC = () => {\n const { handleGetRequest } = useAxios();\n const SystemDataSourceType = useSelector(\n (state: any) => state.commonStores.stores.SystemDataSourceType.data\n );\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n deleteById: \"api/v1/dev/datasourceconnection\",\n save: \"api/v1/dev/datasourceconnection\",\n findById: \"api/v1/dev/datasourceconnection\",\n setData: setData,\n commonStoreKey: \"SystemDataSources\",\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ID\",\n fieldName: \"id\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATASOURCE_CONNECTION_CONNECTION_NAME\",\n fieldName: \"connectionName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATASOURCE_CONNECTION_DATASOURCE_TYPE\",\n fieldName: \"datasourceType\",\n required: true,\n fieldType: \"combobox\",\n options: SystemDataSourceType,\n optionValueField: \"value\",\n optionDisplayField: \"value\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATASOURCE_CONNECTION_DATASOURCE_URL\",\n fieldName: \"datasourceUrl\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATASOURCE_CONNECTION_DATASOURCE_USERNAME\",\n fieldName: \"datasourceUsername\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATASOURCE_CONNECTION_DATASOURCE_PASSWORD\",\n fieldName: \"datasourcePassword\",\n required: true,\n fieldType: \"text\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DATASOURCE_CONNECTION_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalTitle: \"Datasource Connection\",\n modalIcon: \"plug\",\n modalWidth: 300,\n },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"DATASOURCE_CONNECTION_PLURAL\")}\n girdIcon=\"plug\"\n rowActions={[\n {\n icon: \"plug\",\n label: \"test connection\",\n actionFn: async (data) => {\n await handleGetRequest({\n endPointURI: \"api/v1/dev/datasourceConnection/test\",\n showMask: true,\n parameters: {\n id: data.id,\n },\n // loadingMessage: \"checking datasource connectivity\",\n successCallBkFn: (response: any) => {\n toast.success(response.data);\n },\n });\n },\n },\n ]}\n editAction={{ isEnabled: true, authority: \"DATASOURCE_CONNECTION_EDIT\" }}\n deleteAction={{\n isEnabled: true,\n authority: \"DATASOURCE_CONNECTION_DELETE\",\n }}\n />\n );\n};\n\nexport default DatasourceConnectionGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { useApiActions } from \"../../../hooks\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\nimport { DATE_FORMAT, DATE_TIME_FORMAT } from \"../../../util\";\n\nconst EntityParameterGrid: React.FC = () => {\n const { t } = useTranslation();\n const SystemParameterTypes = useSelector(\n (state: any) => state.commonStores.stores.SystemParameterTypes.data\n );\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n commonStoreKey: \"SystemEntityParameters\",\n deleteById: \"api/v1/dev/entityparameter\",\n save: \"api/v1/dev/entityparameter\",\n findById: \"api/v1/dev/entityparameter\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_CODE\",\n fieldName: \"parameterCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_LABEL\",\n fieldName: \"parameterLabel\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_TYPE\",\n fieldName: \"parameterType\",\n required: true,\n fieldType: \"combobox\",\n options: SystemParameterTypes,\n optionDisplayField: \"value\",\n optionValueField: \"value\",\n formProps: {\n onValueChangeCallBack(\n value,\n formManager,\n formActions,\n selectedRecord\n ) {\n if (value === \"combobox\") {\n formManager.setValue(\"parameterValueFormat\", null);\n formActions.showField(\"parameterDataQueryId\");\n formActions.showField(\"parameterDataset\");\n formActions.showField(\"parameterDisplayField\");\n formActions.showField(\"parameterValueField\");\n formActions.hideField(\"parameterValueFormat\");\n } else if (value === \"date\" || value === \"datetime\") {\n if (value === \"date\") {\n formManager.setValue(\"parameterValueFormat\", DATE_FORMAT);\n } else if (value === \"datetime\") {\n formManager.setValue(\"parameterValueFormat\", DATE_TIME_FORMAT);\n }\n formActions.hideField(\"parameterDataQueryId\");\n formActions.hideField(\"parameterDataset\");\n formActions.hideField(\"parameterDisplayField\");\n formActions.hideField(\"parameterValueField\");\n formActions.showField(\"parameterValueFormat\");\n } else {\n formManager.setValue(\"parameterValueFormat\", null);\n formActions.hideField(\"parameterDataQueryId\");\n formActions.hideField(\"parameterDataset\");\n formActions.hideField(\"parameterDisplayField\");\n formActions.hideField(\"parameterValueField\");\n formActions.hideField(\"parameterValueFormat\");\n }\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_DATA_QUERY_ID\",\n fieldName: \"parameterDataQueryId\",\n hidden: true,\n required: false,\n fieldType: \"text\",\n formProps: {\n onValueChangeCallBack(\n value,\n formManager,\n formActions,\n selectedRecord\n ) {\n if (value != null && value != \"\") {\n formManager.setValue(\"parameterDataset\", null);\n formActions.hideField(\"parameterDataset\");\n } else {\n formActions.showField(\"parameterDataset\");\n }\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_DATASET\",\n fieldName: \"parameterDataset\",\n hidden: true,\n required: false,\n fieldType: \"text\",\n formProps: {\n onValueChangeCallBack(\n value,\n formManager,\n formActions,\n selectedRecord\n ) {\n if (value != null && value != \"\") {\n formManager.setValue(\"parameterDataQueryId\", null);\n formActions.hideField(\"parameterDataQueryId\");\n } else {\n formActions.showField(\"parameterDataQueryId\");\n }\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_DISPLAY_FIELD\",\n fieldName: \"parameterDisplayField\",\n hidden: true,\n required: false,\n fieldType: \"text\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_VALUE_FIELD\",\n fieldName: \"parameterValueField\",\n hidden: true,\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_VALUE_FORMAT\",\n fieldName: \"parameterValueFormat\",\n required: false,\n hidden: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"ENTITY_PARAMETER_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalTitle: \"Entity Parameter\",\n modalIcon: \"p\",\n modalWidth: 300,\n },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"ENTITY_PARAMETER_PLURAL\")}\n girdIcon=\"p\"\n editAction={{ isEnabled: true, authority: \"ENTITY_PARAMETER_EDIT\" }}\n deleteAction={{ isEnabled: true, authority: \"ENTITY_PARAMETER_DELETE\" }}\n />\n );\n};\n\nexport default EntityParameterGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\n\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions, useWindow } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\nimport { toast } from \"react-toastify\";\nimport MailRecipientGrid from \"./MailRecipientGrid\";\nimport MailBodyGrid from \"./MailBodyGrid\";\nimport MailAttachmentGrid from \"./MailAttachmentGrid\";\n\nconst MailTemplateGrid: React.FC = () => {\n const SystemDataQueries = useSelector(\n (state: any) => state.commonStores.stores.SystemDataQueries.data\n );\n const SystemTimeIntervals = useSelector(\n (state: any) => state.commonStores.stores.SystemTimeIntervals.data\n );\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\n const {\n Window: MailRecipentsWindow,\n setWindowState: setMailRecipientsWindowState,\n } = useWindow({ windowTitle: \"Mail Receipents\", windowIcon: \"users\" });\n const { Window: MailBodiesWindow, setWindowState: setMailBodiesWindowState } =\n useWindow({\n windowTitle: \"Mail Bodies\",\n windowIcon: { prefix: \"fas\", iconName: \"envelope-open-text\" },\n });\n const {\n Window: MailAttachmentWindow,\n setWindowState: setMailAttachmentWindowState,\n } = useWindow({\n windowTitle: \"Mail Attachment\",\n windowIcon: \"paperclip\",\n width: 500,\n });\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n commonStoreKey: \"SystemMailTemplates\",\n deleteById: \"api/v1/dev/mailtemplate\",\n save: \"api/v1/dev/mailtemplate\",\n findById: \"api/v1/dev/mailtemplate\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_TEMPLATE_MAIL_TEMPLATE_CODE\",\n fieldName: \"mailTemplateCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_TEMPLATE_MAIL_TEMPLATE_NAME\",\n fieldName: \"mailTemplateName\",\n required: true,\n fieldType: \"text\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_TEMPLATE_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"group\",\n props: {\n label: \"subject\",\n icon: \"users\",\n style: { padding: 1, border: \"0.5px dashed black\", margin: 1 },\n elements: [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_TEMPLATE_MAIL_SUBJECT\",\n fieldName: \"mailSubject\",\n required: true,\n fieldType: \"text\",\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_TEMPLATE_SUBJECT_DATA_QUERY_ID\",\n fieldName: \"subjectDataQueryId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemDataQueries,\n optionDisplayField: \"queryName\",\n optionValueField: \"id\",\n gridProps: {\n hidden: true,\n },\n },\n },\n ],\n },\n },\n\n {\n type: \"group\",\n props: {\n label: \"Recipients\",\n icon: \"users\",\n style: { padding: 1, border: \"0.5px dashed black\", margin: 1 },\n elements: [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"To Recipient Query (must return list of objects with property email)\",\n fieldName: \"mailToDataQueryId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemDataQueries,\n optionDisplayField: \"queryName\",\n optionValueField: \"id\",\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"CC Recipient Query (must return list of objects with property email)\",\n fieldName: \"mailCcDataQueryId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemDataQueries,\n optionDisplayField: \"queryName\",\n optionValueField: \"id\",\n gridProps: {\n hidden: true,\n },\n },\n },\n ],\n },\n },\n {\n type: \"group\",\n props: {\n label: \"Periodical Configuration\",\n icon: \"history\",\n style: { padding: 1, border: \"0.5px dashed black\", margin: 1 },\n elements: [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_TEMPLATE_PERIODICAL\",\n fieldName: \"periodical\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_TEMPLATE_PERIOD_TYPE\",\n fieldName: \"periodType\",\n options: SystemTimeIntervals,\n optionDisplayField: \"value\",\n optionValueField: \"value\",\n required: false,\n fieldType: \"combobox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_TEMPLATE_PERIOD_VALUE\",\n fieldName: \"periodValue\",\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_TEMPLATE_START_SENDING_AT\",\n fieldName: \"startSendingAt\",\n required: false,\n fieldType: \"datetime\",\n },\n },\n ],\n },\n },\n ];\n\n return (\n <>\n <MailRecipentsWindow>\n <MailRecipientGrid\n selectedRecord={selectedRecord}\n callBkFn={() => {\n setMailRecipientsWindowState(false);\n }}\n />\n </MailRecipentsWindow>\n <MailBodiesWindow>\n <MailBodyGrid\n selectedRecord={selectedRecord}\n callBkFn={() => {\n setMailRecipientsWindowState(false);\n }}\n />\n </MailBodiesWindow>\n <MailAttachmentWindow>\n <MailAttachmentGrid\n selectedRecord={selectedRecord}\n callBkFn={() => {\n setMailAttachmentWindowState(false);\n }}\n />\n </MailAttachmentWindow>\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalWidth: 300,\n modalTitle: \"Mail Template\",\n modalIcon: \"envelope\",\n },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"MAIL_TEMPLATE_PLURAL\")}\n girdIcon=\"envelope\"\n rowActions={[\n {\n icon: \"users\",\n label: \"Recipients\",\n actionFn: async (data) => {\n setSelectedRecord(data);\n setMailRecipientsWindowState(true);\n },\n },\n {\n icon: { prefix: \"fas\", iconName: \"envelope-open-text\" },\n label: \"Mail Body\",\n actionFn: async (data) => {\n setSelectedRecord(data);\n setMailBodiesWindowState(true);\n },\n },\n {\n icon: \"paperclip\",\n label: \"Mail Attachments\",\n actionFn: async (data) => {\n setSelectedRecord(data);\n setMailAttachmentWindowState(true);\n },\n },\n ]}\n editAction={{\n isEnabled: true,\n authority: \"MAIL_TEMPLATE_EDIT\",\n preActionValidation: (record) => {\n if (record?.periodical === true && !record?.periodType) {\n toast.error(\n \"You must specifiy the period type since this email is periodical\"\n );\n return false;\n }\n if (record?.periodical === true && !record?.periodValue) {\n toast.error(\n \"You must specifiy the period value since this email is periodical\"\n );\n return false;\n }\n if (record?.periodical === true && !record?.startSendingAt) {\n toast.error(\n \"You must specifiy the start sending time since this email is periodical\"\n );\n return false;\n }\n\n return true;\n },\n }}\n deleteAction={{ isEnabled: true, authority: \"MAIL_TEMPLATE_DELETE\" }}\n />\n </>\n );\n};\n\nexport default MailTemplateGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions, useWindow } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\nimport WorkflowDocumentStatusGrid from \"./WorkflowDocumentStatusGrid\";\nimport WorkflowDocumentActionGrid from \"./WorkflowDocumentActionGrid\";\n\nconst WorkflowDocumentGrid: React.FC = () => {\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\n const {\n Window: WorkflowStatusWindow,\n setWindowState: setWorkflowStatusWindowState,\n } = useWindow({\n windowTitle: \"Document Status\",\n windowIcon: \"tag\",\n });\n const {\n Window: WorkflowActionWindow,\n setWindowState: setWorkflowActionWindowState,\n } = useWindow({\n windowTitle: \"Document Action\",\n windowIcon: \"stamp\",\n });\n const SystemOrganizations = useSelector(\n (state: any) => state.commonStores.stores.SystemOrganizations.data\n );\n const SystemReports = useSelector(\n (state: any) => state.commonStores.stores.SystemReports.data\n );\n const SystemDataSources = useSelector(\n (state: any) => state.commonStores.stores.SystemDataSources.data\n );\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/workflowdocument/all\",\n deleteById: \"api/v1/dev/workflowdocument\",\n save: \"api/v1/dev/workflowdocument\",\n findById: \"api/v1/dev/workflowdocument\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_ORG_CODE\",\n fieldName: \"orgCode\",\n required: false,\n fieldType: \"combobox\",\n options: SystemOrganizations,\n optionDisplayField: \"organizationCode\",\n optionValueField: \"id\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_CODE\",\n fieldName: \"documentCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Workflow Document En Display Name\",\n fieldName: \"documentEnName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Workflow Document Ar Display Name\",\n fieldName: \"documentArName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Report To be Attached For The Document ( will be passed a parameter called doc_id)\",\n fieldName: \"documentReportId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemReports,\n optionDisplayField: \"reportName\",\n optionValueField: \"id\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_APPROVAL_ALLOWED\",\n fieldName: \"mailApprovalAllowed\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"group\",\n props: {\n icon: \"bell\",\n style: { border: \"1px dashed black\", padding: 1, marginBottom: 1 },\n label: \"App Visual Notifications\",\n elements: [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_APP_NOTIFICATION_ICON\",\n fieldName: \"appNotificationIcon\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_APP_NOTIFICATION_STYLE\",\n fieldName: \"appNotificationStyle\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_APP_VIEW_ROUTE\",\n fieldName: \"appViewRoute\",\n required: false,\n fieldType: \"text\",\n },\n },\n ],\n },\n },\n\n {\n type: \"group\",\n props: {\n icon: \"database\",\n style: { border: \"1px dashed black\", padding: 1, marginBottom: 1 },\n label: \"Related Document Database\",\n elements: [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_USE_SYSTEM_CON\",\n fieldName: \"useSystemCon\",\n required: false,\n fieldType: \"checkbox\",\n formProps: {\n onValueChangeCallBack(\n value,\n formManager,\n formActions,\n selectedRecord\n ) {\n if (value) {\n formActions.hideField(\"documentConId\");\n formManager.setValue(\"documentConId\", null);\n } else {\n formActions.showField(\"documentConId\");\n }\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_CON_ID\",\n fieldName: \"documentConId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemDataSources,\n optionDisplayField: \"connectionName\",\n optionValueField: \"id\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_DATABASE_NAME\",\n fieldName: \"documentDatabaseName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_DATABASE_TABLE\",\n fieldName: \"documentDatabaseTable\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_ID_FIELD\",\n fieldName: \"documentIdField\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_STATUS_FIELD\",\n fieldName: \"documentStatusField\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_NUMBER_FIELD\",\n fieldName: \"documentNumberField\",\n required: true,\n fieldType: \"text\",\n },\n },\n ],\n },\n },\n ];\n\n return (\n <>\n <WorkflowStatusWindow>\n <WorkflowDocumentStatusGrid selectedRecord={selectedRecord} />\n </WorkflowStatusWindow>\n <WorkflowActionWindow>\n <WorkflowDocumentActionGrid selectedRecord={selectedRecord} />\n </WorkflowActionWindow>\n <TemplateGrid\n apiActions={apiActions}\n formLoadCallBk={(formActions, formManager, record) => {\n if (record.useSystemCon === true) {\n formActions.hideField(\"documentConId\");\n } else {\n formActions.showField(\"documentConId\");\n }\n }}\n data={data}\n setData={setData}\n rowActions={[\n {\n icon: \"tag\",\n label: \"Document States\",\n actionFn: async (data) => {\n setSelectedRecord(data);\n setWorkflowStatusWindowState(true);\n },\n },\n {\n icon: \"stamp\",\n label: \"Document Actions\",\n actionFn: async (data) => {\n setSelectedRecord(data);\n setWorkflowActionWindowState(true);\n },\n },\n ]}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalIcon: \"chart-diagram\",\n modalTitle: t(\"WORKFLOW_DOCUMENT_SINGULAR\"),\n },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"WORKFLOW_DOCUMENT_PLURAL\")}\n girdIcon=\"chart-diagram\"\n editAction={{ isEnabled: true, authority: \"WORKFLOW_DOCUMENT_EDIT\" }}\n deleteAction={{\n isEnabled: true,\n authority: \"WORKFLOW_DOCUMENT_DELETE\",\n }}\n />\n </>\n );\n};\n\nexport default WorkflowDocumentGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions, useWindow } from \"../../../hooks\";\nimport DashboardWidgetGrid from \"./DashboardWidgetGrid\";\nimport { useNavigate } from \"react-router-dom\";\n\nconst DashboardGrid: React.FC = () => {\n const { t } = useTranslation();\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\n const { Window: WidgetsWindows, setWindowState: setWidgetsWindowState } =\n useWindow({\n windowTitle: \"Dashboard Widgets\",\n windowIcon: \"chart-pie\",\n });\n const [data, setData] = useState([]);\n const navigate = useNavigate();\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/dashboard/all\",\n deleteById: \"api/v1/dev/dashboard\",\n save: \"api/v1/dev/dashboard\",\n findById: \"api/v1/dev/dashboard\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DASHBOARD_DASHBOARD_CODE\",\n fieldName: \"dashboardCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DASHBOARD_DASHBOARD_NAME\",\n fieldName: \"dashboardName\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DASHBOARD_DASHBOARD_TITLE\",\n fieldName: \"dashboardTitle\",\n required: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"DASHBOARD_ENABLED\",\n fieldName: \"enabled\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <>\n <WidgetsWindows>\n <DashboardWidgetGrid selectedRecord={selectedRecord} />\n </WidgetsWindows>\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n rowActions={[\n {\n label: \"Widgets\",\n icon: \"chart-pie\",\n actionFn: async (data) => {\n setSelectedRecord(data);\n setWidgetsWindowState(true);\n },\n },\n {\n label: \"View\",\n icon: \"eye\",\n actionFn: async (data) => {\n navigate(\"/dashboard/\" + data.dashboardCode);\n },\n },\n ]}\n gridTitle={t(\"DASHBOARD_PLURAL\")}\n girdIcon=\"square-poll-vertical\"\n editAction={{ isEnabled: true, authority: \"DASHBOARD_EDIT\" }}\n deleteAction={{ isEnabled: true, authority: \"DASHBOARD_DELETE\" }}\n />\n </>\n );\n};\n\nexport default DashboardGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\n\nconst WorkflowDocumentMailLogGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/workflowdocumentmaillog/all\",\n deleteById: \"api/v1/dev/workflowdocumentmaillog\",\n save: \"api/v1/dev/workflowdocumentmaillog\",\n findById: \"api/v1/dev/workflowdocumentmaillog\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_GRAPH_API_MSG_ID\",\n fieldName: \"graphApiMsgId\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_IS_PROCESSED\",\n fieldName: \"isProcessed\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_MAIL_ACTION_CODE\",\n fieldName: \"mailActionCode\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_MAIL_BODY_CONTENT\",\n fieldName: \"mailBodyContent\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_MAIL_FROM\",\n fieldName: \"mailFrom\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_MAIL_SUBJECT\",\n fieldName: \"mailSubject\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_PROCESS_MESSAGE\",\n fieldName: \"processMessage\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_PROCESS_TIME\",\n fieldName: \"processTime\",\n required: false,\n fieldType: \"datetime\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_REF_DOC_ID\",\n fieldName: \"refDocId\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_WORKFLOW_DOCUMENT_ID\",\n fieldName: \"workflowDocumentId\",\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_MAIL_RECEIVE_TIME\",\n fieldName: \"mailReceiveTime\",\n required: false,\n fieldType: \"datetime\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{ editMode: \"row\" }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"WORKFLOW_DOCUMENT_MAIL_LOG_PLURAL\")}\n girdIcon=\"table-cells\"\n editAction={{\n isEnabled: true,\n authority: \"WORKFLOW_DOCUMENT_MAIL_LOG_EDIT\",\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"WORKFLOW_DOCUMENT_MAIL_LOG_DELETE\",\n }}\n />\n );\n};\n\nexport default WorkflowDocumentMailLogGrid;\n","import { useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions, useAxios, useConfirmationWindow } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\n\nconst MailNotificationQueueGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const { handlePostRequest } = useAxios();\n\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/mailnotificationqueue/all\",\n deleteById: \"api/v1/dev/mailnotificationqueue\",\n save: \"api/v1/dev/mailnotificationqueue\",\n findById: \"api/v1/dev/mailnotificationqueue\",\n setData: setData,\n });\n const SystemMailTemplates = useSelector(\n (state: any) => state.commonStores.stores.SystemMailTemplates.data\n );\n\n const resendMail = async (id: any) => {\n await handlePostRequest({\n endPointURI: \"api/v1/public/mailNotification/resend\",\n showMask: true,\n parameters: {\n mailNotificationQueueId: id,\n },\n successCallBkFn: (response: any) => {\n apiActions.reloadData();\n },\n });\n };\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_MAIL_TEMPLATE_ID\",\n fieldName: \"mailTemplateId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemMailTemplates,\n optionDisplayField: \"mailTemplateName\",\n optionValueField: \"id\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_CUSTOM_MAIL_ATTACHED_REPORT_ID\",\n fieldName: \"customMailAttachedReportId\",\n required: false,\n hidden: true,\n gridProps: {\n hidden: true,\n },\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_CUSTOM_MAIL_BODY\",\n fieldName: \"customMailBody\",\n required: false,\n hidden: true,\n gridProps: {\n hidden: true,\n },\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_CUSTOM_MAIL_SUBJECT\",\n fieldName: \"customMailSubject\",\n required: false,\n hidden: true,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_CUSTOM_RECIPIENTS\",\n fieldName: \"customRecipients\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_IS_NOTIFIED\",\n fieldName: \"isNotified\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_NOTIFICATION_TIME\",\n fieldName: \"notificationTime\",\n required: false,\n fieldType: \"datetime\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_NOTIFICATION_MESSAGE\",\n fieldName: \"notificationMessage\",\n required: false,\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_MAIL_PARAMETERS\",\n fieldName: \"mailParameters\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n required: false,\n fieldType: \"text\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n disableDefaultAction={true}\n data={data}\n setData={setData}\n editMode={{ editMode: \"none\" }}\n formElements={formElements}\n rowActions={[\n {\n actionFn: async (data) => {\n resendMail(data.id);\n },\n label: \"Resend\",\n icon: \"repeat\",\n confirmationMessage: \"Are you sure you want to resend this email ?\",\n isConfirmationRequired: true,\n },\n ]}\n keyColumnName={\"id\"}\n gridTitle={t(\"MAIL_NOTIFICATION_QUEUE_PLURAL\")}\n girdIcon=\"table-cells\"\n editAction={{\n isEnabled: true,\n authority: \"MAIL_NOTIFICATION_QUEUE_EDIT\",\n }}\n deleteAction={{\n isEnabled: true,\n authority: \"MAIL_NOTIFICATION_QUEUE_DELETE\",\n }}\n />\n );\n};\n\nexport default MailNotificationQueueGrid;\n","import { useEffect, useState } from \"react\";\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\nimport { useTranslation } from \"react-i18next\";\nimport { useApiActions } from \"../../../hooks\";\nimport { useSelector } from \"react-redux\";\nimport { Box } from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport useInterval from \"../../../hooks/useInterval\";\n\nconst NotificationGrid: React.FC = () => {\n const { t } = useTranslation();\n const [data, setData] = useState([]);\n const SystemTimeIntervals = useSelector(\n (state: any) => state.commonStores.stores.SystemTimeIntervals.data\n );\n const SystemDataQueries = useSelector(\n (state: any) => state.commonStores.stores.SystemDataQueries.data\n );\n const apiActions = useApiActions({\n findAll: \"api/v1/dev/notification/all\",\n deleteById: \"api/v1/dev/notification\",\n save: \"api/v1/dev/notification\",\n findById: \"api/v1/dev/notification\",\n setData: setData,\n });\n\n const formElements: Array<FormElementProps> = [\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"id\",\n fieldName: \"id\",\n fieldType: \"number\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createTime\",\n fieldName: \"createTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"createdBy\",\n fieldName: \"createdBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateBy\",\n fieldName: \"lastUpdateBy\",\n fieldType: \"text\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"lastUpdateTime\",\n fieldName: \"lastUpdateTime\",\n fieldType: \"datetime\",\n hidden: true,\n gridProps: {\n hidden: true,\n },\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"NOTIFICATION_NOTIFICATION_CODE\",\n fieldName: \"notificationCode\",\n required: true,\n fieldType: \"text\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Notification Data Query ( will be passed a parameter call last_run_time represents last check time)\",\n fieldName: \"notificationQueryId\",\n required: true,\n fieldType: \"combobox\",\n options: SystemDataQueries,\n optionDisplayField: \"queryName\",\n gridProps: {\n hidden: true,\n },\n optionValueField: \"id\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"Users to notify Query (must have username property in the result set)\",\n fieldName: \"usersToNotifyQueryId\",\n required: false,\n fieldType: \"combobox\",\n options: SystemDataQueries,\n optionDisplayField: \"queryName\",\n gridProps: {\n hidden: true,\n },\n optionValueField: \"id\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"NOTIFICATION_AUTHORITY_TO_NOTIFY\",\n fieldName: \"authorityToNotify\",\n required: false,\n gridProps: {\n hidden: true,\n },\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Interval Type\",\n fieldName: \"intervalType\",\n fieldType: \"combobox\",\n options: SystemTimeIntervals,\n gridProps: {\n hidden: true,\n },\n optionDisplayField: \"value\",\n optionValueField: \"value\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Interval Value (minmum value 20 seconds)\",\n fieldName: \"intervalValue\",\n gridProps: {\n hidden: true,\n },\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Start Notifing Date\",\n fieldName: \"startNotificationFrom\",\n gridProps: {\n hidden: true,\n },\n fieldType: \"datetime\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"NOTIFICATION_SYSTEM_APPLICATION_ID\",\n fieldName: \"systemApplicationId\",\n hidden: true,\n gridProps: { hidden: true },\n required: false,\n fieldType: \"number\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"NOTIFICATION_NOTIFICATION_ICON\",\n fieldName: \"notificationIcon\",\n required: true,\n fieldType: \"text\",\n gridProps: {\n muiProps: {\n renderCell: (params: any) => {\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n color: params?.row?.notificationIconColor,\n justifyContent: \"center\",\n height: \"100%\",\n }}\n >\n {params?.row?.notificationIcon ? (\n <FontAwesomeIcon icon={params.row.notificationIcon} />\n ) : (\n <></>\n )}\n </Box>\n );\n },\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"NOTIFICATION_NOTIFICATION_AR_TEXT\",\n fieldName: \"notificationArText\",\n required: true,\n fieldType: \"text\",\n gridProps: {\n muiProps: {\n renderCell: (params: any) => {\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n color: params?.row?.notificationTextColor,\n justifyContent: \"center\",\n height: \"100%\",\n }}\n >\n {params?.row?.notificationArText}\n </Box>\n );\n },\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"NOTIFICATION_NOTIFICATION_EN_TEXT\",\n fieldName: \"notificationEnText\",\n required: true,\n fieldType: \"text\",\n gridProps: {\n muiProps: {\n renderCell: (params: any) => {\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n color: params?.row?.notificationTextColor,\n justifyContent: \"center\",\n height: \"100%\",\n }}\n >\n {params?.row?.notificationEnText}\n </Box>\n );\n },\n },\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Last Runtime\",\n disabled: true,\n fieldName: \"lastIntervalRun\",\n fieldType: \"datetime\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Last Successful Runtime\",\n fieldName: \"lastSuccessfulRun\",\n disabled: true,\n fieldType: \"datetime\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"Last Run Message\",\n fieldName: \"lastRunMessage\",\n disabled: true,\n fieldType: \"text\",\n },\n }, \n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"NOTIFICATION_NOTIFICATION_TEXT_COLOR\",\n fieldName: \"notificationTextColor\",\n required: false,\n gridProps: {\n hidden: true,\n },\n fieldType: \"text\",\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"NOTIFICATION_NOTIFICATION_ICON_COLOR\",\n fieldName: \"notificationIconColor\",\n required: false,\n gridProps: {\n hidden: true,\n },\n fieldType: \"text\",\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"NOTIFICATION_NOTIFICATION_ACTION\",\n fieldName: \"notificationAction\",\n required: false,\n fieldType: \"combobox\",\n options: [{ value: \"NAVIGATION\" }],\n optionDisplayField: \"value\",\n optionValueField: \"value\",\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"Action Payload (must be a rout in case of NAVIGATION with parameter values betweem @@)\",\n fieldName: \"notificationActionPayload\",\n required: false,\n fieldType: \"text\",\n gridProps: {\n hidden: true,\n },\n },\n },\n\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel:\n \"Organization Id Field on the Notification Query result set if it supports it\",\n fieldName: \"organizationIdField\",\n required: false,\n fieldType: \"text\",\n gridProps: {\n hidden: true,\n },\n },\n },\n {\n type: \"field\",\n mode: \"props\",\n props: {\n fieldLabel: \"NOTIFICATION_IS_ACTIVE\",\n fieldName: \"isActive\",\n required: false,\n fieldType: \"checkbox\",\n },\n },\n ];\n\n return (\n <TemplateGrid\n apiActions={apiActions}\n data={data}\n setData={setData}\n editMode={{\n editMode: \"modal\",\n specs: {\n modalIcon: \"bell\",\n modalTitle: \"System Notification\",\n modalWidth: \"300\",\n },\n }}\n formElements={formElements}\n keyColumnName={\"id\"}\n gridTitle={t(\"NOTIFICATION_PLURAL\")}\n girdIcon=\"bell\"\n editAction={{ isEnabled: true, authority: \"NOTIFICATION_EDIT\" }}\n deleteAction={{ isEnabled: true, authority: \"NOTIFICATION_DELETE\" }}\n />\n );\n};\n\nexport default NotificationGrid;\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Box, Button } from \"@mui/material\";\nimport { useSelector } from \"react-redux\";\nimport { useAxios, useSession } from \"../../hooks\";\nimport { useState } from \"react\";\nimport useInterval from \"../../hooks/useInterval\";\nimport { notificationsCheckIntervalSeconds } from \"../../layout/NotificationButton\";\nimport NotificationItem from \"./NotificationItem\";\n\nconst MyNotificationsPanel: React.FC = () => {\n const { UserInfo } = useSession();\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const { handleGetRequest, handlePostRequest } = useAxios();\n const [notifications, setNotifications] = useState<Array<Notification>>([]);\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\n const acknowledgeAllCurrentNotifications = async () => {\n await handlePostRequest({\n endPointURI: \"api/v1/public/notification/all/notified\",\n showMask: true,\n });\n };\n\n const archiveAllCurrentNotifications = async () => {\n await handlePostRequest({\n endPointURI: \"api/v1/public/notification/all/archive\",\n showMask: true,\n });\n };\n\n const loadUserNotifications = () => {\n if (UserInfo.isAuthenticated === true) {\n handleGetRequest({\n endPointURI: \"api/v1/public/notifications\",\n showMask: false,\n successCallBkFn: (response: any) => {\n setNotifications(response.data);\n },\n });\n }\n };\n if (AppInfo?.enableUINotifications === true) {\n useInterval(\n loadUserNotifications,\n notificationsCheckIntervalSeconds * 1000\n );\n }\n\n return (\n <>\n <Box\n sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\n >\n <Box sx={{ flex: 1 }}></Box>\n <h3>\n <FontAwesomeIcon\n icon=\"bell\"\n style={{ marginRight: 10, marginLeft: 10 }}\n />\n {AppLayout.appDirection === \"ltr\" ? \"Notifications\" : \"الاشعارات\"}\n </h3>\n <Box sx={{ flex: 1 }}></Box>\n <Button\n sx={{ textTransform: \"none\" }}\n onClick={acknowledgeAllCurrentNotifications}\n >\n Mark All Read\n </Button>\n <Button\n color=\"error\"\n sx={{ textTransform: \"none\" }}\n onClick={archiveAllCurrentNotifications}\n >\n Delete All\n </Button>\n </Box>\n <Box\n sx={{\n flex: 1,\n width: \"100%\",\n display: \"flex\",\n overflowY: \"auto\",\n }}\n >\n <Box\n sx={{\n flexGrow: 1,\n width: \"fit-content\",\n display: \"flex\",\n flexDirection: \"column\",\n overflowY: \"auto\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n }}\n >\n {notifications.map((notification: Notification, index) => {\n return (\n <NotificationItem\n {...notification}\n showDivider={index < notifications.length - 1}\n />\n );\n })}\n </Box>\n </Box>\n </>\n );\n};\n\nexport default MyNotificationsPanel;\n","import { Box } from \"@mui/material\";\nimport { useSession } from \"../hooks\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\ntype RouteWrapperProps = {\n authority?: string;\n applicationModule?: string;\n children?: React.ReactNode;\n};\nconst RouteWrapper: React.FC<RouteWrapperProps> = (props) => {\n const { isUserAuthorized, isCurrentOrganizationAuthorizedToModule } =\n useSession();\n if (\n props?.applicationModule &&\n !isCurrentOrganizationAuthorizedToModule(props?.applicationModule)\n ) {\n return (\n <Box\n sx={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"red\",\n }}\n >\n <h2>\n <FontAwesomeIcon\n style={{ marginRight: 10, marginLeft: 10 }}\n icon=\"cancel\"\n />\n Your organization didn't subscribe for this system module\n </h2>\n </Box>\n );\n }\n if (props?.authority && !isUserAuthorized(props.authority)) {\n return (\n <Box\n sx={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"red\",\n }}\n >\n <h2>\n <FontAwesomeIcon\n style={{ marginRight: 10, marginLeft: 10 }}\n icon=\"cancel\"\n />\n You aren't authorized to access this page\n </h2>\n </Box>\n );\n }\n return <>{props.children}</>;\n};\n\nexport default RouteWrapper;\n","import { Box } from \"@mui/material\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { CacheProvider } from \"@emotion/react\";\nimport { Route, Routes } from \"react-router-dom\";\nimport { cacheLtr, cacheRtl } from \"../components/common/LayoutHandlers\";\nimport { SYSTEM_ROUTES } from \"../routes\";\nimport { SystemRoute } from \"../routes/types\";\nimport RouteWrapper from \"./RouteWrapper\";\nimport { useAxios, useLoadingMask, useSession } from \"../hooks\";\nimport { useEffect, useState } from \"react\";\nimport { setStoreData } from \"../redux/features/common/CommonStoreSlice\";\n\nconst MainContent: React.FC = () => {\n const AppLayoutState = useSelector((state: any) => state.AppLayout);\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\n const businessRoutes = useSelector(\n (state: any) => state.AppInfo.value.businessRoutes\n );\n const { UserInfo } = useSession();\n const dispatch = useDispatch();\n const { show, hide } = useLoadingMask();\n const commonStores = useSelector((state: any) => state.commonStores);\n const [isAutoLoadLoaded, setAutoLoadLoaded] = useState<boolean>(false);\n const { isUserAuthorized } = useSession();\n const { handleGetRequest } = useAxios();\n const loadCommonStores = async () => {\n show(\"Loading ... please wait\");\n setAutoLoadLoaded(false);\n const stores = commonStores.stores;\n const storeKeys = commonStores.storeKeys;\n for (let storeKey of storeKeys) {\n if (\n (stores[storeKey]?.authority === undefined ||\n stores[storeKey]?.authority === null ||\n isUserAuthorized(stores[storeKey]?.authority)) &&\n stores[storeKey]?.url != \"\" &&\n stores[storeKey].autoLoad === true\n ) {\n await handleGetRequest({\n endPointURI: stores[storeKey].url,\n showMask: false,\n successCallBkFn: (response) => {\n dispatch(setStoreData({ storeKey, data: response.data }));\n },\n failureCallBkFn: () => {\n dispatch(setStoreData({ storeKey, data: [] }));\n },\n });\n }\n }\n setAutoLoadLoaded(true);\n hide();\n };\n\n useEffect(() => {\n if (commonStores?.storeKeys) {\n loadCommonStores();\n }\n }, [commonStores.storeKeys, UserInfo?.currentOrganization]);\n return (\n <CacheProvider\n value={AppLayoutState.appDirection === \"ltr\" ? cacheLtr : cacheRtl}\n >\n {isAutoLoadLoaded ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n // alignItems: \"center\",\n justifyContent: \"flex-start\",\n flex: 1,\n overflow: \"hidden\",\n padding: 3,\n }}\n >\n <Routes>\n {AppInfo.enableAdministrationModule\n ? SYSTEM_ROUTES.map((route: SystemRoute, index) => {\n return (\n <Route\n key={\"adm\" + index}\n path={route.path}\n element={\n <RouteWrapper\n authority={route.authority}\n applicationModule={route.applicationModule}\n >\n <route.component />\n </RouteWrapper>\n }\n />\n );\n })\n : null}\n {businessRoutes.map((route: SystemRoute, index) => {\n return (\n <Route\n key={\"bs\" + index}\n path={route.path}\n element={\n <RouteWrapper authority={route.authority}>\n <route.component />\n </RouteWrapper>\n }\n />\n );\n })}\n </Routes>\n </Box>\n ) : (\n <></>\n )}\n </CacheProvider>\n );\n};\n\nexport default MainContent;\n","import { styled } from \"@mui/material/styles\";\nimport { grey } from \"@mui/material/colors\";\nimport SwipeableDrawer from \"@mui/material/SwipeableDrawer\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Box, Typography } from \"@mui/material\";\nimport { AppLayoutActions } from \"../redux/features/common/AppLayoutSlice\";\nimport NavigationTree from \"./NavigationTree\";\nimport { setSideBarState } from \"../redux/features/common/SideBarSlice\";\n\nconst drawerBleeding = 56;\n\ninterface Props {\n /**\n * Injected by the documentation to work in an iframe.\n * You won't need it on your project.\n */\n window?: () => Window;\n}\n\nconst Puller = styled(\"div\")(({ theme }) => ({\n width: 30,\n height: 6,\n margin: 10,\n backgroundColor: grey[300],\n borderRadius: 3,\n // position: \"absolute\",\n top: 8,\n // left: \"calc(50% - 15px)\",\n ...theme.applyStyles(\"dark\", {\n backgroundColor: grey[900],\n }),\n}));\n\nexport default function MobileDrawer(props: Props) {\n const { window } = props;\n const SideBarState = useSelector((state: any) => state.SideBar);\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\n const dispatch = useDispatch();\n const toggleDrawer = (newState: boolean) => {\n dispatch(setSideBarState(newState));\n };\n // This is used only for the example\n const container =\n window !== undefined ? () => window().document.body : undefined;\n\n return (\n <SwipeableDrawer\n container={container}\n anchor=\"bottom\"\n open={SideBarState.isOpened}\n onClose={() => {\n toggleDrawer(false);\n }}\n onOpen={() => {\n toggleDrawer(true);\n }}\n swipeAreaWidth={drawerBleeding}\n disableSwipeToOpen={false}\n ModalProps={{\n keepMounted: true,\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n height: \"100%\",\n overflow: \"hidden\",\n }}\n >\n <Puller />\n <Box\n sx={{\n flexGrow: 1,\n display: \"flex\",\n justifyContent: \"center\",\n width: \"99%\",\n overflowY: \"auto\",\n }}\n >\n <NavigationTree />\n </Box>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-around\",\n marginTop: 1,\n width: \"100%\",\n }}\n >\n <Typography sx={{ fontSize: 12 }} color=\"textDisabled\">\n {AppInfo.appName}\n </Typography>\n <Typography sx={{ fontSize: 12 }} color=\"textDisabled\">\n V.{AppInfo.appVersion}\n </Typography>\n </Box>\n </Box>\n </SwipeableDrawer>\n );\n}\n","import { useSelector } from \"react-redux\";\nimport { Backdrop, CircularProgress } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\n\nconst LoadingMask: React.FC = () => {\n const { t } = useTranslation();\n const loadingMask = useSelector((state: any) => state.loadingMask.value);\n const AppLayoutState = useSelector((state: any) => state.AppLayout);\n\n return (\n <Backdrop\n dir={AppLayoutState.appDirection}\n sx={{ color: \"#fff\", zIndex: (theme) => theme.zIndex.drawer + 1 }}\n open={loadingMask.isOpened}\n >\n <CircularProgress color=\"inherit\" />\n <div style={{ marginRight: 10, marginLeft: 10 }}>\n {loadingMask?.message || t(\"DEFAULT_LOADING_MESSAGE\")}\n </div>\n </Backdrop>\n );\n};\n\nexport default LoadingMask;\n","import {\n Box,\n Button,\n CircularProgress,\n createTheme,\n Paper,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { ThemeProvider } from \"@emotion/react\";\nimport { useEffect, useState } from \"react\";\nimport axios from \"axios\";\nimport { toast } from \"react-toastify\";\nimport { UserSessionActions } from \"../../redux/features/common/UserSessionSlice\";\nimport {\n DARK_THEME_INITIAL_MAIN_COLOR,\n DARK_THEME_INITIAL_SECANDARY_COLOR,\n} from \"../../util\";\n\nconst Login: React.FC = () => {\n const appInfo = useSelector((state: any) => state.AppInfo.value);\n const [username, setUsername] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [isLoginInProcess, setIsLoginInProcess] = useState(false);\n const UserSessionState = useSelector((state: any) => state.UserSession.value);\n const dispatch = useDispatch();\n const handleLogin = async () => {\n if (username == null || username == \"\") {\n toast.error(\"username is required to proceed\");\n return;\n }\n if (password == null || password == \"\") {\n toast.error(\"password is required to proceed\");\n return;\n }\n setIsLoginInProcess(true);\n let response: any = null;\n try {\n response = await axios.post(\n `${appInfo.apiBaseUrl}/api/auth/login`,\n {\n username,\n password,\n },\n {\n withCredentials: true,\n }\n );\n if (response.data != null && response.data !== \"\") {\n setIsLoginInProcess(false);\n const UserSession = {\n ...response.data,\n isAuthenticated: true,\n };\n dispatch(UserSessionActions.setAuthenticated(UserSession));\n }\n } catch (e: any) {\n setIsLoginInProcess(false);\n toast.error(\n e?.response?.data ||\n \"failed to authenticate, contact your administrator\"\n );\n }\n };\n const userSession = useSelector((state: any) => state.UserSession.value);\n const loginTheme = createTheme({\n components: {\n MuiCssBaseline: {\n styleOverrides: `\n /* Custom Scrollbar */\n * {\n scrollbar-width: thin;\n scrollbar-color: ${\n appInfo.appTheme?.dark?.primaryColor ||\n DARK_THEME_INITIAL_MAIN_COLOR\n } #121212;\n }\n \n /* Webkit Browsers */\n *::-webkit-scrollbar {\n width: 12px;\n height: 10px;\n } \n `,\n },\n },\n palette: {\n mode: \"dark\",\n primary: {\n main:\n appInfo.appTheme?.dark?.primaryColor || DARK_THEME_INITIAL_MAIN_COLOR,\n },\n secondary: {\n main:\n appInfo.appTheme?.dark?.secondaryColor ||\n DARK_THEME_INITIAL_SECANDARY_COLOR,\n },\n },\n });\n const checkUserSession = async () => {\n if (appInfo?.apiBaseUrl) {\n if (userSession.isAuthenticated == null) {\n try {\n let response = await axios.get(\n `${appInfo.apiBaseUrl}/api/auth/userInfo`,\n {\n withCredentials: true,\n }\n );\n if (response != null && response.data != null) {\n const UserSession = {\n ...response.data,\n isAuthenticated: true,\n };\n dispatch(UserSessionActions.setAuthenticated(UserSession));\n } else {\n dispatch(UserSessionActions.setUnAuthenticated());\n }\n } catch (error) {\n dispatch(UserSessionActions.setUnAuthenticated());\n }\n }\n }\n };\n useEffect(() => {\n checkUserSession();\n }, [appInfo]);\n return (\n <ThemeProvider theme={loginTheme}>\n <Paper\n sx={{\n display: \"flex\",\n height: \"100vh\",\n width: \"100%\",\n borderRadius: 0,\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {UserSessionState.isAuthenticated == false ? (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <img src={appInfo?.appLogo} width={150} height={150} />\n <Typography sx={{ m: 1 }} variant=\"h4\" color=\"textSecondary\">\n {appInfo?.appName}\n </Typography>\n <Typography\n sx={{\n paddingRight: 1,\n width: \"100%\",\n textAlign: \"right\",\n fontSize: 10,\n }}\n variant=\"caption\"\n color=\"textSecondary\"\n >\n V.{appInfo.appVersion}\n </Typography>\n <TextField\n label=\"username\"\n sx={{ width: 300, m: 1 }}\n value={username}\n onChange={(event) => {\n setUsername(event.target.value);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n handleLogin();\n }\n }}\n />\n <TextField\n label=\"password\"\n sx={{ width: 300, m: 1 }}\n value={password}\n type=\"password\"\n onChange={(event) => {\n setPassword(event.target.value);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n handleLogin();\n }\n }}\n />\n <Button\n loading={isLoginInProcess}\n onClick={handleLogin}\n variant=\"contained\"\n color=\"primary\"\n sx={{ m: 1 }}\n >\n login\n </Button>\n </Box>\n ) : (\n <>\n <CircularProgress sx={{ marginRight: 1 }} />\n <div>You will be redirected shortly ... please wait</div>\n </>\n )}\n </Paper>\n </ThemeProvider>\n );\n};\n\nexport default Login;\n","import { styled, useTheme } from \"@mui/material/styles\";\nimport CssBaseline from \"@mui/material/CssBaseline\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport TopBar from \"./TopBar\";\nimport { DrawerHeader } from \"./DrawerHeader\";\nimport SideBar from \"./SideBar\";\nimport MainContent from \"./MainContent\";\nimport { BrowserRouter } from \"react-router-dom\";\nimport MobileDrawer from \"./MobileDrawer\";\nimport { ToastContainer } from \"react-toastify\";\nimport { useEffect, useState } from \"react\";\nimport useLoadingMask from \"../hooks/useLoadingMask\";\nimport { useIsMobile } from \"../hooks/UseMobile\";\nimport useSession from \"../hooks/UseSession\";\nimport useAxios from \"../hooks/useAxios\";\nimport { DRAWER_WIDTH } from \"../redux/features/common/AppLayoutSlice\";\nimport { UserSessionProps } from \"../redux/features/common/UserSessionSlice\";\nimport LoadingMask from \"../components/common/LoadingMask\";\nimport Login from \"../components/common/Login\";\nimport { setStoreData } from \"../redux/features/common/CommonStoreSlice\";\n\nconst Main = styled(\"main\", {\n shouldForwardProp: (prop) => prop !== \"open\",\n})<{\n open?: boolean;\n}>(({ theme: any, open }) => {\n const AppLayout = useSelector((state: any) => state.AppLayout);\n const theme = useTheme();\n const isMobile = useIsMobile();\n\n return {\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n flexGrow: 1,\n width: !isMobile && open ? `calc(100% - ${DRAWER_WIDTH}px)` : \"100%\",\n direction: AppLayout.appDirection,\n justifyContent: \"flex-start\",\n transition:\n open === true\n ? theme.transitions.create([\"margin\", \"width\"], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n })\n : theme.transitions.create([\"margin\", \"width\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n marginLeft:\n !isMobile && AppLayout.appDirection === \"ltr\" && open === true\n ? DRAWER_WIDTH + \"px\"\n : 0,\n marginRight:\n !isMobile && AppLayout.appDirection === \"rtl\" && open === true\n ? DRAWER_WIDTH + \"px\"\n : 0,\n };\n});\n\nexport default function Layout() {\n const SideBarState = useSelector((state: any) => state.SideBar);\n const isMobile = useIsMobile();\n const UserSession: UserSessionProps = useSelector(\n (state: any) => state.UserSession\n );\n const AppLayout = useSelector((state: any) => state.AppLayout);\n\n return (\n <BrowserRouter>\n <ToastContainer\n rtl={AppLayout.appDirection === \"rtl\"}\n draggable={true}\n position=\"bottom-center\"\n />\n <LoadingMask />\n {UserSession.value.isAuthenticated === true ? (\n <Main open={SideBarState.isOpened}>\n <CssBaseline />\n <TopBar />\n {!isMobile ? <SideBar /> : null}\n {isMobile ? <MobileDrawer /> : null}\n <DrawerHeader />\n <MainContent />\n </Main>\n ) : (\n <Login />\n )}\n </BrowserRouter>\n );\n}\n","import { createSlice, Reducer } from \"@reduxjs/toolkit\";\nimport { SystemRoute } from \"../../../routes/types\";\nimport { ExtendedTreeItemProps } from \"../../../navigationItems\";\nimport { StoreMetaData } from \"./CommonStoreSlice\";\n\nexport type AppInfo = {\n documentTitle: string | null;\n apiBaseUrl: string | null;\n appName: string | null;\n appVersion: string | null;\n appLogo: any | null;\n businessLocals?: {\n ar: { [key: string]: string };\n en: { [key: string]: string };\n };\n businessRoutes?: Array<SystemRoute>;\n businessNavigationItems?: Array<ExtendedTreeItemProps>;\n businessReduxReducers?: { [key: string]: Reducer<any> };\n businessCommonStoresMetaData?: { [key: string]: StoreMetaData };\n muiPremiumKey: string;\n enableAdministrationModule: boolean;\n enableUINotifications: Boolean;\n appTheme?: {\n light: { primaryColor: string; secondaryColor: string };\n dark: { primaryColor: string; secondaryColor: string };\n };\n};\n\nexport type AppInfoProp = {\n value: AppInfo;\n};\n\nconst initialState: AppInfoProp = {\n value: {\n documentTitle: null,\n apiBaseUrl: null,\n appName: null,\n appVersion: null,\n appLogo: null,\n muiPremiumKey: null,\n enableAdministrationModule: false,\n enableUINotifications: false,\n businessRoutes: [],\n businessNavigationItems: [],\n businessReduxReducers: {},\n businessCommonStoresMetaData: {},\n appTheme: {\n light: { primaryColor: \"#37505C\", secondaryColor: \"#ff6d00\" },\n dark: { primaryColor: \"#ea690e\", secondaryColor: \"#74776B\" },\n },\n },\n};\n\nconst AppInfoSlice = createSlice({\n name: \"AppInfo\",\n initialState: initialState,\n reducers: {\n setAppInfo: (state, action) => {\n state.value = action.payload;\n },\n },\n});\n\nexport const AppInfoActions = AppInfoSlice.actions;\nexport default AppInfoSlice.reducer;\n","import { CommonStores } from \"../common/CommonStoreSlice\";\n\nexport const ADMINISTRATION_STORES: CommonStores = {\n SystemDataSourceType: {\n autoLoad: false,\n data: [{ value: \"Mysql\" }, { value: \"Oracle\" }, { value: \"DB2\" }],\n url: \"\",\n },\n SystemParameterTypes: {\n autoLoad: false,\n url: \"\",\n data: [\n { value: \"text\" },\n { value: \"number\" },\n { value: \"date\" },\n { value: \"datetime\" },\n { value: \"combobox\" },\n { value: \"checkbox\" },\n { value: \"html\" },\n { value: \"lookup\" },\n ],\n },\n SystemReportTypes: {\n autoLoad: false,\n url: \"\",\n data: [{ value: \"Excel\" }, { value: \"Jasper\" }, { value: \"Blueprint\" }],\n },\n SystemWidgetTypes: {\n autoLoad: false,\n url: \"\",\n data: [\n { name: \"LineChart\" },\n { name: \"ColumnChart\" },\n { name: \"PieChart\" },\n { name: \"Card\" },\n { name: \"CircularProgress\" },\n { name: \"LinearProgress\" },\n ],\n },\n SystemTimeIntervals: {\n autoLoad: false,\n url: \"\",\n data: [\n { value: \"second\" },\n { value: \"minute\" },\n { value: \"hour\" },\n { value: \"day\" },\n { value: \"week\" },\n { value: \"month\" },\n { value: \"year\" },\n ],\n },\n SystemMailRecipientTypes: {\n autoLoad: false,\n url: \"\",\n data: [{ name: \"To\" }, { name: \"CC\" }],\n },\n SystemOrganizations: {\n autoLoad: true,\n url: \"api/v1/public/organization/all\",\n data: [],\n },\n SystemOrganizationRanks: {\n autoLoad: true,\n url: \"api/v1/public/organization/ranks/all\",\n data: [],\n },\n CurrentOrganizationRanks: {\n autoLoad: true,\n url: \"api/v1/public/organizationrank/all\",\n data: [],\n },\n SystemOrganizationUnits: {\n autoLoad: true,\n url: \"api/v1/public/organization/units/all\",\n data: [],\n },\n CurrentOrganizationUnits: {\n autoLoad: true,\n url: \"api/v1/public/organizationunit/all\",\n data: [],\n },\n SystemOrganizationUnitType: {\n autoLoad: true,\n url: \"api/v1/public/organizationunittype/all\",\n data: [],\n },\n SystemDataSources: {\n autoLoad: true,\n data: [],\n authority: \"DEVELOPMENT_ADMIN\",\n url: \"api/v1/dev/datasourceconnection/all\",\n },\n SystemDataQueries: {\n autoLoad: true,\n data: [],\n authority: \"DEVELOPMENT_ADMIN\",\n url: \"api/v1/dev/dataquery/all\",\n },\n SystemBluePrints: {\n autoLoad: true,\n data: [],\n authority: \"DEVELOPMENT_ADMIN\",\n url: \"api/v1/dev/blueprint/all\",\n },\n SystemReports: {\n autoLoad: true,\n data: [],\n authority: \"DEVELOPMENT_ADMIN\",\n url: \"api/v1/dev/report/all\",\n },\n SystemEntityParameters: {\n autoLoad: true,\n data: [],\n authority: \"DEVELOPMENT_ADMIN\",\n url: \"api/v1/dev/entityparameter/all\",\n },\n SystemMailTemplates: {\n autoLoad: true,\n data: [],\n authority: \"DEVELOPMENT_ADMIN\",\n url: \"api/v1/dev/mailtemplate/all\",\n },\n SystemWidgets: {\n autoLoad: true,\n data: [],\n authority: \"DEVELOPMENT_ADMIN\",\n url: \"api/v1/dev/widget/all\",\n },\n SystemApplicationModules: {\n autoLoad: true,\n data: [],\n authority: \"DEVELOPMENT_ADMIN\",\n url: \"api/v1/admin/systemapplicationmodule/application/all\",\n },\n SystemApplicationAuthorities: {\n autoLoad: true,\n data: [],\n authority: \"DEVELOPMENT_ADMIN\",\n url: \"api/v1/admin/systemapplicationauthority/all\",\n },\n SystemApplicationRoles: {\n autoLoad: true,\n data: [],\n authority: \"DEVELOPMENT_ADMIN\",\n url: \"api/v1/admin/systemapplicationrole/all\",\n },\n};\n","import { useDispatch, useSelector } from \"react-redux\";\nimport { createTheme, ThemeOptions } from \"@mui/material\";\nimport { ThemeProvider } from \"@emotion/react\";\nimport React, { useEffect } from \"react\";\nimport Layout from \"../layout/Layout\";\nimport { AppInfo, AppInfoActions } from \"../redux/features/common/AppInfoSlice\";\nimport { LicenseInfo } from \"@mui/x-license\";\nimport {\n DARK_THEME_INITIAL_MAIN_COLOR,\n DARK_THEME_INITIAL_SECANDARY_COLOR,\n LIGHT_THEME_INITIAL_MAIN_COLOR,\n LIGHT_THEME_INITIAL_SECANDARY_COLOR,\n} from \"../util\";\nimport { setStoresMetaData } from \"../redux/features/common/CommonStoreSlice\";\nimport { ADMINISTRATION_STORES } from \"../redux/features/administration/AdministrationStoresMetaData\";\n\nconst App: React.FC<AppInfo> = (props: AppInfo) => {\n const dispatch = useDispatch();\n LicenseInfo.setLicenseKey(props.muiPremiumKey);\n const LightThemeOptions: ThemeOptions = {\n components: {\n MuiCssBaseline: {\n styleOverrides: `\n /* Custom Scrollbar */\n * {\n scrollbar-width: thin;\n scrollbar-color: ${\n props.appTheme?.light?.primaryColor ||\n LIGHT_THEME_INITIAL_MAIN_COLOR\n } #ffffff;\n }\n \n /* Webkit Browsers */\n *::-webkit-scrollbar {\n width: 12px;\n height: 10px;\n } \n `,\n },\n },\n palette: {\n mode: \"light\",\n primary: {\n main:\n props.appTheme?.light?.primaryColor || LIGHT_THEME_INITIAL_MAIN_COLOR,\n },\n secondary: {\n main:\n props.appTheme?.light?.secondaryColor ||\n LIGHT_THEME_INITIAL_SECANDARY_COLOR,\n },\n background: {\n default: \"#f5f5f5\",\n paper: \"#f5f5f5\",\n },\n },\n };\n const DarkThemeOptions: ThemeOptions = {\n components: {\n MuiCssBaseline: {\n styleOverrides: `\n /* Custom Scrollbar */\n * {\n scrollbar-width: thin;\n scrollbar-color: ${\n props.appTheme?.dark?.primaryColor || DARK_THEME_INITIAL_MAIN_COLOR\n } #121212;\n }\n \n /* Webkit Browsers */\n *::-webkit-scrollbar {\n width: 12px;\n height: 10px;\n } \n `,\n },\n },\n palette: {\n mode: \"dark\",\n primary: {\n main:\n props.appTheme?.dark?.primaryColor || DARK_THEME_INITIAL_MAIN_COLOR,\n },\n secondary: {\n main:\n props.appTheme?.dark?.secondaryColor ||\n DARK_THEME_INITIAL_SECANDARY_COLOR,\n },\n },\n };\n\n let commonStores = {};\n if (props.enableAdministrationModule) {\n commonStores = { ...ADMINISTRATION_STORES };\n }\n if (props.businessCommonStoresMetaData) {\n commonStores = {\n ...commonStores,\n ...props.businessCommonStoresMetaData,\n };\n }\n dispatch(setStoresMetaData(commonStores));\n const AppLayoutState = useSelector((state: any) => state.AppLayout);\n let themeOptions = { ...LightThemeOptions };\n if (AppLayoutState.themeMode === \"dark\") {\n themeOptions = { ...DarkThemeOptions };\n }\n const theme = createTheme({\n direction: AppLayoutState.appDirection,\n ...themeOptions,\n });\n useEffect(() => {\n document.title = props.documentTitle;\n dispatch(AppInfoActions.setAppInfo(props));\n }, []);\n return (\n <ThemeProvider theme={theme}>\n <Layout />\n </ThemeProvider>\n );\n};\n\nexport default App;\n","import common from \"./common.json\";\nimport AdminLocalsEn from \"./adminLocalsEn.json\";\nimport devLocalsEn from \"./devLocalsEn.json\";\n\nexport const ENGLISH_TRANS = {\n ...common,\n ...AdminLocalsEn,\n ...devLocalsEn,\n};\n","import common from \"./common.json\";\nimport adminLocalsAr from \"./adminLocalsAr.json\";\nimport devLocalAr from \"./devLocalsAr.json\";\n\nexport const ARABIC_TRANS = {\n ...common,\n ...adminLocalsAr,\n ...devLocalAr,\n};\n","import { Provider } from \"react-redux\";\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\nimport \"../styles/index.css\";\nimport \"react-toastify/dist/ReactToastify.css\";\nimport App from \"./App\";\nimport { AppInfo } from \"../redux/features/common/AppInfoSlice\";\nimport AppLayoutReducer from \"../redux/features/common/AppLayoutSlice\";\nimport UserSessionReducer from \"../redux/features/common/UserSessionSlice\";\nimport LoadingMaskReducer from \"../redux/features/common/LoadingMaskSlice\";\nimport CommonStoreReducer from \"../redux/features/common/CommonStoreSlice\";\nimport AppInfoReducer from \"../redux/features/common/AppInfoSlice\";\nimport SideBarReducer from \"../redux/features/common/SideBarSlice\";\nimport { configureStore } from \"@reduxjs/toolkit\";\nimport i18n from \"../locales/i18n\";\nimport { initReactI18next } from \"react-i18next\";\nimport { ENGLISH_TRANS } from \"../locales/english\";\nimport { ARABIC_TRANS } from \"../locales/arabic\";\n\nlibrary.add(fab);\nlibrary.add(far);\nlibrary.add(fas);\n\nexport const BaseApp: React.FC<AppInfo> = (props) => {\n const systemReducers = {\n AppLayout: AppLayoutReducer,\n UserSession: UserSessionReducer,\n loadingMask: LoadingMaskReducer,\n commonStores: CommonStoreReducer,\n SideBar: SideBarReducer,\n AppInfo: AppInfoReducer,\n ...props?.businessReduxReducers,\n };\n const store = configureStore({\n reducer: systemReducers,\n });\n const resources = {\n en: { translation: { ...ENGLISH_TRANS, ...props?.businessLocals?.en } },\n ar: { translation: { ...ARABIC_TRANS, ...props?.businessLocals?.ar } },\n };\n i18n.use(initReactI18next).init({\n resources: resources, // Where we're gonna put translations' files\n lng: localStorage.getItem(\"language\") || \"en\", // Set the initial language of the App\n fallbackLng: \"en\",\n });\n return (\n <Provider store={store}>\n <App {...props} />\n </Provider>\n );\n};\n"],"names":["css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","useIsMobile","breakpoint","isMobile","setIsMobile","useState","window","innerWidth","useEffect","handleResize","addEventListener","removeEventListener","DRAWER_WIDTH","initialState","themeMode","localStorage","getItem","appDirection","AppLayoutSlice","createSlice","name","reducers","setThemeMode","state","action","payload","setAppDirection","AppLayoutActions","actions","AppLayoutReducer","reducer","loadingMaskSlice","value","isOpened","message","showLoadingMask","hideLoadingMask","LoadingMaskReducer","useLoadingMask","dispatch","useDispatch","show","hide","UserSessionSlice","isAuthenticated","authorities","setAuthenticated","setUnAuthenticated","UserSessionActions","UserSessionReducer","useAxios","mask","apiBaseUrl","useSelector","AppInfo","axiosInstance","axios","create","baseURL","timeout","withCredentials","defaults","interceptors","response","use","error","status","toast","autoClose","data","Blob","text","then","handleGetRequest","async","props","undefined","showMask","loadingMessage","get","endPointURI","params","parameters","headers","responseType","successCallBkFn","failureCallBkFn","handlePostRequest","post","handleDeleteRequest","delete","HandleDownloadHTTPPostPDF","handleUploadRequest","files","length","formData","FormData","file","append","useConfirmationWindow","open","setOpen","t","useTranslation","ConfirmationWindow","_jsxs","Dialog","_jsx","DialogTitle","title","DialogContent","children","DialogContentText","body","DialogActions","Button","variant","color","onClick","onConfirmationCallBk","autoFocus","useSession","UserSession","UserInfo","isUserAuthorized","authorityCode","grantedAuthority","authority","isCurrentOrganizationAuthorizedToModule","moduleCode","currentOrganization","systemApplicationModules","subscripedModule","toLowerCase","useWindow","windowState","setWindowState","Window","windowProps","jsx","Modal","sx","zIndex","theme","drawer","onClose","onCloseCallBack","Box","position","top","left","maxHeight","transform","height","width","minWidth","minHeight","overflow","bgcolor","display","flexDirection","alignItems","justifyContent","AppBar","Toolbar","FontAwesomeIcon","icon","windowIcon","marginRight","Typography","component","windowTitle","flexGrow","IconButton","Paper","padding","commonStoreSlice","stores","storeKeys","setStoresMetaData","Object","keys","setStoreData","storeKey","CommonStoreReducer","useApiActions","apiActionsProps","CommonStores","commonStores","session","reloadData","commonStoreKey","url","setData","findAll","loadRecordById","recordId","record","findById","findByIdParamName","saveRecord","savedRecord","save","deleteRecordById","result","deleteById","deleteByIdParamName","TemplateTextField","TextField","slotProps","inputLabel","shrink","label","_Fragment","not","a","b","filter","indexOf","intersection","TransferList","valueField","displayField","options","selectedOptions","setSelection","checked","setChecked","React","setLeft","right","setRight","leftFilterValue","setLeftFilterValue","rightFilterValue","setRightFilterValue","leftChecked","rightChecked","handleToggle","currentIndex","newChecked","push","splice","numberOfChecked","items","handleToggleAll","customList","unfilteredItems","side","option","toLocaleLowerCase","includes","Card","CardHeader","px","py","avatar","Checkbox","indeterminate","disabled","inputProps","subheader","fullWidth","onChange","event","target","Divider","List","dense","role","map","jsxs","ListItemButton","cursor","ListItemIcon","tabIndex","disableRipple","ListItemText","id","primary","Grid2","container","spacing","margin","flex","direction","my","size","oldState","newState","concat","CheckBox","FormControlLabel","required","control","checkedValue","e","onChangeCallBack","unCheckedValue","ComboBox","AppLayoutState","AppLayout","Autocomplete","v","getValue","newValue","clearOnBlur","handleHomeEndKeys","getOptionLabel","renderOption","props1","slots","popper","Popper","renderInput","InputLabelProps","errorMessage","helperText","DATE_FORMAT","DATE_TIME_FORMAT","LIGHT_THEME_INITIAL_MAIN_COLOR","LIGHT_THEME_INITIAL_SECANDARY_COLOR","DARK_THEME_INITIAL_MAIN_COLOR","DARK_THEME_INITIAL_SECANDARY_COLOR","Datefield","LocalizationProvider","dateAdapter","AdapterMoment","DatePicker","moment","format","momentValue","isValid","textField","Fragment","DatetimeField","DateTimePicker","SystemLookupCombobox","setOptions","lookupType","loadLookupOptions","generateDateTimeColumn","colDef","renderEditCell","api","setEditCellValue","field","valueParser","row","column","valueFormatter","generateComboColumn","valueGetter","renderCell","find","item","selectedRecord","generateCheckBoxColumn","getElementFields","element","fields","mode","elements","childElement","getAllFields","constructGridColumnsFromFields","isDefaultEditable","columns","tableField","fieldType","gridProps","muiProps","editable","fieldName","headerName","fieldLabel","headerAlign","align","hidden","searchable","optionValueField","optionDisplayField","constructValidationSchema","validationSchemaObj","z","number","required_error","invalid_type_error","optional","nullable","boolean","string","min","getGridSelection","rowSelectionModel","keyColumnName","sRecords","sRecordIds","ids","selectedId","x","selectedRecords","selectedRecordIds","formatMuiErrorMessage","code","args","URL","forEach","arg","searchParams","process","env","NODE_ENV","reactIsModule","exports","Symbol","for","c","d","f","g","h","k","l","m","n","p","q","r","w","y","u","$$typeof","A","reactIs_production_min","AsyncMode","ConcurrentMode","ContextConsumer","Element","ForwardRef","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","require$$0","hasSymbol","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_ASYNC_MODE_TYPE","REACT_CONCURRENT_MODE_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_BLOCK_TYPE","REACT_FUNDAMENTAL_TYPE","REACT_RESPONDER_TYPE","REACT_SCOPE_TYPE","object","$$typeofType","ContextProvider","Memo","hasWarnedAboutDeprecatedIsAsyncMode","reactIs_development","console","isPortal","getOwnPropertySymbols","hasOwnProperty","prototype","propIsEnumerable","propertyIsEnumerable","objectAssign","assign","test1","String","getOwnPropertyNames","test2","i","fromCharCode","join","test3","split","letter","err","shouldUseNative","source","from","symbols","to","val","TypeError","toObject","s","arguments","key","call","ReactPropTypesSecret_1","has","Function","bind","printWarning","ReactPropTypesSecret","loggedTypeFailures","require$$1","Error","checkPropTypes","typeSpecs","values","location","componentName","getStack","typeSpecName","ex","stack","resetWarningCache","checkPropTypes_1","ReactIs","require$$2","require$$3","require$$4","emptyFunctionThatReturnsNull","factoryWithTypeCheckers","isValidElement","throwOnDirectAccess","ITERATOR_SYMBOL","iterator","ANONYMOUS","ReactPropTypes","array","createPrimitiveTypeChecker","bigint","bool","func","symbol","any","createChainableTypeChecker","arrayOf","typeChecker","propName","propFullName","PropTypeError","propValue","Array","isArray","getPropType","elementType","instanceOf","expectedClass","expectedClassName","constructor","node","isNode","objectOf","propType","oneOf","expectedValues","is","valuesString","JSON","stringify","getPreciseType","oneOfType","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","expectedTypes","checkerResult","expectedType","shape","shapeTypes","invalidValidatorError","exact","allKeys","this","validate","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","isRequired","secret","cacheKey","chainedCheckType","every","iteratorFn","maybeIterable","getIteratorFn","step","entries","next","done","entry","RegExp","isSymbol","Date","PropTypes","emptyFunction","emptyFunctionWithReset","factoryWithThrowingShims","shim","getShim","propTypesModule","REACT_CONSUMER_TYPE","REACT_VIEW_TRANSITION_TYPE","REACT_CLIENT_REFERENCE","reactIs_production","SuspenseList","isSuspenseList","getModuleId","isPlainObject","getPrototypeOf","toStringTag","deepClone","output","deepmerge","clone","createBreakpoints","breakpoints","xs","sm","md","lg","xl","unit","other","sortedValues","breakpointsAsArray","sort","breakpoint1","breakpoint2","reduce","acc","obj","sortBreakpointsValues","up","down","between","start","end","endIndex","only","keyIndex","replace","borderRadius","responsivePropType","merge","defaultBreakpoints","defaultContainerQueries","containerQueries","containerName","handleBreakpoints","styleFromPropValue","themeBreakpoints","index","breakpointKeys","startsWith","some","match","containerKey","shorthand","matches","_formatErrorMessage","containerQuery","Number","isNaN","getContainerQuery","cssKey","capitalize","charAt","toUpperCase","slice","getPath","path","checkVars","vars","getStyleValue","themeMapping","propValueFinal","userValue","prop","cssProperty","themeKey","fn","propTypes","filterProps","properties","directions","aliases","marginX","marginY","paddingX","paddingY","getCssProperties","cache","memoize","property","dir","marginKeys","paddingKeys","spacingKeys","createUnaryUnit","defaultValue","themeSpacing","abs","Math","isInteger","transformed","createUnarySpacing","transformer","resolveCssProperty","cssProperties","getStyleFromPropValue","compose","styles","handlers","borderTransform","createBorderStyle","border","borderTop","borderRight","borderBottom","borderLeft","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outline","outlineColor","gap","columnGap","rowGap","paletteTransform","sizingTransform","maxWidth","breakpointsValues","defaultSxConfig","backgroundColor","pt","pr","pb","pl","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd","mt","mr","mb","ml","mx","marginTop","marginBottom","marginLeft","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd","displayPrint","textOverflow","visibility","whiteSpace","flexBasis","flexWrap","alignContent","order","flexShrink","alignSelf","justifyItems","justifySelf","gridColumn","gridRow","gridAutoFlow","gridAutoColumns","gridAutoRows","gridTemplateColumns","gridTemplateRows","gridTemplateAreas","gridArea","bottom","boxShadow","boxSizing","font","fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","textTransform","lineHeight","textAlign","typography","styleFunctionSx","getThemeValue","config","unstable_sxConfig","traverse","sxInput","sxObject","emptyBreakpoints","breakpointsInput","breakpointsInOrder","createEmptyBreakpointObject","breakpointsKeys","styleKey","maybeFn","objects","union","Set","objectsHaveSameKeys","sorted","regex","sortContainerQueries","breakpointOutput","removeUnusedBreakpoints","unstable_createStyleFunctionSx","applyStyles","colorSchemes","getColorSchemeSelector","selector","palette","useTheme","defaultTheme","contextTheme","useContext","ThemeContext","systemDefaultTheme","paletteInput","spacingInput","shapeInput","mui","argsInput","argument","createSpacing","muiTheme","components","themeInput","toContainerQuery","mediaQuery","attachCq","cssContainerQueries","unstable_sx","createTheme","extendSxProp","inSx","systemProps","otherProps","splitProps","finalSx","defaultGenerator","ClassNameGenerator","generate","configure","generator","reset","createClassNameGenerator","o","clsx","globalStateClasses","active","completed","expanded","focused","focusVisible","readOnly","selected","themeId","defaultClassName","generateClassName","BoxRoot","tag","stylesFactory","emStyled","styled","shouldForwardProp","forwardRef","inProps","useThemeWithoutDefault","className","as","createBox","globalStatePrefix","slot","globalStateClass","generateUtilityClass","generateUtilityClasses","root","isNumber","isNumeric","trim","capitalizeFirstLetter","str","isValidEmail","email","test","timeAgo","dateInput","date","now","diffInSeconds","floor","locale","rtf","Intl","RelativeTimeFormat","numeric","units","seconds","delta","FormElementField","fieldInfo","formManager","formActions","formValues","hiddenFields","formProps","fieldSize","muiTextFieldProps","disabledFields","setValue","onValueChangeCallBack","fieldHeight","formState","errors","toString","dateFormat","FormAction","setConfirmationWindowState","confirmationMessage","actionFn","formActionProps","actionButtonVariant","actionButtonColor","preActionValidation","isConfirmationRequired","FormElementGroup","AttachmentImageViewer","imgSrc","setImgSrc","imagePath","attachmentId","attachmentCode","refKey","category","handleImageSrc","showAsAvatar","Avatar","onError","onErrorImage","src","loading","alt","objectFit","AttachmentCard","allowDownload","downloadAuthorityKey","setAttachmentConfig","handleDelete","CardMedia","docType","CardContent","gutterBottom","fileName","attachmentSize","remark","CardActions","allowDelete","Tooltip","createObjectURL","link","href","setAttribute","click","remove","AttachmentPanel","setFiles","attachmentCategories","setAttachmentCategories","setRemark","selectedCategory","setSelectedCategory","allowedTypes","setAllowedTypes","attachmentConfig","getFileExtension","pop","loadAttachmentConfig","allowedFileTypes","cats","showAttachments","allowUpload","enableAttachment","uploadAuthorityKey","maxAllowedNumberOfFiles","refKeyAttachments","accept","multiple","fileExt","multiline","rows","existingAttachments","isCategoryRequired","MAX_SIZE_KB","maxSizeBytes","success","refKeyAttachment","WorkflowDocumentTimeLine","overflowY","actionHistory","actionHistoryRecord","actionTime","actionMethod","personId","documentActionEnName","documentActionArName","actionComment","employeeEnName","employeeArName","TemplateGridMultiRecordAction","rowAction","recordsToProcessActionOn","recordIdsToProcessActionOn","isActionAllowed","StyledQuickFilter","QuickFilter","StyledToolbarButton","ToolbarButton","ownerState","opacity","pointerEvents","transition","transitions","StyledTextField","overflowX","TemplateGridTopBar","isCreationAuthorized","templateProps","editAction","gridSelection","editMode","handleCreateNewRecord","rowActions","gridActionProps","multiRecord","_createElement","apiActions","gridLoadParametersValues","tBar","ColumnsPanelTrigger","render","GridViewColumnIcon","FilterPanelTrigger","Badge","badgeContent","filterCount","GridFilterListIcon","gridStateKey","clearGridState","orientation","flexItem","ExportExcel","MenuItem","QuickFilterTrigger","triggerProps","enterDelay","QuickFilterControl","controlProps","inputRef","placeholder","input","startAdornment","InputAdornment","endAdornment","QuickFilterClear","edge","TemplateGridRecordAction","iconStyle","getActionIconStyleForRecord","isActionVisibleForRecord","isActionDisabledForRecord","GridActionsCellItem","showInMenu","reloadGridAfterAction","currentNewRecordIndex","loadGridState","saved","parse","saveGridState","statePart","current","setItem","PIN_FIXED_COLUMNS","TemplateGrid","setSelectedRecord","attachmentPanelEnabledForRecord","setAttachmentPanelEnabledForRecord","getLookupOptions","generateLookupGridColumn","useLookupGridColumn","AttachmentWindow","setAttachmentWindowState","gridTitle","WorkFlowWindow","setWorkFlowWindowState","generatedColumns","setGeneratedColumns","formElements","savedState","useMemo","initialVisibilityState","columnVisibilityModel","existingFields","themeDirection","setColumnVisibilityModel","columnOrder","setColumnOrder","columnWidths","setColumnWidths","gridRowGroupingModel","setGridRowGroupingModel","columnGroupingModel","newLeft","pinnedColumns","newRight","setPinnedColumns","navigate","useNavigate","recordToDelete","setRecordToDelete","recordToEdit","setRecordToEdit","rowModesModel","setRowModesModel","adjustGridColumns","gridColumns","setRowSelectionModel","validationSchema","isEditAllowed","isDeleteAllowed","deleteAction","setConfirmationWindowOpened","isNew","postActionCallBack","oldData","formModalHeight","formModalWidth","formModalMinHeight","formModalMinWidth","formModalIcon","formModalTitle","specs","modalHeight","modalWidth","modalMinHeight","modalMinWidth","modalIcon","modalTitle","FormWindow","setFormWindowState","actionColumn","isEnabled","attachment","workFlowDocumentCode","getActions","disableDefaultAction","isInEditMode","GridRowModes","Edit","View","handleSaveRowClick","ignoreModifications","newData","handleCancelRowEditClick","isEditActionVisibleForRecord","isActionEditDisabledForRecord","formRoute","handleEditRecord","isDeleteActionVisibleForRecord","isDeleteActionDisabledForRecord","enableAttachFn","structuredColumns","autoLoad","adjustedColumns","baseCols","col","fieldToCol","Map","Boolean","formComponent","recordIdToEdit","formCloseCallBk","TemplateForm","formLoadCallBk","editAuthorityKey","formSavedSuccessfullyCallBk","preSaveValidation","hideInfoBar","hideBackButton","girdIcon","gridLoadParameters","setGridLoadParametersValues","Accordion","defaultExpanded","AccordionSummary","expandIcon","GridExpandMoreIcon","AccordionDetails","saveButtonSpecs","cancelButtonSpecs","WorkflowDocumentPanel","refDocumentId","postActionCallBk","cancelActionCallBk","DataGridPremium","toolbar","newRecord","oldRows","oldModel","removeItem","getRowId","showToolbar","checkboxSelection","onRowEditStop","reason","defaultMuiPrevented","onRowModesModelChange","newModel","rowGroupingColumnMode","processRowUpdate","log","ZodError","validateRecord","requestObject","reloadAfterSave","onRowSelectionModelChange","gridSelectionModel","onColumnVisibilityModelChange","model","onColumnOrderChange","targetIndex","prevOrder","currentOrder","fromIndex","onColumnWidthChange","updatedWidths","rowGroupingModel","onRowGroupingModelChange","handleRowGroupChange","getGridColumnsFromRecord","formElement","ExcelReportViewer","reportData","report_record_data_key","setReportData","reloadReport","ReportViewer","blobUrl","setBlobUrl","setErrorMessage","excelReportData","setExcelReportData","reportViewerState","setReportViewerState","reportInfo","setReportInfo","reportParametersValues","setReportParametersValues","reportParametersElements","setReportParametersElements","getFormElementsFromReportParameters","reportParameters","reportParameter","parameterLabel","parameterCode","parameterType","mandatory","runReport","reportInfoProp","reportType","reportCode","resultMode","jasperOutPutFileType","contentDisposition","filename","blob","download","removeChild","revokeObjectURL","byPassParameterEntry","loadReportData","reportName","setAction","authorizedActions","setAuthorizedActions","setActionComment","workflowDocumentInfo","setWorkflowDocumentInfo","referencedDocument","workflowDocumentReport","workflowDocument","workflowDocumentStatus","actionsHistory","nextActionTakers","nextActions","ReporTViewWindow","setReportViewWindowState","documentEnName","documentNumberField","documentArName","loadWorkFlowDocumentInfo","workflowDocumentCode","processWorkflowDocumentAction","workflowDocumentId","actionId","refDocumentStatus","documentStatusCode","post_action_endpoint","nextActionTakersAuthority","actionTaker","username","USERNAME","doc_id","documentStatusEnName","documentStatusArName","startIcon","require_comment","pre_action_endpoint","nextActionTaker","employee_en_name","employee_ar_name","mobile_number","WorkflowWindow","setWorkflowWindowState","initiallyHiddenFields","setHiddenFields","initialValues","setDisabledFields","formSchema","useForm","resolver","zodResolver","defaultValues","watch","pathParameters","useParams","formRouteRecordIdParamName","loadRecord","idToLoad","retrievedRecord","setFieldValue","fieldValue","hideField","oldValues","showField","disableField","enableField","enabled","handleSubmit","WorkflowRouteComponent","TemplateBarChart","BarChart","dataset","xAxis","dataKey","scaleType","valueLabel","series","labelField","TemplateDataCard","TemplateGauge","Gauge","valueMax","total","TemplateLineChart","LineChart","LinearProgressWithLabel","LinearProgress","round","TemplateLineProgress","TemplatePieChart","chartData","PieChart","WidgetViewer","isWidgetLoading","setWidgetLoading","queryId","dataQueryId","parameterValues","getWidgetData","widgetType","verticalAxisField","prefix","iconName","spin","widgetTitle","horizontalAxisField","horizontalAxisLabel","DashboardViewer","dashboardInfo","setDashboardInfo","dashboardCode","dashboardName","dashboardTitle","dashboardParameters","widgets","dashboardParameterValues","setDashboardParameterValues","loadDashboardInfo","widget","DashboardRouteView","ChangeOrgForm","newOrgId","setNewOrgId","userOrganizations","orgId","successChangeCallBackFn","SideBarSlice","toggleSideBarState","setSideBarState","SideBarReducer","useInterval","callback","delay","savedCallback","useRef","setInterval","clearInterval","beatFade","keyframes","NotificationItem","notification","notificationId","notificationAction","notificationActionPayload","isNotified","notificationQueueId","notificationTextColor","notificationIcon","notificationIconColor","notificationEnText","notificationArText","animation","createTime","showDivider","NotificationButton","anchorEl","setAnchorEl","notifications","setNotifications","info","closeOnClick","notificationsCheckIntervalSeconds","ClickAwayListener","onClickAway","currentTarget","anchorOrigin","vertical","horizontal","notificaiton","placement","TransitionProps","Fade","ChangePasswordPanel","currentPassword","setCurrentPassword","password1","setPassword1","password2","setPassword2","selectedPerson","isSelfService","newPassword","onSuccessCallBk","handleChangePasswordRequest","MuiAppBar","easing","sharp","duration","leavingScreen","variants","easeOut","enteringScreen","TopBar","ChangeOrgWindow","setChangeOrgWindowState","anchorElUser","setAnchorElUser","handleCloseUserMenu","handleOpenUserMenu","SideBarState","SideBar","ChangePasswordWindow","setChangePasswordWindow","Menu","keepMounted","transformOrigin","noWrap","appName","organizationEnName","organizationArName","i18n","language","nextLanguage","lng","changeLanguage","enableUINotifications","rotation","DrawerHeader","mixins","findNavigationItemById","nodes","found","NavigationItems","actionPayload","DotIcon","verticalAlign","StyledTreeItemRoot","TreeItem2Root","grey","treeItemClasses","groupTransition","CustomTreeItemContent","TreeItem2Content","dark","main","content","alpha","contrastText","AnimatedCollapse","animated","Collapse","TransitionComponent","useSpring","in","StyledTreeItemLabelText","CustomLabel","expandable","appLayoutState","TreeItem2Label","isExpandable","reactChildren","CustomTreeItem","itemId","getRootProps","getContentProps","getIconContainerProps","getCheckboxProps","getLabelProps","getGroupTransitionProps","getDragAndDropOverlayProps","publicAPI","useTreeItem2","rootRef","TreeItem2Provider","TreeItem2IconContainer","TreeItem2Icon","TreeItem2Checkbox","TreeItem2DragAndDropOverlay","NavigationTree","filterData","parentItems","parentItem","applicationModule","newParentItem","structuredClone","mergedNavigationItems","enableAdministrationModule","businessNavigationItems","authoriedNavigationItems","RichTreeView","onItemClick","navigationItem","Drawer","anchor","appVersion","cacheRtl","createCache","stylisPlugins","prefixer","rtlPlugin","cacheLtr","OrgMemberRoleForm","setSelectedOptions","availableOptions","setAvailableOptions","orgMemberId","organizationId","currentRoles","availableRoles","getOrgMemberRoles","closeModalFn","OrganizationMemberGrid","OrganizationMemberRolesWindow","setOrganizationMemberRolesWindowState","SystemOrganizations","SystemOrganizationRanks","SystemOrganizationUnits","OrganizationRankGrid","loadOrganizationRanks","OrganizationUnitGrid","SystemOrganizationUnitType","loadOrganizationUnits","OrganizationUnitTypeGrid","SystemApplicationAuthorityGrid","SystemApplicationModules","SystemApplicationModuleGrid","RoleAuthoritiesForm","availableAuthorities","setAvailableAuthorities","roleId","selectedAuthorities","getRoleAuthorities","SystemApplicationRoleGrid","selectedRole","setSelectedRole","RoleaAuthoritiesWindow","setRoleAuthoritiesWindowState","DataQueryParameterGrid","SystemEntityParameters","LookupGrid","ReportParameterGrid","reportId","storageTypes","validationObject","Blueprint","useSysDatasource","isMandatory","isVisible","datasourceConId","reportBluePrintId","reportExcelDataQueryId","reportJasperName","Jasper","Excel","adjustFormAccordingToReportType","validationObjects","MailRecipientGrid","mailTemplateId","recipientMail","MailBodyGrid","SystemDataQueries","MailAttachmentGrid","SystemReports","Gmail","mailHost","mailPort","mailUsername","mailPassword","mailProtocol","isMailSmtpAuthEnabled","isMailStarttlsEnabled","isSmtpSSlEnabled","azureGraphApiClientId","azureGraphApiClientSecret","azureGraphApiTenantId","azureGraphApiScope","azureGraphApiEmailId","Azure","adjustFormAccordingToEngineType","WorkflowDocumentStatusGrid","WorkflowDocumentActionMailGrid","SystemMailTemplates","documentActionId","WorkflowDocumentActionGrid","ActionMailsWindow","setActionMailWindowState","workflowStates","setWorkflowStates","loadWorkFlowDocumentStates","seriesKeys","verticalAxisLabel","ColumnChart","CircularProgress","adjustFormAccordingToWidgetType","DashboardWidgetGrid","SystemWidgets","dashboardId","SYSTEM_ROUTES","appLogo","setSelectedPerson","CurrentOrganizationRanks","CurrentOrganizationUnits","OrganizationMembersWindow","setOrganizationMemberWindowState","organizationMemberId","refSource","DataQueryParameterWindow","setDataQueryParameterWindow","SystemDataSources","SystemDataSourceType","SystemParameterTypes","ReporTrialWindow","setReportTrialWindowState","ReportParameterWindow","setReportParameterWindowState","SystemBluePrints","SystemTimeIntervals","MailRecipentsWindow","setMailRecipientsWindowState","MailBodiesWindow","setMailBodiesWindowState","MailAttachmentWindow","setMailAttachmentWindowState","callBkFn","periodical","periodType","periodValue","startSendingAt","mailEngine","WorkflowStatusWindow","setWorkflowStatusWindowState","WorkflowActionWindow","setWorkflowActionWindowState","useSystemCon","SystemWidgetTypes","WidgetsWindows","setWidgetsWindowState","mailNotificationQueueId","resendMail","loadUserNotifications","RouteWrapper","MainContent","businessRoutes","isAutoLoadLoaded","setAutoLoadLoaded","loadCommonStores","CacheProvider","Routes","route","Route","Puller","MobileDrawer","toggleDrawer","SwipeableDrawer","onOpen","swipeAreaWidth","disableSwipeToOpen","ModalProps","LoadingMask","loadingMask","Backdrop","Login","appInfo","setUsername","password","setPassword","isLoginInProcess","setIsLoginInProcess","UserSessionState","handleLogin","userSession","loginTheme","MuiCssBaseline","styleOverrides","appTheme","primaryColor","secondary","secondaryColor","checkUserSession","ThemeProvider","onKeyDown","Main","Layout","BrowserRouter","ToastContainer","rtl","draggable","CssBaseline","AppInfoSlice","documentTitle","muiPremiumKey","businessReduxReducers","businessCommonStoresMetaData","light","setAppInfo","AppInfoActions","AppInfoReducer","ADMINISTRATION_STORES","SystemReportTypes","SystemMailRecipientTypes","SystemApplicationAuthorities","SystemApplicationRoles","App","LicenseInfo","setLicenseKey","LightThemeOptions","background","default","paper","DarkThemeOptions","themeOptions","ENGLISH_TRANS","common","AdminLocalsEn","ARABIC_TRANS","adminLocalsAr","library","add","fab","far","fas","systemReducers","store","configureStore","resources","en","translation","businessLocals","ar","initReactI18next","init","fallbackLng","Provider"],"mappings":"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","x_google_ignoreList":[0,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/hooks/UseMobile.tsx","../src/redux/features/common/AppLayoutSlice.ts","../src/redux/features/common/LoadingMaskSlice.ts","../src/hooks/useLoadingMask.tsx","../src/redux/features/common/UserSessionSlice.ts","../src/hooks/useAxios.tsx","../src/hooks/UseConfirmationWindow.tsx","../src/hooks/UseSession.tsx","../src/hooks/UseWindow.tsx","../src/redux/features/common/CommonStoreSlice.ts","../src/hooks/useApiActions.ts","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/TemplateTextField.tsx","../src/components/templates/TransferList.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/CheckBox.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/ComboBox.tsx","../src/util/constants.ts","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/Datefield.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/DatetimeField.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/SystemLookupCombobox.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/DataGridColumnsUtil.tsx","../src/components/templates/DataEntryTemplates/DataEntryUtil.ts","../node_modules/@mui/system/node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js","../node_modules/prop-types/node_modules/react-is/index.js","../node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/lib/has.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/react-is/cjs/react-is.production.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/@mui/system/node_modules/@mui/utils/esm/deepmerge/deepmerge.js","../node_modules/@mui/system/esm/createBreakpoints/createBreakpoints.js","../node_modules/@mui/system/esm/createTheme/shape.js","../node_modules/@mui/system/esm/responsivePropType/responsivePropType.js","../node_modules/@mui/system/esm/merge/merge.js","../node_modules/@mui/system/esm/breakpoints/breakpoints.js","../node_modules/@mui/system/esm/cssContainerQueries/cssContainerQueries.js","../node_modules/@mui/system/node_modules/@mui/utils/esm/capitalize/capitalize.js","../node_modules/@mui/system/esm/style/style.js","../node_modules/@mui/system/esm/spacing/spacing.js","../node_modules/@mui/system/esm/memoize/memoize.js","../node_modules/@mui/system/esm/compose/compose.js","../node_modules/@mui/system/esm/borders/borders.js","../node_modules/@mui/system/esm/cssGrid/cssGrid.js","../node_modules/@mui/system/esm/palette/palette.js","../node_modules/@mui/system/esm/sizing/sizing.js","../node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js","../node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../node_modules/@mui/system/esm/createTheme/applyStyles.js","../node_modules/@mui/system/esm/useThemeWithoutDefault/useThemeWithoutDefault.js","../node_modules/@mui/system/esm/useTheme/useTheme.js","../node_modules/@mui/system/esm/createTheme/createTheme.js","../node_modules/@mui/system/esm/createTheme/createSpacing.js","../node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../node_modules/@mui/system/node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../node_modules/clsx/dist/clsx.mjs","../node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js","../node_modules/@mui/system/esm/Box/boxClasses.js","../node_modules/@mui/system/esm/Box/Box.js","../node_modules/@mui/system/esm/createBox/createBox.js","../node_modules/@mui/styled-engine/esm/index.js","../node_modules/@mui/system/node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../src/util/AppUtils.ts","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementField.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormAction.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementGroup.tsx","../src/components/templates/attachment/AttachmentImageViewer.tsx","../src/components/templates/attachment/AttachmentCard.tsx","../src/components/templates/attachment/AttachmentPanel.tsx","../src/components/templates/workflow/WorkflowDocumentTimeLine.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridMultiRecordAction.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridTopBar.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridRecordAction.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid.tsx","../src/hooks/useLookupGridColumn.tsx","../src/components/templates/report/ExcelReportViewer.tsx","../src/components/templates/report/ReportViewer.tsx","../src/components/templates/workflow/WorkflowDocumentPanel.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/TemplateForm.tsx","../src/components/templates/workflow/WorkflowRouteComponent.tsx","../src/components/templates/visuals/charts/TemplateBarChart.tsx","../src/components/templates/visuals/charts/TemplateDataCard.tsx","../src/components/templates/visuals/charts/TemplateGauge.tsx","../src/components/templates/visuals/charts/TemplateLineChart.tsx","../src/components/templates/visuals/charts/TemplateLineProgress.tsx","../src/components/templates/visuals/charts/TemplatePieChart.tsx","../src/components/templates/visuals/WidgetViewer.tsx","../src/components/templates/visuals/DashboardViewer.tsx","../src/components/templates/visuals/DashboardRouteView.tsx","../src/components/common/ChangeOrgForm.tsx","../src/redux/features/common/SideBarSlice.ts","../src/hooks/useInterval.tsx","../src/components/common/NotificationItem.tsx","../src/layout/NotificationButton.tsx","../src/components/administration/admin/ChangePasswordPanel.tsx","../src/layout/TopBar.tsx","../src/locales/i18n.ts","../src/layout/DrawerHeader.tsx","../src/navigationItems/index.tsx","../src/navigationItems/Administration/index.tsx","../src/navigationItems/Administration/adminNavigationItems.tsx","../src/layout/NavigationTree.tsx","../src/layout/SideBar.tsx","../src/components/common/LayoutHandlers.tsx","../src/components/administration/admin/OrgMemberRoleForm.tsx","../src/components/administration/admin/OrganizationMemberGrid.tsx","../src/components/administration/admin/OrganizationRankGrid.tsx","../src/components/administration/admin/OrganizationUnitGrid.tsx","../src/components/administration/admin/OrganizationUnitTypeGrid.tsx","../src/components/administration/admin/SystemApplicationAuthorityGrid.tsx","../src/components/administration/admin/SystemApplicationModuleGrid.tsx","../src/components/administration/admin/RoleAuthoritiesForm.tsx","../src/components/administration/admin/SystemApplicationRoleGrid.tsx","../src/components/administration/dev/DataQueryParameterGrid.tsx","../src/components/administration/dev/LookupGrid.tsx","../src/components/administration/dev/ReportParameterGrid.tsx","../src/components/administration/dev/AttachmentConfigGrid.tsx","../src/components/administration/dev/ReportGrid.tsx","../src/components/administration/dev/MailRecipientGrid.tsx","../src/components/administration/dev/MailBodyGrid.tsx","../src/components/administration/dev/MailAttachmentGrid.tsx","../src/components/administration/dev/MailSenderConfigGrid.tsx","../src/components/administration/dev/WorkflowDocumentStatusGrid.tsx","../src/components/administration/dev/WorkflowDocumentActionMailGrid.tsx","../src/components/administration/dev/WorkflowDocumentActionGrid.tsx","../src/components/administration/dev/WidgetGrid.tsx","../src/components/administration/dev/DashboardWidgetGrid.tsx","../src/routes/index.ts","../src/components/common/Home.tsx","../src/routes/administration/index.ts","../src/routes/administration/adminRoutes.tsx","../src/components/administration/admin/OrganizationGrid.tsx","../src/components/administration/admin/OrganizationMemberRoleGrid.tsx","../src/components/administration/admin/PersonGrid.tsx","../src/components/administration/admin/SystemApplicationGrid.tsx","../src/components/administration/admin/SystemApplicationRoleAuthorityGrid.tsx","../src/components/administration/admin/OrganizationApplicationModuleGrid.tsx","../src/routes/administration/devRoutes.tsx","../src/components/administration/dev/BluePrintGrid.tsx","../src/components/administration/dev/DataQueryGrid.tsx","../src/components/administration/dev/DatasourceConnectionGrid.tsx","../src/components/administration/dev/EntityParameterGrid.tsx","../src/components/administration/dev/MailTemplateGrid.tsx","../src/components/administration/dev/WorkflowDocumentGrid.tsx","../src/components/administration/dev/DashboardGrid.tsx","../src/components/administration/dev/WorkflowDocumentMailLogGrid.tsx","../src/components/administration/dev/MailNotificationQueueGrid.tsx","../src/components/administration/dev/NotificationGrid.tsx","../src/components/common/MyNotificationsPanel.tsx","../src/layout/RouteWrapper.tsx","../src/layout/MainContent.tsx","../src/layout/MobileDrawer.tsx","../src/components/common/LoadingMask.tsx","../src/components/common/Login.tsx","../src/layout/Layout.tsx","../src/redux/features/common/AppInfoSlice.ts","../src/redux/features/administration/AdministrationStoresMetaData.ts","../src/components/App.tsx","../src/locales/english/index.ts","../src/locales/arabic/index.ts","../src/components/BaseApp.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { useEffect, useState } from \"react\";\r\n\r\nexport const useIsMobile = (breakpoint = 768) => {\r\n const [isMobile, setIsMobile] = useState(window.innerWidth < breakpoint);\r\n\r\n useEffect(() => {\r\n const handleResize = () => setIsMobile(window.innerWidth < breakpoint);\r\n window.addEventListener(\"resize\", handleResize);\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, [breakpoint]);\r\n\r\n return isMobile;\r\n};\r\n","import { createSlice } from \"@reduxjs/toolkit\";\r\n\r\nexport const DRAWER_WIDTH = 350;\r\n\r\ninterface AppLayoutState {\r\n themeMode: \"light\" | \"dark\" | string;\r\n appDirection: \"ltr\" | \"rtl\";\r\n}\r\n\r\nconst initialState: AppLayoutState = {\r\n themeMode: localStorage.getItem(\"themeMode\") || \"light\",\r\n appDirection: localStorage.getItem(\"language\") == \"ar\" ? \"rtl\" : \"ltr\",\r\n};\r\n\r\nconst AppLayoutSlice = createSlice({\r\n name: \"AppLayout\",\r\n initialState,\r\n reducers: {\r\n setThemeMode: (state, action) => {\r\n state.themeMode = action.payload;\r\n },\r\n setAppDirection: (state, action) => {\r\n state.appDirection = action.payload;\r\n },\r\n },\r\n});\r\n\r\nexport const AppLayoutActions = AppLayoutSlice.actions;\r\nexport default AppLayoutSlice.reducer;\r\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\n\r\ninterface LoadingMaskStateValue {\r\n value: { isOpened: boolean; message?: string | null };\r\n}\r\n\r\nconst initialState: LoadingMaskStateValue = {\r\n value: { isOpened: false, message: null },\r\n};\r\n\r\nconst loadingMaskSlice = createSlice({\r\n name: \"loadingMask\",\r\n initialState,\r\n reducers: {\r\n showLoadingMask: (\r\n state,\r\n action: PayloadAction<string | null | undefined>\r\n ) => {\r\n state.value.isOpened = true;\r\n state.value.message = action.payload;\r\n },\r\n hideLoadingMask: (state) => {\r\n state.value.isOpened = false;\r\n state.value.message = null;\r\n },\r\n },\r\n});\r\n\r\nexport const { showLoadingMask, hideLoadingMask } = loadingMaskSlice.actions;\r\nexport default loadingMaskSlice.reducer;\r\n","import { useDispatch } from \"react-redux\";\r\nimport { hideLoadingMask, showLoadingMask } from \"../redux/features/common/LoadingMaskSlice\";\r\n\r\n\r\nconst useLoadingMask = () => {\r\n const dispatch = useDispatch();\r\n const show = (message?: string) => {\r\n dispatch(showLoadingMask(message));\r\n };\r\n const hide = () => {\r\n dispatch(hideLoadingMask());\r\n };\r\n return { show, hide };\r\n};\r\n\r\nexport default useLoadingMask;\r\n","import { createSlice } from \"@reduxjs/toolkit\";\r\n\r\nexport interface OrganizationProps {\r\n organizationCode?: string;\r\n organizationName?: string;\r\n}\r\n\r\nexport interface UserSessionProps {\r\n value: {\r\n isAuthenticated: boolean | null;\r\n employeeNumber?: string;\r\n employeeName?: string;\r\n mobileNumber?: string;\r\n email?: string;\r\n isEmployeeArchived?: string;\r\n organizationCode?: string;\r\n organizationUnitId?: string;\r\n organizationUnitArName?: string;\r\n organizationUnitEnName?: string;\r\n organizationRankId?: string;\r\n rankCode?: string;\r\n rankName?: string;\r\n rankOrder?: string;\r\n currentOrganization?: any;\r\n userOrganizations?: Array<OrganizationProps>;\r\n authorities: Array<{ authority: string }>;\r\n };\r\n}\r\n\r\nconst initialState: UserSessionProps = {\r\n value: {\r\n isAuthenticated: null,\r\n authorities: [],\r\n },\r\n};\r\n\r\nconst UserSessionSlice = createSlice({\r\n name: \"UserSession\",\r\n initialState,\r\n reducers: {\r\n setAuthenticated: (state, action) => {\r\n state.value = action.payload;\r\n },\r\n setUnAuthenticated: (state) => {\r\n state.value = {\r\n isAuthenticated: false,\r\n authorities: [],\r\n };\r\n },\r\n },\r\n});\r\n\r\nexport const UserSessionActions = UserSessionSlice.actions;\r\nexport default UserSessionSlice.reducer;\r\n","import { toast } from \"react-toastify\";\r\nimport axios, { ResponseType } from \"axios\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport useLoadingMask from \"./useLoadingMask\";\r\nimport { UserSessionActions } from \"../redux/features/common/UserSessionSlice\";\r\n\r\nexport interface APIRequest {\r\n endPointURI: string;\r\n parameters?: any;\r\n data?: any;\r\n showMask?: Boolean;\r\n loadingMessage?: string;\r\n successCallBkFn?: Function;\r\n failureCallBkFn?: Function;\r\n headers?: any;\r\n responseType?: ResponseType;\r\n}\r\n\r\nexport interface UploadAttachmentRequest {\r\n endPointURI: string;\r\n showMask?: Boolean;\r\n parameters?: any;\r\n loadingMessage?: string;\r\n successCallBkFn?: Function;\r\n failureCallBkFn?: Function;\r\n files: FileList;\r\n}\r\n\r\nconst useAxios = () => {\r\n const mask = useLoadingMask();\r\n const dispatch = useDispatch();\r\n const apiBaseUrl = useSelector(\r\n (state: any) => state.AppInfo.value.apiBaseUrl\r\n );\r\n const axiosInstance = axios.create({\r\n baseURL: apiBaseUrl,\r\n timeout: 600000,\r\n withCredentials: true,\r\n });\r\n\r\n axiosInstance.defaults.withCredentials = true;\r\n axiosInstance.interceptors.response.use(\r\n (response: any) => {\r\n return response;\r\n },\r\n (error: any) => {\r\n if (\r\n error\r\n ? error.response\r\n ? error.response.status\r\n ? error.response.status === 401\r\n : false\r\n : false\r\n : false\r\n ) {\r\n dispatch(UserSessionActions.setUnAuthenticated());\r\n toast.error(\"your session is now expired, you need to login again\", {\r\n autoClose: false,\r\n });\r\n } else if (\r\n error\r\n ? error.response\r\n ? error.response.status\r\n ? error.response.status === 403\r\n : false\r\n : false\r\n : false\r\n ) {\r\n toast.error(\"you aren't authorized to process this request\");\r\n } else if (\r\n error\r\n ? error.response\r\n ? error.response.status\r\n ? error.response.status === 500\r\n : false\r\n : false\r\n : false\r\n ) {\r\n if (error.response.data instanceof Blob) {\r\n const blob = error.response.data;\r\n blob.text().then((text) => {\r\n toast.error(text);\r\n });\r\n } else {\r\n toast.error(error.response.data);\r\n }\r\n } else {\r\n toast.error(\r\n \"failed to communicate with the server ... try again later\"\r\n );\r\n }\r\n return \"ERROR\";\r\n }\r\n );\r\n const handleGetRequest = async (props: APIRequest) => {\r\n if (\r\n props.showMask !== undefined &&\r\n props.showMask != null &&\r\n props.showMask === true\r\n ) {\r\n mask.show(props.loadingMessage);\r\n }\r\n const response: any = await axiosInstance.get(props.endPointURI, {\r\n params: { ...props.parameters },\r\n withCredentials: true,\r\n headers: props.headers,\r\n responseType: props?.responseType,\r\n });\r\n if (\r\n props.showMask !== undefined &&\r\n props.showMask != null &&\r\n props.showMask === true\r\n ) {\r\n mask.hide();\r\n }\r\n if (response !== \"ERROR\") {\r\n if (\r\n props.successCallBkFn !== undefined &&\r\n props.successCallBkFn != null\r\n ) {\r\n props.successCallBkFn(response);\r\n }\r\n return response;\r\n } else {\r\n if (\r\n props.failureCallBkFn !== undefined &&\r\n props.failureCallBkFn != null\r\n ) {\r\n props.failureCallBkFn(response);\r\n }\r\n return \"ERROR\";\r\n }\r\n };\r\n\r\n const HandleDownloadHTTPPostPDF = async (\r\n props: APIRequest = { endPointURI: \"\", parameters: {}, data: {} }\r\n ) => {\r\n if (\r\n props.showMask !== undefined &&\r\n props.showMask != null &&\r\n props.showMask === true\r\n ) {\r\n mask.show(props.loadingMessage);\r\n }\r\n const response: any = await axiosInstance.post(\r\n props.endPointURI,\r\n props.data,\r\n {\r\n responseType: \"blob\",\r\n }\r\n );\r\n if (\r\n props.showMask !== undefined &&\r\n props.showMask != null &&\r\n props.showMask === true\r\n ) {\r\n mask.hide();\r\n }\r\n if (response !== \"ERROR\") {\r\n if (\r\n props.successCallBkFn !== undefined &&\r\n props.successCallBkFn != null\r\n ) {\r\n props.successCallBkFn(response);\r\n }\r\n return response;\r\n } else {\r\n if (\r\n props.failureCallBkFn !== undefined &&\r\n props.failureCallBkFn != null\r\n ) {\r\n props.failureCallBkFn(response);\r\n }\r\n return \"ERROR\";\r\n }\r\n };\r\n const handlePostRequest = async (props: APIRequest) => {\r\n if (\r\n props.showMask !== undefined &&\r\n props.showMask != null &&\r\n props.showMask === true\r\n ) {\r\n mask.show(props.loadingMessage);\r\n }\r\n let response: any = await axiosInstance.post(\r\n props.endPointURI,\r\n props.data,\r\n {\r\n params: props.parameters,\r\n responseType: props?.responseType,\r\n headers: props?.headers,\r\n }\r\n );\r\n if (\r\n props.showMask !== undefined &&\r\n props.showMask != null &&\r\n props.showMask === true\r\n ) {\r\n mask.hide();\r\n }\r\n if (response !== \"ERROR\") {\r\n if (\r\n props.successCallBkFn !== undefined &&\r\n props.successCallBkFn != null\r\n ) {\r\n props.successCallBkFn(response);\r\n }\r\n return response;\r\n } else {\r\n if (\r\n props.failureCallBkFn !== undefined &&\r\n props.failureCallBkFn != null\r\n ) {\r\n props.failureCallBkFn(response);\r\n }\r\n return \"ERROR\";\r\n }\r\n };\r\n const handleDeleteRequest = async (props: APIRequest) => {\r\n if (\r\n props.showMask !== undefined &&\r\n props.showMask != null &&\r\n props.showMask === true\r\n ) {\r\n mask.show(props.loadingMessage);\r\n }\r\n let response: any = await axiosInstance.delete(props.endPointURI, {\r\n params: {\r\n ...props.parameters,\r\n },\r\n responseType: props?.responseType,\r\n headers: props?.headers,\r\n });\r\n if (\r\n props.showMask !== undefined &&\r\n props.showMask != null &&\r\n props.showMask === true\r\n ) {\r\n mask.hide();\r\n }\r\n if (response !== \"ERROR\") {\r\n if (\r\n props.successCallBkFn !== undefined &&\r\n props.successCallBkFn != null\r\n ) {\r\n props.successCallBkFn(response);\r\n }\r\n return response;\r\n } else {\r\n if (\r\n props.failureCallBkFn !== undefined &&\r\n props.failureCallBkFn != null\r\n ) {\r\n props.failureCallBkFn(response);\r\n }\r\n return \"ERROR\";\r\n }\r\n };\r\n\r\n const handleUploadRequest = async (props: UploadAttachmentRequest) => {\r\n if (props.files === null || props.files.length === 0) {\r\n toast.error(\"You must add files to upload\");\r\n return \"ERROR\";\r\n }\r\n const formData = new FormData();\r\n for (const file of props.files) {\r\n formData.append(\"files\", file);\r\n }\r\n if (\r\n props.showMask !== undefined &&\r\n props.showMask != null &&\r\n props.showMask === true\r\n ) {\r\n mask.show(props.loadingMessage);\r\n }\r\n let response: any = await axiosInstance.post(props.endPointURI, formData, {\r\n params: props?.parameters,\r\n headers: {\r\n \"Content-Type\": \"multipart/form-data\",\r\n },\r\n });\r\n if (\r\n props.showMask !== undefined &&\r\n props.showMask != null &&\r\n props.showMask === true\r\n ) {\r\n mask.hide();\r\n }\r\n if (response !== \"ERROR\") {\r\n if (\r\n props.successCallBkFn !== undefined &&\r\n props.successCallBkFn != null\r\n ) {\r\n props.successCallBkFn(response);\r\n }\r\n return response;\r\n } else {\r\n if (\r\n props.failureCallBkFn !== undefined &&\r\n props.failureCallBkFn != null\r\n ) {\r\n props.failureCallBkFn(response);\r\n }\r\n return \"ERROR\";\r\n }\r\n };\r\n return {\r\n handleGetRequest,\r\n handlePostRequest,\r\n handleDeleteRequest,\r\n HandleDownloadHTTPPostPDF,\r\n handleUploadRequest,\r\n };\r\n};\r\n\r\nexport default useAxios;\r\n","import {\r\n Button,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogContentText,\r\n DialogTitle,\r\n} from \"@mui/material\";\r\nimport { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface ConfirmationWindowProps {\r\n title: string;\r\n body: string;\r\n onConfirmationCallBk: () => void;\r\n}\r\n\r\nexport const useConfirmationWindow = (props: ConfirmationWindowProps) => {\r\n const [open, setOpen] = useState<boolean>(false);\r\n const { t } = useTranslation();\r\n const ConfirmationWindow: React.FC = () => {\r\n return (\r\n <Dialog open={open}>\r\n <DialogTitle>{props.title}</DialogTitle>\r\n <DialogContent>\r\n <DialogContentText>{props.body}</DialogContentText>\r\n </DialogContent>\r\n <DialogActions>\r\n <Button\r\n variant=\"contained\"\r\n color=\"primary\"\r\n onClick={() => {\r\n setOpen(false);\r\n }}\r\n >\r\n {t(\"NO_LABEL\")}\r\n </Button>\r\n <Button\r\n variant=\"contained\"\r\n color=\"error\"\r\n onClick={() => {\r\n props.onConfirmationCallBk();\r\n setOpen(false);\r\n }}\r\n autoFocus\r\n >\r\n {t(\"YES_LABEL\")}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n };\r\n return { ConfirmationWindow, open, setOpen };\r\n};\r\n","import { useSelector } from \"react-redux\";\r\n\r\nconst useSession = () => {\r\n const UserSession = useSelector((state: any) => state.UserSession);\r\n const UserInfo = UserSession.value;\r\n\r\n const isCurrentOrganizationAuthorizedToModule = (\r\n moduleCode: string\r\n ): Boolean => {\r\n if (UserInfo?.currentOrganization?.systemApplicationModules) {\r\n for (const subscripedModule of UserInfo.currentOrganization\r\n .systemApplicationModules) {\r\n if (subscripedModule.toLowerCase() == moduleCode.toLowerCase()) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n const isUserAuthorized = (authorityCode: string): boolean => {\r\n if (UserSession?.value?.authorities) {\r\n for (let grantedAuthority of UserSession.value.authorities) {\r\n if (\r\n authorityCode === \"DEVELOPMENT_ADMIN\" &&\r\n (grantedAuthority?.authority === \"DEVELOPMENT_ADMIN\" ||\r\n grantedAuthority?.authority === \"ORGANIZATION_ADMIN\")\r\n ) {\r\n return true;\r\n } else if (\r\n authorityCode === \"ORGANIZATION_ADMIN\" &&\r\n grantedAuthority?.authority === \"ORGANIZATION_ADMIN\"\r\n ) {\r\n return true;\r\n } else if (\r\n authorityCode !== \"DEVELOPMENT_ADMIN\" &&\r\n authorityCode !== \"ORGANIZATION_ADMIN\"\r\n ) {\r\n if (\r\n grantedAuthority?.authority === \"ORGANIZATION_ADMIN\" ||\r\n grantedAuthority?.authority === \"DEVELOPMENT_ADMIN\" ||\r\n grantedAuthority?.authority === \"SYSTEM_ADMIN\" ||\r\n grantedAuthority?.authority === authorityCode\r\n ) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n return {\r\n UserSession,\r\n isUserAuthorized,\r\n isCurrentOrganizationAuthorizedToModule,\r\n UserInfo,\r\n };\r\n};\r\n\r\nexport default useSession;\r\n","import { useEffect, useState } from \"react\";\r\nimport {\r\n AppBar,\r\n Box,\r\n IconButton,\r\n Modal,\r\n Paper,\r\n Toolbar,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\n\r\nexport interface TemplateWindowProp {\r\n height?: any;\r\n width?: any;\r\n minWidth?: any;\r\n minHeight?: any;\r\n windowIcon?: IconProp;\r\n windowTitle?: string;\r\n onCloseCallBack?: any;\r\n}\r\n\r\ninterface WindowProps {\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const useWindow = (props: TemplateWindowProp) => {\r\n const [windowState, setWindowState] = useState(false);\r\n\r\n const Window: React.FC<WindowProps> = (windowProps: WindowProps) => {\r\n return (\r\n <Modal\r\n open={windowState}\r\n sx={{ zIndex: (theme) => theme.zIndex.drawer }}\r\n onClose={() => {\r\n if (!windowState && props?.onCloseCallBack) {\r\n props.onCloseCallBack();\r\n }\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n maxHeight: \"90%\",\r\n transform: \"translate(-50%, -50%)\",\r\n height: props?.height || \"80%\",\r\n width: props?.width || \"90%\",\r\n minWidth: props.minWidth || 400,\r\n minHeight: props.minHeight || 200,\r\n overflow: \"hidden\",\r\n bgcolor: \"modalBackground.main\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n }}\r\n >\r\n <AppBar position=\"static\">\r\n <Toolbar variant=\"dense\">\r\n <FontAwesomeIcon\r\n icon={props?.windowIcon || \"window-maximize\"}\r\n style={{ marginRight: 5 }}\r\n />\r\n <Typography variant=\"h6\" color=\"inherit\" component=\"div\">\r\n {props?.windowTitle || \"window\"}\r\n </Typography>\r\n <div style={{ flexGrow: 1 }}></div>\r\n <IconButton\r\n onClick={() => {\r\n setWindowState(false);\r\n if (\r\n props.onCloseCallBack != undefined &&\r\n props.onCloseCallBack != null\r\n ) {\r\n props.onCloseCallBack();\r\n }\r\n }}\r\n color=\"secondary\"\r\n >\r\n <FontAwesomeIcon icon=\"xmark-square\" />\r\n </IconButton>\r\n </Toolbar>\r\n </AppBar>\r\n <Paper\r\n sx={{\r\n // flexGrow: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n padding: 1,\r\n // justifyContent: \"center\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {windowProps?.children}\r\n </Paper>\r\n </Box>\r\n </Modal>\r\n );\r\n };\r\n return { windowState, setWindowState, Window };\r\n};\r\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\r\n\r\nexport type CommonStores = {\r\n [key: string]: StoreMetaData;\r\n};\r\n\r\nexport type CommonStoresInterface = {\r\n stores: { [key: string]: StoreMetaData };\r\n storeKeys: Array<String>;\r\n};\r\n\r\ninterface setStoreDataProps {\r\n storeKey: string;\r\n data: Array<any>;\r\n}\r\n\r\nexport type StoreMetaData = {\r\n url: string;\r\n data: Array<any>;\r\n autoLoad: boolean;\r\n authority?: string;\r\n};\r\n\r\nexport const commonStoresInitialState: CommonStoresInterface = {\r\n stores: {},\r\n storeKeys: [],\r\n};\r\n\r\nconst commonStoreSlice = createSlice({\r\n name: \"commonStores\",\r\n initialState: commonStoresInitialState,\r\n reducers: {\r\n setStoresMetaData: (state, action) => {\r\n state.stores = action.payload;\r\n state.storeKeys = Object.keys(action.payload);\r\n },\r\n setStoreData: (state, action: PayloadAction<setStoreDataProps>) => {\r\n state.stores[action.payload.storeKey].data = action.payload.data;\r\n },\r\n },\r\n});\r\n\r\nexport const { setStoreData, setStoresMetaData } = commonStoreSlice.actions;\r\nexport default commonStoreSlice.reducer;\r\n","import { useDispatch, useSelector } from \"react-redux\";\r\nimport useSession from \"./UseSession\";\r\nimport useAxios from \"./useAxios\";\r\nimport { setStoreData } from \"../redux/features/common/CommonStoreSlice\";\r\n\r\nexport type ApiActionsProps = {\r\n findAll?: string;\r\n commonStoreKey?: string;\r\n setData?: any;\r\n findById?: string;\r\n findByIdParamName?: string;\r\n save?: string;\r\n deleteById?: string;\r\n deleteByIdParamName?: string;\r\n};\r\n\r\nexport type ApiActions = {\r\n reloadData: (params?: any) => Promise<void>;\r\n saveRecord: (record: any) => Promise<any | null>;\r\n loadRecordById: (recordId: any) => Promise<any>;\r\n deleteRecordById: (recordId: any) => Promise<boolean>;\r\n};\r\n\r\nconst useApiActions: (apiActionsProps: ApiActionsProps) => ApiActions = (\r\n apiActionsProps: ApiActionsProps\r\n) => {\r\n const CommonStores = useSelector((state: any) => state.commonStores.stores);\r\n const dispatch = useDispatch();\r\n const session = useSession();\r\n const { handleGetRequest, handlePostRequest, handleDeleteRequest } =\r\n useAxios();\r\n const reloadData = async (params?: any) => {\r\n if (apiActionsProps?.commonStoreKey) {\r\n const storeKeys = Object.keys(CommonStores);\r\n for (const storeKey of storeKeys) {\r\n if (storeKey === apiActionsProps.commonStoreKey) {\r\n if (\r\n (CommonStores[storeKey]?.authority === undefined ||\r\n CommonStores[storeKey]?.authority === null ||\r\n session.isUserAuthorized(CommonStores[storeKey]?.authority)) &&\r\n CommonStores[storeKey]?.url != \"\"\r\n ) {\r\n await handleGetRequest({\r\n endPointURI: CommonStores[storeKey].url,\r\n showMask: false,\r\n successCallBkFn: (response: any) => {\r\n dispatch(setStoreData({ storeKey, data: response.data }));\r\n apiActionsProps.setData(response.data);\r\n },\r\n failureCallBkFn: () => {\r\n dispatch(setStoreData({ storeKey, data: [] }));\r\n apiActionsProps.setData([]);\r\n },\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n } else if (apiActionsProps?.findAll) {\r\n await handleGetRequest({\r\n endPointURI: apiActionsProps.findAll,\r\n showMask: true,\r\n parameters: params || {},\r\n successCallBkFn: (response: any) => {\r\n apiActionsProps.setData(response.data);\r\n },\r\n });\r\n }\r\n };\r\n const saveRecord = async (record: any) => {\r\n let savedRecord = null;\r\n if (apiActionsProps?.save) {\r\n await handlePostRequest({\r\n endPointURI: apiActionsProps.save,\r\n data: record,\r\n showMask: true,\r\n successCallBkFn: (response: any) => {\r\n savedRecord = response.data;\r\n },\r\n });\r\n }\r\n return savedRecord;\r\n };\r\n const loadRecordById = async (recordId: any) => {\r\n let record: any = null;\r\n if (apiActionsProps?.findById) {\r\n const parameters: any = {};\r\n const keyParameterName = apiActionsProps?.findByIdParamName || \"id\";\r\n parameters[keyParameterName] = recordId;\r\n await handleGetRequest({\r\n endPointURI: apiActionsProps.findById,\r\n showMask: true,\r\n parameters,\r\n successCallBkFn: (response: any) => {\r\n record = response.data;\r\n },\r\n });\r\n }\r\n return record;\r\n };\r\n const deleteRecordById = async (recordId: any) => {\r\n let result = true;\r\n if (apiActionsProps?.deleteById) {\r\n const parameters: any = {};\r\n const keyParameterName = apiActionsProps?.deleteByIdParamName || \"id\";\r\n parameters[keyParameterName] = recordId;\r\n await handleDeleteRequest({\r\n endPointURI: apiActionsProps.deleteById,\r\n showMask: true,\r\n parameters,\r\n successCallBkFn: () => {\r\n result = true;\r\n },\r\n failureCallBkFn: () => {\r\n result = false;\r\n },\r\n });\r\n }\r\n return result;\r\n };\r\n return { reloadData, loadRecordById, saveRecord, deleteRecordById };\r\n};\r\n\r\nexport default useApiActions;\r\n","import { TextField, TextFieldProps } from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst TemplateTextField: React.FC<Omit<TextFieldProps, \"outlined\">> = (\r\n props\r\n) => {\r\n const { t } = useTranslation();\r\n return (\r\n <TextField\r\n {...props}\r\n slotProps={{ inputLabel: { shrink: true } }}\r\n label={<>{props?.label ? t(props.label) : \"\"}</>}\r\n />\r\n );\r\n};\r\n\r\nexport default TemplateTextField;\r\n","import * as React from \"react\";\r\nimport List from \"@mui/material/List\";\r\nimport Card from \"@mui/material/Card\";\r\nimport CardHeader from \"@mui/material/CardHeader\";\r\nimport ListItemText from \"@mui/material/ListItemText\";\r\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\r\nimport Checkbox from \"@mui/material/Checkbox\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Divider from \"@mui/material/Divider\";\r\nimport { Box, Grid2, ListItemButton } from \"@mui/material\";\r\nimport TemplateTextField from \"./DataEntryTemplates/TemplateDataForm/FormFields/TemplateTextField\";\r\n\r\nfunction not(a, b) {\r\n return a.filter((value) => b.indexOf(value) === -1);\r\n}\r\n\r\nfunction intersection(a, b) {\r\n return a.filter((value) => b.indexOf(value) !== -1);\r\n}\r\n\r\nfunction union(a, b) {\r\n return [...a, ...not(b, a)];\r\n}\r\n\r\nexport type TransferListProps = {\r\n valueField: string;\r\n displayField: string;\r\n options: Array<any>;\r\n selectedOptions: Array<any>;\r\n setSelection: any;\r\n};\r\n\r\nconst TransferList: React.FC<TransferListProps> = ({\r\n valueField = \"id\",\r\n displayField = \"name\",\r\n options = [],\r\n selectedOptions = [],\r\n setSelection,\r\n}) => {\r\n const [checked, setChecked] = React.useState([]);\r\n const [left, setLeft] = React.useState<Array<any>>([]);\r\n const [right, setRight] = React.useState<Array<any>>([]);\r\n const [leftFilterValue, setLeftFilterValue] = React.useState<string>(\"\");\r\n const [rightFilterValue, setRightFilterValue] = React.useState<string>(\"\");\r\n\r\n const leftChecked = intersection(checked, left);\r\n const rightChecked = intersection(checked, right);\r\n\r\n React.useEffect(() => {\r\n if (options) {\r\n setLeft([...options]);\r\n }\r\n }, [options]);\r\n React.useEffect(() => {\r\n if (selectedOptions) {\r\n setRight([...selectedOptions]);\r\n }\r\n }, [selectedOptions]);\r\n\r\n const handleToggle = (value) => () => {\r\n const currentIndex = checked.indexOf(value);\r\n const newChecked = [...checked];\r\n\r\n if (currentIndex === -1) {\r\n newChecked.push(value);\r\n } else {\r\n newChecked.splice(currentIndex, 1);\r\n }\r\n\r\n setChecked(newChecked);\r\n };\r\n\r\n const numberOfChecked = (items) => intersection(checked, items).length;\r\n\r\n const handleToggleAll = (items) => () => {\r\n if (numberOfChecked(items) === items.length) {\r\n setChecked(not(checked, items));\r\n } else {\r\n setChecked(union(checked, items));\r\n }\r\n };\r\n\r\n const handleCheckedRight = () => {\r\n setRight((oldState) => {\r\n let newState = right.concat(leftChecked);\r\n setSelection(newState);\r\n return newState;\r\n });\r\n setLeft(not(left, leftChecked));\r\n setChecked(not(checked, leftChecked));\r\n };\r\n\r\n const handleCheckedLeft = () => {\r\n setLeft(left.concat(rightChecked));\r\n setRight((oldState) => {\r\n let newState = not(right, rightChecked);\r\n setSelection(newState);\r\n return newState;\r\n });\r\n setChecked(not(checked, rightChecked));\r\n };\r\n\r\n const customList = (\r\n title: string,\r\n unfilteredItems: Array<any>,\r\n side: \"left\" | \"right\"\r\n ) => {\r\n const items = unfilteredItems.filter((option: any) => {\r\n if (option[displayField]) {\r\n const value: string = option[displayField];\r\n if (\r\n side === \"left\" &&\r\n value\r\n .toLocaleLowerCase()\r\n .includes(leftFilterValue.toLocaleLowerCase())\r\n ) {\r\n return true;\r\n } else if (\r\n side === \"right\" &&\r\n value\r\n .toLocaleLowerCase()\r\n .includes(rightFilterValue.toLocaleLowerCase())\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n return (\r\n <Card sx={{ height: \"100%\" }}>\r\n <CardHeader\r\n sx={{ px: 2, py: 1 }}\r\n avatar={\r\n <Checkbox\r\n onClick={handleToggleAll(items)}\r\n checked={\r\n numberOfChecked(items) === items.length && items.length !== 0\r\n }\r\n indeterminate={\r\n numberOfChecked(items) !== items.length &&\r\n numberOfChecked(items) !== 0\r\n }\r\n disabled={items.length === 0}\r\n inputProps={{\r\n \"aria-label\": \"all items selected\",\r\n }}\r\n />\r\n }\r\n title={title}\r\n subheader={`${numberOfChecked(unfilteredItems)} / ${\r\n unfilteredItems.length\r\n } Selected`}\r\n />\r\n <Box sx={{ width: \"100%\", padding: 1 }}>\r\n <TemplateTextField\r\n fullWidth\r\n label=\"search\"\r\n value={side === \"left\" ? leftFilterValue : rightFilterValue}\r\n onChange={(event) => {\r\n if (side === \"left\") {\r\n setLeftFilterValue(event.target.value);\r\n } else {\r\n setRightFilterValue(event.target.value);\r\n }\r\n }}\r\n />\r\n </Box>\r\n <Divider />\r\n <List\r\n sx={{\r\n width: \"100%\",\r\n height: \"80%\",\r\n bgcolor: \"secondary\",\r\n overflow: \"auto\",\r\n }}\r\n dense\r\n component=\"div\"\r\n role=\"list\"\r\n >\r\n {items.map((value) => {\r\n const labelId = `transfer-list-all-item-${value[valueField]}-label`;\r\n\r\n return (\r\n <ListItemButton\r\n key={value[valueField]}\r\n role=\"listitem\"\r\n onClick={handleToggle(value)}\r\n sx={{ cursor: \"pointer\" }}\r\n >\r\n <ListItemIcon>\r\n <Checkbox\r\n checked={checked.indexOf(value) !== -1}\r\n tabIndex={-1}\r\n disableRipple\r\n />\r\n </ListItemIcon>\r\n <ListItemText\r\n id={value[valueField]}\r\n primary={value[displayField]}\r\n />\r\n </ListItemButton>\r\n );\r\n })}\r\n </List>\r\n </Card>\r\n );\r\n };\r\n return (\r\n <Grid2\r\n container\r\n spacing={2}\r\n sx={{\r\n flexGrow: 1,\r\n overflow: \"auto\",\r\n margin: 1,\r\n display: \"flex\",\r\n width: \"100%\",\r\n }}\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n >\r\n <Grid2 sx={{ height: \"100%\", flex: 1 }}>\r\n {customList(\"Available Items\", left, \"left\")}\r\n </Grid2>\r\n <Grid2>\r\n <Grid2 container direction=\"column\" alignItems=\"center\">\r\n <Button\r\n sx={{ my: 0.5 }}\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={handleCheckedRight}\r\n disabled={leftChecked.length === 0}\r\n aria-label=\"move selected right\"\r\n >\r\n >\r\n </Button>\r\n <Button\r\n sx={{ my: 0.5 }}\r\n variant=\"outlined\"\r\n size=\"small\"\r\n onClick={handleCheckedLeft}\r\n disabled={rightChecked.length === 0}\r\n aria-label=\"move selected left\"\r\n >\r\n <\r\n </Button>\r\n </Grid2>\r\n </Grid2>\r\n <Grid2 sx={{ height: \"100%\", flex: 1 }}>\r\n {customList(\"Currently Selected\", right, \"right\")}\r\n </Grid2>\r\n </Grid2>\r\n );\r\n};\r\n\r\nexport default TransferList;\r\n","import { Checkbox, FormControlLabel } from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface CheckBoxProps {\r\n value: any;\r\n disabled?: boolean;\r\n required?: boolean;\r\n label: string;\r\n checkedValue?: any;\r\n unCheckedValue?: any;\r\n onChangeCallBack: Function;\r\n sx?: any;\r\n}\r\n\r\nconst CheckBox: React.FC<CheckBoxProps> = (props) => {\r\n const { t } = useTranslation();\r\n return (\r\n <FormControlLabel\r\n sx={props.sx}\r\n disabled={props.disabled || false}\r\n required={props.required || false}\r\n control={\r\n <Checkbox\r\n checked={\r\n props?.checkedValue == props.value ||\r\n props.value === \"true\" ||\r\n props.value == \"1\"\r\n ? true\r\n : false\r\n }\r\n onChange={(e) => {\r\n if (\r\n props.onChangeCallBack !== undefined &&\r\n props.onChangeCallBack != null\r\n ) {\r\n if (e.target.checked) {\r\n if (\r\n props.checkedValue !== undefined &&\r\n props.checkedValue != null\r\n ) {\r\n props.onChangeCallBack(props.checkedValue);\r\n } else {\r\n props.onChangeCallBack(true);\r\n }\r\n } else {\r\n if (\r\n props.unCheckedValue !== undefined &&\r\n props.unCheckedValue != null\r\n ) {\r\n props.onChangeCallBack(props.unCheckedValue);\r\n } else {\r\n props.onChangeCallBack(false);\r\n }\r\n }\r\n }\r\n }}\r\n />\r\n }\r\n label={t(props.label)}\r\n />\r\n );\r\n};\r\n\r\nexport default CheckBox;\r\n","import { useSelector } from \"react-redux\";\r\nimport { Autocomplete, Popper, TextField } from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface ComboBoxProps {\r\n value: any;\r\n onChangeCallBack: Function;\r\n label: string;\r\n disabled?: boolean;\r\n required?: boolean;\r\n options: Array<any>;\r\n errorMessage?: any;\r\n displayField: string;\r\n valueField: string;\r\n sx?: any;\r\n}\r\n\r\nconst ComboBox: React.FC<ComboBoxProps> = (props) => {\r\n const AppLayoutState = useSelector((state: any) => state.AppLayout);\r\n const { t } = useTranslation();\r\n const getValue = (v: string) => {\r\n for (let option of props.options) {\r\n if (option[props.valueField] == v) {\r\n return option;\r\n }\r\n }\r\n return null;\r\n };\r\n return (\r\n <Autocomplete\r\n sx={props.sx}\r\n value={getValue(props.value)}\r\n options={props.options}\r\n disabled={props.disabled}\r\n onChange={(event, newValue) => {\r\n if (\r\n props.onChangeCallBack !== undefined &&\r\n props.onChangeCallBack != null\r\n ) {\r\n if (newValue != null) {\r\n let v = newValue[props.valueField];\r\n props.onChangeCallBack(v, newValue);\r\n } else {\r\n props.onChangeCallBack(null, null);\r\n }\r\n }\r\n }}\r\n clearOnBlur\r\n handleHomeEndKeys\r\n getOptionLabel={(option) => {\r\n return option != null ? t(option[props.displayField]) : \"\";\r\n }}\r\n renderOption={(props1, option) => {\r\n return (\r\n <li {...props1}>\r\n {option != null ? t(option[props.displayField]) : \"\"}\r\n </li>\r\n );\r\n }}\r\n slots={{\r\n popper: (props: any) => (\r\n <Popper\r\n {...props}\r\n style={{ ...props.style, direction: AppLayoutState.appDirection }}\r\n />\r\n ),\r\n }}\r\n renderInput={(params) => {\r\n return (\r\n <TextField\r\n {...params}\r\n required={props.required || false}\r\n variant=\"outlined\"\r\n InputLabelProps={{ shrink: true }}\r\n label={t(props.label)}\r\n error={\r\n props.errorMessage != null && props.errorMessage !== undefined\r\n ? true\r\n : false\r\n }\r\n helperText={\r\n props.errorMessage != null && props.errorMessage !== undefined\r\n ? t(props.errorMessage)\r\n : \"\"\r\n }\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default ComboBox;\r\n","export const DATE_FORMAT = \"YYYY-MM-DD\";\r\nexport const DATE_TIME_FORMAT = \"YYYY-MM-DD HH:mm:ss\";\r\nexport const LIGHT_THEME_INITIAL_MAIN_COLOR = \"#37505C\";\r\nexport const LIGHT_THEME_INITIAL_SECANDARY_COLOR = \"#ff6d00\";\r\nexport const DARK_THEME_INITIAL_MAIN_COLOR = \"#ea690e\";\r\nexport const DARK_THEME_INITIAL_SECANDARY_COLOR = \"#74776B\";\r\n","import { DatePicker, LocalizationProvider } from \"@mui/x-date-pickers\";\r\nimport { AdapterMoment } from \"@mui/x-date-pickers/AdapterMoment\";\r\nimport moment from \"moment\";\r\nimport { DATE_FORMAT } from \"../../../../../util/constants\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface DatefieldProps {\r\n value: string | null;\r\n label: string;\r\n disabled?: boolean;\r\n required?: boolean;\r\n sx?: any;\r\n format?: string;\r\n errorMessage?: any;\r\n onChangeCallBack: Function;\r\n [x: string | number | symbol]: unknown;\r\n}\r\n\r\nconst Datefield: React.FC<DatefieldProps> = (props) => {\r\n const { t } = useTranslation();\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterMoment}>\r\n <DatePicker\r\n value={\r\n props.value != null && props.value !== undefined && props.value !== \"\"\r\n ? moment(props.value, props?.format || DATE_FORMAT)\r\n : null\r\n }\r\n sx={props.sx}\r\n label={t(props.label)}\r\n format={props?.format || DATE_FORMAT}\r\n disabled={props.disabled}\r\n onChange={(momentValue) => {\r\n let v = null;\r\n if (momentValue != null && momentValue.isValid()) {\r\n v = momentValue.format(props?.format || DATE_FORMAT);\r\n }\r\n if (\r\n props.onChangeCallBack !== undefined &&\r\n props.onChangeCallBack != null\r\n ) {\r\n props.onChangeCallBack(v);\r\n }\r\n }}\r\n slotProps={{\r\n textField: {\r\n InputLabelProps: { shrink: true },\r\n variant: \"outlined\",\r\n required: props.required,\r\n error:\r\n props.errorMessage !== undefined && props.errorMessage != null,\r\n helperText:\r\n props.errorMessage !== undefined && props.errorMessage != null ? (\r\n <>{t(props.errorMessage)}</>\r\n ) : (\r\n <></>\r\n ),\r\n },\r\n }}\r\n />\r\n </LocalizationProvider>\r\n );\r\n};\r\n\r\nexport default Datefield;\r\n","import { DateTimePicker, LocalizationProvider } from \"@mui/x-date-pickers\";\r\nimport { AdapterMoment } from \"@mui/x-date-pickers/AdapterMoment\";\r\nimport moment from \"moment\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { DATE_TIME_FORMAT } from \"../../../../../util/constants\";\r\n\r\ninterface DatetimeFieldProps {\r\n value: string | null;\r\n label: string;\r\n disabled?: boolean;\r\n required?: boolean;\r\n format?: string;\r\n sx?: any;\r\n errorMessage?: any;\r\n onChangeCallBack: Function;\r\n [x: string | number | symbol]: unknown;\r\n}\r\n\r\nconst DatetimeField: React.FC<DatetimeFieldProps> = (props) => {\r\n const { t } = useTranslation();\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterMoment}>\r\n <DateTimePicker\r\n value={\r\n props.value != null && props.value !== undefined && props.value !== \"\"\r\n ? moment(props.value, props?.format || DATE_TIME_FORMAT)\r\n : null\r\n }\r\n label={t(props.label)}\r\n sx={props.sx}\r\n format={props?.format || DATE_TIME_FORMAT}\r\n disabled={props.disabled}\r\n onChange={(momentValue) => {\r\n let v = null;\r\n if (momentValue != null && momentValue.isValid()) {\r\n v = momentValue.format(props?.format || DATE_TIME_FORMAT);\r\n }\r\n if (\r\n props.onChangeCallBack !== undefined &&\r\n props.onChangeCallBack != null\r\n ) {\r\n props.onChangeCallBack(v);\r\n }\r\n }}\r\n slotProps={{\r\n textField: {\r\n variant: \"outlined\",\r\n required: props.required,\r\n error:\r\n props.errorMessage !== undefined && props.errorMessage != null,\r\n helperText:\r\n props.errorMessage !== undefined && props.errorMessage != null ? (\r\n <>{t(props.errorMessage)}</>\r\n ) : (\r\n <></>\r\n ),\r\n },\r\n }}\r\n />\r\n </LocalizationProvider>\r\n );\r\n};\r\n\r\nexport default DatetimeField;\r\n","import { useEffect, useState } from \"react\";\r\nimport { useAxios, useSession } from \"../../../../../hooks\";\r\nimport ComboBox from \"./ComboBox\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\ntype SystemLookupListProps = {\r\n lookupType: string;\r\n value: any;\r\n onChangeCallBack: Function;\r\n label: string;\r\n disabled?: boolean;\r\n required?: boolean;\r\n errorMessage?: any;\r\n sx?: any;\r\n};\r\n\r\nconst SystemLookupCombobox: React.FC<SystemLookupListProps> = (props) => {\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const session = useSession();\r\n const [options, setOptions] = useState<Array<any>>([]);\r\n const { handleGetRequest } = useAxios();\r\n\r\n const loadLookupOptions = async () => {\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/public/system/lookup\",\r\n showMask: true,\r\n parameters: { lookupType: props.lookupType },\r\n successCallBkFn: (response: any) => {\r\n setOptions(response.data);\r\n },\r\n failureCallBkFn: () => {\r\n setOptions([]);\r\n },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (props.lookupType) {\r\n loadLookupOptions();\r\n }\r\n }, [props.lookupType, session.UserSession]);\r\n\r\n return (\r\n <ComboBox\r\n {...props}\r\n options={options}\r\n displayField={\r\n AppLayout.appDirection === \"ltr\" ? \"lookupEnDisplay\" : \"lookupArDisplay\"\r\n }\r\n valueField=\"lookupValue\"\r\n />\r\n );\r\n};\r\n\r\nexport default SystemLookupCombobox;\r\n","import moment from \"moment\";\r\nimport { TemplateGridColDef } from \"../DataEntryTypes\";\r\nimport Datefield from \"../TemplateDataForm/FormFields/Datefield\";\r\nimport { DATE_FORMAT, DATE_TIME_FORMAT } from \"../../../../util/constants\";\r\nimport DatetimeField from \"../TemplateDataForm/FormFields/DatetimeField\";\r\nimport ComboBox from \"../TemplateDataForm/FormFields/ComboBox\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport CheckBox from \"../TemplateDataForm/FormFields/CheckBox\";\r\n\r\nexport const generateDateColumn: any = (colDef: TemplateGridColDef) => {\r\n const column: TemplateGridColDef = {\r\n ...colDef,\r\n type: \"string\",\r\n renderEditCell: (params: any) => {\r\n return (\r\n <Datefield\r\n sx={{ width: \"100%\" }}\r\n label=\"\"\r\n value={params.value}\r\n onChangeCallBack={(v: any) => {\r\n params.api.setEditCellValue({\r\n id: params.id,\r\n field: params.field,\r\n value: v,\r\n });\r\n }}\r\n />\r\n );\r\n },\r\n valueParser: (value: any, row: any, column: any) => {\r\n let v = null;\r\n if (value !== null) {\r\n v = moment(value).format(DATE_FORMAT);\r\n }\r\n return v;\r\n },\r\n valueFormatter: (value: any, row: any, column: any) => {\r\n return row[column.field];\r\n },\r\n };\r\n return column;\r\n};\r\n\r\nexport const generateDateTimeColumn: any = (colDef: TemplateGridColDef) => {\r\n const column: TemplateGridColDef = {\r\n ...colDef,\r\n type: \"string\",\r\n renderEditCell: (params: any) => {\r\n return (\r\n <DatetimeField\r\n sx={{ width: \"100%\" }}\r\n label=\"\"\r\n value={params.value}\r\n onChangeCallBack={(v: any) => {\r\n params.api.setEditCellValue({\r\n id: params.id,\r\n field: params.field,\r\n value: v,\r\n });\r\n }}\r\n />\r\n );\r\n },\r\n valueParser: (value: any, row: any, column: any) => {\r\n let v = null;\r\n if (value !== null) {\r\n v = moment(value).format(DATE_TIME_FORMAT);\r\n }\r\n return v;\r\n },\r\n valueFormatter: (value: any, row: any, column: any) => {\r\n return row[column.field];\r\n },\r\n };\r\n return column;\r\n};\r\n\r\ntype ComboBoxColumnProps = TemplateGridColDef & {\r\n lookupType?: string;\r\n options: Array<any>;\r\n displayField: string;\r\n valueField: string;\r\n};\r\nexport const generateComboColumn: (\r\n props: ComboBoxColumnProps\r\n) => TemplateGridColDef = (colDef: ComboBoxColumnProps) => {\r\n const column: TemplateGridColDef = {\r\n ...colDef,\r\n type: \"custom\",\r\n valueGetter: (value) => {\r\n if (value) {\r\n return value + \"\";\r\n }\r\n return value;\r\n },\r\n renderCell: (parameters: any) => {\r\n let record = null;\r\n try {\r\n record = parameters.colDef.options.find(\r\n (item: any) => item[parameters.colDef.valueField] == parameters.value\r\n );\r\n } catch (e) {}\r\n return (\r\n <div>\r\n {record != null\r\n ? record[parameters.colDef.displayField]\r\n : parameters.value}\r\n </div>\r\n );\r\n },\r\n\r\n renderEditCell: (params: any) => {\r\n return (\r\n <ComboBox\r\n {...params}\r\n sx={{ width: \"100%\" }}\r\n options={params.colDef.options}\r\n valueField={params.colDef.valueField}\r\n displayField={params.colDef.displayField}\r\n onChangeCallBack={(v: any, selectedRecord: any) => {\r\n if (v === null) {\r\n params.api.setEditCellValue({\r\n id: params.id,\r\n field: params.field,\r\n value: null,\r\n });\r\n }\r\n params.api.setEditCellValue({\r\n id: params.id,\r\n field: params.field,\r\n value: v + \"\",\r\n });\r\n }}\r\n />\r\n );\r\n },\r\n };\r\n return column;\r\n};\r\n\r\ntype CheckBoxColumnProps = TemplateGridColDef & {\r\n checkedValue?: string;\r\n unCheckedValue?: string;\r\n};\r\n\r\nexport const generateCheckBoxColumn: (\r\n props: CheckBoxColumnProps\r\n) => TemplateGridColDef = (colDef: CheckBoxColumnProps) => {\r\n return {\r\n ...colDef,\r\n type: \"custom\",\r\n valueGetter: (value) => {\r\n if (value == null || value == undefined) {\r\n return null;\r\n } else {\r\n return value;\r\n }\r\n },\r\n renderCell: (parameters: any) => {\r\n const value = parameters?.value;\r\n if (\r\n value === colDef.checkedValue ||\r\n value === \"true\" ||\r\n value === 1 ||\r\n value === true\r\n ) {\r\n return <FontAwesomeIcon icon=\"check\" color=\"green\" />;\r\n } else {\r\n return <FontAwesomeIcon icon=\"xmark\" color=\"red\" />;\r\n }\r\n },\r\n renderEditCell: (params: any) => {\r\n return (\r\n <CheckBox\r\n {...params}\r\n checkedValue={colDef?.checkedValue || true}\r\n unCheckedValue={colDef?.unCheckedValue || false}\r\n onChangeCallBack={(v: any) => {\r\n params.api.setEditCellValue({\r\n id: params.id,\r\n field: params.field,\r\n value: v,\r\n });\r\n }}\r\n />\r\n );\r\n },\r\n };\r\n};\r\n","import { GridRowSelectionModel } from \"@mui/x-data-grid-premium\";\r\nimport {\r\n FormElementProps,\r\n RecordFieldProps,\r\n TemplateGridColDef,\r\n} from \"./DataEntryTypes\";\r\nimport {\r\n generateCheckBoxColumn,\r\n generateComboColumn,\r\n generateDateColumn,\r\n generateDateTimeColumn,\r\n} from \"./TemplateDataGrid/DataGridColumnsUtil\";\r\nimport * as z from \"zod\";\r\nimport { TFunction } from \"i18next\";\r\n\r\nexport const getElementFields: (\r\n element: FormElementProps\r\n) => Array<RecordFieldProps> = (element: FormElementProps) => {\r\n const fields: Array<RecordFieldProps> = [];\r\n if (element.type === \"field\" && element.mode === \"props\" && element?.props) {\r\n fields.push(element.props);\r\n } else if (\r\n element.type === \"group\" &&\r\n element?.props &&\r\n element?.props?.elements\r\n ) {\r\n for (const childElement of element.props.elements) {\r\n fields.push(...getElementFields(childElement));\r\n }\r\n }\r\n return fields;\r\n};\r\n\r\nexport const getAllFields: (\r\n elements: Array<FormElementProps>\r\n) => Array<RecordFieldProps> = (elements: Array<FormElementProps>) => {\r\n const fields: Array<RecordFieldProps> = [];\r\n for (const element of elements) {\r\n fields.push(...getElementFields(element));\r\n }\r\n return fields;\r\n};\r\n\r\nexport const constructGridColumnsFromFields: (\r\n fields: Array<RecordFieldProps>,\r\n isDefaultEditable: boolean,\r\n t: TFunction<\"translation\", undefined>\r\n) => Array<TemplateGridColDef> = (fields, isDefaultEditable, t) => {\r\n const columns: Array<TemplateGridColDef> = [];\r\n\r\n for (const tableField of fields) {\r\n if (\r\n tableField?.fieldType === \"text\" ||\r\n tableField?.fieldType === \"number\"\r\n ) {\r\n const column: TemplateGridColDef = {\r\n ...tableField?.gridProps?.muiProps,\r\n editable:\r\n tableField?.gridProps?.muiProps?.editable != undefined\r\n ? tableField?.gridProps?.muiProps?.editable\r\n : isDefaultEditable,\r\n type: tableField?.fieldType == \"number\" ? \"number\" : \"string\",\r\n field: tableField?.fieldName,\r\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n hidden: tableField?.hidden,\r\n searchable: tableField?.gridProps?.searchable,\r\n flex: tableField?.gridProps?.muiProps?.width ? undefined : 1,\r\n minWidth: 200,\r\n };\r\n\r\n columns.push(column);\r\n } else if (tableField?.fieldType === \"date\") {\r\n const column: TemplateGridColDef = generateDateColumn({\r\n ...tableField?.gridProps?.muiProps,\r\n editable:\r\n tableField?.gridProps?.muiProps?.editable != undefined\r\n ? tableField?.gridProps?.muiProps?.editable\r\n : isDefaultEditable,\r\n field: tableField?.fieldName,\r\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n hidden: tableField?.hidden,\r\n searchable: tableField?.gridProps?.searchable,\r\n flex: tableField?.gridProps?.muiProps?.width ? undefined : 1,\r\n minWidth: 200,\r\n });\r\n columns.push(column);\r\n } else if (tableField?.fieldType === \"datetime\") {\r\n const column: TemplateGridColDef = generateDateTimeColumn({\r\n ...tableField?.gridProps?.muiProps,\r\n editable:\r\n tableField?.gridProps?.muiProps?.editable != undefined\r\n ? tableField?.gridProps?.muiProps?.editable\r\n : isDefaultEditable,\r\n field: tableField?.fieldName,\r\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n hidden: tableField?.hidden,\r\n searchable: tableField?.gridProps?.searchable,\r\n flex: tableField?.gridProps?.muiProps?.width ? undefined : 1,\r\n minWidth: 200,\r\n });\r\n columns.push(column);\r\n } else if (tableField?.fieldType === \"checkbox\") {\r\n const column = generateCheckBoxColumn({\r\n ...tableField?.gridProps?.muiProps,\r\n editable:\r\n tableField?.gridProps?.muiProps?.editable != undefined\r\n ? tableField?.gridProps?.muiProps?.editable\r\n : isDefaultEditable,\r\n field: tableField?.fieldName,\r\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n hidden: tableField?.hidden,\r\n searchable: tableField?.gridProps?.searchable,\r\n checkedValue: tableField?.checkedValue,\r\n unCheckedValue: tableField?.unCheckedValue,\r\n width: 150,\r\n });\r\n columns.push(column);\r\n } else if (tableField?.fieldType === \"combobox\") {\r\n const column: TemplateGridColDef = generateComboColumn({\r\n ...tableField?.gridProps?.muiProps,\r\n editable:\r\n tableField?.gridProps?.muiProps?.editable != undefined\r\n ? tableField?.gridProps?.muiProps?.editable\r\n : isDefaultEditable,\r\n field: tableField?.fieldName,\r\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n hidden: tableField?.hidden,\r\n searchable: tableField?.gridProps?.searchable,\r\n valueField: tableField?.optionValueField || \"value\",\r\n displayField: tableField?.optionDisplayField || \"display\",\r\n options: tableField?.options || [],\r\n flex: tableField?.gridProps?.muiProps?.width ? undefined : 1,\r\n minWidth: 200,\r\n });\r\n columns.push(column);\r\n } else if (tableField?.fieldType === \"lookup\") {\r\n const column: TemplateGridColDef = generateComboColumn({\r\n ...tableField?.gridProps?.muiProps,\r\n editable:\r\n tableField?.gridProps?.muiProps?.editable != undefined\r\n ? tableField?.gridProps?.muiProps?.editable\r\n : isDefaultEditable,\r\n lookupType: tableField?.lookupType,\r\n field: tableField?.fieldName,\r\n headerName: t(tableField?.fieldLabel || tableField?.fieldName),\r\n headerAlign: \"center\",\r\n align: \"center\",\r\n hidden: tableField?.hidden,\r\n searchable: tableField?.gridProps?.searchable,\r\n valueField: tableField?.optionValueField || \"value\",\r\n displayField: tableField?.optionDisplayField || \"display\",\r\n options: tableField?.options || [],\r\n flex: tableField?.gridProps?.muiProps?.width ? undefined : 1,\r\n minWidth: 200,\r\n });\r\n columns.push(column);\r\n } else {\r\n const column: TemplateGridColDef = {\r\n field: tableField.fieldName,\r\n ...tableField?.gridProps?.muiProps,\r\n };\r\n columns.push(column);\r\n }\r\n }\r\n return columns;\r\n};\r\n\r\nexport const constructValidationSchema = (fields: Array<RecordFieldProps>) => {\r\n const validationSchemaObj: any = {};\r\n for (const field of fields) {\r\n if (field?.fieldName) {\r\n const fieldName = field.fieldName;\r\n if (field.fieldType === \"number\") {\r\n if (field?.required === true) {\r\n validationSchemaObj[fieldName] = z.number({\r\n required_error: \"This field is required\",\r\n invalid_type_error: \"This field must be a number\",\r\n });\r\n } else {\r\n validationSchemaObj[fieldName] = z.number().optional().nullable();\r\n }\r\n } else if (field.fieldType === \"checkbox\") {\r\n if (field?.required === true) {\r\n validationSchemaObj[fieldName] = z.boolean({\r\n required_error: \"This field is required\",\r\n });\r\n } else {\r\n validationSchemaObj[fieldName] = z.boolean().optional().nullable();\r\n }\r\n } else {\r\n if (field?.required === true) {\r\n validationSchemaObj[fieldName] = z\r\n .string({ message: \"This field is required\" })\r\n .min(1, \"This field is required\");\r\n } else {\r\n validationSchemaObj[fieldName] = z.string().optional().nullable();\r\n }\r\n }\r\n }\r\n }\r\n return validationSchemaObj;\r\n};\r\n\r\nexport type GridSelection = {\r\n selectedRecords: Array<any>;\r\n selectedRecordIds: Array<any>;\r\n};\r\n\r\nexport const getGridSelection: (\r\n rowSelectionModel: GridRowSelectionModel,\r\n data: Array<any>,\r\n keyColumnName: string\r\n) => GridSelection = (\r\n rowSelectionModel: GridRowSelectionModel,\r\n data: Array<any>,\r\n keyColumnName: string\r\n) => {\r\n const sRecords = [];\r\n const sRecordIds = [];\r\n if (\r\n rowSelectionModel.type === \"exclude\" &&\r\n rowSelectionModel.ids.size === 0\r\n ) {\r\n for (const record of data) {\r\n sRecords.push(record);\r\n sRecordIds.push(record[keyColumnName]);\r\n }\r\n } else {\r\n if (rowSelectionModel?.ids) {\r\n for (const selectedId of rowSelectionModel.ids) {\r\n const record = data.find((x) => x[keyColumnName] === selectedId);\r\n sRecords.push(record);\r\n sRecordIds.push(selectedId);\r\n }\r\n }\r\n }\r\n return { selectedRecords: sRecords, selectedRecordIds: sRecordIds };\r\n};\r\n","/**\n * WARNING: Don't import this directly. It's imported by the code generated by\n * `@mui/interal-babel-plugin-minify-errors`. Make sure to always use string literals in `Error`\n * constructors to ensure the plugin works as expected. Supported patterns include:\n * throw new Error('My message');\n * throw new Error(`My message: ${foo}`);\n * throw new Error(`My message: ${foo}` + 'another string');\n * ...\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code, ...args) {\n const url = new URL(`https://mui.com/production-error/?code=${code}`);\n args.forEach(arg => url.searchParams.append('args[]', arg));\n return `Minified MUI error #${code}; visit ${url} for the full message.`;\n}","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = require('./lib/has');\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<<anonymous>>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bigint: createPrimitiveTypeChecker('bigint'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message, data) {\n this.message = message;\n this.data = data && typeof data === 'object' ? data: {};\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n {expectedType: expectedType}\n );\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var expectedTypes = [];\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n if (checkerResult == null) {\n return null;\n }\n if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n expectedTypes.push(checkerResult.data.expectedType);\n }\n }\n var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function invalidValidatorError(componentName, location, propFullName, key, type) {\n return new PropTypeError(\n (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n );\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (has(shapeTypes, key) && typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * @license React\n * react-is.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\nSymbol.for(\"react.provider\");\nvar REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction typeOf(object) {\n if (\"object\" === typeof object && null !== object) {\n var $$typeof = object.$$typeof;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n switch (((object = object.type), object)) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n case REACT_VIEW_TRANSITION_TYPE:\n return object;\n default:\n switch (((object = object && object.$$typeof), object)) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n}\nexports.ContextConsumer = REACT_CONSUMER_TYPE;\nexports.ContextProvider = REACT_CONTEXT_TYPE;\nexports.Element = REACT_ELEMENT_TYPE;\nexports.ForwardRef = REACT_FORWARD_REF_TYPE;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Lazy = REACT_LAZY_TYPE;\nexports.Memo = REACT_MEMO_TYPE;\nexports.Portal = REACT_PORTAL_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nexports.isContextConsumer = function (object) {\n return typeOf(object) === REACT_CONSUMER_TYPE;\n};\nexports.isContextProvider = function (object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n};\nexports.isElement = function (object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n};\nexports.isForwardRef = function (object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n};\nexports.isFragment = function (object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n};\nexports.isLazy = function (object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n};\nexports.isMemo = function (object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n};\nexports.isPortal = function (object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n};\nexports.isProfiler = function (object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n};\nexports.isStrictMode = function (object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n};\nexports.isSuspense = function (object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n};\nexports.isSuspenseList = function (object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n};\nexports.isValidElementType = function (type) {\n return \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n};\nexports.typeOf = typeOf;\n","/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function typeOf(object) {\n if (\"object\" === typeof object && null !== object) {\n var $$typeof = object.$$typeof;\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n switch (((object = object.type), object)) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n case REACT_VIEW_TRANSITION_TYPE:\n return object;\n default:\n switch (((object = object && object.$$typeof), object)) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n return object;\n case REACT_CONSUMER_TYPE:\n return object;\n default:\n return $$typeof;\n }\n }\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n }\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n exports.ContextConsumer = REACT_CONSUMER_TYPE;\n exports.ContextProvider = REACT_CONTEXT_TYPE;\n exports.Element = REACT_ELEMENT_TYPE;\n exports.ForwardRef = REACT_FORWARD_REF_TYPE;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Lazy = REACT_LAZY_TYPE;\n exports.Memo = REACT_MEMO_TYPE;\n exports.Portal = REACT_PORTAL_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n exports.isContextConsumer = function (object) {\n return typeOf(object) === REACT_CONSUMER_TYPE;\n };\n exports.isContextProvider = function (object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n };\n exports.isElement = function (object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n };\n exports.isForwardRef = function (object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n };\n exports.isFragment = function (object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n };\n exports.isLazy = function (object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n };\n exports.isMemo = function (object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n };\n exports.isPortal = function (object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n };\n exports.isProfiler = function (object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n };\n exports.isStrictMode = function (object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n };\n exports.isSuspense = function (object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n };\n exports.isSuspenseList = function (object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n };\n exports.isValidElementType = function (type) {\n return \"string\" === typeof type ||\n \"function\" === typeof type ||\n type === REACT_FRAGMENT_TYPE ||\n type === REACT_PROFILER_TYPE ||\n type === REACT_STRICT_MODE_TYPE ||\n type === REACT_SUSPENSE_TYPE ||\n type === REACT_SUSPENSE_LIST_TYPE ||\n (\"object\" === typeof type &&\n null !== type &&\n (type.$$typeof === REACT_LAZY_TYPE ||\n type.$$typeof === REACT_MEMO_TYPE ||\n type.$$typeof === REACT_CONTEXT_TYPE ||\n type.$$typeof === REACT_CONSUMER_TYPE ||\n type.$$typeof === REACT_FORWARD_REF_TYPE ||\n type.$$typeof === REACT_CLIENT_REFERENCE ||\n void 0 !== type.getModuleId))\n ? !0\n : !1;\n };\n exports.typeOf = typeOf;\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","import * as React from 'react';\nimport { isValidElementType } from 'react-is';\n\n// https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\nexport function isPlainObject(item) {\n if (typeof item !== 'object' || item === null) {\n return false;\n }\n const prototype = Object.getPrototypeOf(item);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in item) && !(Symbol.iterator in item);\n}\nfunction deepClone(source) {\n if (/*#__PURE__*/React.isValidElement(source) || isValidElementType(source) || !isPlainObject(source)) {\n return source;\n }\n const output = {};\n Object.keys(source).forEach(key => {\n output[key] = deepClone(source[key]);\n });\n return output;\n}\n\n/**\n * Merge objects deeply.\n * It will shallow copy React elements.\n *\n * If `options.clone` is set to `false` the source object will be merged directly into the target object.\n *\n * @example\n * ```ts\n * deepmerge({ a: { b: 1 }, d: 2 }, { a: { c: 2 }, d: 4 });\n * // => { a: { b: 1, c: 2 }, d: 4 }\n * ````\n *\n * @param target The target object.\n * @param source The source object.\n * @param options The merge options.\n * @param options.clone Set to `false` to merge the source object directly into the target object.\n * @returns The merged object.\n */\nexport default function deepmerge(target, source, options = {\n clone: true\n}) {\n const output = options.clone ? {\n ...target\n } : target;\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach(key => {\n if (/*#__PURE__*/React.isValidElement(source[key]) || isValidElementType(source[key])) {\n output[key] = source[key];\n } else if (isPlainObject(source[key]) &&\n // Avoid prototype pollution\n Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {\n // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n output[key] = deepmerge(target[key], source[key], options);\n } else if (options.clone) {\n output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n } else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}","// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport const breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];\nconst sortBreakpointsValues = values => {\n const breakpointsAsArray = Object.keys(values).map(key => ({\n key,\n val: values[key]\n })) || [];\n // Sort in ascending order\n breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n return breakpointsAsArray.reduce((acc, obj) => {\n return {\n ...acc,\n [obj.key]: obj.val\n };\n }, {});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nexport default function createBreakpoints(breakpoints) {\n const {\n // The breakpoint **start** at this value.\n // For instance with the first breakpoint xs: [xs, sm).\n values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n },\n unit = 'px',\n step = 5,\n ...other\n } = breakpoints;\n const sortedValues = sortBreakpointsValues(values);\n const keys = Object.keys(sortedValues);\n function up(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (min-width:${value}${unit})`;\n }\n function down(key) {\n const value = typeof values[key] === 'number' ? values[key] : key;\n return `@media (max-width:${value - step / 100}${unit})`;\n }\n function between(start, end) {\n const endIndex = keys.indexOf(end);\n return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n }\n function only(key) {\n if (keys.indexOf(key) + 1 < keys.length) {\n return between(key, keys[keys.indexOf(key) + 1]);\n }\n return up(key);\n }\n function not(key) {\n // handle first and last key separately, for better readability\n const keyIndex = keys.indexOf(key);\n if (keyIndex === 0) {\n return up(keys[1]);\n }\n if (keyIndex === keys.length - 1) {\n return down(keys[keyIndex]);\n }\n return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n }\n return {\n keys,\n values: sortedValues,\n up,\n down,\n between,\n only,\n not,\n unit,\n ...other\n };\n}","const shape = {\n borderRadius: 4\n};\nexport default shape;","import PropTypes from 'prop-types';\nconst responsivePropType = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.object, PropTypes.array]) : {};\nexport default responsivePropType;","import deepmerge from '@mui/utils/deepmerge';\nfunction merge(acc, item) {\n if (!item) {\n return acc;\n }\n return deepmerge(acc, item, {\n clone: false // No need to clone deep, it's way faster.\n });\n}\nexport default merge;","import PropTypes from 'prop-types';\nimport deepmerge from '@mui/utils/deepmerge';\nimport merge from \"../merge/index.js\";\nimport { isCqShorthand, getContainerQuery } from \"../cssContainerQueries/index.js\";\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n xs: 0,\n // phone\n sm: 600,\n // tablet\n md: 900,\n // small laptop\n lg: 1200,\n // desktop\n xl: 1536 // large screen\n};\nconst defaultBreakpoints = {\n // Sorted ASC by size. That's important.\n // It can't be configured as it's used statically for propTypes.\n keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n up: key => `@media (min-width:${values[key]}px)`\n};\nconst defaultContainerQueries = {\n containerQueries: containerName => ({\n up: key => {\n let result = typeof key === 'number' ? key : values[key] || key;\n if (typeof result === 'number') {\n result = `${result}px`;\n }\n return containerName ? `@container ${containerName} (min-width:${result})` : `@container (min-width:${result})`;\n }\n })\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n const theme = props.theme || {};\n if (Array.isArray(propValue)) {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return propValue.reduce((acc, item, index) => {\n acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n return acc;\n }, {});\n }\n if (typeof propValue === 'object') {\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n return Object.keys(propValue).reduce((acc, breakpoint) => {\n if (isCqShorthand(themeBreakpoints.keys, breakpoint)) {\n const containerKey = getContainerQuery(theme.containerQueries ? theme : defaultContainerQueries, breakpoint);\n if (containerKey) {\n acc[containerKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n }\n }\n // key is breakpoint\n else if (Object.keys(themeBreakpoints.values || values).includes(breakpoint)) {\n const mediaKey = themeBreakpoints.up(breakpoint);\n acc[mediaKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n } else {\n const cssKey = breakpoint;\n acc[cssKey] = propValue[cssKey];\n }\n return acc;\n }, {});\n }\n const output = styleFromPropValue(propValue);\n return output;\n}\nfunction breakpoints(styleFunction) {\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const newStyleFunction = props => {\n const theme = props.theme || {};\n const base = styleFunction(props);\n const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n const extended = themeBreakpoints.keys.reduce((acc, key) => {\n if (props[key]) {\n acc = acc || {};\n acc[themeBreakpoints.up(key)] = styleFunction({\n theme,\n ...props[key]\n });\n }\n return acc;\n }, null);\n return merge(base, extended);\n };\n newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? {\n ...styleFunction.propTypes,\n xs: PropTypes.object,\n sm: PropTypes.object,\n md: PropTypes.object,\n lg: PropTypes.object,\n xl: PropTypes.object\n } : {};\n newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl', ...styleFunction.filterProps];\n return newStyleFunction;\n}\nexport function createEmptyBreakpointObject(breakpointsInput = {}) {\n const breakpointsInOrder = breakpointsInput.keys?.reduce((acc, key) => {\n const breakpointStyleKey = breakpointsInput.up(key);\n acc[breakpointStyleKey] = {};\n return acc;\n }, {});\n return breakpointsInOrder || {};\n}\nexport function removeUnusedBreakpoints(breakpointKeys, style) {\n return breakpointKeys.reduce((acc, key) => {\n const breakpointOutput = acc[key];\n const isBreakpointUnused = !breakpointOutput || Object.keys(breakpointOutput).length === 0;\n if (isBreakpointUnused) {\n delete acc[key];\n }\n return acc;\n }, style);\n}\nexport function mergeBreakpointsInOrder(breakpointsInput, ...styles) {\n const emptyBreakpoints = createEmptyBreakpointObject(breakpointsInput);\n const mergedOutput = [emptyBreakpoints, ...styles].reduce((prev, next) => deepmerge(prev, next), {});\n return removeUnusedBreakpoints(Object.keys(emptyBreakpoints), mergedOutput);\n}\n\n// compute base for responsive values; e.g.,\n// [1,2,3] => {xs: true, sm: true, md: true}\n// {xs: 1, sm: 2, md: 3} => {xs: true, sm: true, md: true}\nexport function computeBreakpointsBase(breakpointValues, themeBreakpoints) {\n // fixed value\n if (typeof breakpointValues !== 'object') {\n return {};\n }\n const base = {};\n const breakpointsKeys = Object.keys(themeBreakpoints);\n if (Array.isArray(breakpointValues)) {\n breakpointsKeys.forEach((breakpoint, i) => {\n if (i < breakpointValues.length) {\n base[breakpoint] = true;\n }\n });\n } else {\n breakpointsKeys.forEach(breakpoint => {\n if (breakpointValues[breakpoint] != null) {\n base[breakpoint] = true;\n }\n });\n }\n return base;\n}\nexport function resolveBreakpointValues({\n values: breakpointValues,\n breakpoints: themeBreakpoints,\n base: customBase\n}) {\n const base = customBase || computeBreakpointsBase(breakpointValues, themeBreakpoints);\n const keys = Object.keys(base);\n if (keys.length === 0) {\n return breakpointValues;\n }\n let previous;\n return keys.reduce((acc, breakpoint, i) => {\n if (Array.isArray(breakpointValues)) {\n acc[breakpoint] = breakpointValues[i] != null ? breakpointValues[i] : breakpointValues[previous];\n previous = i;\n } else if (typeof breakpointValues === 'object') {\n acc[breakpoint] = breakpointValues[breakpoint] != null ? breakpointValues[breakpoint] : breakpointValues[previous];\n previous = breakpoint;\n } else {\n acc[breakpoint] = breakpointValues;\n }\n return acc;\n }, {});\n}\nexport default breakpoints;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/**\n * For using in `sx` prop to sort the breakpoint from low to high.\n * Note: this function does not work and will not support multiple units.\n * e.g. input: { '@container (min-width:300px)': '1rem', '@container (min-width:40rem)': '2rem' }\n * output: { '@container (min-width:40rem)': '2rem', '@container (min-width:300px)': '1rem' } // since 40 < 300 eventhough 40rem > 300px\n */\nexport function sortContainerQueries(theme, css) {\n if (!theme.containerQueries) {\n return css;\n }\n const sorted = Object.keys(css).filter(key => key.startsWith('@container')).sort((a, b) => {\n const regex = /min-width:\\s*([0-9.]+)/;\n return +(a.match(regex)?.[1] || 0) - +(b.match(regex)?.[1] || 0);\n });\n if (!sorted.length) {\n return css;\n }\n return sorted.reduce((acc, key) => {\n const value = css[key];\n delete acc[key];\n acc[key] = value;\n return acc;\n }, {\n ...css\n });\n}\nexport function isCqShorthand(breakpointKeys, value) {\n return value === '@' || value.startsWith('@') && (breakpointKeys.some(key => value.startsWith(`@${key}`)) || !!value.match(/^@\\d/));\n}\nexport function getContainerQuery(theme, shorthand) {\n const matches = shorthand.match(/^@([^/]+)?\\/?(.+)?$/);\n if (!matches) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The provided shorthand ${`(${shorthand})`} is invalid. The format should be \\`@<breakpoint | number>\\` or \\`@<breakpoint | number>/<container>\\`.\\n` + 'For example, `@sm` or `@600` or `@40rem/sidebar`.' : _formatErrorMessage(18, `(${shorthand})`));\n }\n return null;\n }\n const [, containerQuery, containerName] = matches;\n const value = Number.isNaN(+containerQuery) ? containerQuery || 0 : +containerQuery;\n return theme.containerQueries(containerName).up(value);\n}\nexport default function cssContainerQueries(themeInput) {\n const toContainerQuery = (mediaQuery, name) => mediaQuery.replace('@media', name ? `@container ${name}` : '@container');\n function attachCq(node, name) {\n node.up = (...args) => toContainerQuery(themeInput.breakpoints.up(...args), name);\n node.down = (...args) => toContainerQuery(themeInput.breakpoints.down(...args), name);\n node.between = (...args) => toContainerQuery(themeInput.breakpoints.between(...args), name);\n node.only = (...args) => toContainerQuery(themeInput.breakpoints.only(...args), name);\n node.not = (...args) => {\n const result = toContainerQuery(themeInput.breakpoints.not(...args), name);\n if (result.includes('not all and')) {\n // `@container` does not work with `not all and`, so need to invert the logic\n return result.replace('not all and ', '').replace('min-width:', 'width<').replace('max-width:', 'width>').replace('and', 'or');\n }\n return result;\n };\n }\n const node = {};\n const containerQueries = name => {\n attachCq(node, name);\n return node;\n };\n attachCq(containerQueries);\n return {\n ...themeInput,\n containerQueries\n };\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n if (typeof string !== 'string') {\n throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `capitalize(string)` expects a string argument.' : _formatErrorMessage(7));\n }\n return string.charAt(0).toUpperCase() + string.slice(1);\n}","import capitalize from '@mui/utils/capitalize';\nimport responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function getPath(obj, path, checkVars = true) {\n if (!path || typeof path !== 'string') {\n return null;\n }\n\n // Check if CSS variables are used\n if (obj && obj.vars && checkVars) {\n const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);\n if (val != null) {\n return val;\n }\n }\n return path.split('.').reduce((acc, item) => {\n if (acc && acc[item] != null) {\n return acc[item];\n }\n return null;\n }, obj);\n}\nexport function getStyleValue(themeMapping, transform, propValueFinal, userValue = propValueFinal) {\n let value;\n if (typeof themeMapping === 'function') {\n value = themeMapping(propValueFinal);\n } else if (Array.isArray(themeMapping)) {\n value = themeMapping[propValueFinal] || userValue;\n } else {\n value = getPath(themeMapping, propValueFinal) || userValue;\n }\n if (transform) {\n value = transform(value, userValue, themeMapping);\n }\n return value;\n}\nfunction style(options) {\n const {\n prop,\n cssProperty = options.prop,\n themeKey,\n transform\n } = options;\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n if (props[prop] == null) {\n return null;\n }\n const propValue = props[prop];\n const theme = props.theme;\n const themeMapping = getPath(theme, themeKey) || {};\n const styleFromPropValue = propValueFinal => {\n let value = getStyleValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getStyleValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, propValue, styleFromPropValue);\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? {\n [prop]: responsivePropType\n } : {};\n fn.filterProps = [prop];\n return fn;\n}\nexport default style;","import responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport { getPath } from \"../style/index.js\";\nimport merge from \"../merge/index.js\";\nimport memoize from \"../memoize/index.js\";\nconst properties = {\n m: 'margin',\n p: 'padding'\n};\nconst directions = {\n t: 'Top',\n r: 'Right',\n b: 'Bottom',\n l: 'Left',\n x: ['Left', 'Right'],\n y: ['Top', 'Bottom']\n};\nconst aliases = {\n marginX: 'mx',\n marginY: 'my',\n paddingX: 'px',\n paddingY: 'py'\n};\n\n// memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\nconst getCssProperties = memoize(prop => {\n // It's not a shorthand notation.\n if (prop.length > 2) {\n if (aliases[prop]) {\n prop = aliases[prop];\n } else {\n return [prop];\n }\n }\n const [a, b] = prop.split('');\n const property = properties[a];\n const direction = directions[b] || '';\n return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];\n});\nexport const marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];\nexport const paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];\nconst spacingKeys = [...marginKeys, ...paddingKeys];\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n const themeSpacing = getPath(theme, themeKey, true) ?? defaultValue;\n if (typeof themeSpacing === 'number' || typeof themeSpacing === 'string') {\n return val => {\n if (typeof val === 'string') {\n return val;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (typeof val !== 'number') {\n console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${val}.`);\n }\n }\n if (typeof themeSpacing === 'string') {\n if (themeSpacing.startsWith('var(') && val === 0) {\n return 0;\n }\n if (themeSpacing.startsWith('var(') && val === 1) {\n return themeSpacing;\n }\n return `calc(${val} * ${themeSpacing})`;\n }\n return themeSpacing * val;\n };\n }\n if (Array.isArray(themeSpacing)) {\n return val => {\n if (typeof val === 'string') {\n return val;\n }\n const abs = Math.abs(val);\n if (process.env.NODE_ENV !== 'production') {\n if (!Number.isInteger(abs)) {\n console.error([`MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` + `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`].join('\\n'));\n } else if (abs > themeSpacing.length - 1) {\n console.error([`MUI: The value provided (${abs}) overflows.`, `The supported values are: ${JSON.stringify(themeSpacing)}.`, `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`].join('\\n'));\n }\n }\n const transformed = themeSpacing[abs];\n if (val >= 0) {\n return transformed;\n }\n if (typeof transformed === 'number') {\n return -transformed;\n }\n if (typeof transformed === 'string' && transformed.startsWith('var(')) {\n return `calc(-1 * ${transformed})`;\n }\n return `-${transformed}`;\n };\n }\n if (typeof themeSpacing === 'function') {\n return themeSpacing;\n }\n if (process.env.NODE_ENV !== 'production') {\n console.error([`MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`, 'It should be a number, an array or a function.'].join('\\n'));\n }\n return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n return createUnaryUnit(theme, 'spacing', 8, 'spacing');\n}\nexport function getValue(transformer, propValue) {\n if (typeof propValue === 'string' || propValue == null) {\n return propValue;\n }\n return transformer(propValue);\n}\nexport function getStyleFromPropValue(cssProperties, transformer) {\n return propValue => cssProperties.reduce((acc, cssProperty) => {\n acc[cssProperty] = getValue(transformer, propValue);\n return acc;\n }, {});\n}\nfunction resolveCssProperty(props, keys, prop, transformer) {\n // Using a hash computation over an array iteration could be faster, but with only 28 items,\n // it's doesn't worth the bundle size.\n if (!keys.includes(prop)) {\n return null;\n }\n const cssProperties = getCssProperties(prop);\n const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n const propValue = props[prop];\n return handleBreakpoints(props, propValue, styleFromPropValue);\n}\nfunction style(props, keys) {\n const transformer = createUnarySpacing(props.theme);\n return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge, {});\n}\nexport function margin(props) {\n return style(props, marginKeys);\n}\nmargin.propTypes = process.env.NODE_ENV !== 'production' ? marginKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nmargin.filterProps = marginKeys;\nexport function padding(props) {\n return style(props, paddingKeys);\n}\npadding.propTypes = process.env.NODE_ENV !== 'production' ? paddingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\npadding.filterProps = paddingKeys;\nfunction spacing(props) {\n return style(props, spacingKeys);\n}\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce((obj, key) => {\n obj[key] = responsivePropType;\n return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","export default function memoize(fn) {\n const cache = {};\n return arg => {\n if (cache[arg] === undefined) {\n cache[arg] = fn(arg);\n }\n return cache[arg];\n };\n}","import merge from \"../merge/index.js\";\nfunction compose(...styles) {\n const handlers = styles.reduce((acc, style) => {\n style.filterProps.forEach(prop => {\n acc[prop] = style;\n });\n return acc;\n }, {});\n\n // false positive\n // eslint-disable-next-line react/function-component-definition\n const fn = props => {\n return Object.keys(props).reduce((acc, prop) => {\n if (handlers[prop]) {\n return merge(acc, handlers[prop](props));\n }\n return acc;\n }, {});\n };\n fn.propTypes = process.env.NODE_ENV !== 'production' ? styles.reduce((acc, style) => Object.assign(acc, style.propTypes), {}) : {};\n fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);\n return fn;\n}\nexport default compose;","import responsivePropType from \"../responsivePropType/index.js\";\nimport style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function borderTransform(value) {\n if (typeof value !== 'number') {\n return value;\n }\n return `${value}px solid`;\n}\nfunction createBorderStyle(prop, transform) {\n return style({\n prop,\n themeKey: 'borders',\n transform\n });\n}\nexport const border = createBorderStyle('border', borderTransform);\nexport const borderTop = createBorderStyle('borderTop', borderTransform);\nexport const borderRight = createBorderStyle('borderRight', borderTransform);\nexport const borderBottom = createBorderStyle('borderBottom', borderTransform);\nexport const borderLeft = createBorderStyle('borderLeft', borderTransform);\nexport const borderColor = createBorderStyle('borderColor');\nexport const borderTopColor = createBorderStyle('borderTopColor');\nexport const borderRightColor = createBorderStyle('borderRightColor');\nexport const borderBottomColor = createBorderStyle('borderBottomColor');\nexport const borderLeftColor = createBorderStyle('borderLeftColor');\nexport const outline = createBorderStyle('outline', borderTransform);\nexport const outlineColor = createBorderStyle('outlineColor');\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const borderRadius = props => {\n if (props.borderRadius !== undefined && props.borderRadius !== null) {\n const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');\n const styleFromPropValue = propValue => ({\n borderRadius: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.borderRadius, styleFromPropValue);\n }\n return null;\n};\nborderRadius.propTypes = process.env.NODE_ENV !== 'production' ? {\n borderRadius: responsivePropType\n} : {};\nborderRadius.filterProps = ['borderRadius'];\nconst borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);\nexport default borders;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport responsivePropType from \"../responsivePropType/index.js\";\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const gap = props => {\n if (props.gap !== undefined && props.gap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap');\n const styleFromPropValue = propValue => ({\n gap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.gap, styleFromPropValue);\n }\n return null;\n};\ngap.propTypes = process.env.NODE_ENV !== 'production' ? {\n gap: responsivePropType\n} : {};\ngap.filterProps = ['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const columnGap = props => {\n if (props.columnGap !== undefined && props.columnGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap');\n const styleFromPropValue = propValue => ({\n columnGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.columnGap, styleFromPropValue);\n }\n return null;\n};\ncolumnGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n columnGap: responsivePropType\n} : {};\ncolumnGap.filterProps = ['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const rowGap = props => {\n if (props.rowGap !== undefined && props.rowGap !== null) {\n const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap');\n const styleFromPropValue = propValue => ({\n rowGap: getValue(transformer, propValue)\n });\n return handleBreakpoints(props, props.rowGap, styleFromPropValue);\n }\n return null;\n};\nrowGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n rowGap: responsivePropType\n} : {};\nrowGap.filterProps = ['rowGap'];\nexport const gridColumn = style({\n prop: 'gridColumn'\n});\nexport const gridRow = style({\n prop: 'gridRow'\n});\nexport const gridAutoFlow = style({\n prop: 'gridAutoFlow'\n});\nexport const gridAutoColumns = style({\n prop: 'gridAutoColumns'\n});\nexport const gridAutoRows = style({\n prop: 'gridAutoRows'\n});\nexport const gridTemplateColumns = style({\n prop: 'gridTemplateColumns'\n});\nexport const gridTemplateRows = style({\n prop: 'gridTemplateRows'\n});\nexport const gridTemplateAreas = style({\n prop: 'gridTemplateAreas'\n});\nexport const gridArea = style({\n prop: 'gridArea'\n});\nconst grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\nexport default grid;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nexport function paletteTransform(value, userValue) {\n if (userValue === 'grey') {\n return userValue;\n }\n return value;\n}\nexport const color = style({\n prop: 'color',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const bgcolor = style({\n prop: 'bgcolor',\n cssProperty: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nexport const backgroundColor = style({\n prop: 'backgroundColor',\n themeKey: 'palette',\n transform: paletteTransform\n});\nconst palette = compose(color, bgcolor, backgroundColor);\nexport default palette;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { handleBreakpoints, values as breakpointsValues } from \"../breakpoints/index.js\";\nexport function sizingTransform(value) {\n return value <= 1 && value !== 0 ? `${value * 100}%` : value;\n}\nexport const width = style({\n prop: 'width',\n transform: sizingTransform\n});\nexport const maxWidth = props => {\n if (props.maxWidth !== undefined && props.maxWidth !== null) {\n const styleFromPropValue = propValue => {\n const breakpoint = props.theme?.breakpoints?.values?.[propValue] || breakpointsValues[propValue];\n if (!breakpoint) {\n return {\n maxWidth: sizingTransform(propValue)\n };\n }\n if (props.theme?.breakpoints?.unit !== 'px') {\n return {\n maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`\n };\n }\n return {\n maxWidth: breakpoint\n };\n };\n return handleBreakpoints(props, props.maxWidth, styleFromPropValue);\n }\n return null;\n};\nmaxWidth.filterProps = ['maxWidth'];\nexport const minWidth = style({\n prop: 'minWidth',\n transform: sizingTransform\n});\nexport const height = style({\n prop: 'height',\n transform: sizingTransform\n});\nexport const maxHeight = style({\n prop: 'maxHeight',\n transform: sizingTransform\n});\nexport const minHeight = style({\n prop: 'minHeight',\n transform: sizingTransform\n});\nexport const sizeWidth = style({\n prop: 'size',\n cssProperty: 'width',\n transform: sizingTransform\n});\nexport const sizeHeight = style({\n prop: 'size',\n cssProperty: 'height',\n transform: sizingTransform\n});\nexport const boxSizing = style({\n prop: 'boxSizing'\n});\nconst sizing = compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\nexport default sizing;","import { padding, margin } from \"../spacing/index.js\";\nimport { borderRadius, borderTransform } from \"../borders/index.js\";\nimport { gap, rowGap, columnGap } from \"../cssGrid/index.js\";\nimport { paletteTransform } from \"../palette/index.js\";\nimport { maxWidth, sizingTransform } from \"../sizing/index.js\";\nconst defaultSxConfig = {\n // borders\n border: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderTop: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderRight: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderBottom: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderLeft: {\n themeKey: 'borders',\n transform: borderTransform\n },\n borderColor: {\n themeKey: 'palette'\n },\n borderTopColor: {\n themeKey: 'palette'\n },\n borderRightColor: {\n themeKey: 'palette'\n },\n borderBottomColor: {\n themeKey: 'palette'\n },\n borderLeftColor: {\n themeKey: 'palette'\n },\n outline: {\n themeKey: 'borders',\n transform: borderTransform\n },\n outlineColor: {\n themeKey: 'palette'\n },\n borderRadius: {\n themeKey: 'shape.borderRadius',\n style: borderRadius\n },\n // palette\n color: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n bgcolor: {\n themeKey: 'palette',\n cssProperty: 'backgroundColor',\n transform: paletteTransform\n },\n backgroundColor: {\n themeKey: 'palette',\n transform: paletteTransform\n },\n // spacing\n p: {\n style: padding\n },\n pt: {\n style: padding\n },\n pr: {\n style: padding\n },\n pb: {\n style: padding\n },\n pl: {\n style: padding\n },\n px: {\n style: padding\n },\n py: {\n style: padding\n },\n padding: {\n style: padding\n },\n paddingTop: {\n style: padding\n },\n paddingRight: {\n style: padding\n },\n paddingBottom: {\n style: padding\n },\n paddingLeft: {\n style: padding\n },\n paddingX: {\n style: padding\n },\n paddingY: {\n style: padding\n },\n paddingInline: {\n style: padding\n },\n paddingInlineStart: {\n style: padding\n },\n paddingInlineEnd: {\n style: padding\n },\n paddingBlock: {\n style: padding\n },\n paddingBlockStart: {\n style: padding\n },\n paddingBlockEnd: {\n style: padding\n },\n m: {\n style: margin\n },\n mt: {\n style: margin\n },\n mr: {\n style: margin\n },\n mb: {\n style: margin\n },\n ml: {\n style: margin\n },\n mx: {\n style: margin\n },\n my: {\n style: margin\n },\n margin: {\n style: margin\n },\n marginTop: {\n style: margin\n },\n marginRight: {\n style: margin\n },\n marginBottom: {\n style: margin\n },\n marginLeft: {\n style: margin\n },\n marginX: {\n style: margin\n },\n marginY: {\n style: margin\n },\n marginInline: {\n style: margin\n },\n marginInlineStart: {\n style: margin\n },\n marginInlineEnd: {\n style: margin\n },\n marginBlock: {\n style: margin\n },\n marginBlockStart: {\n style: margin\n },\n marginBlockEnd: {\n style: margin\n },\n // display\n displayPrint: {\n cssProperty: false,\n transform: value => ({\n '@media print': {\n display: value\n }\n })\n },\n display: {},\n overflow: {},\n textOverflow: {},\n visibility: {},\n whiteSpace: {},\n // flexbox\n flexBasis: {},\n flexDirection: {},\n flexWrap: {},\n justifyContent: {},\n alignItems: {},\n alignContent: {},\n order: {},\n flex: {},\n flexGrow: {},\n flexShrink: {},\n alignSelf: {},\n justifyItems: {},\n justifySelf: {},\n // grid\n gap: {\n style: gap\n },\n rowGap: {\n style: rowGap\n },\n columnGap: {\n style: columnGap\n },\n gridColumn: {},\n gridRow: {},\n gridAutoFlow: {},\n gridAutoColumns: {},\n gridAutoRows: {},\n gridTemplateColumns: {},\n gridTemplateRows: {},\n gridTemplateAreas: {},\n gridArea: {},\n // positions\n position: {},\n zIndex: {\n themeKey: 'zIndex'\n },\n top: {},\n right: {},\n bottom: {},\n left: {},\n // shadows\n boxShadow: {\n themeKey: 'shadows'\n },\n // sizing\n width: {\n transform: sizingTransform\n },\n maxWidth: {\n style: maxWidth\n },\n minWidth: {\n transform: sizingTransform\n },\n height: {\n transform: sizingTransform\n },\n maxHeight: {\n transform: sizingTransform\n },\n minHeight: {\n transform: sizingTransform\n },\n boxSizing: {},\n // typography\n font: {\n themeKey: 'font'\n },\n fontFamily: {\n themeKey: 'typography'\n },\n fontSize: {\n themeKey: 'typography'\n },\n fontStyle: {\n themeKey: 'typography'\n },\n fontWeight: {\n themeKey: 'typography'\n },\n letterSpacing: {},\n textTransform: {},\n lineHeight: {},\n textAlign: {},\n typography: {\n cssProperty: false,\n themeKey: 'typography'\n }\n};\nexport default defaultSxConfig;","import capitalize from '@mui/utils/capitalize';\nimport merge from \"../merge/index.js\";\nimport { getPath, getStyleValue as getValue } from \"../style/index.js\";\nimport { handleBreakpoints, createEmptyBreakpointObject, removeUnusedBreakpoints } from \"../breakpoints/index.js\";\nimport { sortContainerQueries } from \"../cssContainerQueries/index.js\";\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nfunction objectsHaveSameKeys(...objects) {\n const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);\n const union = new Set(allKeys);\n return objects.every(object => union.size === Object.keys(object).length);\n}\nfunction callIfFn(maybeFn, arg) {\n return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function unstable_createStyleFunctionSx() {\n function getThemeValue(prop, val, theme, config) {\n const props = {\n [prop]: val,\n theme\n };\n const options = config[prop];\n if (!options) {\n return {\n [prop]: val\n };\n }\n const {\n cssProperty = prop,\n themeKey,\n transform,\n style\n } = options;\n if (val == null) {\n return null;\n }\n\n // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123\n if (themeKey === 'typography' && val === 'inherit') {\n return {\n [prop]: val\n };\n }\n const themeMapping = getPath(theme, themeKey) || {};\n if (style) {\n return style(props);\n }\n const styleFromPropValue = propValueFinal => {\n let value = getValue(themeMapping, transform, propValueFinal);\n if (propValueFinal === value && typeof propValueFinal === 'string') {\n // Haven't found value\n value = getValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n }\n if (cssProperty === false) {\n return value;\n }\n return {\n [cssProperty]: value\n };\n };\n return handleBreakpoints(props, val, styleFromPropValue);\n }\n function styleFunctionSx(props) {\n const {\n sx,\n theme = {}\n } = props || {};\n if (!sx) {\n return null; // Emotion & styled-components will neglect null\n }\n const config = theme.unstable_sxConfig ?? defaultSxConfig;\n\n /*\n * Receive `sxInput` as object or callback\n * and then recursively check keys & values to create media query object styles.\n * (the result will be used in `styled`)\n */\n function traverse(sxInput) {\n let sxObject = sxInput;\n if (typeof sxInput === 'function') {\n sxObject = sxInput(theme);\n } else if (typeof sxInput !== 'object') {\n // value\n return sxInput;\n }\n if (!sxObject) {\n return null;\n }\n const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);\n const breakpointsKeys = Object.keys(emptyBreakpoints);\n let css = emptyBreakpoints;\n Object.keys(sxObject).forEach(styleKey => {\n const value = callIfFn(sxObject[styleKey], theme);\n if (value !== null && value !== undefined) {\n if (typeof value === 'object') {\n if (config[styleKey]) {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n } else {\n const breakpointsValues = handleBreakpoints({\n theme\n }, value, x => ({\n [styleKey]: x\n }));\n if (objectsHaveSameKeys(breakpointsValues, value)) {\n css[styleKey] = styleFunctionSx({\n sx: value,\n theme\n });\n } else {\n css = merge(css, breakpointsValues);\n }\n }\n } else {\n css = merge(css, getThemeValue(styleKey, value, theme, config));\n }\n }\n });\n return sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css));\n }\n return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);\n }\n return styleFunctionSx;\n}\nconst styleFunctionSx = unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps = ['sx'];\nexport default styleFunctionSx;","/**\n * A universal utility to style components with multiple color modes. Always use it from the theme object.\n * It works with:\n * - [Basic theme](https://mui.com/material-ui/customization/dark-mode/)\n * - [CSS theme variables](https://mui.com/material-ui/customization/css-theme-variables/overview/)\n * - Zero-runtime engine\n *\n * Tips: Use an array over object spread and place `theme.applyStyles()` last.\n *\n * With the styled function:\n * ✅ [{ background: '#e5e5e5' }, theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * With the sx prop:\n * ✅ [{ background: '#e5e5e5' }, theme => theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme => theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * @example\n * 1. using with `styled`:\n * ```jsx\n * const Component = styled('div')(({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]);\n * ```\n *\n * @example\n * 2. using with `sx` prop:\n * ```jsx\n * <Box sx={[\n * { background: '#e5e5e5' },\n * theme => theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ]}\n * />\n * ```\n *\n * @example\n * 3. theming a component:\n * ```jsx\n * extendTheme({\n * components: {\n * MuiButton: {\n * styleOverrides: {\n * root: ({ theme }) => [\n * { background: '#e5e5e5' },\n * theme.applyStyles('dark', {\n * background: '#1c1c1c',\n * color: '#fff',\n * }),\n * ],\n * },\n * }\n * }\n * })\n *```\n */\nexport default function applyStyles(key, styles) {\n // @ts-expect-error this is 'any' type\n const theme = this;\n if (theme.vars) {\n if (!theme.colorSchemes?.[key] || typeof theme.getColorSchemeSelector !== 'function') {\n return {};\n }\n // If CssVarsProvider is used as a provider, returns '*:where({selector}) &'\n let selector = theme.getColorSchemeSelector(key);\n if (selector === '&') {\n return styles;\n }\n if (selector.includes('data-') || selector.includes('.')) {\n // '*' is required as a workaround for Emotion issue (https://github.com/emotion-js/emotion/issues/2836)\n selector = `*:where(${selector.replace(/\\s*&$/, '')}) &`;\n }\n return {\n [selector]: styles\n };\n }\n if (theme.palette.mode === key) {\n return styles;\n }\n return {};\n}","'use client';\n\nimport * as React from 'react';\nimport { ThemeContext } from '@mui/styled-engine';\nfunction isObjectEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction useTheme(defaultTheme = null) {\n const contextTheme = React.useContext(ThemeContext);\n return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme : contextTheme;\n}\nexport default useTheme;","'use client';\n\nimport createTheme from \"../createTheme/index.js\";\nimport useThemeWithoutDefault from \"../useThemeWithoutDefault/index.js\";\nexport const systemDefaultTheme = createTheme();\nfunction useTheme(defaultTheme = systemDefaultTheme) {\n return useThemeWithoutDefault(defaultTheme);\n}\nexport default useTheme;","import deepmerge from '@mui/utils/deepmerge';\nimport createBreakpoints from \"../createBreakpoints/createBreakpoints.js\";\nimport cssContainerQueries from \"../cssContainerQueries/index.js\";\nimport shape from \"./shape.js\";\nimport createSpacing from \"./createSpacing.js\";\nimport styleFunctionSx from \"../styleFunctionSx/styleFunctionSx.js\";\nimport defaultSxConfig from \"../styleFunctionSx/defaultSxConfig.js\";\nimport applyStyles from \"./applyStyles.js\";\nfunction createTheme(options = {}, ...args) {\n const {\n breakpoints: breakpointsInput = {},\n palette: paletteInput = {},\n spacing: spacingInput,\n shape: shapeInput = {},\n ...other\n } = options;\n const breakpoints = createBreakpoints(breakpointsInput);\n const spacing = createSpacing(spacingInput);\n let muiTheme = deepmerge({\n breakpoints,\n direction: 'ltr',\n components: {},\n // Inject component definitions.\n palette: {\n mode: 'light',\n ...paletteInput\n },\n spacing,\n shape: {\n ...shape,\n ...shapeInput\n }\n }, other);\n muiTheme = cssContainerQueries(muiTheme);\n muiTheme.applyStyles = applyStyles;\n muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n muiTheme.unstable_sxConfig = {\n ...defaultSxConfig,\n ...other?.unstable_sxConfig\n };\n muiTheme.unstable_sx = function sx(props) {\n return styleFunctionSx({\n sx: props,\n theme: this\n });\n };\n return muiTheme;\n}\nexport default createTheme;","import { createUnarySpacing } from \"../spacing/index.js\";\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n\nexport default function createSpacing(spacingInput = 8,\n// Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.\n// Smaller components, such as icons, can align to a 4dp grid.\n// https://m2.material.io/design/layout/understanding-layout.html\ntransform = createUnarySpacing({\n spacing: spacingInput\n})) {\n // Already transformed.\n if (spacingInput.mui) {\n return spacingInput;\n }\n const spacing = (...argsInput) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!(argsInput.length <= 4)) {\n console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);\n }\n }\n const args = argsInput.length === 0 ? [1] : argsInput;\n return args.map(argument => {\n const output = transform(argument);\n return typeof output === 'number' ? `${output}px` : output;\n }).join(' ');\n };\n spacing.mui = true;\n return spacing;\n}","import { isPlainObject } from '@mui/utils/deepmerge';\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nconst splitProps = props => {\n const result = {\n systemProps: {},\n otherProps: {}\n };\n const config = props?.theme?.unstable_sxConfig ?? defaultSxConfig;\n Object.keys(props).forEach(prop => {\n if (config[prop]) {\n result.systemProps[prop] = props[prop];\n } else {\n result.otherProps[prop] = props[prop];\n }\n });\n return result;\n};\nexport default function extendSxProp(props) {\n const {\n sx: inSx,\n ...other\n } = props;\n const {\n systemProps,\n otherProps\n } = splitProps(other);\n let finalSx;\n if (Array.isArray(inSx)) {\n finalSx = [systemProps, ...inSx];\n } else if (typeof inSx === 'function') {\n finalSx = (...args) => {\n const result = inSx(...args);\n if (!isPlainObject(result)) {\n return systemProps;\n }\n return {\n ...systemProps,\n ...result\n };\n };\n } else {\n finalSx = {\n ...systemProps,\n ...inSx\n };\n }\n return {\n ...otherProps,\n sx: finalSx\n };\n}","const defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n let generate = defaultGenerator;\n return {\n configure(generator) {\n generate = generator;\n },\n generate(componentName) {\n return generate(componentName);\n },\n reset() {\n generate = defaultGenerator;\n }\n };\n};\nconst ClassNameGenerator = createClassNameGenerator();\nexport default ClassNameGenerator;","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import ClassNameGenerator from \"../ClassNameGenerator/index.js\";\nexport const globalStateClasses = {\n active: 'active',\n checked: 'checked',\n completed: 'completed',\n disabled: 'disabled',\n error: 'error',\n expanded: 'expanded',\n focused: 'focused',\n focusVisible: 'focusVisible',\n open: 'open',\n readOnly: 'readOnly',\n required: 'required',\n selected: 'selected'\n};\nexport default function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n const globalStateClass = globalStateClasses[slot];\n return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator.generate(componentName)}-${slot}`;\n}\nexport function isGlobalState(slot) {\n return globalStateClasses[slot] !== undefined;\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nconst boxClasses = generateUtilityClasses('MuiBox', ['root']);\nexport default boxClasses;","'use client';\n\nimport PropTypes from 'prop-types';\nimport ClassNameGenerator from '@mui/utils/ClassNameGenerator';\nimport createBox from \"../createBox/index.js\";\nimport boxClasses from \"./boxClasses.js\";\nconst Box = createBox({\n defaultClassName: boxClasses.root,\n generateClassName: ClassNameGenerator.generate\n});\nprocess.env.NODE_ENV !== \"production\" ? Box.propTypes /* remove-proptypes */ = {\n // ┌────────────────────────────── Warning ──────────────────────────────┐\n // │ These PropTypes are generated from the TypeScript type definitions. │\n // │ To update them, edit the d.ts file and run `pnpm proptypes`. │\n // └─────────────────────────────────────────────────────────────────────┘\n /**\n * @ignore\n */\n children: PropTypes.node,\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: PropTypes.elementType,\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Box;","'use client';\n\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport styled from '@mui/styled-engine';\nimport styleFunctionSx, { extendSxProp } from \"../styleFunctionSx/index.js\";\nimport useTheme from \"../useTheme/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createBox(options = {}) {\n const {\n themeId,\n defaultTheme,\n defaultClassName = 'MuiBox-root',\n generateClassName\n } = options;\n const BoxRoot = styled('div', {\n shouldForwardProp: prop => prop !== 'theme' && prop !== 'sx' && prop !== 'as'\n })(styleFunctionSx);\n const Box = /*#__PURE__*/React.forwardRef(function Box(inProps, ref) {\n const theme = useTheme(defaultTheme);\n const {\n className,\n component = 'div',\n ...other\n } = extendSxProp(inProps);\n return /*#__PURE__*/_jsx(BoxRoot, {\n as: component,\n ref: ref,\n className: clsx(className, generateClassName ? generateClassName(defaultClassName) : defaultClassName),\n theme: themeId ? theme[themeId] || theme : theme,\n ...other\n });\n });\n return Box;\n}","/**\n * @mui/styled-engine v7.1.1\n *\n * @license MIT\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use client';\n\n/* eslint-disable no-underscore-dangle */\nimport emStyled from '@emotion/styled';\nimport { serializeStyles as emSerializeStyles } from '@emotion/serialize';\nexport default function styled(tag, options) {\n const stylesFactory = emStyled(tag, options);\n if (process.env.NODE_ENV !== 'production') {\n return (...styles) => {\n const component = typeof tag === 'string' ? `\"${tag}\"` : 'component';\n if (styles.length === 0) {\n console.error([`MUI: Seems like you called \\`styled(${component})()\\` without a \\`style\\` argument.`, 'You must provide a `styles` argument: `styled(\"div\")(styleYouForgotToPass)`.'].join('\\n'));\n } else if (styles.some(style => style === undefined)) {\n console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);\n }\n return stylesFactory(...styles);\n };\n }\n return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_mutateStyles(tag, processor) {\n // Emotion attaches all the styles as `__emotion_styles`.\n // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n if (Array.isArray(tag.__emotion_styles)) {\n tag.__emotion_styles = processor(tag.__emotion_styles);\n }\n}\n\n// Emotion only accepts an array, but we want to avoid allocations\nconst wrapper = [];\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_serializeStyles(styles) {\n wrapper[0] = styles;\n return emSerializeStyles(wrapper);\n}\nexport { ThemeContext, keyframes, css } from '@emotion/react';\nexport { default as StyledEngineProvider } from \"./StyledEngineProvider/index.js\";\nexport { default as GlobalStyles } from \"./GlobalStyles/index.js\";","import generateUtilityClass from \"../generateUtilityClass/index.js\";\nexport default function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n const result = {};\n slots.forEach(slot => {\n result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);\n });\n return result;\n}","export function hasDigitsOnly(str: string) {\r\n return /^\\d+$/.test(str);\r\n}\r\n\r\nexport function isNumber(value: any) {\r\n return typeof value === \"number\" && !isNaN(value);\r\n}\r\n\r\nexport function isNumeric(value: string) {\r\n return (\r\n typeof value === \"string\" && value.trim() !== \"\" && !isNaN(Number(value))\r\n );\r\n}\r\n\r\nexport function capitalizeFirstLetter(str: string) {\r\n if (!str) return \"\";\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\n\r\nexport function isValidEmail(email) {\r\n const re = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n return re.test(email);\r\n}\r\n\r\nexport function timeAgo(dateInput, appDirection: \"ltr\" | \"rtl\") {\r\n const date = new Date(dateInput);\r\n const now = new Date();\r\n const diffInSeconds = Math.floor((date - now) / 1000); // Note: future is positive\r\n const absDiff = Math.abs(diffInSeconds);\r\n\r\n const locale = appDirection === \"rtl\" ? \"ar\" : \"en\";\r\n\r\n const rtf = new Intl.RelativeTimeFormat(locale, { numeric: \"auto\" });\r\n\r\n const units = [\r\n { unit: \"year\", seconds: 31536000 },\r\n { unit: \"month\", seconds: 2592000 },\r\n { unit: \"week\", seconds: 604800 },\r\n { unit: \"day\", seconds: 86400 },\r\n { unit: \"hour\", seconds: 3600 },\r\n { unit: \"minute\", seconds: 60 },\r\n { unit: \"second\", seconds: 1 },\r\n ];\r\n\r\n for (const { unit, seconds } of units) {\r\n const delta = Math.floor(diffInSeconds / seconds);\r\n if (Math.abs(delta) > 1) {\r\n return rtf.format(delta, unit);\r\n }\r\n }\r\n\r\n return locale === \"ar\" ? \"الآن\" : \"just now\";\r\n}\r\n","import { Grid2 } from \"@mui/material\";\r\nimport TemplateTextField from \"./FormFields/TemplateTextField\";\r\nimport Datefield from \"./FormFields/Datefield\";\r\nimport DatetimeField from \"./FormFields/DatetimeField\";\r\nimport ComboBox from \"./FormFields/ComboBox\";\r\nimport CheckBox from \"./FormFields/CheckBox\";\r\nimport { DATE_FORMAT, DATE_TIME_FORMAT } from \"../../../../util/constants\";\r\nimport { isNumeric } from \"../../../../util/AppUtils\";\r\nimport { FormElementFieldProps } from \"../DataEntryTypes\";\r\nimport SystemLookupCombobox from \"./FormFields/SystemLookupCombobox\";\r\n\r\nconst FormElementField: React.FC<FormElementFieldProps> = (\r\n element: FormElementFieldProps\r\n) => {\r\n if (element?.fieldInfo) {\r\n const props = element.fieldInfo;\r\n const formManager = element?.formManager || null;\r\n const formActions = element?.formActions || null;\r\n const formValues = element?.formValues || null;\r\n const fieldName: any = element?.fieldInfo?.fieldName || null;\r\n const fieldType = element?.fieldInfo?.fieldType || null;\r\n if (!(props && formManager && formValues && fieldName && fieldType)) {\r\n return <></>;\r\n }\r\n return !element.hiddenFields.includes(fieldName) ? (\r\n <Grid2\r\n size={\r\n props?.formProps?.fieldSize || {\r\n lg: 12,\r\n md: 12,\r\n sm: 12,\r\n }\r\n }\r\n sx={{\r\n padding: 1,\r\n width: \"100%\",\r\n }}\r\n >\r\n {fieldType === \"text\" || fieldType === \"number\" ? (\r\n <TemplateTextField\r\n {...props.muiTextFieldProps}\r\n fullWidth\r\n type={fieldType}\r\n disabled={\r\n props?.disabled || element.disabledFields.includes(fieldName)\r\n ? true\r\n : false\r\n }\r\n hidden={props?.hidden || false}\r\n label={props?.fieldLabel}\r\n value={formValues[fieldName]}\r\n onChange={(event) => {\r\n let newValue = null;\r\n if (event.target.value != \"\") {\r\n if (fieldType === \"number\" && isNumeric(event.target.value)) {\r\n newValue = Number(event.target.value);\r\n } else {\r\n newValue = event.target.value;\r\n }\r\n }\r\n formManager.setValue(fieldName, newValue);\r\n if (props?.formProps?.onValueChangeCallBack) {\r\n props?.formProps?.onValueChangeCallBack(\r\n newValue,\r\n formManager,\r\n formActions\r\n );\r\n }\r\n }}\r\n sx={{\r\n \"& .MuiInputBase-root\": {\r\n height: `${props?.formProps?.fieldHeight}px` || undefined,\r\n },\r\n \"& .MuiInputBase-input\": {\r\n height: \"100% !important\", // forces full height usage\r\n },\r\n ...props?.formProps?.style,\r\n }}\r\n error={formManager.formState.errors[fieldName] != undefined}\r\n helperText={formManager?.formState?.errors[\r\n fieldName\r\n ]?.message?.toString()}\r\n />\r\n ) : props?.fieldType === \"date\" ? (\r\n <Datefield\r\n format={props?.dateFormat || DATE_FORMAT}\r\n sx={props?.formProps?.style || { width: \"100%\" }}\r\n disabled={\r\n props?.disabled || element.disabledFields.includes(fieldName)\r\n ? true\r\n : false\r\n }\r\n label={props?.fieldLabel}\r\n onChangeCallBack={(v: any) => {\r\n formManager.setValue(fieldName, v);\r\n if (props?.formProps?.onValueChangeCallBack) {\r\n props?.formProps?.onValueChangeCallBack(\r\n v,\r\n formManager,\r\n formActions\r\n );\r\n }\r\n }}\r\n value={formValues[fieldName]}\r\n error={formManager.formState.errors[fieldName] != undefined}\r\n errorMessage={formManager?.formState?.errors[\r\n fieldName\r\n ]?.message?.toString()}\r\n />\r\n ) : props?.fieldType === \"datetime\" ? (\r\n <DatetimeField\r\n format={props?.dateFormat || DATE_TIME_FORMAT}\r\n sx={props?.formProps?.style || { width: \"100%\" }}\r\n disabled={\r\n props?.disabled || element.disabledFields.includes(fieldName)\r\n ? true\r\n : false\r\n }\r\n label={props?.fieldLabel}\r\n onChangeCallBack={(v: any) => {\r\n formManager.setValue(fieldName, v);\r\n if (props?.formProps?.onValueChangeCallBack) {\r\n props?.formProps?.onValueChangeCallBack(\r\n v,\r\n formManager,\r\n formActions\r\n );\r\n }\r\n }}\r\n value={formValues[fieldName]}\r\n error={formManager.formState.errors[fieldName] != undefined}\r\n errorMessage={formManager?.formState?.errors[\r\n fieldName\r\n ]?.message?.toString()}\r\n />\r\n ) : props?.fieldType === \"checkbox\" ? (\r\n <CheckBox\r\n label={props?.fieldLabel}\r\n onChangeCallBack={(v: any) => {\r\n formManager.setValue(fieldName, v);\r\n if (props?.formProps?.onValueChangeCallBack) {\r\n props?.formProps?.onValueChangeCallBack(\r\n v,\r\n formManager,\r\n formActions\r\n );\r\n }\r\n }}\r\n value={formValues[fieldName]}\r\n checkedValue={props?.checkedValue || true}\r\n unCheckedValue={props?.unCheckedValue || false}\r\n disabled={\r\n props?.disabled || element.disabledFields.includes(fieldName)\r\n ? true\r\n : false\r\n }\r\n sx={props?.formProps?.style}\r\n />\r\n ) : props?.fieldType === \"combobox\" ? (\r\n <ComboBox\r\n sx={props?.formProps?.style || { width: \"100%\" }}\r\n label={props?.fieldLabel}\r\n disabled={\r\n props?.disabled || element.disabledFields.includes(fieldName)\r\n ? true\r\n : false\r\n }\r\n onChangeCallBack={(v: any, selectedRecord: any) => {\r\n let newValue = null;\r\n if (v) {\r\n newValue = v + \"\";\r\n }\r\n formManager.setValue(fieldName, newValue);\r\n if (props?.formProps?.onValueChangeCallBack) {\r\n props?.formProps?.onValueChangeCallBack(\r\n newValue,\r\n formManager,\r\n formActions,\r\n selectedRecord\r\n );\r\n }\r\n }}\r\n options={props?.options || []}\r\n displayField={props?.optionDisplayField || \"\"}\r\n valueField={props?.optionValueField || \"\"}\r\n value={formValues[fieldName]}\r\n errorMessage={formManager?.formState?.errors[\r\n fieldName\r\n ]?.message?.toString()}\r\n />\r\n ) : props?.fieldType === \"lookup\" ? (\r\n <SystemLookupCombobox\r\n sx={props?.formProps?.style || { width: \"100%\" }}\r\n label={props?.fieldLabel}\r\n disabled={\r\n props?.disabled || element.disabledFields.includes(fieldName)\r\n ? true\r\n : false\r\n }\r\n onChangeCallBack={(v: any, selectedRecord: any) => {\r\n let newValue = null;\r\n if (v) {\r\n newValue = v + \"\";\r\n }\r\n formManager.setValue(fieldName, newValue);\r\n if (props?.formProps?.onValueChangeCallBack) {\r\n props?.formProps?.onValueChangeCallBack(\r\n newValue,\r\n formManager,\r\n formActions,\r\n selectedRecord\r\n );\r\n }\r\n }}\r\n lookupType={props.lookupType}\r\n value={formValues[fieldName]}\r\n errorMessage={formManager?.formState?.errors[\r\n fieldName\r\n ]?.message?.toString()}\r\n />\r\n ) : null}\r\n </Grid2>\r\n ) : (\r\n <></>\r\n );\r\n } else {\r\n return <></>;\r\n }\r\n};\r\n\r\nexport default FormElementField;\r\n","import { Button } from \"@mui/material\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { RecordAction } from \"../DataEntryTypes\";\r\nimport useSession from \"../../../../hooks/UseSession\";\r\nimport { useConfirmationWindow } from \"../../../../hooks/UseConfirmationWindow\";\r\n\r\nconst FormAction: React.FC<RecordAction> = (action: RecordAction) => {\r\n const session = useSession();\r\n const { ConfirmationWindow, setOpen: setConfirmationWindowState } =\r\n useConfirmationWindow({\r\n body: action?.confirmationMessage || \"\",\r\n title: \"Confirmation\",\r\n onConfirmationCallBk: () => {\r\n action?.actionFn(action?.record);\r\n },\r\n });\r\n if (\r\n action?.authority === undefined ||\r\n action?.authority === null ||\r\n session.isUserAuthorized(action.authority)\r\n ) {\r\n return (\r\n <>\r\n <ConfirmationWindow />\r\n <Button\r\n variant={action?.formActionProps?.actionButtonVariant}\r\n color={action?.formActionProps?.actionButtonColor}\r\n onClick={() => {\r\n if (action?.actionFn) {\r\n if (action?.preActionValidation) {\r\n if (!action.preActionValidation(action.record)) {\r\n return;\r\n }\r\n }\r\n if (action?.isConfirmationRequired === true) {\r\n setConfirmationWindowState(true);\r\n } else {\r\n action?.actionFn(action.record);\r\n }\r\n }\r\n }}\r\n >\r\n {action?.icon ? (\r\n <FontAwesomeIcon\r\n icon={action.icon}\r\n style={{ marginRight: 5, marginLeft: 5 }}\r\n />\r\n ) : (\r\n <></>\r\n )}\r\n <div>{action?.label}</div>\r\n </Button>\r\n </>\r\n );\r\n } else {\r\n return <></>;\r\n }\r\n};\r\n\r\nexport default FormAction;\r\n","import { Grid2 } from \"@mui/material\";\r\nimport FormElementField from \"./FormElementField\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport FormAction from \"./FormAction\";\r\nimport {\r\n FormElementGroupProps,\r\n FormElementProps,\r\n RecordAction,\r\n} from \"../DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst FormElementGroup: React.FC<FormElementGroupProps> = (\r\n props: FormElementGroupProps\r\n) => {\r\n const { t } = useTranslation();\r\n return (\r\n <>\r\n <Grid2 container sx={props?.style} alignItems=\"flex-start\">\r\n {props?.label ? (\r\n <Grid2\r\n size={12}\r\n sx={{\r\n padding: 1,\r\n fontWeight: \"bold\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n }}\r\n >\r\n {props?.icon ? (\r\n <>\r\n <FontAwesomeIcon\r\n icon={props.icon}\r\n style={{ marginRight: 5, marginLeft: 5 }}\r\n />\r\n <div>{t(props.label)}</div>\r\n </>\r\n ) : (\r\n <>{t(props.label)}</>\r\n )}\r\n </Grid2>\r\n ) : (\r\n <></>\r\n )}\r\n {props?.elements\r\n ? props.elements.map((element: FormElementProps) => {\r\n if (element.type === \"group\") {\r\n return (\r\n <FormElementGroup\r\n {...element.props}\r\n formManager={props.formManager}\r\n formValues={props.formValues}\r\n formActions={props.formActions}\r\n hiddenFields={props.hiddenFields}\r\n disabledFields={props.disabledFields}\r\n />\r\n );\r\n } else if (element.type === \"field\" && element.mode === \"props\") {\r\n return (\r\n <FormElementField\r\n fieldInfo={element.props}\r\n formManager={props.formManager}\r\n formValues={props.formValues}\r\n formActions={props.formActions}\r\n hiddenFields={props.hiddenFields}\r\n disabledFields={props.disabledFields}\r\n />\r\n );\r\n } else if (element.type === \"field\" && element.mode === \"node\") {\r\n return (\r\n <Grid2\r\n size={\r\n element?.props?.formProps?.fieldSize || {\r\n lg: 3,\r\n md: 6,\r\n sm: 12,\r\n }\r\n }\r\n sx={{ padding: 1, width: \"100%\" }}\r\n >\r\n <element.node\r\n formManager={props.formManager}\r\n formValues={props.formValues}\r\n formActions={props.formActions}\r\n />\r\n </Grid2>\r\n );\r\n }\r\n })\r\n : null}\r\n\r\n {props?.actions ? (\r\n <Grid2 size={{ sm: 12 }} sx={{ padding: 1 }}>\r\n {props.actions.map((action: RecordAction) => {\r\n return <FormAction {...action} record={props.formValues} />;\r\n })}\r\n </Grid2>\r\n ) : (\r\n <></>\r\n )}\r\n </Grid2>\r\n </>\r\n );\r\n};\r\n\r\nexport default FormElementGroup;\r\n","import { useEffect, useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { Avatar, SxProps } from \"@mui/material\";\r\n\r\ntype AttachmentImageViewerProps = {\r\n attachmentId?: number;\r\n attachmentCode?: string;\r\n refKey?: string;\r\n category?: string;\r\n showAsAvatar?: boolean;\r\n onErrorImage?: string;\r\n style?: SxProps;\r\n};\r\n\r\nconst AttachmentImageViewer: React.FC<AttachmentImageViewerProps> = (props) => {\r\n const apiBaseUrl = useSelector(\r\n (state: any) => state.AppInfo.value.apiBaseUrl\r\n );\r\n const [imgSrc, setImgSrc] = useState(null);\r\n const handleImageSrc = () => {\r\n let imagePath = apiBaseUrl + \"/api/v1/attachment/\";\r\n if (props?.attachmentId) {\r\n imagePath += \"download?attachmentId=\" + props.attachmentId;\r\n } else {\r\n imagePath += `downloadImage?attachmentCode=${props.attachmentCode}&refKey=${props.refKey}`;\r\n if (props?.category) {\r\n imagePath += `&category=${props.category}`;\r\n }\r\n }\r\n setImgSrc(imagePath);\r\n };\r\n useEffect(() => {\r\n handleImageSrc();\r\n }, [props]);\r\n {\r\n /* </Avatar>\r\n src={imgSrc}\r\n loading={}\r\n sx={props.style}\r\n onError={() => {\r\n if (props?.onErrorImage) {\r\n setImgSrc(props.onErrorImage);\r\n } else {\r\n setImgSrc(\"/no_image.png\");\r\n }\r\n }}\r\n /> */\r\n }\r\n return props?.showAsAvatar ? (\r\n <Avatar\r\n sx={props.style}\r\n onError={() => {\r\n if (props?.onErrorImage) {\r\n setImgSrc(props.onErrorImage);\r\n } else {\r\n setImgSrc(\"/no_image.png\");\r\n }\r\n }}\r\n src={imgSrc}\r\n />\r\n ) : (\r\n <img\r\n src={imgSrc}\r\n loading=\"lazy\"\r\n alt=\"image\"\r\n onError={() => {\r\n if (props?.onErrorImage) {\r\n setImgSrc(props.onErrorImage);\r\n } else {\r\n setImgSrc(\"/no_image.png\");\r\n }\r\n }}\r\n style={{\r\n width: \"100%\",\r\n height: \"100%\",\r\n objectFit: \"cover\",\r\n display: \"block\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default AttachmentImageViewer;\r\n","import Card from \"@mui/material/Card\";\r\nimport CardActions from \"@mui/material/CardActions\";\r\nimport CardContent from \"@mui/material/CardContent\";\r\nimport CardMedia from \"@mui/material/CardMedia\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { IconButton, Tooltip } from \"@mui/material\";\r\nimport { useAxios, useConfirmationWindow, useSession } from \"../../../hooks\";\r\nimport AttachmentImageViewer from \"./AttachmentImageViewer\";\r\n\r\nexport type attachment = {\r\n attachmentCode: string;\r\n setAttachmentConfig: (props: any) => void;\r\n id: number;\r\n attachmentConfigId: number;\r\n attachmentSize: number;\r\n category: string;\r\n docType: string;\r\n fileName: string;\r\n refKey: string;\r\n allowDelete?: boolean;\r\n downloadAuthorityKey?: string;\r\n remark: string;\r\n};\r\n\r\nconst AttachmentCard: React.FC<attachment> = (props) => {\r\n const { handleGetRequest, handleDeleteRequest } = useAxios();\r\n const { isUserAuthorized } = useSession();\r\n let allowDownload = true;\r\n if (props?.downloadAuthorityKey) {\r\n allowDownload = isUserAuthorized(props.downloadAuthorityKey);\r\n }\r\n const handleDelete = async () => {\r\n await handleDeleteRequest({\r\n endPointURI: \"api/v1/attachment/archive\",\r\n parameters: {\r\n attachmentCode: props.attachmentCode,\r\n refKey: props.refKey,\r\n attachmentId: props.id,\r\n },\r\n successCallBkFn: (response) => {\r\n props.setAttachmentConfig(response.data);\r\n },\r\n showMask: true,\r\n });\r\n };\r\n const { ConfirmationWindow, setOpen } = useConfirmationWindow({\r\n title: \"Confirmation\",\r\n body: \"Are you sure you want to delete this attachment?\",\r\n onConfirmationCallBk: () => {\r\n handleDelete();\r\n },\r\n });\r\n\r\n const handleDownload = async () => {\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/attachment/download\",\r\n parameters: {\r\n attachmentId: props.id,\r\n },\r\n showMask: true,\r\n responseType: \"blob\",\r\n successCallBkFn: (response) => {\r\n const url = window.URL.createObjectURL(new Blob([response.data]));\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n link.setAttribute(\"download\", props.fileName);\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n },\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n <ConfirmationWindow />\r\n <Card sx={{ width: 300, border: \"0.5px solid gray\" }}>\r\n <CardMedia\r\n sx={{\r\n height: 140,\r\n width: 300,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n {props?.docType.toLocaleLowerCase().includes(\"image\") ? (\r\n <AttachmentImageViewer attachmentId={props.id} />\r\n ) : (\r\n <FontAwesomeIcon icon=\"file\" size=\"3x\" />\r\n )}\r\n </CardMedia>\r\n <CardContent>\r\n <Typography gutterBottom variant=\"h6\" component=\"div\">\r\n {props.fileName}\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ color: \"text.secondary\" }}>\r\n {`File Size: ${props?.attachmentSize || \"unknown\"} kb`}\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ color: \"text.secondary\" }}>\r\n {`File Type: ${props?.category || \"NA\"}`}\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ color: \"text.secondary\" }}>\r\n {props.remark}\r\n </Typography>\r\n </CardContent>\r\n <CardActions>\r\n {props?.allowDelete ? (\r\n <IconButton\r\n size=\"small\"\r\n onClick={() => {\r\n setOpen(true);\r\n }}\r\n >\r\n <Tooltip title=\"Delete Attachment\">\r\n <FontAwesomeIcon icon=\"trash\" />\r\n </Tooltip>\r\n </IconButton>\r\n ) : (\r\n <></>\r\n )}\r\n\r\n <div style={{ flex: 1 }}></div>\r\n {allowDownload ? (\r\n <IconButton size=\"small\" onClick={handleDownload}>\r\n <Tooltip title=\"Download Attachment\">\r\n <FontAwesomeIcon icon=\"download\" />\r\n </Tooltip>\r\n </IconButton>\r\n ) : (\r\n <></>\r\n )}\r\n </CardActions>\r\n </Card>\r\n </>\r\n );\r\n};\r\n\r\nexport default AttachmentCard;\r\n","import { useEffect, useState } from \"react\";\r\nimport { useAxios, useSession } from \"../../../hooks\";\r\nimport { toast } from \"react-toastify\";\r\nimport { Box, Button, Grid2, Paper } from \"@mui/material\";\r\nimport ComboBox from \"../DataEntryTemplates/TemplateDataForm/FormFields/ComboBox\";\r\nimport TemplateTextField from \"../DataEntryTemplates/TemplateDataForm/FormFields/TemplateTextField\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport AttachmentCard from \"./AttachmentCard\";\r\n\r\nexport type AttachmentPanelProps = {\r\n attachmentCode: string;\r\n enableAttachment?: boolean;\r\n refKey: string;\r\n};\r\n\r\ntype AttachmentConfig = {\r\n id: number;\r\n attachmentCode: string;\r\n uploadDirectory: string;\r\n storageType: \"FILE_SYSTEM\" | \"SFTP\";\r\n maxAllowedNumberOfFiles: number;\r\n isCategoryRequired?: boolean;\r\n attachmentCategories?: string;\r\n uploadAuthorityKey?: string;\r\n downloadAuthorityKey?: string;\r\n allowedFileTypes?: string;\r\n refKeyAttachments?: Array<any>;\r\n};\r\n\r\nconst AttachmentPanel: React.FC<AttachmentPanelProps> = (props) => {\r\n const { handleUploadRequest, handleGetRequest } = useAxios();\r\n const [files, setFiles] = useState<FileList | null>(null);\r\n const [attachmentCategories, setAttachmentCategories] = useState<\r\n Array<string>\r\n >([]);\r\n const [remark, setRemark] = useState(null);\r\n const [selectedCategory, setSelectedCategory] = useState(null);\r\n const [allowedTypes, setAllowedTypes] = useState<Array<string>>([]);\r\n const [attachmentConfig, setAttachmentConfig] =\r\n useState<AttachmentConfig>(null);\r\n\r\n const loadAttachmentConfig = async () => {\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/attachment/info\",\r\n showMask: true,\r\n parameters: {\r\n attachmentCode: props.attachmentCode,\r\n refKey: props.refKey,\r\n },\r\n successCallBkFn: (response: any) => {\r\n setAttachmentConfig(response.data);\r\n },\r\n });\r\n };\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (e.target.files) {\r\n for (const file of e.target.files) {\r\n const fileExt = getFileExtension(file.name);\r\n if (allowedTypes.length > 0 && !allowedTypes.includes(fileExt)) {\r\n toast.error(fileExt + \" is not allowed\");\r\n return;\r\n }\r\n }\r\n }\r\n setFiles(e.target.files);\r\n };\r\n const { isUserAuthorized } = useSession();\r\n\r\n const handleUpload = async () => {\r\n let existingAttachments = attachmentConfig?.refKeyAttachments.length || 0;\r\n if (\r\n attachmentConfig?.maxAllowedNumberOfFiles &&\r\n files.length + existingAttachments >\r\n attachmentConfig.maxAllowedNumberOfFiles\r\n ) {\r\n toast.error(\r\n \"Maximum number of attachments is \" +\r\n attachmentConfig.maxAllowedNumberOfFiles\r\n );\r\n return;\r\n }\r\n if (\r\n attachmentConfig?.isCategoryRequired === true &&\r\n attachmentCategories.length > 0 &&\r\n (selectedCategory == null ||\r\n selectedCategory === undefined ||\r\n selectedCategory === \"\")\r\n ) {\r\n toast.error(\"You must selected document type to process your request\");\r\n return;\r\n }\r\n if (!files) {\r\n toast.error(\"You must add files to upload\");\r\n return;\r\n }\r\n debugger;\r\n for (const file of files) {\r\n if (file.type.startsWith(\"image/\")) {\r\n const MAX_SIZE_KB = 600;\r\n const maxSizeBytes = MAX_SIZE_KB * 1024;\r\n if (file.size > maxSizeBytes) {\r\n toast.error(\r\n `File ${file.name} is too large. Max allowed is ${MAX_SIZE_KB}KB.`\r\n );\r\n return;\r\n }\r\n }\r\n }\r\n\r\n await handleUploadRequest({\r\n endPointURI: \"api/v1/attachment/upload\",\r\n showMask: true,\r\n loadingMessage: \"Uploading files ... please wait\",\r\n parameters: {\r\n refKey: props.refKey,\r\n attachmentCode: props.attachmentCode,\r\n remark,\r\n category: selectedCategory,\r\n },\r\n files,\r\n successCallBkFn: (response) => {\r\n setAttachmentConfig(response.data);\r\n setFiles(null);\r\n setSelectedCategory(null);\r\n setRemark(null);\r\n toast.success(\"Your request has been process successfully\");\r\n },\r\n });\r\n };\r\n const getFileExtension = (name: string) => {\r\n return name.split(\".\").pop()?.toLowerCase() || \"\";\r\n };\r\n\r\n useEffect(() => {\r\n loadAttachmentConfig();\r\n }, [props.refKey, props.attachmentCode]);\r\n\r\n useEffect(() => {\r\n if (attachmentConfig?.allowedFileTypes) {\r\n setAllowedTypes(attachmentConfig.allowedFileTypes.split(\",\"));\r\n } else {\r\n setAllowedTypes([]);\r\n }\r\n if (attachmentConfig?.attachmentCategories) {\r\n const cats = [];\r\n for (const category of attachmentConfig.attachmentCategories.split(\",\")) {\r\n cats.push({ value: category });\r\n }\r\n setAttachmentCategories(cats);\r\n } else {\r\n setAttachmentCategories([]);\r\n }\r\n }, [attachmentConfig]);\r\n let showAttachments = true;\r\n if (\r\n attachmentConfig?.downloadAuthorityKey &&\r\n !isUserAuthorized(attachmentConfig?.downloadAuthorityKey)\r\n ) {\r\n showAttachments = false;\r\n }\r\n let allowUpload = true;\r\n if (props?.enableAttachment === false) {\r\n allowUpload = false;\r\n }\r\n if (\r\n attachmentConfig?.uploadAuthorityKey &&\r\n !isUserAuthorized(attachmentConfig.uploadAuthorityKey)\r\n ) {\r\n allowUpload = false;\r\n }\r\n\r\n return (\r\n <Paper\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n width: \"100%\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n overflow: \"hidden\",\r\n flexGrow: 1,\r\n }}\r\n >\r\n {allowUpload ? (\r\n <>\r\n {attachmentConfig?.maxAllowedNumberOfFiles === undefined ||\r\n attachmentConfig?.maxAllowedNumberOfFiles === null ||\r\n attachmentConfig?.maxAllowedNumberOfFiles >\r\n attachmentConfig.refKeyAttachments.length ? (\r\n <>\r\n <h3>\r\n <FontAwesomeIcon\r\n icon=\"paperclip\"\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n />\r\n Attachment Uploader\r\n </h3>\r\n <input\r\n type=\"file\"\r\n style={{ margin: 20 }}\r\n accept={attachmentConfig?.allowedFileTypes}\r\n multiple\r\n onChange={handleChange}\r\n />\r\n {attachmentCategories.length > 0 ? (\r\n <ComboBox\r\n label=\"Attachment Type\"\r\n sx={{ width: 300, m: 1 }}\r\n options={attachmentCategories}\r\n displayField=\"value\"\r\n valueField=\"value\"\r\n value={selectedCategory}\r\n onChangeCallBack={(v) => {\r\n setSelectedCategory(v);\r\n }}\r\n />\r\n ) : (\r\n <></>\r\n )}\r\n\r\n <TemplateTextField\r\n label=\"Remark\"\r\n value={remark}\r\n onChange={(event) => setRemark(event.target.value)}\r\n multiline={true}\r\n sx={{ width: 300, m: 1 }}\r\n rows={3}\r\n />\r\n <Button sx={{ m: 1 }} variant=\"contained\" onClick={handleUpload}>\r\n Upload\r\n </Button>\r\n </>\r\n ) : (\r\n <></>\r\n )}\r\n </>\r\n ) : (\r\n <></>\r\n )}\r\n\r\n {showAttachments && attachmentConfig?.refKeyAttachments?.length > 0 ? (\r\n <>\r\n <h3>\r\n <FontAwesomeIcon\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n icon=\"paperclip\"\r\n />\r\n Attachments\r\n </h3>\r\n <Grid2\r\n container\r\n spacing={2}\r\n sx={{ overflow: \"auto\", padding: 1, justifyContent: \"center\" }}\r\n >\r\n {attachmentConfig?.refKeyAttachments.map((refKeyAttachment) => {\r\n return (\r\n <Grid2\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <AttachmentCard\r\n {...refKeyAttachment}\r\n attachmentCode={props.attachmentCode}\r\n setAttachmentConfig={setAttachmentConfig}\r\n downloadAuthorityKey={attachmentConfig.downloadAuthorityKey}\r\n allowDelete={allowUpload}\r\n />\r\n </Grid2>\r\n );\r\n })}\r\n </Grid2>\r\n </>\r\n ) : (\r\n <></>\r\n )}\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default AttachmentPanel;\r\n","import Typography from \"@mui/material/Typography\";\r\nimport { workflowDocumentActionHistory } from \"./WorkflowDocumentPanel\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { Avatar, Box, Divider, Paper, Stack } from \"@mui/material\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport AttachmentImageViewer from \"../attachment/AttachmentImageViewer\";\r\n\r\ntype WorkflowDocumentTimeLineProp = {\r\n actionHistory: Array<workflowDocumentActionHistory>;\r\n};\r\n\r\nconst WorkflowDocumentTimeLine: React.FC<WorkflowDocumentTimeLineProp> = (\r\n props\r\n) => {\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const { t } = useTranslation();\r\n return (\r\n <Paper\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n flexGrow: 1,\r\n padding: 1,\r\n margin: 1,\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n fontSize: 18,\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <FontAwesomeIcon\r\n icon=\"history\"\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n />\r\n {t(\"WF_ACTION_HISTORY_LABEL\")}\r\n </Box>\r\n <Box\r\n sx={{\r\n flexGrow: 1,\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflowY: \"auto\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n }}\r\n >\r\n {props.actionHistory.map((actionHistoryRecord, index) => {\r\n return (\r\n <>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n width: \"100%\",\r\n marginBottom: 2,\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flex: 1,\r\n flexDirection: \"column\",\r\n alignItems: \"flex-end\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <Box sx={{ marginBottom: 0.2 }}>\r\n {actionHistoryRecord.actionTime}\r\n </Box>\r\n <Typography>\r\n via {actionHistoryRecord.actionMethod}\r\n </Typography>\r\n </Box>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n position: \"relative\",\r\n marginRight: 2,\r\n marginLeft: 2,\r\n }}\r\n >\r\n <AttachmentImageViewer\r\n showAsAvatar={true}\r\n attachmentCode=\"EMPLOYEE_PHOTOS\"\r\n refKey={actionHistoryRecord?.personId + \"\" || \"0\"}\r\n style={{ m: 1, width: 70, height: 70 }}\r\n />\r\n {index !== props.actionHistory.length - 1 ? (\r\n <Box sx={{ marginTop: 11, position: \"absolute\" }}>|</Box>\r\n ) : (\r\n <></>\r\n )}\r\n </Box>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flex: 1,\r\n flexDirection: \"column\",\r\n alignItems: \"flex-start\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <Box sx={{ width: \"100%\" }}>\r\n {AppLayout.appDirection === \"ltr\"\r\n ? `${actionHistoryRecord?.documentActionEnName}`\r\n : `${actionHistoryRecord?.documentActionArName}`}\r\n {actionHistoryRecord?.actionComment\r\n ? \" - \" + actionHistoryRecord.actionComment\r\n : \"\"}\r\n </Box>\r\n <Box sx={{ width: \"100%\" }}>\r\n {AppLayout.appDirection === \"ltr\"\r\n ? `${actionHistoryRecord?.employeeEnName}`\r\n : `${actionHistoryRecord?.employeeArName}`}\r\n </Box>\r\n </Box>\r\n </Box>\r\n </>\r\n );\r\n })}\r\n </Box>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default WorkflowDocumentTimeLine;\r\n","import { Button } from \"@mui/material\";\r\nimport { RecordAction } from \"../DataEntryTypes\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { toast } from \"react-toastify\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport useSession from \"../../../../hooks/UseSession\";\r\nimport { useConfirmationWindow } from \"../../../../hooks/UseConfirmationWindow\";\r\n\r\nconst TemplateGridMultiRecordAction: React.FC<RecordAction> = (\r\n rowAction: RecordAction\r\n) => {\r\n const { t } = useTranslation();\r\n const session = useSession();\r\n const { ConfirmationWindow, setOpen } = useConfirmationWindow({\r\n body: t(rowAction?.confirmationMessage || \"ACTION_CONFIRMATION\"),\r\n title: t(\"CONFIRMATION\"),\r\n onConfirmationCallBk: async () => {\r\n await rowAction?.actionFn(\r\n rowAction.recordsToProcessActionOn,\r\n rowAction.recordIdsToProcessActionOn\r\n );\r\n if (rowAction?.reloadData) {\r\n rowAction.reloadData();\r\n }\r\n },\r\n });\r\n let isActionAllowed = true;\r\n if (rowAction.authority) {\r\n isActionAllowed = session.isUserAuthorized(rowAction.authority);\r\n }\r\n\r\n if (isActionAllowed) {\r\n return (\r\n <>\r\n <ConfirmationWindow />\r\n <Button\r\n onClick={async () => {\r\n if (\r\n rowAction?.recordsToProcessActionOn &&\r\n rowAction?.recordsToProcessActionOn.length > 0\r\n ) {\r\n if (rowAction?.preActionValidation) {\r\n for (const record of rowAction.recordsToProcessActionOn) {\r\n if (!rowAction.preActionValidation(record)) {\r\n return;\r\n }\r\n }\r\n }\r\n if (rowAction?.isConfirmationRequired === true) {\r\n setOpen(true);\r\n } else {\r\n await rowAction.actionFn(\r\n rowAction.recordsToProcessActionOn,\r\n rowAction.recordIdsToProcessActionOn\r\n );\r\n if (rowAction?.reloadData) {\r\n rowAction.reloadData();\r\n }\r\n }\r\n } else {\r\n toast.error(t(\"AT_LEAST_ONE_RECORD_SELECTED_MESSAGE\"));\r\n }\r\n }}\r\n variant={\r\n rowAction?.label\r\n ? \"outlined\"\r\n : rowAction?.formActionProps?.actionButtonVariant\r\n ? rowAction.formActionProps.actionButtonVariant\r\n : \"text\"\r\n }\r\n size=\"small\"\r\n color={rowAction?.formActionProps?.actionButtonColor || \"primary\"}\r\n >\r\n {rowAction?.icon ? (\r\n <FontAwesomeIcon\r\n style={{ marginRight: 5, marginLeft: 5 }}\r\n icon={rowAction.icon}\r\n />\r\n ) : (\r\n <></>\r\n )}\r\n {rowAction?.label ? t(rowAction.label) : <></>}\r\n </Button>\r\n </>\r\n );\r\n }\r\n};\r\n\r\nexport default TemplateGridMultiRecordAction;\r\n","import {\r\n Badge,\r\n Box,\r\n Button,\r\n Divider,\r\n IconButton,\r\n InputAdornment,\r\n MenuItem,\r\n styled,\r\n TextField,\r\n Tooltip,\r\n} from \"@mui/material\";\r\nimport {\r\n Toolbar,\r\n ToolbarButton,\r\n ColumnsPanelTrigger,\r\n FilterPanelTrigger,\r\n QuickFilter,\r\n QuickFilterControl,\r\n QuickFilterClear,\r\n QuickFilterTrigger,\r\n GridViewColumnIcon,\r\n GridFilterListIcon,\r\n ExportExcel,\r\n} from \"@mui/x-data-grid-premium\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport TemplateGridMultiRecordAction from \"./TemplateGridMultiRecordAction\";\r\nimport { getGridSelection } from \"../DataEntryUtil\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { TemplateGridTopBarProps } from \"../DataEntryTypes\";\r\nimport useSession from \"../../../../hooks/UseSession\";\r\n\r\ntype OwnerState = {\r\n expanded: boolean;\r\n};\r\n\r\nconst StyledQuickFilter = styled(QuickFilter)({\r\n display: \"grid\",\r\n alignItems: \"center\",\r\n});\r\n\r\nconst StyledToolbarButton = styled(ToolbarButton)<{ ownerState: OwnerState }>(\r\n ({ theme, ownerState }) => ({\r\n gridArea: \"1 / 1\",\r\n width: \"min-content\",\r\n height: \"min-content\",\r\n zIndex: 1,\r\n opacity: ownerState.expanded ? 0 : 1,\r\n pointerEvents: ownerState.expanded ? \"none\" : \"auto\",\r\n transition: theme.transitions.create([\"opacity\"]),\r\n })\r\n);\r\n\r\nconst StyledTextField = styled(TextField)<{\r\n ownerState: OwnerState;\r\n}>(({ theme, ownerState }) => ({\r\n gridArea: \"1 / 1\",\r\n overflowX: \"clip\",\r\n width: ownerState.expanded ? 260 : \"var(--trigger-width)\",\r\n opacity: ownerState.expanded ? 1 : 0,\r\n transition: theme.transitions.create([\"width\", \"opacity\"]),\r\n}));\r\n\r\nconst TemplateGridTopBar: React.FC<TemplateGridTopBarProps> = (\r\n props: TemplateGridTopBarProps\r\n) => {\r\n const { t } = useTranslation();\r\n const session = useSession();\r\n const isCreationAuthorized = props?.templateProps?.editAction?.authority\r\n ? session.isUserAuthorized(props.templateProps.editAction.authority)\r\n : true;\r\n const isCreationEnabled = props?.templateProps?.disableDefaultAction || true;\r\n const gridSelection = getGridSelection(\r\n props?.templateProps?.rowSelectionModel || {\r\n ids: new Set(),\r\n type: \"include\",\r\n },\r\n props?.templateProps?.data || [],\r\n props?.templateProps?.keyColumnName || \"id\"\r\n );\r\n return (\r\n <Toolbar>\r\n {isCreationEnabled &&\r\n isCreationAuthorized &&\r\n props?.templateProps?.editMode?.editMode != \"none\" ? (\r\n <Button onClick={props?.handleCreateNewRecord}>\r\n <FontAwesomeIcon\r\n icon=\"add\"\r\n style={{ marginRight: 5, marginLeft: 5 }}\r\n />\r\n {t(\"ADD_BTN_LABEL\")}\r\n </Button>\r\n ) : (\r\n <></>\r\n )}\r\n {props?.templateProps?.rowActions ? (\r\n props.templateProps.rowActions.map((rowAction, index) =>\r\n rowAction?.gridActionProps?.multiRecord === true ? (\r\n <TemplateGridMultiRecordAction\r\n {...rowAction}\r\n key={index}\r\n reloadData={async () => {\r\n props.templateProps.apiActions.reloadData(\r\n props?.templateProps?.gridLoadParametersValues\r\n );\r\n }}\r\n recordIdsToProcessActionOn={gridSelection.selectedRecordIds}\r\n recordsToProcessActionOn={gridSelection.selectedRecords}\r\n />\r\n ) : null\r\n )\r\n ) : (\r\n <></>\r\n )}\r\n <Box sx={{ flex: 1, mx: 0.5 }}>{props?.templateProps?.tBar}</Box>\r\n\r\n <Tooltip title=\"Columns\">\r\n <ColumnsPanelTrigger render={<ToolbarButton />}>\r\n <GridViewColumnIcon fontSize=\"small\" />\r\n </ColumnsPanelTrigger>\r\n </Tooltip>\r\n\r\n <Tooltip title=\"Filters\">\r\n <FilterPanelTrigger\r\n render={(props, state) => (\r\n <ToolbarButton {...props} color=\"default\">\r\n <Badge\r\n badgeContent={state.filterCount}\r\n color=\"primary\"\r\n variant=\"dot\"\r\n >\r\n <GridFilterListIcon fontSize=\"small\" />\r\n </Badge>\r\n </ToolbarButton>\r\n )}\r\n />\r\n </Tooltip>\r\n\r\n {props?.templateProps?.gridStateKey ? (\r\n <Tooltip title={t(\"RESET_GRID_STATE\")}>\r\n <IconButton onClick={props?.clearGridState}>\r\n <FontAwesomeIcon icon=\"eraser\" />\r\n </IconButton>\r\n </Tooltip>\r\n ) : (\r\n <></>\r\n )}\r\n\r\n <Divider\r\n orientation=\"vertical\"\r\n variant=\"middle\"\r\n flexItem\r\n sx={{ mx: 0.5 }}\r\n />\r\n\r\n <Tooltip title={t(\"EXPORT_EXECL_LABEL\")}>\r\n <ExportExcel render={<MenuItem />}>\r\n <FontAwesomeIcon icon=\"file-excel\" color=\"green\" />\r\n </ExportExcel>\r\n </Tooltip>\r\n\r\n <StyledQuickFilter>\r\n <QuickFilterTrigger\r\n render={(triggerProps, state) => (\r\n <Tooltip title={t(\"SEARCH_BTN_LABEL\")} enterDelay={0}>\r\n <StyledToolbarButton\r\n {...triggerProps}\r\n ownerState={{ expanded: state.expanded }}\r\n color=\"default\"\r\n aria-disabled={state.expanded}\r\n >\r\n <FontAwesomeIcon icon=\"search\" />\r\n </StyledToolbarButton>\r\n </Tooltip>\r\n )}\r\n />\r\n <QuickFilterControl\r\n render={({ ref, ...controlProps }, state) => (\r\n <StyledTextField\r\n {...controlProps}\r\n ownerState={{ expanded: state.expanded }}\r\n inputRef={ref}\r\n aria-label=\"Search\"\r\n placeholder={`${t(\"SEARCH_BTN_LABEL\")}...`}\r\n size=\"small\"\r\n slotProps={{\r\n input: {\r\n startAdornment: (\r\n <InputAdornment position=\"start\">\r\n <FontAwesomeIcon icon=\"search\" />\r\n </InputAdornment>\r\n ),\r\n endAdornment: state.value ? (\r\n <InputAdornment position=\"end\">\r\n <QuickFilterClear\r\n edge=\"end\"\r\n size=\"small\"\r\n aria-label=\"Clear search\"\r\n // material={{ sx: { marginRight: -0.75 } }}\r\n >\r\n <FontAwesomeIcon icon=\"xmark\" />\r\n </QuickFilterClear>\r\n </InputAdornment>\r\n ) : null,\r\n ...controlProps.slotProps?.input,\r\n },\r\n ...controlProps.slotProps,\r\n }}\r\n />\r\n )}\r\n />\r\n </StyledQuickFilter>\r\n\r\n <IconButton\r\n onClick={() => {\r\n props.templateProps.apiActions.reloadData(\r\n props?.templateProps?.gridLoadParametersValues\r\n );\r\n }}\r\n >\r\n <FontAwesomeIcon icon=\"refresh\" />\r\n </IconButton>\r\n </Toolbar>\r\n );\r\n};\r\n\r\nexport default TemplateGridTopBar;\r\n","import { Tooltip } from \"@mui/material\";\r\nimport { GridActionsCellItem } from \"@mui/x-data-grid-premium\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { RecordAction } from \"../DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport useSession from \"../../../../hooks/UseSession\";\r\nimport { useConfirmationWindow } from \"../../../../hooks/UseConfirmationWindow\";\r\n\r\nconst TemplateGridRecordAction: React.FC<RecordAction> = (\r\n rowAction: RecordAction\r\n) => {\r\n const { t } = useTranslation();\r\n const session = useSession();\r\n const { ConfirmationWindow, setOpen } = useConfirmationWindow({\r\n body: t(rowAction?.confirmationMessage || \"ACTION_CONFIRMATION\"),\r\n title: t(\"CONFIRMATION\"),\r\n onConfirmationCallBk: async () => {\r\n await rowAction?.actionFn(rowAction.record);\r\n if (rowAction?.reloadData) {\r\n rowAction.reloadData();\r\n }\r\n },\r\n });\r\n let isActionAllowed = true;\r\n if (rowAction.authority) {\r\n isActionAllowed = session.isUserAuthorized(rowAction.authority);\r\n }\r\n let iconStyle: any = {};\r\n if (rowAction?.getActionIconStyleForRecord) {\r\n iconStyle = rowAction.getActionIconStyleForRecord(rowAction.record);\r\n }\r\n let isActionVisibleForRecord = true;\r\n if (rowAction?.isActionVisibleForRecord) {\r\n isActionVisibleForRecord = rowAction?.isActionVisibleForRecord(\r\n rowAction.record\r\n );\r\n }\r\n let isActionDisabledForRecord = false;\r\n if (rowAction?.isActionDisabledForRecord) {\r\n isActionDisabledForRecord = rowAction.isActionDisabledForRecord(\r\n rowAction.record\r\n );\r\n }\r\n if (isActionAllowed && isActionVisibleForRecord) {\r\n return (\r\n <>\r\n <ConfirmationWindow />\r\n <GridActionsCellItem\r\n disabled={isActionDisabledForRecord}\r\n icon={\r\n <Tooltip title={rowAction?.label ? t(rowAction.label) : \"\"}>\r\n <FontAwesomeIcon\r\n icon={rowAction.icon}\r\n style={{\r\n ...iconStyle,\r\n color: isActionDisabledForRecord\r\n ? \"gray\"\r\n : iconStyle?.color != undefined\r\n ? iconStyle.color\r\n : undefined,\r\n }}\r\n />\r\n </Tooltip>\r\n }\r\n showInMenu={rowAction?.gridActionProps?.showInMenu || false}\r\n label={\"\"}\r\n className=\"textPrimary\"\r\n color=\"inherit\"\r\n onClick={async () => {\r\n if (!isActionDisabledForRecord) {\r\n if (rowAction?.preActionValidation) {\r\n if (!rowAction.preActionValidation(rowAction.record)) {\r\n return;\r\n }\r\n }\r\n if (rowAction?.isConfirmationRequired === true) {\r\n setOpen(true);\r\n } else {\r\n await rowAction.actionFn(rowAction.record);\r\n if (\r\n rowAction?.gridActionProps?.reloadGridAfterAction === true &&\r\n rowAction?.reloadData\r\n ) {\r\n rowAction.reloadData();\r\n }\r\n }\r\n }\r\n }}\r\n />\r\n </>\r\n );\r\n }\r\n};\r\n\r\nexport default TemplateGridRecordAction;\r\n","import {\r\n DataGridPremium,\r\n GridActionsCellItem,\r\n GridActionsCellItemProps,\r\n GridColumnOrderChangeParams,\r\n GridColumnResizeParams,\r\n GridColumnVisibilityModel,\r\n GridEventListener,\r\n GridExpandMoreIcon,\r\n GridPinnedColumnFields,\r\n GridRowGroupingModel,\r\n GridRowModes,\r\n GridRowModesModel,\r\n GridRowParams,\r\n GridRowSelectionModel,\r\n} from \"@mui/x-data-grid-premium\";\r\nimport { TemplateGridColDef, TemplateGridProps } from \"../DataEntryTypes\";\r\nimport TemplateGridTopBar from \"./TemplateGridTopBar\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { z } from \"zod\";\r\nimport {\r\n constructGridColumnsFromFields,\r\n constructValidationSchema,\r\n getAllFields,\r\n} from \"../DataEntryUtil\";\r\nimport { toast } from \"react-toastify\";\r\nimport {\r\n Accordion,\r\n AccordionDetails,\r\n AccordionSummary,\r\n Box,\r\n Divider,\r\n IconButton,\r\n Tooltip,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport { capitalizeFirstLetter, isNumber } from \"../../../../util/AppUtils\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport TemplateGridRecordAction from \"./TemplateGridRecordAction\";\r\nimport TemplateForm from \"../TemplateDataForm/TemplateForm\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport useSession from \"../../../../hooks/UseSession\";\r\nimport { useConfirmationWindow } from \"../../../../hooks/UseConfirmationWindow\";\r\nimport { useWindow } from \"../../../../hooks/UseWindow\";\r\nimport { useAxios } from \"../../../../hooks\";\r\nimport useLookupGridColumn from \"../../../../hooks/useLookupGridColumn\";\r\nimport { ContinuousColorLegend } from \"@mui/x-charts\";\r\nimport AttachmentPanel from \"../../attachment/AttachmentPanel\";\r\nimport WorkflowDocumentPanel from \"../../workflow/WorkflowDocumentPanel\";\r\nlet currentNewRecordIndex = -1;\r\n\r\ninterface GridState {\r\n columnVisibilityModel?: GridColumnVisibilityModel;\r\n columnOrder?: string[];\r\n columnWidths?: { [key: string]: number };\r\n columnGroupingModel?: GridRowGroupingModel;\r\n pinnedColumns?: GridPinnedColumnFields;\r\n}\r\n\r\nconst loadGridState = (gridStateKey: string): GridState => {\r\n try {\r\n const saved = localStorage.getItem(gridStateKey);\r\n return saved ? JSON.parse(saved) : {};\r\n } catch (e) {\r\n console.error(\"Failed to load grid state\", e);\r\n return {};\r\n }\r\n};\r\n\r\nconst saveGridState = (gridStateKey: string, statePart: GridState) => {\r\n const current = loadGridState(gridStateKey);\r\n localStorage.setItem(\r\n gridStateKey,\r\n JSON.stringify({ ...current, ...statePart })\r\n );\r\n};\r\n\r\nconst PIN_FIXED_COLUMNS = [\"__check__\", \"actions\"];\r\n\r\nconst TemplateGrid: React.FC<TemplateGridProps> = (props) => {\r\n const { t } = useTranslation();\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const [selectedRecord, setSelectedRecord] = useState<any>({});\r\n const [attachmentPanelEnabledForRecord, setAttachmentPanelEnabledForRecord] =\r\n useState<boolean>(true);\r\n const { getLookupOptions } = useLookupGridColumn();\r\n const { Window: AttachmentWindow, setWindowState: setAttachmentWindowState } =\r\n useWindow({\r\n windowTitle: t(props.gridTitle) + \" Attachments\",\r\n windowIcon: \"paperclip\",\r\n width: \"fit-content\",\r\n height: \"fit-content\",\r\n minHeight: 500,\r\n minWidth: \"50%\",\r\n onCloseCallBack: () => {\r\n props?.apiActions?.reloadData(props.gridLoadParametersValues);\r\n },\r\n });\r\n const { Window: WorkFlowWindow, setWindowState: setWorkFlowWindowState } =\r\n useWindow({\r\n windowTitle: t(props.gridTitle) + \" Approvals\",\r\n windowIcon: \"stamp\",\r\n width: \"fit-content\",\r\n height: \"fit-content\",\r\n minHeight: 500,\r\n minWidth: \"80%\",\r\n onCloseCallBack: () => {\r\n props?.apiActions?.reloadData(props.gridLoadParametersValues);\r\n },\r\n });\r\n const [generatedColumns, setGeneratedColumns] = useState<\r\n Array<TemplateGridColDef>\r\n >([]);\r\n const fields = getAllFields(props.formElements);\r\n const hiddenFields = [];\r\n const savedState = React.useMemo<GridState>(\r\n () => (props?.gridStateKey ? loadGridState(props.gridStateKey) : {}),\r\n []\r\n );\r\n for (const field of fields) {\r\n if (field?.gridProps?.hidden === true) {\r\n hiddenFields.push(field.fieldName);\r\n }\r\n }\r\n let initialVisibilityState: GridColumnVisibilityModel = {};\r\n if (savedState?.columnVisibilityModel) {\r\n initialVisibilityState = savedState.columnVisibilityModel;\r\n const existingFields = Object.keys(initialVisibilityState);\r\n for (const field of hiddenFields) {\r\n if (!existingFields.includes(field)) {\r\n initialVisibilityState[field] = false;\r\n }\r\n }\r\n } else {\r\n for (const field of hiddenFields) {\r\n initialVisibilityState[field] = false;\r\n }\r\n }\r\n\r\n const themeDirection = useSelector(\r\n (state: any) => state.AppLayout.appDirection\r\n );\r\n\r\n const clearGridState = () => {\r\n if (props?.gridStateKey) {\r\n localStorage.removeItem(props.gridStateKey);\r\n }\r\n setColumnVisibilityModel({});\r\n setColumnOrder([]);\r\n setColumnWidths({});\r\n setGridRowGroupingModel([]);\r\n setPinnedColumns({\r\n left: [...(themeDirection === \"ltr\" ? PIN_FIXED_COLUMNS : [])],\r\n right: [...(themeDirection === \"rtl\" ? PIN_FIXED_COLUMNS : [])],\r\n });\r\n };\r\n const [columnVisibilityModel, setColumnVisibilityModel] =\r\n React.useState<GridColumnVisibilityModel>(initialVisibilityState);\r\n const [columnOrder, setColumnOrder] = React.useState<string[]>(\r\n savedState.columnOrder || []\r\n );\r\n const [columnWidths, setColumnWidths] = React.useState<{\r\n [key: string]: number;\r\n }>(savedState.columnWidths || {});\r\n const [gridRowGroupingModel, setGridRowGroupingModel] =\r\n useState<GridRowGroupingModel>(savedState.columnGroupingModel || []);\r\n let newLeft = savedState?.pinnedColumns?.left || [];\r\n newLeft = newLeft.filter(\r\n (record: any) => !PIN_FIXED_COLUMNS.includes(record)\r\n );\r\n let newRight = savedState?.pinnedColumns?.right || [] || [];\r\n newRight = newRight.filter(\r\n (record: any) => !PIN_FIXED_COLUMNS.includes(record)\r\n );\r\n\r\n const [pinnedColumns, setPinnedColumns] = useState<GridPinnedColumnFields>({\r\n left: [...(themeDirection === \"ltr\" ? PIN_FIXED_COLUMNS : []), ...newLeft],\r\n right: [\r\n ...(themeDirection === \"rtl\" ? PIN_FIXED_COLUMNS : []),\r\n ...newRight,\r\n ],\r\n });\r\n\r\n const session = useSession();\r\n const navigate = useNavigate();\r\n const [recordToDelete, setRecordToDelete] = useState<any>(null);\r\n const [recordToEdit, setRecordToEdit] = useState<any>(null);\r\n const [rowModesModel, setRowModesModel] = useState<GridRowModesModel>({});\r\n const adjustGridColumns = async () => {\r\n let gridColumns = constructGridColumnsFromFields(\r\n fields,\r\n props?.editMode?.editMode === \"row\" || false,\r\n t\r\n );\r\n for (let gridColumn of gridColumns) {\r\n if (gridColumn?.lookupType) {\r\n gridColumn.displayField =\r\n AppLayout.appDirection === \"ltr\"\r\n ? \"lookupEnDisplay\"\r\n : \"lookupArDisplay\";\r\n gridColumn.options = await getLookupOptions(gridColumn.lookupType);\r\n gridColumn.valueField = \"lookupValue\";\r\n }\r\n }\r\n setGeneratedColumns(gridColumns);\r\n };\r\n const [rowSelectionModel, setRowSelectionModel] =\r\n useState<GridRowSelectionModel>({ ids: new Set(), type: \"include\" });\r\n let keyColumnName: string = \"id\";\r\n if (props?.keyColumnName) {\r\n keyColumnName = props?.keyColumnName;\r\n }\r\n const setData = props.setData;\r\n const validationSchema = z.object(constructValidationSchema(fields));\r\n let isEditAllowed = true;\r\n if (props?.editAction?.authority) {\r\n isEditAllowed = session.isUserAuthorized(props.editAction.authority);\r\n }\r\n let isDeleteAllowed = true;\r\n if (props?.deleteAction?.authority) {\r\n isDeleteAllowed = session.isUserAuthorized(props.deleteAction.authority);\r\n }\r\n\r\n const handleRowModesModelChange = (newModel: GridRowModesModel) => {\r\n setRowModesModel(newModel);\r\n };\r\n\r\n const handlePinnedColumnsChange = (newModel: GridPinnedColumnFields) => {\r\n let newLeft = newModel?.left || [];\r\n newLeft = newLeft.filter(\r\n (record: any) => !PIN_FIXED_COLUMNS.includes(record)\r\n );\r\n let newRight = newModel?.right || [];\r\n newRight = newRight.filter(\r\n (record: any) => !PIN_FIXED_COLUMNS.includes(record)\r\n );\r\n const newPinedColumns: GridPinnedColumnFields = {\r\n left: [\r\n ...(themeDirection === \"ltr\" ? PIN_FIXED_COLUMNS : []),\r\n ...newLeft,\r\n ],\r\n right: [\r\n ...(themeDirection === \"rtl\" ? PIN_FIXED_COLUMNS : []),\r\n ...newRight,\r\n ],\r\n };\r\n setPinnedColumns(newPinedColumns);\r\n if (props?.gridStateKey) {\r\n saveGridState(props.gridStateKey, { pinnedColumns: newPinedColumns });\r\n }\r\n };\r\n\r\n const handleDeleteRecord = async () => {\r\n let result = true;\r\n if (!(recordToDelete && recordToDelete?.isNew === true)) {\r\n result = await props.apiActions.deleteRecordById(\r\n recordToDelete[keyColumnName]\r\n );\r\n }\r\n if (result) {\r\n if (props?.deleteAction?.postActionCallBack) {\r\n await props.deleteAction.postActionCallBack(recordToDelete);\r\n }\r\n\r\n setData((oldData: any) => {\r\n const newData = oldData.filter(\r\n (record: any) =>\r\n record[keyColumnName] != recordToDelete[keyColumnName]\r\n );\r\n return newData;\r\n });\r\n }\r\n };\r\n\r\n const { ConfirmationWindow, setOpen: setConfirmationWindowOpened } =\r\n useConfirmationWindow({\r\n title: \"Confirmation\",\r\n body: \"Are you sure you want to delete this record ?\",\r\n onConfirmationCallBk: handleDeleteRecord,\r\n });\r\n\r\n let formModalHeight = undefined;\r\n let formModalWidth = undefined;\r\n let formModalMinHeight = undefined;\r\n let formModalMinWidth = undefined;\r\n let formModalIcon = undefined;\r\n let formModalTitle = undefined;\r\n\r\n if (props?.editMode?.editMode === \"modal\") {\r\n formModalHeight = props?.editMode?.specs?.modalHeight || \"fit-content\";\r\n formModalWidth = props?.editMode?.specs?.modalWidth || \"300\";\r\n formModalMinHeight = props?.editMode?.specs?.modalMinHeight;\r\n formModalMinWidth = props?.editMode?.specs?.modalMinWidth;\r\n formModalIcon = props?.editMode?.specs?.modalIcon || \"window\";\r\n formModalTitle = props?.editMode?.specs?.modalTitle || \"Record Form\";\r\n }\r\n\r\n const { Window: FormWindow, setWindowState: setFormWindowState } = useWindow({\r\n height: formModalHeight,\r\n minHeight: formModalMinHeight,\r\n minWidth: formModalMinWidth,\r\n onCloseCallBack: () => {\r\n props.apiActions.reloadData(props?.gridLoadParametersValues);\r\n },\r\n width: formModalWidth,\r\n windowIcon: formModalIcon,\r\n windowTitle: formModalTitle,\r\n });\r\n\r\n const handleCreateNewRecord = () => {\r\n if (props?.editMode?.editMode === \"form\") {\r\n navigate(props.editMode.specs.formRoute);\r\n } else if (props?.editMode?.editMode === \"modal\") {\r\n setRecordToEdit(null);\r\n setFormWindowState(true);\r\n } else if (props?.editMode?.editMode === \"row\") {\r\n currentNewRecordIndex = currentNewRecordIndex - 1;\r\n const newRecord: any = {};\r\n newRecord[keyColumnName] = currentNewRecordIndex;\r\n newRecord.isNew = true;\r\n for (const gridColumn of generatedColumns) {\r\n if (\r\n gridColumn?.type != \"actions\" &&\r\n gridColumn?.field != keyColumnName\r\n ) {\r\n if (gridColumn?.field) {\r\n newRecord[gridColumn.field] = null;\r\n }\r\n }\r\n }\r\n setData((oldRows: any) => [newRecord, ...oldRows]);\r\n setRowModesModel((oldModel: any) => ({\r\n ...oldModel,\r\n [currentNewRecordIndex]: { mode: GridRowModes.Edit },\r\n }));\r\n }\r\n };\r\n\r\n const handleEditRecord = async (record: any) => {\r\n if (record) {\r\n setRecordToEdit(record);\r\n if (props.editMode.editMode === \"form\") {\r\n navigate(props.editMode.specs.formRoute + \"/\" + record[keyColumnName]);\r\n } else if (props.editMode.editMode === \"modal\") {\r\n setFormWindowState(true);\r\n } else if (props?.editMode?.editMode === \"row\") {\r\n const id = record[keyColumnName];\r\n setRowModesModel({\r\n ...rowModesModel,\r\n [id]: { mode: GridRowModes.Edit },\r\n });\r\n }\r\n }\r\n };\r\n\r\n const validateRecord = (record: any) => {\r\n try {\r\n validationSchema.parse(record);\r\n } catch (err) {\r\n console.log(\"validateRecord err\", err);\r\n let errorMessage: any = null;\r\n if (err instanceof z.ZodError) {\r\n errorMessage = err.errors\r\n .map(\r\n (error) => \"Error in field (\" + error.path + \") : \" + error.message\r\n )\r\n .join(\",\");\r\n } else {\r\n errorMessage = \"invalid record data\";\r\n }\r\n return errorMessage;\r\n }\r\n };\r\n\r\n const handleSaveRowClick = (record: any) => {\r\n const id = record[keyColumnName];\r\n setRowModesModel({\r\n ...rowModesModel,\r\n [id]: { mode: GridRowModes.View },\r\n });\r\n };\r\n\r\n const processRowUpdate = async (record: any) => {\r\n if (props.editMode.editMode === \"row\") {\r\n let savedRecord: any = null;\r\n const errorMessage = validateRecord(record);\r\n if (errorMessage) {\r\n const errors = errorMessage.split(\",\");\r\n toast.error(\r\n <div style={{}}>\r\n {errors.map((error: any) => (\r\n <>\r\n <div>{error}</div>\r\n <Divider />\r\n </>\r\n ))}\r\n </div>\r\n );\r\n throw new Error(errorMessage);\r\n }\r\n if (props?.editAction?.preActionValidation) {\r\n if (!props.editAction.preActionValidation(record)) {\r\n throw new Error(\"error on the configured presave validation\");\r\n }\r\n }\r\n const requestObject: any = { ...record };\r\n if (\r\n record[keyColumnName] &&\r\n isNumber(record[keyColumnName]) &&\r\n Number(record[keyColumnName]) < 0\r\n ) {\r\n requestObject[keyColumnName] = null;\r\n }\r\n savedRecord = await props.apiActions.saveRecord(requestObject);\r\n if (savedRecord == null) {\r\n throw new Error(\r\n \"Failed to process your request, contact your administrator\"\r\n );\r\n }\r\n if (props?.editAction?.postActionCallBack) {\r\n await props.editAction.postActionCallBack(record);\r\n }\r\n if (record?.isNew === true) {\r\n setData((oldData: any) => {\r\n const newData = oldData.filter(\r\n (x: any) => x[keyColumnName] !== record[keyColumnName]\r\n );\r\n return [savedRecord, ...newData];\r\n });\r\n }\r\n if (\r\n props?.editMode?.reloadAfterSave === true &&\r\n props?.apiActions?.reloadData\r\n ) {\r\n props?.apiActions?.reloadData(props?.gridLoadParametersValues);\r\n }\r\n return savedRecord;\r\n }\r\n };\r\n\r\n const handleCancelRowEditClick = (record: any) => {\r\n const id = record[keyColumnName];\r\n if (id && isNumber(id) && id < 0) {\r\n setRowModesModel({\r\n ...rowModesModel,\r\n [id]: { mode: GridRowModes.View, ignoreModifications: true },\r\n });\r\n setData((oldData: any) => {\r\n const newData = oldData.filter(\r\n (record: any) => record[keyColumnName] != id\r\n );\r\n return newData;\r\n });\r\n } else {\r\n setRowModesModel({\r\n ...rowModesModel,\r\n [id]: { mode: GridRowModes.View, ignoreModifications: true },\r\n });\r\n }\r\n };\r\n\r\n const getActionColumnActions = (params: GridRowParams<any>) => {\r\n const record: any = params.row;\r\n const actions: Array<React.ReactElement<GridActionsCellItemProps>> = [];\r\n if (props?.editMode?.editMode != \"none\") {\r\n if (\r\n props?.disableDefaultAction === undefined ||\r\n !props.disableDefaultAction\r\n ) {\r\n const isInEditMode: boolean =\r\n rowModesModel[record[keyColumnName]]?.mode === GridRowModes.Edit;\r\n if (props.editMode.editMode === \"row\" && isInEditMode) {\r\n if (isEditAllowed) {\r\n actions.push(\r\n <GridActionsCellItem\r\n icon={<FontAwesomeIcon icon=\"save\" />}\r\n label={t(\"SAVE_BTN_LABEL\")}\r\n onClick={() => {\r\n handleSaveRowClick(record);\r\n }}\r\n />\r\n );\r\n actions.push(\r\n <GridActionsCellItem\r\n icon={<FontAwesomeIcon icon=\"cancel\" />}\r\n label={t(\"CANCEL_BTN_LABEL\")}\r\n onClick={() => {\r\n handleCancelRowEditClick(record);\r\n }}\r\n color=\"inherit\"\r\n />\r\n );\r\n }\r\n } else {\r\n if (props?.editAction && props?.editAction?.isEnabled === true) {\r\n let isEditActionVisibleForRecord = true;\r\n if (props?.editAction?.isActionVisibleForRecord) {\r\n isEditActionVisibleForRecord =\r\n props?.editAction?.isActionVisibleForRecord(record);\r\n }\r\n let isActionEditDisabledForRecord = false;\r\n if (props?.editAction?.isActionDisabledForRecord) {\r\n isActionEditDisabledForRecord =\r\n props?.editAction?.isActionDisabledForRecord(record);\r\n }\r\n if (isEditAllowed && isEditActionVisibleForRecord) {\r\n actions.push(\r\n <GridActionsCellItem\r\n disabled={isActionEditDisabledForRecord}\r\n icon={\r\n <Tooltip title={t(\"EDIT_BTN_LABEL\")}>\r\n <FontAwesomeIcon\r\n icon={\"edit\"}\r\n style={{\r\n color: isActionEditDisabledForRecord\r\n ? \"gray\"\r\n : undefined,\r\n }}\r\n />\r\n </Tooltip>\r\n }\r\n showInMenu={\r\n props?.editAction?.gridActionProps?.showInMenu || false\r\n }\r\n label={t(\"EDIT_BTN_LABEL\")}\r\n className=\"textPrimary\"\r\n color=\"inherit\"\r\n onClick={() => {\r\n if (isEditAllowed && !isActionEditDisabledForRecord) {\r\n handleEditRecord(record);\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n }\r\n if (props?.deleteAction && props?.deleteAction?.isEnabled === true) {\r\n let isDeleteActionVisibleForRecord = true;\r\n if (props?.deleteAction?.isActionVisibleForRecord) {\r\n isDeleteActionVisibleForRecord =\r\n props?.deleteAction?.isActionVisibleForRecord(record);\r\n }\r\n let isDeleteActionDisabledForRecord = false;\r\n if (props?.deleteAction?.isActionDisabledForRecord) {\r\n isDeleteActionDisabledForRecord =\r\n props?.deleteAction?.isActionDisabledForRecord(record);\r\n }\r\n if (isDeleteAllowed && isDeleteActionVisibleForRecord) {\r\n actions.push(\r\n <GridActionsCellItem\r\n disabled={isDeleteActionDisabledForRecord}\r\n icon={\r\n <Tooltip title={t(\"DELETE_BTN_LABEL\")}>\r\n <FontAwesomeIcon\r\n icon={\"trash\"}\r\n style={{\r\n color: isDeleteActionDisabledForRecord\r\n ? \"gray\"\r\n : undefined,\r\n }}\r\n />\r\n </Tooltip>\r\n }\r\n showInMenu={\r\n props?.deleteAction?.gridActionProps?.showInMenu || false\r\n }\r\n label={t(\"DELETE_BTN_LABEL\")}\r\n className=\"textPrimary\"\r\n color=\"inherit\"\r\n onClick={() => {\r\n if (isDeleteAllowed && !isDeleteActionDisabledForRecord) {\r\n if (props?.deleteAction?.preActionValidation) {\r\n if (!props.deleteAction.preActionValidation(record)) {\r\n return;\r\n }\r\n }\r\n setRecordToDelete(record);\r\n setConfirmationWindowOpened(true);\r\n }\r\n }}\r\n />\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (\r\n record[props?.keyColumnName || \"id\"] &&\r\n record[props?.keyColumnName || \"id\"] > 0 &&\r\n props?.attachment\r\n ) {\r\n actions?.push(\r\n <GridActionsCellItem\r\n icon={\r\n <Tooltip title={\"Attachments\"}>\r\n <FontAwesomeIcon icon={\"paperclip\"} />\r\n </Tooltip>\r\n }\r\n label={\"Attachments\"}\r\n className=\"textPrimary\"\r\n color=\"inherit\"\r\n onClick={() => {\r\n setSelectedRecord(record);\r\n if (props?.attachment?.enableAttachFn) {\r\n setAttachmentPanelEnabledForRecord(\r\n props.attachment.enableAttachFn(record)\r\n );\r\n } else {\r\n setAttachmentPanelEnabledForRecord(true);\r\n }\r\n setAttachmentWindowState(true);\r\n }}\r\n />\r\n );\r\n }\r\n if (\r\n record[props?.keyColumnName || \"id\"] &&\r\n record[props?.keyColumnName || \"id\"] > 0 &&\r\n props?.workFlowDocumentCode\r\n ) {\r\n actions?.push(\r\n <GridActionsCellItem\r\n icon={\r\n <Tooltip title={\"Approvals\"}>\r\n <FontAwesomeIcon icon={\"stamp\"} />\r\n </Tooltip>\r\n }\r\n label={\"Approvals\"}\r\n className=\"textPrimary\"\r\n color=\"inherit\"\r\n onClick={() => {\r\n setSelectedRecord(record);\r\n setWorkFlowWindowState(true);\r\n }}\r\n />\r\n );\r\n }\r\n if (\r\n record[props?.keyColumnName || \"id\"] &&\r\n record[props?.keyColumnName || \"id\"] > 0 &&\r\n props?.rowActions\r\n ) {\r\n for (const rowAction of props.rowActions) {\r\n if (\r\n !(\r\n rowAction?.gridActionProps?.multiRecord &&\r\n rowAction?.gridActionProps?.multiRecord === true\r\n )\r\n ) {\r\n actions.push(\r\n <TemplateGridRecordAction\r\n {...rowAction}\r\n record={record}\r\n reloadData={async () => {\r\n props.apiActions.reloadData(props?.gridLoadParametersValues);\r\n }}\r\n />\r\n );\r\n }\r\n }\r\n }\r\n\r\n return actions;\r\n };\r\n\r\n const actionColumn: TemplateGridColDef = {\r\n type: \"actions\",\r\n field: \"actions\",\r\n headerName: \"\",\r\n headerAlign: \"center\",\r\n width:\r\n (props?.rowActions ? props.rowActions.length * 30 : 0) +\r\n (props?.editAction && props?.editAction?.isEnabled ? 30 : 0) +\r\n (props?.deleteAction && props?.deleteAction?.isEnabled ? 30 : 0) +\r\n (props?.attachment ? 30 : 0) +\r\n (props?.workFlowDocumentCode ? 30 : 0),\r\n getActions: getActionColumnActions,\r\n };\r\n\r\n let structuredColumns: Array<TemplateGridColDef> = [];\r\n if (\r\n props?.disableDefaultAction === undefined ||\r\n !props.disableDefaultAction ||\r\n (props?.rowActions && props?.rowActions.length > 0)\r\n ) {\r\n structuredColumns.push(actionColumn);\r\n }\r\n\r\n structuredColumns = [...structuredColumns, ...generatedColumns];\r\n const handleRowSelection = (gridSelectionModel: GridRowSelectionModel) => {\r\n setRowSelectionModel(gridSelectionModel);\r\n };\r\n useEffect(() => {\r\n if (props?.autoLoad === undefined || props.autoLoad === true) {\r\n props.apiActions.reloadData(props?.gridLoadParametersValues);\r\n }\r\n adjustGridColumns();\r\n }, []);\r\n\r\n useEffect(() => {\r\n props.apiActions.reloadData(props?.gridLoadParametersValues);\r\n }, [session.UserInfo?.currentOrganization]);\r\n\r\n useEffect(() => {\r\n adjustGridColumns();\r\n }, [themeDirection, props.formElements]);\r\n\r\n const handleColumnVisibilityChange = (model: GridColumnVisibilityModel) => {\r\n setColumnVisibilityModel(model);\r\n if (props?.gridStateKey) {\r\n saveGridState(props.gridStateKey, { columnVisibilityModel: model });\r\n }\r\n };\r\n\r\n const handleColumnOrderChange: GridEventListener<\"columnOrderChange\"> = (\r\n params: GridColumnOrderChangeParams\r\n ) => {\r\n const { column, targetIndex } = params;\r\n setColumnOrder((prevOrder) => {\r\n const currentOrder = prevOrder.length\r\n ? [...prevOrder]\r\n : structuredColumns.map((col) => col.field);\r\n const fromIndex = currentOrder.indexOf(column.field);\r\n if (fromIndex === -1) return currentOrder;\r\n\r\n currentOrder.splice(fromIndex, 1); // remove\r\n currentOrder.splice(targetIndex, 0, column.field); // insert at new index\r\n\r\n if (props?.gridStateKey) {\r\n saveGridState(props.gridStateKey, { columnOrder: currentOrder });\r\n }\r\n\r\n return currentOrder;\r\n });\r\n };\r\n\r\n const handleRowGroupChange = (model: GridRowGroupingModel) => {\r\n setGridRowGroupingModel(model);\r\n if (props?.gridStateKey) {\r\n saveGridState(props.gridStateKey, { columnGroupingModel: model });\r\n }\r\n };\r\n\r\n const handleColumnWidthChange: GridEventListener<\"columnWidthChange\"> = (\r\n params: GridColumnResizeParams\r\n ) => {\r\n const updatedWidths = {\r\n ...columnWidths,\r\n [params.colDef.field]: params.width,\r\n };\r\n setColumnWidths(updatedWidths);\r\n if (props?.gridStateKey) {\r\n saveGridState(props.gridStateKey, { columnWidths: updatedWidths });\r\n }\r\n };\r\n\r\n const adjustedColumns: Array<TemplateGridColDef> = React.useMemo(() => {\r\n const baseCols = structuredColumns.map((col) => ({\r\n ...col,\r\n width: columnWidths[col.field] || col.width,\r\n }));\r\n\r\n // Reorder based on saved columnOrder\r\n if (columnOrder.length) {\r\n const fieldToCol = new Map(baseCols.map((col) => [col.field, col]));\r\n return columnOrder.map((field) => fieldToCol.get(field)!).filter(Boolean);\r\n }\r\n\r\n return baseCols;\r\n }, [columnOrder, columnWidths, structuredColumns]);\r\n return (\r\n <>\r\n <ConfirmationWindow />\r\n {props?.editMode?.editMode === \"modal\" ? (\r\n <FormWindow>\r\n {props?.editMode?.specs?.formComponent ? (\r\n <props.editMode.specs.formComponent\r\n recordIdToEdit={\r\n recordToEdit ? recordToEdit[keyColumnName] : undefined\r\n }\r\n formCloseCallBk={() => {\r\n setFormWindowState(false);\r\n props.apiActions.reloadData(props?.gridLoadParametersValues);\r\n }}\r\n />\r\n ) : (\r\n <TemplateForm\r\n keyColumnName={props.keyColumnName}\r\n attachment={props.attachment}\r\n formLoadCallBk={props.formLoadCallBk}\r\n recordIdToEdit={\r\n recordToEdit ? recordToEdit[keyColumnName] : undefined\r\n }\r\n formCloseCallBk={() => {\r\n setFormWindowState(false);\r\n props.apiActions.reloadData(props?.gridLoadParametersValues);\r\n }}\r\n elements={props.formElements}\r\n apiActions={props.apiActions}\r\n editAuthorityKey={props?.editAction?.authority}\r\n formSavedSuccessfullyCallBk={\r\n props?.editAction?.postActionCallBack\r\n }\r\n preSaveValidation={props?.editAction?.preActionValidation}\r\n actions={props?.rowActions}\r\n />\r\n )}\r\n </FormWindow>\r\n ) : (\r\n <></>\r\n )}\r\n {props?.hideInfoBar === undefined && !props?.hideInfoBar ? (\r\n <Box sx={{ display: \"flex\" }}>\r\n {props?.hideBackButton === undefined && !props?.hideBackButton ? (\r\n <IconButton\r\n onClick={() => {\r\n navigate(-1, { replace: true });\r\n }}\r\n >\r\n <FontAwesomeIcon icon=\"arrow-left\" />\r\n </IconButton>\r\n ) : (\r\n <></>\r\n )}\r\n <Box\r\n sx={{\r\n flex: 1,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n {props?.girdIcon ? (\r\n <FontAwesomeIcon\r\n icon={props.girdIcon}\r\n style={{ marginRight: 5, marginLeft: 5 }}\r\n />\r\n ) : (\r\n <></>\r\n )}\r\n <Typography variant=\"h5\">\r\n {props?.gridTitle\r\n ? capitalizeFirstLetter(t(props?.gridTitle))\r\n : \"\"}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n ) : (\r\n <></>\r\n )}\r\n\r\n {props?.gridLoadParameters &&\r\n props?.gridLoadParameters.length > 0 &&\r\n props?.gridLoadParametersValues &&\r\n props?.setGridLoadParametersValues ? (\r\n <Accordion defaultExpanded sx={{ width: \"100%\" }}>\r\n <AccordionSummary expandIcon={<GridExpandMoreIcon />}>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <FontAwesomeIcon\r\n style={{ marginLeft: 5, marginRight: 5 }}\r\n icon=\"search\"\r\n />\r\n <Typography component=\"span\">Filters</Typography>\r\n </Box>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <Box>\r\n <TemplateForm\r\n saveButtonSpecs={{\r\n label: t(\"SEARCH_BTN_LABEL\"),\r\n icon: \"search\",\r\n actionButtonVariant: \"outlined\",\r\n actionButtonColor: \"success\",\r\n }}\r\n cancelButtonSpecs={{\r\n label: t(\"RESET_BTN_LABEL\"),\r\n icon: \"eraser\",\r\n actionButtonVariant: \"outlined\",\r\n actionButtonColor: \"error\",\r\n }}\r\n apiActions={{\r\n deleteRecordById: async () => {\r\n return true;\r\n },\r\n saveRecord: async (params) => {\r\n if (params != undefined) {\r\n props.setGridLoadParametersValues(params);\r\n } else {\r\n props.setGridLoadParametersValues({});\r\n }\r\n props.apiActions.reloadData(params);\r\n },\r\n reloadData: async () => {},\r\n loadRecordById: async () => {},\r\n }}\r\n elements={props.gridLoadParameters}\r\n />\r\n </Box>\r\n </AccordionDetails>\r\n </Accordion>\r\n ) : (\r\n <></>\r\n )}\r\n {props?.attachment ? (\r\n <AttachmentWindow>\r\n <AttachmentPanel\r\n attachmentCode={props.attachment.attachmentCode}\r\n refKey={selectedRecord[props?.keyColumnName || \"id\"]}\r\n enableAttachment={attachmentPanelEnabledForRecord}\r\n />\r\n </AttachmentWindow>\r\n ) : (\r\n <></>\r\n )}\r\n {props?.workFlowDocumentCode ? (\r\n <WorkFlowWindow>\r\n <WorkflowDocumentPanel\r\n workFlowDocumentCode={props.workFlowDocumentCode}\r\n refDocumentId={selectedRecord[props?.keyColumnName || \"id\"]}\r\n postActionCallBk={() => {\r\n debugger;\r\n setWorkFlowWindowState(false);\r\n props.apiActions.reloadData(props.gridLoadParametersValues);\r\n }}\r\n cancelActionCallBk={() => {\r\n setWorkFlowWindowState(false);\r\n props.apiActions.reloadData(props.gridLoadParametersValues);\r\n }}\r\n />\r\n </WorkFlowWindow>\r\n ) : (\r\n <></>\r\n )}\r\n <DataGridPremium\r\n {...props?.muiProps}\r\n slots={{ toolbar: TemplateGridTopBar }}\r\n slotProps={{\r\n toolbar: {\r\n templateProps: {\r\n ...props,\r\n rowSelectionModel: rowSelectionModel,\r\n data: props?.data,\r\n },\r\n handleCreateNewRecord,\r\n clearGridState,\r\n } as any,\r\n }}\r\n getRowId={(record: any) => {\r\n return record[keyColumnName];\r\n }}\r\n showToolbar={true}\r\n rows={props?.data}\r\n columns={adjustedColumns}\r\n checkboxSelection\r\n editMode=\"row\"\r\n onRowEditStop={(params, event) => {\r\n if (params.reason === \"rowFocusOut\") {\r\n event.defaultMuiPrevented = true;\r\n }\r\n }}\r\n rowModesModel={\r\n props.editMode.editMode == \"row\" ? rowModesModel : undefined\r\n }\r\n onRowModesModelChange={\r\n props.editMode.editMode == \"row\"\r\n ? handleRowModesModelChange\r\n : undefined\r\n }\r\n rowGroupingColumnMode=\"multiple\"\r\n processRowUpdate={processRowUpdate}\r\n rowSelectionModel={rowSelectionModel}\r\n onRowSelectionModelChange={handleRowSelection}\r\n columnVisibilityModel={columnVisibilityModel}\r\n onColumnVisibilityModelChange={handleColumnVisibilityChange}\r\n onColumnOrderChange={handleColumnOrderChange}\r\n onColumnWidthChange={handleColumnWidthChange}\r\n rowGroupingModel={gridRowGroupingModel}\r\n onRowGroupingModelChange={(model: GridRowGroupingModel) => {\r\n handleRowGroupChange(model);\r\n }}\r\n // pinnedColumns={pinnedColumns}\r\n // onPinnedColumnsChange={handlePinnedColumnsChange}\r\n sx={{ width: \"100%\" }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default TemplateGrid;\r\n","import { useSelector } from \"react-redux\";\r\nimport { TemplateGridColDef } from \"../components\";\r\nimport useAxios from \"./useAxios\";\r\n\r\nconst useLookupGridColumn = () => {\r\n const { handleGetRequest } = useAxios();\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const getLookupOptions = async (lookupType: string) => {\r\n let options = [];\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/public/system/lookup\",\r\n showMask: true,\r\n parameters: { lookupType },\r\n successCallBkFn: (response: any) => {\r\n options = response.data;\r\n },\r\n });\r\n return options;\r\n };\r\n const generateLookupGridColumn = async (props: TemplateGridColDef) => {\r\n let options = await getLookupOptions(props.lookupType);\r\n return {\r\n ...props,\r\n options,\r\n displayField:\r\n AppLayout.appDirection === \"ltr\"\r\n ? \"lookupEnDisplay\"\r\n : \"lookupArDisplay\",\r\n valueField: \"lookupValue\",\r\n };\r\n };\r\n return { generateLookupGridColumn, getLookupOptions };\r\n};\r\n\r\nexport default useLookupGridColumn;\r\n","import { useEffect, useState } from \"react\";\r\nimport TemplateGrid from \"../DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../DataEntryTemplates/DataEntryTypes\";\r\n\r\ntype ExcelReportViewerProps = {\r\n reportData: Array<any>;\r\n setReportData: (data) => void;\r\n reloadReport: () => void;\r\n gridLoadParameters?: Array<FormElementProps>;\r\n gridLoadParametersValues?: { [key: string]: any };\r\n setGridLoadParametersValues?: any;\r\n};\r\n\r\nconst getGridColumnsFromRecord = (data: Array<any>) => {\r\n if (data.length === 0) {\r\n return [];\r\n }\r\n const formElements: Array<FormElementProps> = [];\r\n for (const key of Object.keys(data[0])) {\r\n const formElement: FormElementProps = {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: key,\r\n fieldName: key,\r\n fieldType: \"text\",\r\n },\r\n };\r\n formElements.push(formElement);\r\n } \r\n return formElements;\r\n};\r\n\r\nconst ExcelReportViewer: React.FC<ExcelReportViewerProps> = (props) => {\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n const newData = props.reportData.map((record, index) => {\r\n return { ...record, report_record_data_key: index };\r\n });\r\n setData(newData);\r\n }, [props.reportData]);\r\n return (\r\n <TemplateGrid\r\n data={data}\r\n disableDefaultAction={true}\r\n setData={props.setReportData}\r\n formElements={getGridColumnsFromRecord(props.reportData)}\r\n gridLoadParameters={props.gridLoadParameters}\r\n gridLoadParametersValues={props.gridLoadParametersValues}\r\n setGridLoadParametersValues={props.setGridLoadParametersValues}\r\n editMode={{ editMode: \"none\" }}\r\n girdIcon={\"file-excel\"}\r\n gridTitle=\"Report\"\r\n autoLoad={true}\r\n keyColumnName={\"report_record_data_key\"}\r\n hideInfoBar={true}\r\n apiActions={{\r\n deleteRecordById: async () => {\r\n return true;\r\n },\r\n loadRecordById: async () => {},\r\n reloadData: async () => {\r\n props.reloadReport();\r\n },\r\n saveRecord: async () => {},\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default ExcelReportViewer;\r\n","import { useEffect, useState } from \"react\";\r\nimport { useAxios, useWindow } from \"../../../hooks\";\r\nimport TemplateForm from \"../DataEntryTemplates/TemplateDataForm/TemplateForm\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { FormElementProps } from \"../DataEntryTemplates/DataEntryTypes\";\r\nimport {\r\n Accordion,\r\n AccordionDetails,\r\n AccordionSummary,\r\n Box,\r\n Icon,\r\n IconButton,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport ExcelReportViewer from \"./ExcelReportViewer\";\r\nimport { GridExpandMoreIcon } from \"@mui/x-data-grid-premium\";\r\n\r\ntype ReportViewerState =\r\n | \"ERROR\"\r\n | \"WAITING_REPORT_CODE\"\r\n | \"LOADING_METADATA\"\r\n | \"WAITING_PARAMETER_INPUT\"\r\n | \"WAITING_RESULT\"\r\n | \"SHOWING_RESULT\";\r\n\r\ntype ReportViewerProps = {\r\n reportCode: string;\r\n resultMode: \"Request\" | \"App\";\r\n reportParametersValues?: { [key: string]: any };\r\n byPassParameterEntry?: boolean;\r\n jasperOutPutFileType?: \"pdf\" | \"word\" | \"excel\";\r\n};\r\n\r\ntype ReportParameter = {\r\n parameterCode: string;\r\n parameterLabel: string;\r\n parameterValueFormat?: string;\r\n parameterValueField?: string;\r\n parameterDisplayField?: string;\r\n parameterDataset?: Array<any>;\r\n parameterDataQueryId?: number;\r\n hidden?: boolean;\r\n mandatory?: boolean;\r\n defaultValue?: any;\r\n parameterType:\r\n | \"text\"\r\n | \"number\"\r\n | \"date\"\r\n | \"datetime\"\r\n | \"combobox\"\r\n | \"checkbox\"\r\n | \"html\"\r\n | \"lookup\";\r\n};\r\n\r\nconst ReportViewer: React.FC<ReportViewerProps> = (props) => {\r\n const [blobUrl, setBlobUrl] = useState(null);\r\n const [errorMessage, setErrorMessage] = useState(null);\r\n const [excelReportData, setExcelReportData] = useState<Array<any>>([]);\r\n const [reportViewerState, setReportViewerState] = useState<ReportViewerState>(\r\n \"WAITING_REPORT_CODE\"\r\n );\r\n const { handleGetRequest, handlePostRequest, HandleDownloadHTTPPostPDF } =\r\n useAxios();\r\n const [reportInfo, setReportInfo] = useState<any>(null);\r\n const [reportParametersValues, setReportParametersValues] = useState<any>({\r\n ...props?.reportParametersValues,\r\n });\r\n const [reportParametersElements, setReportParametersElements] = useState<\r\n Array<FormElementProps>\r\n >([]);\r\n const { t } = useTranslation();\r\n\r\n const getFormElementsFromReportParameters = (\r\n reportParameters: Array<ReportParameter>\r\n ) => {\r\n const formElements: Array<FormElementProps> = [];\r\n for (const reportParameter of reportParameters) {\r\n const formElement: FormElementProps = {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: reportParameter?.parameterLabel,\r\n fieldName: reportParameter?.parameterCode,\r\n fieldType: reportParameter?.parameterType,\r\n hidden: reportParameter?.hidden,\r\n formProps: { fieldSize: { lg: 4, md: 6, sm: 12 } },\r\n required: reportParameter?.mandatory,\r\n defaultValue:\r\n reportParametersValues[reportParameter?.parameterCode] ||\r\n reportParameter?.defaultValue,\r\n },\r\n };\r\n formElements.push(formElement);\r\n }\r\n return formElements;\r\n };\r\n const loadReportData = async () => {\r\n setReportViewerState(\"LOADING_METADATA\");\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/public/report/metadata\",\r\n showMask: true,\r\n parameters: { reportCode: props.reportCode },\r\n successCallBkFn: (response: any) => {\r\n setReportInfo(response.data);\r\n setReportParametersElements(\r\n getFormElementsFromReportParameters(response.data.reportParameters)\r\n );\r\n if (\r\n props?.byPassParameterEntry === true ||\r\n response.data.reportParameters.length == 0\r\n ) {\r\n runReport(response.data, reportParametersValues);\r\n setReportViewerState(\"WAITING_RESULT\");\r\n } else {\r\n setReportViewerState(\"WAITING_PARAMETER_INPUT\");\r\n }\r\n },\r\n failureCallBkFn: (response) => {\r\n setErrorMessage(\r\n \"Failed loading report metadata ... contact your administrator\"\r\n );\r\n setReportViewerState(\"ERROR\");\r\n },\r\n });\r\n };\r\n\r\n const runReport = async (reportInfoProp, params) => {\r\n setReportViewerState(\"WAITING_RESULT\");\r\n if (reportInfoProp?.reportType === \"Excel\") {\r\n await handlePostRequest({\r\n endPointURI: \"api/v1/public/report/run\",\r\n showMask: true,\r\n data: {\r\n reportCode: props.reportCode,\r\n parameters: params,\r\n resultMode: props.resultMode,\r\n jasperOutPutFileType: props.jasperOutPutFileType,\r\n },\r\n successCallBkFn: (response: any) => {\r\n setReportViewerState(\"SHOWING_RESULT\");\r\n setExcelReportData(response.data);\r\n },\r\n });\r\n } else if (reportInfoProp?.reportType) {\r\n await HandleDownloadHTTPPostPDF({\r\n endPointURI: \"api/v1/public/report/run\",\r\n showMask: true,\r\n data: {\r\n reportCode: props.reportCode,\r\n parameters: params,\r\n resultMode: props.resultMode,\r\n jasperOutPutFileType: props.jasperOutPutFileType,\r\n },\r\n successCallBkFn: (response: any) => {\r\n setReportViewerState(\"SHOWING_RESULT\");\r\n const contentDisposition = response.headers[\"content-disposition\"];\r\n debugger;\r\n let filename = \"downloaded_file\";\r\n if (\r\n contentDisposition &&\r\n contentDisposition.indexOf(\"filename=\") !== -1\r\n ) {\r\n const match = contentDisposition.match(/filename=\"?([^\"]+)\"?/);\r\n if (match && match[1]) filename = match[1];\r\n }\r\n if (filename.includes(\"pdf\")) {\r\n const file = new Blob([response.data], { type: \"application/pdf\" });\r\n const url = URL.createObjectURL(file);\r\n setBlobUrl(url);\r\n } else {\r\n const blob = new Blob([response.data], {\r\n type: response.headers[\"content-type\"],\r\n });\r\n // Create a temporary anchor element\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n // Optional: Try to get filename from response headers\r\n\r\n link.download = filename;\r\n document.body.appendChild(link);\r\n link.click();\r\n\r\n // Clean up\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(url);\r\n } \r\n },\r\n failureCallBkFn: (response) => {\r\n setErrorMessage(\r\n \"Failed To run report ... contact your administrator\"\r\n );\r\n setReportViewerState(\"ERROR\");\r\n },\r\n });\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (props?.reportCode) {\r\n loadReportData();\r\n }\r\n }, [\r\n props.reportCode,\r\n props.byPassParameterEntry,\r\n props.reportParametersValues,\r\n props.jasperOutPutFileType,\r\n props.resultMode,\r\n ]);\r\n\r\n return (\r\n <>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n width: \"100%\",\r\n }}\r\n >\r\n <Box sx={{ flex: 1, textAlign: \"center\", marginBottom: 1 }}>\r\n <FontAwesomeIcon\r\n icon={\r\n reportInfo?.reportType === \"Excel\" ? \"file-excel\" : \"file-pdf\"\r\n }\r\n color={reportInfo?.reportType === \"Excel\" ? \"darkgreen\" : \"darkred\"}\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n />\r\n {reportInfo?.reportName}\r\n </Box>\r\n {reportInfo?.reportType != \"Excel\" ? (\r\n reportViewerState === \"SHOWING_RESULT\" ? (\r\n <>\r\n {props?.byPassParameterEntry === true ? (\r\n <></>\r\n ) : reportParametersElements.length > 0 ? (\r\n <IconButton\r\n onClick={() => {\r\n setReportParametersElements(\r\n getFormElementsFromReportParameters(\r\n reportInfo.reportParameters\r\n )\r\n );\r\n setReportViewerState(\"WAITING_PARAMETER_INPUT\");\r\n }}\r\n >\r\n <FontAwesomeIcon icon=\"filter\" />\r\n </IconButton>\r\n ) : (\r\n <></>\r\n )}\r\n <IconButton>\r\n <FontAwesomeIcon\r\n icon=\"refresh\"\r\n onClick={() => {\r\n runReport(reportInfo, reportParametersValues);\r\n }}\r\n />\r\n </IconButton>\r\n </>\r\n ) : (\r\n <></>\r\n )\r\n ) : (\r\n <></>\r\n )}\r\n </Box>\r\n <Box\r\n sx={{\r\n flexGrow: 1,\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n }}\r\n >\r\n {reportViewerState === \"WAITING_PARAMETER_INPUT\" &&\r\n reportInfo?.reportType != \"Excel\" ? (\r\n <Accordion defaultExpanded sx={{ width: \"100%\" }} expanded={true}>\r\n <AccordionSummary>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <FontAwesomeIcon\r\n style={{ marginLeft: 5, marginRight: 5 }}\r\n icon=\"search\"\r\n />\r\n <Typography component=\"span\">Filters</Typography>\r\n </Box>\r\n </AccordionSummary>\r\n <AccordionDetails>\r\n <Box>\r\n <TemplateForm\r\n saveButtonSpecs={{\r\n label: t(\"SHOW_REPORT_BTN_LABEL\"),\r\n icon: \"search\",\r\n actionButtonVariant: \"outlined\",\r\n actionButtonColor: \"success\",\r\n hidden: true,\r\n }}\r\n cancelButtonSpecs={{\r\n label: t(\"RESET_BTN_LABEL\"),\r\n icon: \"eraser\",\r\n actionButtonVariant: \"outlined\",\r\n actionButtonColor: \"error\",\r\n }}\r\n apiActions={{\r\n deleteRecordById: async () => {\r\n return true;\r\n },\r\n saveRecord: async (params) => {\r\n if (params != undefined) {\r\n setReportParametersValues(params);\r\n } else {\r\n setReportParametersValues({});\r\n }\r\n runReport(reportInfo, params);\r\n },\r\n reloadData: async () => {},\r\n loadRecordById: async () => {},\r\n }}\r\n elements={reportParametersElements}\r\n />\r\n </Box>\r\n </AccordionDetails>\r\n </Accordion>\r\n ) : reportViewerState === \"SHOWING_RESULT\" ||\r\n ((reportViewerState === \"WAITING_PARAMETER_INPUT\" ||\r\n reportViewerState === \"WAITING_RESULT\") &&\r\n reportInfo?.reportType === \"Excel\") ? (\r\n reportInfo?.reportType === \"Excel\" ? (\r\n <ExcelReportViewer\r\n reportData={excelReportData}\r\n setReportData={setExcelReportData}\r\n reloadReport={async () => {\r\n runReport(reportInfo, reportParametersValues);\r\n }}\r\n gridLoadParameters={reportParametersElements}\r\n gridLoadParametersValues={reportParametersValues}\r\n setGridLoadParametersValues={setReportParametersValues}\r\n />\r\n ) : (\r\n <iframe\r\n src={blobUrl}\r\n width=\"100%\"\r\n height=\"100%\"\r\n title=\"PDF Preview\"\r\n style={{ border: \"1px solid #ccc\", marginTop: \"20px\" }}\r\n ></iframe>\r\n )\r\n ) : reportViewerState === \"ERROR\" ? (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flex: 1,\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <FontAwesomeIcon\r\n icon=\"circle-exclamation\"\r\n color=\"darkred\"\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n />\r\n {errorMessage}\r\n </Box>\r\n ) : (\r\n <></>\r\n )}\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default ReportViewer;\r\n","import { useEffect, useState } from \"react\";\r\nimport { useAxios, useSession, useWindow } from \"../../../hooks\";\r\nimport {\r\n Avatar,\r\n Box,\r\n Button,\r\n Divider,\r\n Grid2,\r\n IconButton,\r\n Paper,\r\n} from \"@mui/material\";\r\nimport TemplateTextField from \"../DataEntryTemplates/TemplateDataForm/FormFields/TemplateTextField\";\r\nimport ComboBox from \"../DataEntryTemplates/TemplateDataForm/FormFields/ComboBox\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport WorkflowDocumentTimeLine from \"./WorkflowDocumentTimeLine\";\r\nimport { toast } from \"react-toastify\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport ReportViewer from \"../report/ReportViewer\";\r\nimport AttachmentImageViewer from \"../attachment/AttachmentImageViewer\";\r\nimport { useNavigate } from \"react-router-dom\";\r\n\r\nexport type WorkflowDocumentPanelProps = {\r\n workFlowDocumentCode: string;\r\n refDocumentId: any;\r\n postActionCallBk?: () => void;\r\n cancelActionCallBk?: () => void;\r\n};\r\n\r\nexport type workflowDocumentAction = {\r\n id: number;\r\n document_action_code: string;\r\n document_action_ar_name: string;\r\n document_action_en_name: string;\r\n post_action_endpoint?: string;\r\n pre_action_endpoint?: string;\r\n next_document_status_id?: number;\r\n next_action_takers?: Array<person>;\r\n require_comment: any;\r\n};\r\n\r\nexport type person = {\r\n id: number;\r\n email: string;\r\n employeeArName: string;\r\n employeeEnName: string;\r\n mobileNumber: string;\r\n username: string;\r\n};\r\n\r\nexport type workflowDocumentActionHistory = {\r\n id: number;\r\n actionTime: string;\r\n actionMethod: string;\r\n actionComment: string;\r\n documentActionArName: string;\r\n documentActionEnName: string;\r\n employeeArName: string;\r\n employeeEnName: string;\r\n personId: number;\r\n};\r\n\r\ntype WorkflowDocumentInfo = {\r\n workflowDocument: any;\r\n referencedDocument: any;\r\n workflowDocumentReport: any;\r\n workflowDocumentStatus: any;\r\n actionsHistory: Array<workflowDocumentActionHistory>;\r\n nextActions: Array<workflowDocumentAction>;\r\n nextActionTakers: any;\r\n};\r\n\r\nconst WorkflowDocumentPanel: React.FC<WorkflowDocumentPanelProps> = (props) => {\r\n const navigate = useNavigate();\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const { isUserAuthorized, UserInfo } = useSession();\r\n const { handleGetRequest, handlePostRequest } = useAxios();\r\n const [action, setAction] = useState<workflowDocumentAction>(null);\r\n const [authorizedActions, setAuthorizedActions] = useState<\r\n Array<workflowDocumentAction>\r\n >([]);\r\n const { t } = useTranslation();\r\n const [actionComment, setActionComment] = useState(null);\r\n const [workflowDocumentInfo, setWorkflowDocumentInfo] =\r\n useState<WorkflowDocumentInfo>({\r\n referencedDocument: null,\r\n workflowDocumentReport: null,\r\n workflowDocument: null,\r\n workflowDocumentStatus: null,\r\n actionsHistory: [],\r\n nextActionTakers: null,\r\n nextActions: [],\r\n });\r\n const { Window: ReporTViewWindow, setWindowState: setReportViewWindowState } =\r\n useWindow({\r\n windowTitle:\r\n AppLayout.appDirection === \"ltr\"\r\n ? workflowDocumentInfo?.workflowDocument &&\r\n workflowDocumentInfo?.referencedDocument\r\n ? `${workflowDocumentInfo?.workflowDocument?.documentEnName} # ${\r\n workflowDocumentInfo?.referencedDocument[\r\n workflowDocumentInfo?.workflowDocument?.documentNumberField\r\n ]\r\n }`\r\n : \"Document\"\r\n : workflowDocumentInfo?.workflowDocument &&\r\n workflowDocumentInfo?.referencedDocument\r\n ? `${workflowDocumentInfo?.workflowDocument?.documentArName} # ${\r\n workflowDocumentInfo?.referencedDocument[\r\n workflowDocumentInfo?.workflowDocument?.documentNumberField\r\n ]\r\n }`\r\n : \"وثيقة\",\r\n windowIcon: \"eye\",\r\n width: \"80%\",\r\n });\r\n const loadWorkFlowDocumentInfo = async () => {\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/public/workflow/doc/info\",\r\n showMask: true,\r\n parameters: {\r\n workflowDocumentCode: props.workFlowDocumentCode,\r\n refDocumentId: props.refDocumentId,\r\n },\r\n successCallBkFn: (response: any) => {\r\n setWorkflowDocumentInfo(response.data);\r\n },\r\n failureCallBkFn: () => {\r\n setWorkflowDocumentInfo({\r\n referencedDocument: null,\r\n workflowDocumentReport: null,\r\n workflowDocument: null,\r\n workflowDocumentStatus: null,\r\n actionsHistory: [],\r\n nextActions: [],\r\n nextActionTakers: null,\r\n });\r\n },\r\n });\r\n };\r\n\r\n const validateBeforeProcessWorkflowDocumentAction = async () => {\r\n if (\r\n action === undefined ||\r\n action === null ||\r\n action?.id === undefined ||\r\n action?.id === null\r\n ) {\r\n toast.error(\"You must select action to process\");\r\n return;\r\n }\r\n if (\r\n (action.require_comment === true ||\r\n action.require_comment === 1 ||\r\n action.require_comment === \"true\") &&\r\n (actionComment === null || actionComment === \"\")\r\n ) {\r\n toast.error(\"You must enter comment for the action to be processed\");\r\n return;\r\n }\r\n if (action?.pre_action_endpoint) {\r\n await handlePostRequest({\r\n endPointURI: action.pre_action_endpoint,\r\n showMask: true,\r\n loadingMessage: \"Processing pre action validation ... please wait\",\r\n parameters: {\r\n refDocumentId: props.refDocumentId,\r\n actionId: action.id,\r\n },\r\n successCallBkFn: () => {\r\n processWorkflowDocumentAction();\r\n },\r\n });\r\n return;\r\n }\r\n processWorkflowDocumentAction();\r\n };\r\n const processWorkflowDocumentAction = async () => {\r\n await handlePostRequest({\r\n endPointURI: \"api/v1/public/workflow/doc/action\",\r\n showMask: true,\r\n data: {\r\n workflowDocumentId: workflowDocumentInfo?.workflowDocument?.id,\r\n refDocumentId: props.refDocumentId,\r\n actionId: action.id,\r\n refDocumentStatus:\r\n workflowDocumentInfo?.workflowDocumentStatus?.documentStatusCode,\r\n actionComment: actionComment,\r\n },\r\n successCallBkFn: async (response) => {\r\n if (action?.post_action_endpoint) {\r\n await handlePostRequest({\r\n endPointURI: action.post_action_endpoint,\r\n showMask: true,\r\n loadingMessage: \"Processing post action process ... please wait\",\r\n parameters: {\r\n refDocumentId: props.refDocumentId,\r\n actionId: action.id,\r\n },\r\n successCallBkFn: () => {\r\n loadWorkFlowDocumentInfo();\r\n if (props?.postActionCallBk) {\r\n props.postActionCallBk();\r\n }\r\n },\r\n });\r\n return;\r\n }\r\n loadWorkFlowDocumentInfo();\r\n },\r\n });\r\n };\r\n\r\n const adjustAuthorizedActions = () => {\r\n if (workflowDocumentInfo?.nextActions?.length > 0) {\r\n setAuthorizedActions(\r\n workflowDocumentInfo.nextActions.filter((action) => {\r\n if (\r\n !(\r\n workflowDocumentInfo?.workflowDocumentStatus\r\n ?.nextActionTakersAuthority ||\r\n workflowDocumentInfo?.nextActionTakers\r\n )\r\n ) {\r\n return true;\r\n }\r\n if (\r\n workflowDocumentInfo?.workflowDocumentStatus\r\n ?.nextActionTakersAuthority\r\n ) {\r\n if (\r\n isUserAuthorized(\r\n workflowDocumentInfo.workflowDocumentStatus\r\n .nextActionTakersAuthority\r\n )\r\n ) {\r\n return true;\r\n }\r\n }\r\n if (workflowDocumentInfo?.nextActionTakers) {\r\n for (const actionTaker of workflowDocumentInfo.nextActionTakers) {\r\n if (\r\n UserInfo?.username === actionTaker?.username ||\r\n UserInfo?.username === actionTaker?.USERNAME\r\n ) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n })\r\n );\r\n } else {\r\n setAuthorizedActions([]);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (props.refDocumentId && props.workFlowDocumentCode) {\r\n loadWorkFlowDocumentInfo();\r\n }\r\n }, [props.refDocumentId, props.workFlowDocumentCode]);\r\n\r\n useEffect(() => {\r\n if (workflowDocumentInfo?.nextActions) {\r\n adjustAuthorizedActions();\r\n } else {\r\n setAuthorizedActions([]);\r\n }\r\n }, [workflowDocumentInfo.nextActions, workflowDocumentInfo.nextActionTakers]);\r\n return (\r\n <>\r\n {workflowDocumentInfo?.workflowDocumentReport?.id ? (\r\n <ReporTViewWindow>\r\n <ReportViewer\r\n reportCode={\r\n workflowDocumentInfo?.workflowDocumentReport?.reportCode\r\n }\r\n resultMode=\"App\"\r\n byPassParameterEntry={true}\r\n reportParametersValues={{ doc_id: props.refDocumentId + \"\" }}\r\n />\r\n </ReporTViewWindow>\r\n ) : (\r\n <></>\r\n )}\r\n\r\n {workflowDocumentInfo?.workflowDocument ? (\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n textAlign: \"center\",\r\n fontSize: 20,\r\n fontWeight: \"bold\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <IconButton\r\n onClick={() => {\r\n navigate(-1, { replace: true });\r\n }}\r\n >\r\n <FontAwesomeIcon icon=\"arrow-left\" />\r\n </IconButton>\r\n <Box sx={{ flex: 1 }}></Box>\r\n <FontAwesomeIcon\r\n icon=\"file\"\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n />\r\n {AppLayout.appDirection === \"ltr\"\r\n ? `${workflowDocumentInfo?.workflowDocument?.documentEnName} # ${\r\n workflowDocumentInfo?.referencedDocument[\r\n workflowDocumentInfo?.workflowDocument?.documentNumberField\r\n ]\r\n }`\r\n : `${workflowDocumentInfo?.workflowDocument?.documentArName} # ${\r\n workflowDocumentInfo?.referencedDocument[\r\n workflowDocumentInfo?.workflowDocument?.documentNumberField\r\n ]\r\n }`}\r\n {workflowDocumentInfo?.workflowDocumentStatus\r\n ? AppLayout.appDirection === \"ltr\"\r\n ? ` ( ${workflowDocumentInfo?.workflowDocumentStatus?.documentStatusEnName} )`\r\n : ` ( ${workflowDocumentInfo?.workflowDocumentStatus?.documentStatusArName} )`\r\n : \"\"}\r\n <Box sx={{ flex: 1 }}></Box>\r\n {workflowDocumentInfo?.workflowDocumentReport?.id ? (\r\n <Button\r\n onClick={() => {\r\n setReportViewWindowState(true);\r\n }}\r\n variant=\"outlined\"\r\n startIcon={<FontAwesomeIcon icon=\"eye\" />}\r\n >\r\n {t(\"VIEW_LABEL\")}\r\n </Button>\r\n ) : (\r\n <></>\r\n )}\r\n </Box>\r\n ) : (\r\n <></>\r\n )}\r\n\r\n <Box\r\n sx={{\r\n flex: 1,\r\n width: \"100%\",\r\n overflow: \"hidden\",\r\n display: \"flex\",\r\n // flexDirection: \"column\",\r\n }}\r\n >\r\n {authorizedActions?.length > 0 ? (\r\n <Paper\r\n sx={{\r\n padding: 2,\r\n display: \"flex\",\r\n flex: 1,\r\n margin: 1,\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n <ComboBox\r\n sx={{ marginBottom: 2, width: 400 }}\r\n label={t(\"WE_AVAILABLE_ACTIONS_LABEL\")}\r\n displayField={\r\n AppLayout.appDirection === \"ltr\"\r\n ? \"document_action_en_name\"\r\n : \"document_action_ar_name\"\r\n }\r\n valueField={\"id\"}\r\n value={action?.id}\r\n options={authorizedActions}\r\n onChangeCallBack={(v, selectedRecord) => {\r\n setAction(selectedRecord);\r\n }}\r\n />\r\n {/* <ComboBox\r\n sx={{ marginBottom: 2, width: 400 }}\r\n label={t(\"WE_NEXT_APPROVER_LABEL\")}\r\n displayField={\r\n AppLayout.appDirection === \"ltr\"\r\n ? \"employeeEnName\"\r\n : \"employeeArName\"\r\n }\r\n valueField={\"id\"}\r\n value={nextActionTaker?.id}\r\n options={action?.nextActionTakers || []}\r\n onChangeCallBack={(v, selectedRecord) => {\r\n setNextActionTaker(selectedRecord);\r\n }}\r\n /> */}\r\n <TemplateTextField\r\n sx={{ width: 400 }}\r\n rows={3}\r\n value={actionComment}\r\n onChange={(event) => {\r\n setActionComment(event.target.value);\r\n }}\r\n multiline={true}\r\n label={t(\"WF_COMMENT_LABEL\")}\r\n />\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <Button\r\n color=\"success\"\r\n variant=\"contained\"\r\n sx={{ width: 200, m: 1 }}\r\n onClick={validateBeforeProcessWorkflowDocumentAction}\r\n >\r\n {t(\"WF_TAKE_ACTION_BTN_LABEL\")}\r\n </Button>\r\n {props?.cancelActionCallBk ? (\r\n <Button\r\n variant=\"contained\"\r\n sx={{ width: 200, m: 1 }}\r\n color=\"error\"\r\n onClick={() => {\r\n if (props?.cancelActionCallBk) {\r\n props.cancelActionCallBk();\r\n }\r\n }}\r\n >\r\n {t(\"WF_CANCEL_BTN_LABEL\")}\r\n </Button>\r\n ) : (\r\n <></>\r\n )}\r\n </Box>\r\n {workflowDocumentInfo?.nextActionTakers &&\r\n workflowDocumentInfo.nextActionTakers.length > 0 ? (\r\n <>\r\n <Divider\r\n variant=\"fullWidth\"\r\n flexItem\r\n sx={{ marginTop: 1, marginBottom: 1 }}\r\n >\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n fontSize: 18,\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <FontAwesomeIcon\r\n icon=\"users\"\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n />{\" \"}\r\n {t(\"WF_WAITING_FOR_LABEL\")}\r\n </Box>\r\n </Divider>\r\n\r\n <Box\r\n sx={{\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n overflow: \"auto\",\r\n padding: 1,\r\n width: \"100%\",\r\n }}\r\n >\r\n {workflowDocumentInfo.nextActionTakers.map(\r\n (nextActionTaker: any) => {\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n border: \"1px dotted black\",\r\n width: 400,\r\n marginBottom: 2,\r\n padding: 2,\r\n }}\r\n >\r\n <AttachmentImageViewer\r\n showAsAvatar={true}\r\n attachmentCode=\"EMPLOYEE_PHOTOS\"\r\n refKey={nextActionTaker?.id || \"0\"}\r\n style={{\r\n marginRight: 2,\r\n marginLeft: 2,\r\n width: 60,\r\n height: 60,\r\n }}\r\n />\r\n <Box\r\n sx={{\r\n flex: 2,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"flex-start\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <div>\r\n {AppLayout.appDirection === \"ltr\"\r\n ? nextActionTaker?.employee_en_name\r\n : nextActionTaker?.employee_ar_name}\r\n </div>\r\n <div>\r\n {nextActionTaker?.email ? (\r\n <>\r\n <FontAwesomeIcon\r\n icon=\"envelope\"\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n />\r\n {nextActionTaker?.email}\r\n </>\r\n ) : (\r\n <></>\r\n )}\r\n </div>\r\n <div>\r\n {nextActionTaker?.mobile_number ? (\r\n <>\r\n <FontAwesomeIcon\r\n icon=\"mobile\"\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n />\r\n {nextActionTaker?.mobile_number}\r\n </>\r\n ) : (\r\n <></>\r\n )}\r\n </div>\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n )}\r\n </Box>\r\n </>\r\n ) : (\r\n <></>\r\n )}\r\n </Paper>\r\n ) : (\r\n <></>\r\n )}\r\n {workflowDocumentInfo?.actionsHistory.length > 0 ? (\r\n <WorkflowDocumentTimeLine\r\n actionHistory={workflowDocumentInfo.actionsHistory}\r\n />\r\n ) : (\r\n <Paper\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n flexGrow: 1,\r\n padding: 2,\r\n margin: 1,\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n fontSize: 18,\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <FontAwesomeIcon\r\n icon=\"history\"\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n />\r\n {t(\"WF_ACTION_HISTORY_LABEL\")}\r\n </Box>\r\n <Box\r\n sx={{\r\n flex: 1,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n No Action Log available\r\n </Box>\r\n </Paper>\r\n )}\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default WorkflowDocumentPanel;\r\n","import { Box } from \"@mui/system\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport * as z from \"zod\";\r\nimport { useForm } from \"react-hook-form\";\r\nimport { zodResolver } from \"@hookform/resolvers/zod\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { Button, Grid2, Icon, IconButton, Tooltip } from \"@mui/material\";\r\nimport { toast } from \"react-toastify\";\r\nimport FormElementGroup from \"./FormElementGroup\";\r\nimport FormElementField from \"./FormElementField\";\r\nimport FormAction from \"./FormAction\";\r\nimport { constructValidationSchema, getAllFields } from \"../DataEntryUtil\";\r\nimport {\r\n FormElementProps,\r\n RecordAction,\r\n TemplateFormProps,\r\n} from \"../DataEntryTypes\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useWindow } from \"../../../../hooks\";\r\nimport AttachmentPanel from \"../../attachment/AttachmentPanel\";\r\nimport WorkflowDocumentPanel from \"../../workflow/WorkflowDocumentPanel\";\r\n\r\nconst TemplateForm: React.FC<TemplateFormProps> = (\r\n props: TemplateFormProps\r\n) => {\r\n const { Window: AttachmentWindow, setWindowState: setAttachmentWindowState } =\r\n useWindow({\r\n windowTitle: \"Attachments\",\r\n windowIcon: \"paperclip\",\r\n width: \"fit-content\",\r\n height: \"fit-content\",\r\n minHeight: 500,\r\n minWidth: 400,\r\n });\r\n const { Window: WorkflowWindow, setWindowState: setWorkflowWindowState } =\r\n useWindow({\r\n windowTitle: \"Approvals\",\r\n windowIcon: \"stamp\",\r\n width: \"fit-content\",\r\n height: \"fit-content\",\r\n minHeight: 500,\r\n minWidth: 400,\r\n });\r\n const [attachmentPanelEnabledForRecord, setAttachmentPanelEnabledForRecord] =\r\n useState<boolean>(true);\r\n const { t } = useTranslation();\r\n const fields = getAllFields(props.elements);\r\n const initiallyHiddenFields = [];\r\n for (const field of fields) {\r\n if (field?.hidden) {\r\n initiallyHiddenFields.push(field.fieldName);\r\n }\r\n }\r\n const [hiddenFields, setHiddenFields] = useState<string[]>(\r\n initiallyHiddenFields\r\n );\r\n const initialValues: any = {};\r\n for (const element of props.elements) {\r\n if (\r\n element?.type === \"field\" &&\r\n element?.mode === \"props\" &&\r\n element?.props?.defaultValue\r\n ) {\r\n initialValues[element.props.fieldName] = element.props.defaultValue;\r\n }\r\n }\r\n const [disabledFields, setDisabledFields] = useState<string[]>([]);\r\n const formSchema = z.object(constructValidationSchema(fields));\r\n type FormData = z.infer<typeof formSchema>;\r\n const formManager = useForm<FormData>({\r\n resolver: zodResolver(formSchema),\r\n defaultValues: initialValues,\r\n });\r\n const formValues = formManager.watch();\r\n const pathParameters = useParams();\r\n const formRouteRecordIdParamName: any = props?.formRouteRecordIdParamName;\r\n\r\n const loadRecord = async () => {\r\n let idToLoad = null;\r\n if (props?.recordIdToEdit) {\r\n idToLoad = props.recordIdToEdit;\r\n } else if (\r\n formRouteRecordIdParamName &&\r\n pathParameters[formRouteRecordIdParamName]\r\n ) {\r\n idToLoad = pathParameters[formRouteRecordIdParamName];\r\n }\r\n if (idToLoad) {\r\n const retrievedRecord: any = await props.apiActions.loadRecordById(\r\n idToLoad\r\n );\r\n if (retrievedRecord) {\r\n formManager.reset({ ...retrievedRecord });\r\n if (props?.formLoadCallBk) {\r\n props?.formLoadCallBk(formActions, formManager, retrievedRecord);\r\n }\r\n for (const field of fields) {\r\n if (\r\n field?.fieldType === \"combobox\" &&\r\n retrievedRecord[field.fieldName]\r\n ) {\r\n formManager.setValue(\r\n field.fieldName,\r\n retrievedRecord[field.fieldName] + \"\"\r\n );\r\n }\r\n }\r\n }\r\n } else {\r\n formManager.reset({});\r\n }\r\n };\r\n\r\n const saveRecord = async (record: any) => {\r\n if (props?.preSaveValidation && !props.preSaveValidation(record)) {\r\n return;\r\n }\r\n if (record) {\r\n const savedRecord: any = await props.apiActions.saveRecord(record);\r\n if (savedRecord) {\r\n formManager.reset({ ...savedRecord });\r\n if (props?.formSavedSuccessfullyCallBk) {\r\n props.formSavedSuccessfullyCallBk(savedRecord);\r\n }\r\n if (props?.formCloseCallBk) {\r\n props.formCloseCallBk();\r\n }\r\n }\r\n }\r\n };\r\n\r\n const formActions = {\r\n setFieldValue: (fieldName: string, fieldValue: any) => {\r\n formManager.setValue(fieldName, fieldValue);\r\n },\r\n hideField: (fieldName: string) => {\r\n setHiddenFields((oldValues) => {\r\n const newValues = [...oldValues, fieldName];\r\n return newValues;\r\n });\r\n },\r\n showField: (fieldName: string) => {\r\n setHiddenFields((oldValues) => {\r\n const newValues = oldValues.filter((x) => x !== fieldName);\r\n return newValues;\r\n });\r\n },\r\n disableField: (fieldName: string) => {\r\n setDisabledFields((oldValues) => {\r\n const newValues = [...oldValues, fieldName];\r\n return newValues;\r\n });\r\n },\r\n enableField: (fieldName: string) => {\r\n setDisabledFields((oldValues) => {\r\n const newValues = oldValues.filter((x) => x !== fieldName);\r\n return newValues;\r\n });\r\n },\r\n };\r\n\r\n useEffect(() => {\r\n loadRecord();\r\n }, [props?.recordIdToEdit]);\r\n\r\n useEffect(() => {\r\n if (props?.attachment && props?.attachment?.enableAttachFn) {\r\n setAttachmentPanelEnabledForRecord(\r\n props.attachment.enableAttachFn(formValues)\r\n );\r\n } else {\r\n setAttachmentPanelEnabledForRecord(true);\r\n }\r\n }, [formValues]);\r\n\r\n return (\r\n <>\r\n {props?.attachment ? (\r\n <AttachmentWindow>\r\n <AttachmentPanel\r\n attachmentCode={props.attachment.attachmentCode}\r\n refKey={formValues[props?.keyColumnName || \"id\"]}\r\n enableAttachment={attachmentPanelEnabledForRecord}\r\n />\r\n </AttachmentWindow>\r\n ) : (\r\n <></>\r\n )}\r\n {props?.workFlowDocumentCode ? (\r\n <WorkflowWindow>\r\n <WorkflowDocumentPanel\r\n workFlowDocumentCode={props.workFlowDocumentCode}\r\n refDocumentId={formValues[props?.keyColumnName || \"id\"]}\r\n postActionCallBk={() => {\r\n setWorkflowWindowState(false);\r\n loadRecord();\r\n }}\r\n cancelActionCallBk={() => {\r\n setWorkflowWindowState(false);\r\n }}\r\n />\r\n </WorkflowWindow>\r\n ) : (\r\n <></>\r\n )}\r\n\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flex: 1,\r\n width: \"100%\",\r\n height: \"fit-content\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n overflow: \"auto\",\r\n }}\r\n >\r\n <Grid2 sx={{ width: \"100%\" }} container>\r\n {props.elements.map((formElement: FormElementProps, index) => {\r\n if (formElement.type === \"group\") {\r\n return (\r\n <FormElementGroup\r\n key={index}\r\n {...formElement.props}\r\n formManager={formManager}\r\n formValues={formValues}\r\n formActions={formActions}\r\n hiddenFields={hiddenFields}\r\n disabledFields={disabledFields}\r\n />\r\n );\r\n } else if (\r\n formElement.type === \"field\" &&\r\n formElement.mode === \"props\"\r\n ) {\r\n return (\r\n <FormElementField\r\n key={index}\r\n fieldInfo={formElement.props}\r\n formManager={formManager}\r\n formValues={formValues}\r\n formActions={formActions}\r\n hiddenFields={hiddenFields}\r\n disabledFields={disabledFields}\r\n />\r\n );\r\n } else if (\r\n formElement.type === \"field\" &&\r\n formElement.mode === \"node\"\r\n ) {\r\n return (\r\n <Grid2\r\n key={index}\r\n size={\r\n formElement?.props?.formProps?.fieldSize || {\r\n lg: 3,\r\n md: 6,\r\n xs: 12,\r\n }\r\n }\r\n sx={{ padding: 1, width: \"100%\" }}\r\n >\r\n <formElement.node\r\n formManager={formManager}\r\n formValues={formValues}\r\n />\r\n </Grid2>\r\n );\r\n }\r\n })}\r\n </Grid2>\r\n </Box>\r\n\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n width: \"100%\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n }}\r\n >\r\n {formValues[props?.keyColumnName || \"id\"] ? (\r\n props?.attachment ? (\r\n <Tooltip title=\"Attachments\">\r\n <IconButton\r\n onClick={() => {\r\n setAttachmentWindowState(true);\r\n }}\r\n >\r\n <FontAwesomeIcon icon=\"paperclip\" />\r\n </IconButton>\r\n </Tooltip>\r\n ) : null\r\n ) : null}\r\n {formValues[props?.keyColumnName || \"id\"] ? (\r\n props?.workFlowDocumentCode ? (\r\n <Tooltip title=\"Approvals\">\r\n <IconButton\r\n onClick={() => {\r\n setWorkflowWindowState(true);\r\n }}\r\n >\r\n <FontAwesomeIcon icon=\"stamp\" />\r\n </IconButton>\r\n </Tooltip>\r\n ) : null\r\n ) : null}\r\n {props?.actions ? (\r\n formValues[props?.keyColumnName || \"id\"] ? (\r\n props.actions.map((action: RecordAction) => {\r\n if (action?.formActionProps?.enabled === true) {\r\n return <FormAction {...action} record={formValues} />;\r\n } else {\r\n return <></>;\r\n }\r\n })\r\n ) : (\r\n <></>\r\n )\r\n ) : (\r\n <></>\r\n )}\r\n <div style={{ flex: 1 }}></div>\r\n <Button\r\n variant={\r\n props?.saveButtonSpecs?.actionButtonVariant\r\n ? props.saveButtonSpecs.actionButtonVariant\r\n : \"contained\"\r\n }\r\n sx={{ m: 1 }}\r\n startIcon={\r\n props?.saveButtonSpecs?.icon ? (\r\n <FontAwesomeIcon icon={props.saveButtonSpecs.icon} />\r\n ) : null\r\n }\r\n color={\r\n props?.saveButtonSpecs?.actionButtonColor\r\n ? props.saveButtonSpecs.actionButtonColor\r\n : \"primary\"\r\n }\r\n onClick={formManager.handleSubmit(\r\n (values) => {\r\n saveRecord(values);\r\n },\r\n (errors) => {\r\n toast.error(\r\n \"Form Data is not valid, make sure you have all field with valid data\"\r\n );\r\n console.log(\"form validation error\", errors);\r\n }\r\n )}\r\n >\r\n {t(props?.saveButtonSpecs?.label || \"SAVE_BTN_LABEL\")}\r\n </Button>\r\n <Button\r\n variant={\r\n props?.cancelButtonSpecs?.actionButtonVariant\r\n ? props.cancelButtonSpecs.actionButtonVariant\r\n : \"contained\"\r\n }\r\n startIcon={\r\n props?.cancelButtonSpecs?.icon ? (\r\n <FontAwesomeIcon icon={props.cancelButtonSpecs.icon} />\r\n ) : null\r\n }\r\n color={\r\n props?.cancelButtonSpecs?.actionButtonColor\r\n ? props.cancelButtonSpecs.actionButtonColor\r\n : \"error\"\r\n }\r\n sx={{ m: 1 }}\r\n onClick={() => {\r\n if (props?.formCloseCallBk) {\r\n props.formCloseCallBk();\r\n }\r\n formManager.reset(initialValues);\r\n }}\r\n >\r\n {t(props?.cancelButtonSpecs?.label || \"CANCEL_BTN_LABEL\")}\r\n </Button>\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default TemplateForm;\r\n","import { useParams } from \"react-router-dom\";\r\nimport WorkflowDocumentPanel from \"./WorkflowDocumentPanel\";\r\n\r\nconst WorkflowRouteComponent: React.FC = () => {\r\n const { workflowDocumentCode, refDocumentId } = useParams();\r\n return (\r\n <WorkflowDocumentPanel\r\n workFlowDocumentCode={workflowDocumentCode}\r\n refDocumentId={refDocumentId}\r\n />\r\n );\r\n};\r\n\r\nexport default WorkflowRouteComponent;\r\n","import { BarChart } from \"@mui/x-charts\";\r\nimport { WidgetProps } from \"../DashboardViewer\";\r\n\r\n\r\nconst TemplateBarChart: React.FC<WidgetProps> = (props) => {\r\n return (\r\n <BarChart\r\n dataset={props.data}\r\n xAxis={[\r\n {\r\n dataKey: props.valueField,\r\n scaleType: \"band\",\r\n label: props.valueLabel,\r\n },\r\n ]}\r\n series={props.labelField?.split(\",\").map((labelField) => {\r\n return { dataKey: labelField, label: labelField };\r\n })}\r\n />\r\n );\r\n};\r\n\r\nexport default TemplateBarChart;\r\n","import { Box, Paper, Typography } from \"@mui/material\";\r\nimport { SingleRecordWidgetProps } from \"../DashboardViewer\";\r\n\r\n\r\nconst TemplateDataCard: React.FC<SingleRecordWidgetProps> = (props: any) => {\r\n return (\r\n <Paper\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: 150,\r\n padding: 1,\r\n flexGrow: 1,\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n width: \"100%\",\r\n justifyContent: \"space-evenly\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n <div>{props.record[props.valueField]}</div>\r\n </Box>\r\n <Typography sx={{ fontSize: 16, fontWeight: \"bold\" }}>\r\n {props.record[props.labelField]}\r\n </Typography>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default TemplateDataCard;\r\n","import { Gauge } from \"@mui/x-charts\";\r\nimport { SingleRecordWidgetProps } from \"../DashboardViewer\";\r\nimport { Typography } from \"@mui/material\";\r\n\r\nconst TemplateGauge: React.FC<SingleRecordWidgetProps> = (props: any) => {\r\n return (\r\n <>\r\n <Typography sx={{ fontSize: 16, fontWeight: \"bold\" }}>\r\n {props.record[props.labelField]}\r\n </Typography>\r\n <Gauge\r\n width={200}\r\n height={200}\r\n value={props.record[props.valueField]}\r\n valueMax={props.total}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default TemplateGauge;\r\n","import { LineChart } from \"@mui/x-charts\";\r\nimport { WidgetProps } from \"../DashboardViewer\";\r\n\r\nconst TemplateLineChart: React.FC<WidgetProps> = (props) => {\r\n return (\r\n <LineChart\r\n dataset={props.data}\r\n xAxis={[\r\n {\r\n dataKey: props.valueField,\r\n scaleType: \"band\",\r\n label: props.valueLabel,\r\n },\r\n ]}\r\n series={props.labelField?.split(\",\").map((labelField) => {\r\n return { dataKey: labelField, label: labelField };\r\n })}\r\n />\r\n );\r\n};\r\n\r\nexport default TemplateLineChart;\r\n","import * as React from \"react\";\r\nimport LinearProgress, {\r\n LinearProgressProps,\r\n} from \"@mui/material/LinearProgress\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport Box from \"@mui/material/Box\";\r\nimport { SingleRecordWidgetProps } from \"../DashboardViewer\";\r\n\r\nfunction LinearProgressWithLabel(\r\n props: LinearProgressProps & { value: number }\r\n) {\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\" }}>\r\n <Box sx={{ width: \"100%\", mr: 1 }}>\r\n <LinearProgress variant=\"determinate\" {...props} />\r\n </Box>\r\n <Box sx={{ minWidth: 35 }}>\r\n <Typography\r\n variant=\"body2\"\r\n sx={{ color: \"text.secondary\" }}\r\n >{`${Math.round(props.value)}%`}</Typography>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n\r\nconst TemplateLineProgress: React.FC<SingleRecordWidgetProps> = (\r\n props: any\r\n) => {\r\n return (\r\n <Box sx={{ width: \"100%\" }}>\r\n <Typography sx={{ fontSize: 16, fontWeight: \"bold\" }}>\r\n {props.record[props.labelField]}\r\n </Typography>\r\n <LinearProgressWithLabel\r\n value={100 * (props.record[props.valueField] / props.total)}\r\n />\r\n </Box>\r\n );\r\n};\r\n\r\nexport default TemplateLineProgress;\r\n","import { PieChart } from \"@mui/x-charts/PieChart\";\r\nimport { WidgetProps } from \"../DashboardViewer\";\r\n\r\nconst TemplatePieChart: React.FC<WidgetProps> = (props) => {\r\n // construct data object\r\n const chartData = props.data.map((record: any, index: any) => {\r\n return {\r\n id: index,\r\n value: record[props.valueField],\r\n label: record[props.labelField] + \"\",\r\n };\r\n });\r\n return (\r\n <PieChart\r\n series={[\r\n {\r\n data: chartData,\r\n },\r\n ]}\r\n />\r\n );\r\n};\r\n\r\nexport default TemplatePieChart;\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { WidgetType } from \"../../administration/dev/WidgetGrid\";\r\nimport { Backdrop, Box, CircularProgress, Grid2 } from \"@mui/material\";\r\nimport { useEffect, useState } from \"react\";\r\nimport LoadingMask from \"../../common/LoadingMask\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useAxios } from \"../../../hooks\";\r\nimport TemplateLineChart from \"./charts/TemplateLineChart\";\r\nimport TemplateBarChart from \"./charts/TemplateBarChart\";\r\nimport TemplatePieChart from \"./charts/TemplatePieChart\";\r\nimport TemplateDataCard from \"./charts/TemplateDataCard\";\r\nimport TemplateGauge from \"./charts/TemplateGauge\";\r\nimport TemplateLineProgress from \"./charts/TemplateLineProgress\";\r\n\r\nexport type Widget = {\r\n widgetName: string;\r\n widgetDescription: string;\r\n title: string;\r\n icon: any;\r\n dataQueryId: number;\r\n widgetType: WidgetType;\r\n width: any;\r\n height: any;\r\n horizontalAxisField: any;\r\n horizontalAxisLabel: any;\r\n verticalAxisField: string;\r\n verticalAxisLabel: string;\r\n seriesKeys: any;\r\n parameterValues: {\r\n [key: string]: any;\r\n };\r\n};\r\n\r\nconst WidgetViewer: React.FC<Widget> = (props) => {\r\n const [isWidgetLoading, setWidgetLoading] = useState(true);\r\n const [data, setData] = useState([]);\r\n const { handleGetRequest } = useAxios();\r\n const getWidgetData = async () => {\r\n setWidgetLoading(true);\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/dev/query/result\",\r\n showMask: false,\r\n parameters: {\r\n queryId: props.dataQueryId,\r\n ...props.parameterValues,\r\n },\r\n successCallBkFn: (response) => {\r\n setWidgetLoading(false);\r\n setData(response.data);\r\n },\r\n failureCallBkFn: () => {\r\n setWidgetLoading(false);\r\n setData(null);\r\n },\r\n });\r\n };\r\n useEffect(() => {\r\n getWidgetData();\r\n }, [props.parameterValues]);\r\n\r\n let total = 0;\r\n if (data.length == 1) {\r\n total = 100;\r\n }\r\n if (\r\n props.widgetType === \"CircularProgress\" ||\r\n props.widgetType === \"LinearProgress\"\r\n ) {\r\n for (const record of data) {\r\n total += record[props.verticalAxisField];\r\n }\r\n }\r\n return (\r\n <>\r\n {props.widgetType === \"LineChart\" ||\r\n props.widgetType === \"PieChart\" ||\r\n props.widgetType === \"ColumnChart\" ? (\r\n <Box>\r\n <FontAwesomeIcon\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n icon={props?.icon || \"chart-pie\"}\r\n />\r\n {props?.title}\r\n </Box>\r\n ) : (\r\n <></>\r\n )}\r\n\r\n <Box\r\n sx={{\r\n flex: 1,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n width: \"100%\",\r\n }}\r\n >\r\n {isWidgetLoading ? (\r\n <>\r\n <FontAwesomeIcon\r\n icon={{ prefix: \"fas\", iconName: \"arrows-spin\" }}\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n spin\r\n size=\"2x\"\r\n />\r\n <div>Loading</div>\r\n </>\r\n ) : props.widgetType === \"ColumnChart\" ? (\r\n <TemplateBarChart\r\n data={data}\r\n widgetTitle={props.title}\r\n labelField={props.verticalAxisField}\r\n valueField={props.horizontalAxisField}\r\n valueLabel={props.horizontalAxisLabel}\r\n widgetType=\"Line\"\r\n />\r\n ) : props.widgetType === \"LineChart\" ? (\r\n <TemplateLineChart\r\n data={data}\r\n widgetTitle={props.title}\r\n labelField={props.verticalAxisField}\r\n valueField={props.horizontalAxisField}\r\n valueLabel={props.horizontalAxisLabel}\r\n widgetType=\"Line\"\r\n />\r\n ) : props.widgetType === \"PieChart\" ? (\r\n <TemplatePieChart\r\n data={data}\r\n widgetTitle={props.title}\r\n labelField={props.horizontalAxisField}\r\n valueField={props.verticalAxisField}\r\n widgetType=\"Line\"\r\n />\r\n ) : (\r\n <Grid2\r\n container\r\n sx={{\r\n width: \"100%\",\r\n alignItems: \"flex-start\",\r\n justifyContent: \"flex-start\",\r\n }}\r\n spacing={2}\r\n size={{ xs: 12 }}\r\n >\r\n <Grid2 size={{ xs: 12 }} sx={{ textAlign: \"center\" }}>\r\n {props.title}\r\n </Grid2>\r\n\r\n {data.map((record, index) => {\r\n if (props.widgetType === \"Card\") {\r\n return (\r\n <Grid2 size={{ md: 3, xs: 12 }}>\r\n <TemplateDataCard\r\n key={index}\r\n widgetTitle={\"\"}\r\n record={record}\r\n labelField={props.verticalAxisField}\r\n valueField={props.horizontalAxisField}\r\n />\r\n </Grid2>\r\n );\r\n } else if (props.widgetType === \"CircularProgress\") {\r\n return (\r\n <Grid2 size={{ md: 3, xs: 12 }}>\r\n <TemplateGauge\r\n key={index}\r\n widgetTitle={\"\"}\r\n record={record}\r\n labelField={props.horizontalAxisField}\r\n valueField={props.verticalAxisField}\r\n total={total}\r\n />\r\n </Grid2>\r\n );\r\n } else if (props.widgetType === \"LinearProgress\") {\r\n return (\r\n <Grid2 size={{ md: 3, xs: 12 }}>\r\n <TemplateLineProgress\r\n key={index}\r\n widgetTitle={\"\"}\r\n record={record}\r\n labelField={props.horizontalAxisField}\r\n valueField={props.verticalAxisField}\r\n total={total}\r\n />\r\n </Grid2>\r\n );\r\n }\r\n })}\r\n </Grid2>\r\n )}\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default WidgetViewer;\r\n","import { Box, Grid2, IconButton } from \"@mui/material\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useAxios } from \"../../../hooks\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport WidgetViewer, { Widget } from \"./WidgetViewer\";\r\nimport { useNavigate } from \"react-router-dom\";\r\n\r\ntype DashboardViewerProps = {\r\n dashboardCode: string;\r\n parameters?: { [key: string]: any };\r\n};\r\n\r\nexport interface WidgetProps {\r\n widgetTitle?: string;\r\n widgetType: \"Line\" | \"Bar\" | \"Pie\" | \"Card\" | \"Gauge\" | \"Progress\";\r\n data: any;\r\n valueLabel?: string;\r\n valueField: string; //x-axis field in case of line/bar chart\r\n labelField: string; //y-axis field in case of line/bar chart, it can also be a comma separated string for multiple series\r\n}\r\n\r\nexport interface SingleRecordWidgetProps {\r\n widgetTitle?: string;\r\n record: object;\r\n valueField: string;\r\n labelField: string;\r\n total?: number;\r\n}\r\n\r\ntype DashboardInfo = {\r\n dashboardCode: string;\r\n dashboardName: string;\r\n dashboardTitle: string;\r\n widgets: Array<Widget>;\r\n dashboardParameters: Array<any>;\r\n};\r\n\r\nconst DashboardViewer: React.FC<DashboardViewerProps> = (props) => {\r\n const [dashboardInfo, setDashboardInfo] = useState<DashboardInfo>({\r\n dashboardCode: \"\",\r\n dashboardName: \"\",\r\n dashboardTitle: \"\",\r\n dashboardParameters: [],\r\n widgets: [],\r\n });\r\n const [dashboardParameterValues, setDashboardParameterValues] = useState<{\r\n [key: string]: any;\r\n }>(props?.parameters || {});\r\n const navigate = useNavigate();\r\n const { handleGetRequest, handlePostRequest } = useAxios();\r\n const loadDashboardInfo = async () => {\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/dev/dashboard/metadata\",\r\n showMask: true,\r\n parameters: {\r\n dashboardCode: props.dashboardCode,\r\n },\r\n successCallBkFn: (response) => {\r\n setDashboardInfo(response.data);\r\n },\r\n failureCallBkFn: () => {\r\n setDashboardInfo(null);\r\n },\r\n });\r\n };\r\n useEffect(() => {\r\n if (props.dashboardCode) {\r\n loadDashboardInfo();\r\n }\r\n }, [props.dashboardCode, props.parameters]);\r\n return (\r\n <>\r\n {dashboardInfo ? (\r\n <>\r\n <Box\r\n sx={{\r\n fontSize: 20,\r\n fontWeight: \"bold\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <IconButton\r\n onClick={() => {\r\n navigate(-1, { replace: true });\r\n }}\r\n >\r\n <FontAwesomeIcon icon=\"arrow-left\" />\r\n </IconButton>\r\n <Box sx={{ flex: 1 }}></Box>\r\n <FontAwesomeIcon\r\n style={{ marginLeft: 10, marginRight: 10 }}\r\n icon={\"square-poll-vertical\"}\r\n />\r\n <Box>{dashboardInfo?.dashboardTitle}</Box>\r\n <Box sx={{ flex: 1 }}></Box>\r\n </Box>\r\n <Grid2\r\n container\r\n spacing={1}\r\n sx={{\r\n flexGrow: 1,\r\n overflowY: \"auto\",\r\n padding: 1,\r\n }}\r\n >\r\n {dashboardInfo?.widgets.map((widget, index) => {\r\n return (\r\n <Grid2\r\n key={index}\r\n sx={{\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n padding: 1,\r\n display: \"flex\",\r\n overflow: \"auto\",\r\n flexDirection:\r\n widget.widgetType != \"Card\" ? \"column\" : undefined,\r\n height: widget?.height || 300,\r\n }}\r\n size={{ md: widget?.width, sm: 12 }}\r\n >\r\n <WidgetViewer {...widget} />\r\n </Grid2>\r\n );\r\n })}\r\n </Grid2>\r\n </>\r\n ) : (\r\n <Box\r\n sx={{\r\n flex: 1,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n fontSize: 24,\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n No Dashboard Found\r\n </Box>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default DashboardViewer;\r\n","import { useParams } from \"react-router-dom\";\r\nimport DashboardViewer from \"./DashboardViewer\";\r\n\r\nconst DashboardRouteView: React.FC = () => {\r\n const { dashboardCode } = useParams();\r\n return <DashboardViewer dashboardCode={dashboardCode} />;\r\n};\r\n\r\nexport default DashboardRouteView;\r\n","import { useState } from \"react\";\r\nimport { useAxios, useSession } from \"../../hooks\";\r\nimport { ComboBox } from \"../templates\";\r\nimport { Box, Button } from \"@mui/material\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { UserSessionActions } from \"../../redux/features/common/UserSessionSlice\";\r\n\r\ntype ChangeOrgFormProps = {\r\n successChangeCallBackFn: () => void;\r\n};\r\n\r\nconst ChangeOrgForm: React.FC<ChangeOrgFormProps> = (props) => {\r\n const { UserSession } = useSession();\r\n const AppLayoutState = useSelector((state: any) => state.AppLayout);\r\n const dispatch = useDispatch();\r\n const { handlePostRequest } = useAxios();\r\n const [newOrgId, setNewOrgId] = useState(\r\n UserSession.value.currentOrganization.id\r\n );\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n width: \"100%\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n padding: 1,\r\n }}\r\n >\r\n <ComboBox\r\n sx={{ width: \"100%\" }}\r\n displayField={\r\n AppLayoutState.appDirection === \"ltr\"\r\n ? \"organizationEnName\"\r\n : \"organizationArName\"\r\n }\r\n valueField=\"id\"\r\n label=\"\"\r\n options={UserSession.value.userOrganizations}\r\n value={newOrgId}\r\n onChangeCallBack={(value) => {\r\n setNewOrgId(value);\r\n }}\r\n />\r\n <Button\r\n sx={{ m: 1 }}\r\n variant=\"contained\"\r\n disabled={\r\n newOrgId == null ||\r\n newOrgId === UserSession.value.currentOrganization.id\r\n }\r\n onClick={async () => {\r\n await handlePostRequest({\r\n endPointURI: \"api/auth/changeCurrentOrg\",\r\n showMask: true,\r\n parameters: {\r\n username: UserSession.value.username,\r\n orgId: newOrgId,\r\n },\r\n data: {},\r\n successCallBkFn: (response) => {\r\n const UserSession = {\r\n ...response.data,\r\n isAuthenticated: true,\r\n };\r\n dispatch(UserSessionActions.setAuthenticated(UserSession));\r\n if (props.successChangeCallBackFn) {\r\n props.successChangeCallBackFn();\r\n }\r\n },\r\n });\r\n }}\r\n >\r\n Change Organization\r\n </Button>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default ChangeOrgForm;\r\n","import { createSlice } from \"@reduxjs/toolkit\";\r\n\r\nexport const DRAWER_WIDTH = 350;\r\n\r\ninterface SideBarState {\r\n isOpened: boolean;\r\n}\r\n\r\nconst initialState: SideBarState = {\r\n isOpened: false,\r\n};\r\n\r\nconst SideBarSlice = createSlice({\r\n name: \"SideBar\",\r\n initialState,\r\n reducers: {\r\n toggleSideBarState: (state) => {\r\n state.isOpened = !state.isOpened;\r\n },\r\n setSideBarState: (state, action) => {\r\n state.isOpened = action.payload;\r\n },\r\n },\r\n});\r\n\r\nexport const { toggleSideBarState, setSideBarState } = SideBarSlice.actions;\r\nexport default SideBarSlice.reducer;\r\n","import { useEffect, useRef } from \"react\";\r\n\r\nexport default function useInterval(\r\n callback: () => void,\r\n delay: number | null\r\n) {\r\n const savedCallback = useRef<() => void>(callback);\r\n\r\n // Remember the latest callback\r\n useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n // Set up the interval\r\n useEffect(() => {\r\n if (delay === null) return;\r\n\r\n const tick = () => savedCallback.current?.();\r\n\r\n const id = setInterval(tick, delay);\r\n return () => clearInterval(id);\r\n }, [delay]);\r\n}\r\n","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { Box, Button, Divider, keyframes, Typography } from \"@mui/material\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport { useAxios, useSession } from \"../../hooks\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { timeAgo } from \"../../util\";\r\n\r\nconst beatFade = keyframes`\r\n 0% { transform: scale(1); opacity: 1; }\r\n 25% { transform: scale(1); opacity: 0.6; }\r\n 50% { transform: scale(1); opacity: 1; }\r\n 75% { transform: scale(1); opacity: 0.6; }\r\n 100% { transform: scale(1); opacity: 1; }\r\n`;\r\n\r\nexport type Notification = {\r\n id: number;\r\n notificationIcon?: IconProp;\r\n notificationIconColor?: string;\r\n notificationEnText: string;\r\n notificationArText: string;\r\n notificationTextColor?: string;\r\n notificationAction?: \"NAVIGATION\";\r\n notificationActionPayload?: string;\r\n isNotified?: boolean;\r\n createTime: string;\r\n setOpen?: (state: boolean) => void;\r\n showDivider?: boolean;\r\n};\r\nconst NotificationItem: React.FC<Notification> = (notification) => {\r\n const navigate = useNavigate();\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const { handlePostRequest } = useAxios();\r\n const acknowledgeNotification = (notificationId) => {\r\n handlePostRequest({\r\n endPointURI: \"api/v1/public/notification/notified\",\r\n showMask: false,\r\n parameters: { notificationQueueId: notificationId },\r\n });\r\n };\r\n return (\r\n <>\r\n <Button\r\n fullWidth\r\n onClick={() => {\r\n if (\r\n notification?.notificationAction === \"NAVIGATION\" &&\r\n notification?.notificationActionPayload\r\n ) {\r\n navigate(notification.notificationActionPayload);\r\n }\r\n if (!notification?.isNotified) {\r\n acknowledgeNotification(notification.id);\r\n }\r\n if (notification?.setOpen) {\r\n notification.setOpen(false);\r\n }\r\n }}\r\n sx={{\r\n marginBottom: 1,\r\n justifyContent: \"flex-start\",\r\n alignItems: \"flex-start\",\r\n color: notification?.notificationTextColor,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n cursor: \"pointer\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n cursor: \"pointer\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n width: \"100%\",\r\n }}\r\n >\r\n {notification?.notificationIcon ? (\r\n <FontAwesomeIcon\r\n icon={notification.notificationIcon}\r\n style={{\r\n marginRight: 10,\r\n marginLeft: 10,\r\n color: notification?.notificationIconColor,\r\n }}\r\n />\r\n ) : (\r\n <></>\r\n )}\r\n {AppLayout.appDirection === \"ltr\"\r\n ? notification.notificationEnText\r\n : notification.notificationArText}\r\n <Box sx={{ flex: 1 }}></Box>\r\n {!notification?.isNotified ? (\r\n <Typography\r\n color=\"warning\"\r\n sx={{\r\n animation: `${beatFade} 2s infinite ease-in-out`,\r\n textTransform: \"none\",\r\n display: \"inline-block\",\r\n }}\r\n >\r\n <FontAwesomeIcon\r\n icon=\"bell\"\r\n style={{ marginRight: 5, marginLeft: 5 }}\r\n />\r\n {AppLayout.appDirection === \"ltr\" ? \"New\" : \"جديد\"}\r\n </Typography>\r\n ) : (\r\n <></>\r\n )}\r\n </Box>\r\n <Box\r\n sx={{\r\n width: \"100%\",\r\n fontSize: 12,\r\n display: \"flex\",\r\n justifyContent: \"flex-end\",\r\n alignItems: \"center\",\r\n cursor: \"pointer\",\r\n }}\r\n >\r\n <Box sx={{ marginRight: 1, marginLeft: 1 }}>\r\n {timeAgo(notification.createTime, AppLayout.appDirection)}\r\n </Box>\r\n <Box sx={{ flex: 1 }}></Box>\r\n <Box sx={{ marginRight: 1, marginLeft: 1 }}>\r\n {notification.createTime}\r\n </Box>\r\n </Box>\r\n </Button>\r\n {notification?.showDivider ? <Divider flexItem /> : <></>}\r\n </>\r\n );\r\n};\r\n\r\nexport default NotificationItem;\r\n","import { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport {\r\n Badge,\r\n Box,\r\n Button,\r\n ClickAwayListener,\r\n Divider,\r\n Fade,\r\n IconButton,\r\n keyframes,\r\n Paper,\r\n Popper,\r\n PopperPlacementType,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport { timeAgo } from \"../util\";\r\nimport useInterval from \"../hooks/useInterval\";\r\nimport { useAxios, useSession } from \"../hooks\";\r\nimport { toast } from \"react-toastify\";\r\nimport NotificationItem, {\r\n Notification,\r\n} from \"../components/common/NotificationItem\";\r\n\r\nexport const notificationsCheckIntervalSeconds = 1;\r\n\r\nconst NotificationButton: React.FC = () => {\r\n const { UserInfo } = useSession();\r\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\r\n const { handleGetRequest, handlePostRequest } = useAxios();\r\n const navigate = useNavigate();\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const [open, setOpen] = useState(false);\r\n const [notifications, setNotifications] = useState<Array<Notification>>([]);\r\n const loadUseNotifications = () => {\r\n if (UserInfo.isAuthenticated === true) {\r\n handleGetRequest({\r\n endPointURI: \"api/v1/public/notifications/new\",\r\n showMask: false,\r\n successCallBkFn: (response: any) => {\r\n if (response.data.length > notifications.length) {\r\n toast.info(\r\n AppLayout.appDirection === \"ltr\"\r\n ? `You have new notifications`\r\n : `لديك اشعارات جديدة`,\r\n {\r\n autoClose: 3000,\r\n position:\r\n AppLayout.appDirection === \"ltr\"\r\n ? \"bottom-right\"\r\n : \"bottom-left\",\r\n closeOnClick: true,\r\n }\r\n );\r\n }\r\n setNotifications(response.data);\r\n },\r\n });\r\n }\r\n };\r\n\r\n useInterval(() => {\r\n loadUseNotifications();\r\n }, notificationsCheckIntervalSeconds * 1000);\r\n\r\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\r\n setAnchorEl(event.currentTarget);\r\n setOpen(!open);\r\n };\r\n return (\r\n <ClickAwayListener\r\n onClickAway={() => {\r\n setOpen(false);\r\n }}\r\n >\r\n <div style={{ cursor: \"pointer\" }}>\r\n <IconButton\r\n color=\"inherit\"\r\n onClick={handleClick}\r\n sx={{ marginRight: 1, marginLeft: 1 }}\r\n >\r\n <Badge\r\n anchorOrigin={{\r\n vertical: \"top\",\r\n horizontal: AppLayout.appDirection === \"ltr\" ? \"right\" : \"left\",\r\n }}\r\n badgeContent={\r\n notifications.filter(\r\n (notificaiton) =>\r\n notificaiton.isNotified === undefined ||\r\n notificaiton.isNotified === null\r\n ).length\r\n }\r\n color=\"error\"\r\n >\r\n <FontAwesomeIcon icon=\"bell\" />\r\n </Badge>\r\n </IconButton>\r\n\r\n <Popper\r\n // Note: The following zIndex style is specifically for documentation purposes and may not be necessary in your application.\r\n sx={{\r\n zIndex: 1200,\r\n width: \"fit-content\",\r\n minWidth: 350,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }}\r\n open={open}\r\n anchorEl={anchorEl}\r\n dir={AppLayout.appDirection}\r\n placement={\"bottom\"}\r\n transition\r\n >\r\n {({ TransitionProps }) => (\r\n <Fade {...TransitionProps} timeout={350}>\r\n <Paper\r\n sx={{\r\n padding: 1,\r\n m: 1,\r\n maxHeight: 500,\r\n overflow: \"hidden\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n }}\r\n >\r\n <Divider variant=\"fullWidth\" flexItem>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n marginTop: 2,\r\n marginBottom: 1,\r\n }}\r\n >\r\n <FontAwesomeIcon\r\n icon=\"bell\"\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n />\r\n {AppLayout.appDirection === \"ltr\"\r\n ? \"Notifications\"\r\n : \"الاشعارات\"}\r\n </Box>\r\n </Divider>\r\n {notifications.length == 0 ? (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n flex: 1,\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <Box>\r\n {AppLayout.appDirection === \"ltr\"\r\n ? \"You don't have any notifications\"\r\n : \"لا يوجد اشعارات\"}\r\n </Box>\r\n </Box>\r\n ) : (\r\n <></>\r\n )}\r\n <Box\r\n sx={{\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflowY: \"auto\",\r\n }}\r\n >\r\n {notifications.map((notification, index) => {\r\n return (\r\n <NotificationItem\r\n {...notification}\r\n setOpen={setOpen}\r\n showDivider={index < notifications.length - 1}\r\n />\r\n );\r\n })}\r\n </Box>\r\n <Divider variant=\"fullWidth\" flexItem>\r\n <Button\r\n sx={{ textTransform: \"none\" }}\r\n onClick={() => {\r\n navigate(\"myNotifications\");\r\n }}\r\n >\r\n {AppLayout.appDirection === \"ltr\"\r\n ? \"Show Old Notifications\"\r\n : \"عرض الاشعارات القديمة\"}\r\n </Button>\r\n </Divider>\r\n </Paper>\r\n </Fade>\r\n )}\r\n </Popper>\r\n </div>\r\n </ClickAwayListener>\r\n );\r\n};\r\n\r\nexport default NotificationButton;\r\n","import { Box, Button, Divider, Paper } from \"@mui/material\";\r\nimport { TemplateTextField } from \"../../templates\";\r\nimport { useState } from \"react\";\r\nimport { toast } from \"react-toastify\";\r\nimport { useAxios } from \"../../../hooks\";\r\n\r\ninterface ChangePasswordPanelProps {\r\n selectedPerson: any;\r\n isSelfService: boolean;\r\n onSuccessCallBk: () => void;\r\n}\r\n\r\nconst ChangePasswordPanel: React.FC<ChangePasswordPanelProps> = (props) => {\r\n const [currentPassword, setCurrentPassword] = useState(\"\");\r\n const [password1, setPassword1] = useState(\"\");\r\n const [password2, setPassword2] = useState(\"\");\r\n const { handlePostRequest } = useAxios();\r\n const handleChangePasswordRequest = async () => {\r\n if (props.isSelfService) {\r\n if (currentPassword === null || currentPassword.trim() === \"\") {\r\n toast.error(\r\n \"You must enter your current password to process your request\"\r\n );\r\n return;\r\n }\r\n }\r\n if (\r\n password1 === null ||\r\n password1 === \"\" ||\r\n password2 === null ||\r\n password2 === \"\" ||\r\n password1 != password2\r\n ) {\r\n toast.error(\r\n \"You must enter new password in required fields and must be identical\"\r\n );\r\n return;\r\n }\r\n await handlePostRequest({\r\n endPointURI: props.isSelfService\r\n ? \"api/v1/ss/changeMyPassword\"\r\n : \"api/v1/admin/changeUserPassword\",\r\n data: {\r\n personId: props?.selectedPerson?.id,\r\n currentPassword,\r\n newPassword: password1,\r\n },\r\n successCallBkFn: () => {\r\n props.onSuccessCallBk();\r\n toast.success(\"Your request has been processed successfully\");\r\n },\r\n showMask: true,\r\n });\r\n };\r\n return (\r\n <Paper\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n width: 400,\r\n padding: 1,\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n m: 1,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n width: \"100%\",\r\n fontWeight: \"bold\",\r\n fontSize: 16,\r\n }}\r\n >\r\n Changing Password For : {props?.selectedPerson?.employeeEnName}\r\n </Box>\r\n <Divider variant=\"fullWidth\" sx={{ width: \"100%\", marginBottom: 2 }} />\r\n {props.isSelfService ? (\r\n <TemplateTextField\r\n label=\"Current Password\"\r\n value={currentPassword}\r\n onChange={(e) => {\r\n setCurrentPassword(e.target.value);\r\n }}\r\n sx={{ m: 1 }}\r\n fullWidth\r\n type=\"password\"\r\n />\r\n ) : (\r\n <></>\r\n )}\r\n\r\n <TemplateTextField\r\n label=\"New Password\"\r\n value={password1}\r\n onChange={(e) => {\r\n setPassword1(e.target.value);\r\n }}\r\n sx={{ m: 1 }}\r\n fullWidth\r\n type=\"password\"\r\n />\r\n <TemplateTextField\r\n label=\"Confirm New Password\"\r\n value={password2}\r\n onChange={(e) => {\r\n setPassword2(e.target.value);\r\n }}\r\n sx={{ m: 1 }}\r\n fullWidth\r\n type=\"password\"\r\n />\r\n <Button\r\n sx={{ m: 1 }}\r\n variant=\"contained\"\r\n onClick={() => {\r\n handleChangePasswordRequest();\r\n }}\r\n >\r\n Change Password\r\n </Button>\r\n </Paper>\r\n );\r\n};\r\n\r\nexport default ChangePasswordPanel;\r\n","import {\r\n Avatar,\r\n Box,\r\n IconButton,\r\n Menu,\r\n MenuItem,\r\n styled,\r\n Tooltip,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport MuiAppBar, { AppBarProps as MuiAppBarProps } from \"@mui/material/AppBar\";\r\nimport Toolbar from \"@mui/material/Toolbar\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useIsMobile } from \"../hooks/UseMobile\";\r\nimport {\r\n AppLayoutActions,\r\n DRAWER_WIDTH,\r\n} from \"../redux/features/common/AppLayoutSlice\";\r\nimport useAxios from \"../hooks/useAxios\";\r\nimport { UserSessionActions } from \"../redux/features/common/UserSessionSlice\";\r\nimport i18n, { changeLanguage } from \"../locales/i18n\";\r\nimport { useSession, useWindow } from \"../hooks\";\r\nimport ChangeOrgForm from \"../components/common/ChangeOrgForm\";\r\nimport { toggleSideBarState } from \"../redux/features/common/SideBarSlice\";\r\nimport AttachmentImageViewer from \"../components/templates/attachment/AttachmentImageViewer\";\r\nimport NotificationButton from \"./NotificationButton\";\r\nimport { useState } from \"react\";\r\nimport ChangePasswordPanel from \"../components/administration/admin/ChangePasswordPanel\";\r\n\r\ninterface AppBarProps extends MuiAppBarProps {\r\n open?: boolean;\r\n}\r\n\r\nconst AppBar = styled(MuiAppBar, {\r\n shouldForwardProp: (prop) => prop !== \"open\",\r\n})<AppBarProps>(({ theme }) => {\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const isMobile = useIsMobile();\r\n return {\r\n transition: theme.transitions.create([\"margin\", \"width\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n variants: [\r\n {\r\n props: ({ open }) => open,\r\n style: {\r\n width: !isMobile ? `calc(100% - ${DRAWER_WIDTH}px)` : undefined,\r\n marginLeft:\r\n !isMobile && AppLayout.appDirection === \"ltr\"\r\n ? `${DRAWER_WIDTH}px`\r\n : undefined,\r\n marginRight:\r\n !isMobile && AppLayout.appDirection === \"rtl\"\r\n ? `${DRAWER_WIDTH}px`\r\n : undefined,\r\n transition: theme.transitions.create([\"margin\", \"width\"], {\r\n easing: theme.transitions.easing.easeOut,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n },\r\n },\r\n ],\r\n };\r\n});\r\n\r\nconst TopBar: React.FC = () => {\r\n const { Window: ChangeOrgWindow, setWindowState: setChangeOrgWindowState } =\r\n useWindow({\r\n windowTitle: \"Change Current Organization\",\r\n windowIcon: \"globe\",\r\n width: \"fit-content\",\r\n height: \"fit-content\",\r\n });\r\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\r\n const [anchorElUser, setAnchorElUser] = useState<null | HTMLElement>(null);\r\n const handleCloseUserMenu = () => {\r\n setAnchorElUser(null);\r\n };\r\n const handleOpenUserMenu = (event: React.MouseEvent<HTMLElement>) => {\r\n setAnchorElUser(event.currentTarget);\r\n };\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const SideBarState = useSelector((state: any) => state.SideBar);\r\n const { UserSession } = useSession();\r\n const currentOrganization = UserSession.value.currentOrganization;\r\n const {\r\n Window: ChangePasswordWindow,\r\n setWindowState: setChangePasswordWindow,\r\n } = useWindow({\r\n windowIcon: \"key\",\r\n windowTitle: \"Change Password\",\r\n width: \"fit-content\",\r\n height: \"fit-content\",\r\n });\r\n const { handleGetRequest } = useAxios();\r\n const isMobile = useIsMobile();\r\n const dispatch = useDispatch();\r\n const handleLogout = async () => {\r\n try {\r\n await handleGetRequest({ endPointURI: \"api/auth/logout\" });\r\n } catch (error) {}\r\n dispatch(UserSessionActions.setUnAuthenticated());\r\n };\r\n const toggleSideBar = () => {\r\n dispatch(toggleSideBarState());\r\n };\r\n return (\r\n <>\r\n <ChangePasswordWindow>\r\n <ChangePasswordPanel\r\n selectedPerson={UserSession.value}\r\n isSelfService={true}\r\n onSuccessCallBk={() => {\r\n setChangePasswordWindow(false);\r\n }}\r\n />\r\n </ChangePasswordWindow>\r\n <Menu\r\n sx={{ mt: \"45px\" }}\r\n id=\"menu-appbar\"\r\n anchorEl={anchorElUser}\r\n anchorOrigin={{\r\n vertical: \"top\",\r\n horizontal: \"right\",\r\n }}\r\n keepMounted\r\n transformOrigin={{\r\n vertical: \"top\",\r\n horizontal: \"right\",\r\n }}\r\n open={Boolean(anchorElUser)}\r\n onClose={handleCloseUserMenu}\r\n >\r\n <MenuItem\r\n onClick={() => {\r\n setChangePasswordWindow(true);\r\n handleCloseUserMenu();\r\n }}\r\n >\r\n <Typography sx={{ textAlign: \"center\" }}>Change Password</Typography>\r\n </MenuItem>\r\n </Menu>\r\n <ChangeOrgWindow>\r\n <ChangeOrgForm\r\n successChangeCallBackFn={() => {\r\n setChangeOrgWindowState(false);\r\n }}\r\n />\r\n </ChangeOrgWindow>\r\n <AppBar position=\"fixed\" open={SideBarState.isOpened}>\r\n <Toolbar>\r\n <IconButton\r\n color=\"inherit\"\r\n aria-label=\"open drawer\"\r\n onClick={toggleSideBar}\r\n edge=\"start\"\r\n sx={[\r\n {\r\n mr: AppLayout.appDirection === \"ltr\" ? 2 : undefined,\r\n ml: AppLayout.appDirection === \"rtl\" ? 2 : undefined,\r\n },\r\n SideBarState.isOpened && { display: \"none\" },\r\n ]}\r\n >\r\n <FontAwesomeIcon icon=\"bars\" />\r\n </IconButton>\r\n <AttachmentImageViewer\r\n showAsAvatar={true}\r\n attachmentCode=\"ORGANIZATION_LOGOS\"\r\n refKey={UserSession.value.currentOrganization.id + \"\"}\r\n onErrorImage=\"/logo.png\"\r\n style={{\r\n marginRight: 1,\r\n marginLeft: 1,\r\n }}\r\n />\r\n {/* <Avatar\r\n src={AppInfo.appLogo}\r\n sx={{ marginRight: 1, marginLeft: 1 }}\r\n /> */}\r\n <Typography variant=\"h6\" noWrap component=\"div\" sx={{ flex: 1 }}>\r\n {isMobile\r\n ? \"\"\r\n : `${AppInfo.appName} - ${\r\n AppLayout.appDirection === \"ltr\"\r\n ? currentOrganization?.organizationEnName\r\n : currentOrganization?.organizationArName\r\n }`}\r\n </Typography>\r\n <Tooltip\r\n title={\r\n AppLayout.themeMode === \"light\"\r\n ? \"Switch Theme to Dark\"\r\n : \"Switch Theme to Light\"\r\n }\r\n >\r\n <IconButton\r\n color=\"inherit\"\r\n onClick={() => {\r\n dispatch(\r\n AppLayoutActions.setThemeMode(\r\n AppLayout.themeMode === \"light\" ? \"dark\" : \"light\"\r\n )\r\n );\r\n localStorage.setItem(\r\n \"themeMode\",\r\n AppLayout.themeMode === \"light\" ? \"dark\" : \"light\"\r\n );\r\n }}\r\n >\r\n {AppLayout.themeMode === \"light\" ? (\r\n <FontAwesomeIcon icon=\"moon\" />\r\n ) : (\r\n <FontAwesomeIcon icon={{ prefix: \"far\", iconName: \"sun\" }} />\r\n )}\r\n </IconButton>\r\n </Tooltip>\r\n <Tooltip\r\n title={\r\n i18n.language === \"ar\"\r\n ? \"Change Language To English\"\r\n : \"Change Language To Arabic\"\r\n }\r\n >\r\n <IconButton\r\n color=\"inherit\"\r\n onClick={() => {\r\n let nextLanguage = i18n.language === \"ar\" ? \"en\" : \"ar\";\r\n changeLanguage(nextLanguage);\r\n dispatch(\r\n AppLayoutActions.setAppDirection(\r\n nextLanguage === \"ar\" ? \"rtl\" : \"ltr\"\r\n )\r\n );\r\n }}\r\n >\r\n <FontAwesomeIcon icon=\"language\" />\r\n </IconButton>\r\n </Tooltip>\r\n {UserSession.value?.userOrganizations &&\r\n UserSession.value?.userOrganizations.length > 1 ? (\r\n <Tooltip title=\"Change Current Organization\">\r\n <IconButton\r\n color=\"inherit\"\r\n onClick={() => {\r\n setChangeOrgWindowState(true);\r\n }}\r\n >\r\n <FontAwesomeIcon icon=\"globe\" />\r\n </IconButton>\r\n </Tooltip>\r\n ) : (\r\n <></>\r\n )}\r\n {AppInfo?.enableUINotifications === true ? (\r\n <NotificationButton />\r\n ) : (\r\n <></>\r\n )}\r\n <div onClick={handleOpenUserMenu} style={{ cursor: \"pointer\" }}>\r\n <AttachmentImageViewer\r\n showAsAvatar={true}\r\n onErrorImage=\"/no_user.png\"\r\n attachmentCode=\"EMPLOYEE_PHOTOS\"\r\n refKey={UserSession.value?.id + \"\"}\r\n />\r\n </div>\r\n\r\n <div\r\n style={{ marginLeft: 5, marginRight: 5, cursor: \"pointer\" }}\r\n onClick={handleOpenUserMenu}\r\n >\r\n {isMobile ? \"\" : UserSession.value?.username}\r\n </div>\r\n <IconButton color=\"inherit\" onClick={handleLogout}>\r\n <FontAwesomeIcon\r\n rotation={AppLayout.appDirection === \"rtl\" ? 180 : undefined}\r\n icon=\"arrow-right-from-bracket\"\r\n />\r\n </IconButton>\r\n </Toolbar>\r\n </AppBar>\r\n </>\r\n );\r\n};\r\n\r\nexport default TopBar;\r\n","import i18n from \"i18next\";\r\n\r\nexport const changeLanguage = (lng: string) => {\r\n i18n.changeLanguage(lng);\r\n localStorage.setItem(\"language\", lng); // Persist user choice\r\n};\r\n\r\nexport default i18n;\r\n","import { styled } from \"@mui/material\";\r\n\r\nexport const DrawerHeader = styled(\"div\")(({ theme }) => ({\r\n display: \"flex\",\r\n alignItems: \"center\", \r\n // padding: theme.spacing(0, 1),\r\n // necessary for content to be below app bar\r\n ...theme.mixins.toolbar,\r\n justifyContent: \"flex-end\",\r\n}));\r\n","import { TreeViewBaseItem } from \"@mui/x-tree-view/models\";\r\nimport { AdministrationItems } from \"./Administration\";\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\n\r\nexport type ExtendedTreeItemProps = {\r\n icon: IconProp;\r\n id: string;\r\n label: string;\r\n action?: \"NAVIGATION\";\r\n authority?: string;\r\n applicationModule?: string;\r\n actionPayload?: {\r\n path?: string;\r\n parameters?: object;\r\n };\r\n children?: ExtendedTreeItemProps[];\r\n};\r\n\r\nexport const findNavigationItemById = (\r\n id: string,\r\n nodes: ExtendedTreeItemProps[]\r\n): ExtendedTreeItemProps | undefined => {\r\n for (const node of nodes) {\r\n if (node.id === id) return node;\r\n if (node.children) {\r\n const found = findNavigationItemById(id, node.children);\r\n if (found) return found;\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const NavigationItems: TreeViewBaseItem<ExtendedTreeItemProps>[] = [\r\n ...AdministrationItems,\r\n];\r\n","import { TreeViewBaseItem } from \"@mui/x-tree-view/models\";\r\nimport { ExtendedTreeItemProps } from \"..\";\r\nimport { adminNavigationItems } from \"./adminNavigationItems\";\r\n\r\nexport const AdministrationItems: TreeViewBaseItem<ExtendedTreeItemProps>[] = [\r\n {\r\n id: \"home\",\r\n icon: \"home\",\r\n label: \"Home\",\r\n action: \"NAVIGATION\",\r\n actionPayload: {\r\n path: \"/\",\r\n },\r\n },\r\n ...adminNavigationItems,\r\n];\r\n","import { TreeViewBaseItem } from \"@mui/x-tree-view/models\";\r\nimport { ExtendedTreeItemProps } from \"..\";\r\n\r\nexport const adminNavigationItems: TreeViewBaseItem<ExtendedTreeItemProps>[] = [\r\n {\r\n id: \"system_admin\",\r\n label: \"System Administration\",\r\n authority: \"SYSTEM_ADMIN\",\r\n icon: \"cog\",\r\n children: [\r\n {\r\n id: \"system_admin.Person\",\r\n label: \"PERSON_PLURAL\",\r\n icon: \"users\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"admin/persons\" },\r\n },\r\n {\r\n id: \"development_admin.SystemApplication\",\r\n label: \"SYSTEM_APPLICATION_PLURAL\",\r\n authority: \"ORGANIZATION_ADMIN\",\r\n icon: \"window-restore\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"admin/systemapplications\" },\r\n },\r\n {\r\n id: \"development_admin.organizations\",\r\n label: \"ORGANIZATION_PLURAL\",\r\n authority: \"ORGANIZATION_ADMIN\",\r\n icon: \"globe\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"admin/organizations\" },\r\n },\r\n {\r\n id: \"development_admin.organization\",\r\n label: \"Organization Info\",\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n icon: \"globe\",\r\n children: [\r\n {\r\n id: \"development_admin.organization.modules\",\r\n label: \"Subscriped Modules\",\r\n icon: \"layer-group\",\r\n authority: \"ORGANIZATION_ADMIN\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"admin/org/apps\" },\r\n },\r\n {\r\n id: \"development_admin.organization.unitTypes\",\r\n label: \"Organization Unit Types\",\r\n icon: \"tags\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"admin/org/unit/types\" },\r\n },\r\n {\r\n id: \"development_admin.organization.units\",\r\n label: \"Organization Units\",\r\n icon: \"folder-tree\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"admin/org/units\" },\r\n },\r\n {\r\n id: \"development_admin.organization.ranks\",\r\n label: \"Organization Ranks\",\r\n icon: \"street-view\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"admin/org/ranks\" },\r\n },\r\n ],\r\n },\r\n\r\n {\r\n id: \"system_admin.devtools\",\r\n label: \"DEVELOPMENT_TOOLS\",\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n icon: \"code\",\r\n children: [\r\n {\r\n id: \"system_admin.devtools.modules\",\r\n label: \"System Modules\",\r\n icon: \"layer-group\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/system/modules\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.authorities\",\r\n label: \"System Authorities\",\r\n icon: \"key\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/system/authorities\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.roles\",\r\n label: \"System Roles\",\r\n icon: \"tag\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/system/roles\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.lookups\",\r\n label: \"System Lookups\",\r\n icon: \"list-check\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/system/lookups\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.DatasourceConnection\",\r\n label: \"DATASOURCE_CONNECTION_PLURAL\",\r\n icon: \"plug\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/datasourceconnections\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.EntityParameter\",\r\n label: \"ENTITY_PARAMETER_PLURAL\",\r\n icon: \"p\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/entityparameters\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.DataQuery\",\r\n label: \"DATA_QUERY_PLURAL\",\r\n icon: \"file-code\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/dataqueries\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.Report\",\r\n label: \"REPORT_PLURAL\",\r\n icon: \"file\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/reports\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.MailConfig\",\r\n label: \"Mail Sender Config\",\r\n icon: { iconName: \"paper-plane\", prefix: \"fas\" },\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/mailsender/config\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.MailTemplate\",\r\n label: \"MAIL_TEMPLATE_PLURAL\",\r\n icon: \"envelope\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/mailtemplates\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.WorkflowDocument\",\r\n label: \"WORKFLOW_DOCUMENT_PLURAL\",\r\n icon: \"chart-diagram\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/workflowdocuments\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.Widget\",\r\n label: \"WIDGET_PLURAL\",\r\n icon: \"chart-pie\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/widgets\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.Dashboard\",\r\n label: \"DASHBOARD_PLURAL\",\r\n icon: \"square-poll-vertical\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/dashboards\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.AttachmentConfig\",\r\n label: \"ATTACHMENT_CONFIG_PLURAL\",\r\n icon: \"paperclip\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/attachmentconfigs\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.BluePrint\",\r\n label: \"BLUE_PRINT_PLURAL\",\r\n icon: \"fingerprint\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/blueprints\" },\r\n },\r\n {\r\n id: \"system_admin.devtools.Notification\",\r\n label: \"NOTIFICATION_PLURAL\",\r\n icon: \"bell\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/notifications\" },\r\n },\r\n ],\r\n },\r\n {\r\n id: \"system_admin.followup\",\r\n label: \"SYSTEM_MONITORING\",\r\n authority: \"SYSTEM_ADMIN\",\r\n icon: \"tv\",\r\n children: [\r\n {\r\n id: \"system_admin.WorkflowDocumentMailLog\",\r\n label: \"Action Mail Logs\",\r\n icon: \"envelopes-bulk\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/workflowdocumentmaillogs\" },\r\n },\r\n {\r\n id: \"system_admin.MailNotificationQueue\",\r\n label: \"Mail Notification Queue\",\r\n icon: \"envelope-open-text\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/mailnotificationqueues\" },\r\n },\r\n {\r\n id: \"system_admin.NotificationQueue\",\r\n label: \"NOTIFICATION_QUEUE_PLURAL\",\r\n icon: \"bell\",\r\n action: \"NAVIGATION\",\r\n actionPayload: { path: \"dev/notificationqueues\" },\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n];\r\n","import * as React from \"react\";\r\nimport clsx from \"clsx\";\r\nimport { animated, useSpring } from \"@react-spring/web\";\r\nimport { styled, alpha } from \"@mui/material/styles\";\r\nimport { TransitionProps } from \"@mui/material/transitions\";\r\nimport Box from \"@mui/material/Box\";\r\nimport Collapse from \"@mui/material/Collapse\";\r\nimport Typography from \"@mui/material/Typography\";\r\nimport { RichTreeView } from \"@mui/x-tree-view/RichTreeView\";\r\nimport { treeItemClasses } from \"@mui/x-tree-view/TreeItem\";\r\nimport {\r\n useTreeItem2,\r\n UseTreeItem2Parameters,\r\n} from \"@mui/x-tree-view/useTreeItem2\";\r\nimport {\r\n TreeItem2Checkbox,\r\n TreeItem2Content,\r\n TreeItem2IconContainer,\r\n TreeItem2Label,\r\n TreeItem2Root,\r\n} from \"@mui/x-tree-view/TreeItem2\";\r\nimport { TreeItem2Icon } from \"@mui/x-tree-view/TreeItem2Icon\";\r\nimport { TreeItem2Provider } from \"@mui/x-tree-view/TreeItem2Provider\";\r\nimport { TreeItem2DragAndDropOverlay } from \"@mui/x-tree-view/TreeItem2DragAndDropOverlay\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { useNavigate } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { useIsMobile } from \"../hooks/UseMobile\";\r\nimport useSession from \"../hooks/UseSession\";\r\nimport { findNavigationItemById, NavigationItems } from \"../navigationItems\";\r\nimport { DRAWER_WIDTH } from \"../redux/features/common/AppLayoutSlice\";\r\n\r\nfunction DotIcon() {\r\n return (\r\n <Box\r\n sx={{\r\n width: 6,\r\n height: 6,\r\n borderRadius: \"70%\",\r\n bgcolor: \"warning.main\",\r\n display: \"inline-block\",\r\n verticalAlign: \"middle\",\r\n zIndex: 1,\r\n mx: 1,\r\n }}\r\n />\r\n );\r\n}\r\ndeclare module \"react\" {\r\n interface CSSProperties {\r\n \"--tree-view-color\"?: string;\r\n \"--tree-view-bg-color\"?: string;\r\n }\r\n}\r\n\r\nconst StyledTreeItemRoot = styled(TreeItem2Root)(({ theme }) => ({\r\n color: theme.palette.grey[400],\r\n position: \"relative\",\r\n [`& .${treeItemClasses.groupTransition}`]: {\r\n marginLeft: theme.spacing(2.5),\r\n },\r\n ...theme.applyStyles(\"light\", {\r\n color: theme.palette.grey[800],\r\n }),\r\n})) as unknown as typeof TreeItem2Root;\r\n\r\nconst CustomTreeItemContent = styled(TreeItem2Content)(({ theme }) => ({\r\n flexDirection: \"row-reverse\",\r\n borderRadius: theme.spacing(0.7),\r\n marginBottom: theme.spacing(0.5),\r\n marginTop: theme.spacing(0.5),\r\n padding: theme.spacing(0.5),\r\n paddingRight: theme.spacing(1),\r\n [`&.Mui-expanded `]: {\r\n \"&:not(.Mui-focused, .Mui-selected, .Mui-selected.Mui-focused) .labelIcon\":\r\n {\r\n color: theme.palette.primary.dark,\r\n ...theme.applyStyles(\"light\", {\r\n color: theme.palette.primary.main,\r\n }),\r\n },\r\n \"&::before\": {\r\n content: '\"\"',\r\n display: \"block\",\r\n position: \"absolute\",\r\n left: \"16px\",\r\n top: \"44px\",\r\n height: \"calc(100% - 48px)\",\r\n width: \"1.5px\",\r\n backgroundColor: theme.palette.grey[700],\r\n ...theme.applyStyles(\"light\", {\r\n backgroundColor: theme.palette.grey[300],\r\n }),\r\n },\r\n },\r\n \"&:hover\": {\r\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\r\n color: \"white\",\r\n ...theme.applyStyles(\"light\", {\r\n color: theme.palette.primary.main,\r\n }),\r\n },\r\n [`&.Mui-focused, &.Mui-selected, &.Mui-selected.Mui-focused`]: {\r\n backgroundColor: theme.palette.primary.dark,\r\n color: theme.palette.primary.contrastText,\r\n ...theme.applyStyles(\"light\", {\r\n backgroundColor: theme.palette.primary.main,\r\n }),\r\n },\r\n}));\r\n\r\nconst AnimatedCollapse = animated(Collapse);\r\n\r\nfunction TransitionComponent(props: TransitionProps) {\r\n const style = useSpring({\r\n to: {\r\n opacity: props.in ? 1 : 0,\r\n transform: `translate3d(0,${props.in ? 0 : 20}px,0)`,\r\n },\r\n });\r\n\r\n return <AnimatedCollapse style={style} {...props} />;\r\n}\r\n\r\nconst StyledTreeItemLabelText = styled(Typography)({\r\n color: \"inherit\",\r\n fontWeight: 500,\r\n}) as unknown as typeof Typography;\r\n\r\ninterface CustomLabelProps {\r\n children: any;\r\n icon: IconProp;\r\n expandable?: boolean;\r\n}\r\n\r\nfunction CustomLabel({\r\n icon,\r\n expandable,\r\n children,\r\n ...other\r\n}: CustomLabelProps) {\r\n const { t } = useTranslation();\r\n const appLayoutState = useSelector((state: any) => state.AppLayout);\r\n return (\r\n <TreeItem2Label\r\n {...other}\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n padding: 1,\r\n }}\r\n >\r\n <FontAwesomeIcon\r\n style={{\r\n marginRight: appLayoutState.appDirection === \"ltr\" ? 7 : undefined,\r\n marginLeft: appLayoutState.appDirection === \"rtl\" ? 7 : undefined,\r\n fontSize: \"1.2rem\",\r\n }}\r\n icon={icon}\r\n />\r\n <StyledTreeItemLabelText variant=\"body2\" sx={{ fontSize: 16 }}>\r\n {t(children)}\r\n </StyledTreeItemLabelText>\r\n {expandable && <DotIcon />}\r\n </TreeItem2Label>\r\n );\r\n}\r\n\r\nconst isExpandable = (reactChildren: React.ReactNode) => {\r\n if (Array.isArray(reactChildren)) {\r\n return reactChildren.length > 0 && reactChildren.some(isExpandable);\r\n }\r\n return Boolean(reactChildren);\r\n};\r\n\r\ninterface CustomTreeItemProps\r\n extends Omit<UseTreeItem2Parameters, \"rootRef\">,\r\n Omit<React.HTMLAttributes<HTMLLIElement>, \"onFocus\"> {}\r\n\r\nconst CustomTreeItem = React.forwardRef(function CustomTreeItem(\r\n props: CustomTreeItemProps,\r\n ref: React.Ref<HTMLLIElement>\r\n) {\r\n const { id, itemId, label, disabled, children, ...other } = props;\r\n const {\r\n getRootProps,\r\n getContentProps,\r\n getIconContainerProps,\r\n getCheckboxProps,\r\n getLabelProps,\r\n getGroupTransitionProps,\r\n getDragAndDropOverlayProps,\r\n status,\r\n publicAPI,\r\n } = useTreeItem2({ id, itemId, children, label, disabled, rootRef: ref });\r\n const item = publicAPI.getItem(itemId);\r\n const expandable = isExpandable(children);\r\n return (\r\n <TreeItem2Provider itemId={itemId}>\r\n <StyledTreeItemRoot {...getRootProps(other)}>\r\n <CustomTreeItemContent\r\n {...getContentProps({\r\n className: clsx(\"content\", {\r\n \"Mui-expanded\": status.expanded,\r\n \"Mui-selected\": status.selected,\r\n \"Mui-focused\": status.focused,\r\n \"Mui-disabled\": status.disabled,\r\n }),\r\n })}\r\n >\r\n <TreeItem2IconContainer {...getIconContainerProps()}>\r\n <TreeItem2Icon status={status} />\r\n </TreeItem2IconContainer>\r\n <TreeItem2Checkbox {...getCheckboxProps()} />\r\n <CustomLabel\r\n {...getLabelProps({\r\n icon: item?.icon || \"book\",\r\n expandable: expandable && status.expanded,\r\n })}\r\n />\r\n <TreeItem2DragAndDropOverlay {...getDragAndDropOverlayProps()} />\r\n </CustomTreeItemContent>\r\n {children && <TransitionComponent {...getGroupTransitionProps()} />}\r\n </StyledTreeItemRoot>\r\n </TreeItem2Provider>\r\n );\r\n});\r\n\r\nexport default function NavigationTree() {\r\n const navigate = useNavigate();\r\n const appLayoutState = useSelector((state: any) => state.AppLayout);\r\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\r\n const dispatch = useDispatch();\r\n const isMobile = useIsMobile();\r\n const { isUserAuthorized, isCurrentOrganizationAuthorizedToModule } =\r\n useSession();\r\n const filterData = (data) => {\r\n const parentItems = [];\r\n for (let parentItem of data) {\r\n if (\r\n (parentItem.authority === undefined ||\r\n parentItem.authority == null ||\r\n isUserAuthorized(parentItem.authority)) &&\r\n (parentItem.applicationModule === undefined ||\r\n parentItem.applicationModule === null ||\r\n isCurrentOrganizationAuthorizedToModule(parentItem.applicationModule))\r\n ) {\r\n let newParentItem = structuredClone(parentItem);\r\n if (parentItem?.children) {\r\n newParentItem.children = filterData(parentItem.children);\r\n }\r\n parentItems.push(newParentItem);\r\n }\r\n }\r\n return parentItems;\r\n };\r\n\r\n const mergedNavigationItems = [];\r\n if (AppInfo.enableAdministrationModule) {\r\n mergedNavigationItems.push(...structuredClone(NavigationItems));\r\n }\r\n mergedNavigationItems.push(\r\n ...structuredClone(AppInfo.businessNavigationItems)\r\n );\r\n const authoriedNavigationItems = filterData(mergedNavigationItems);\r\n return (\r\n <RichTreeView\r\n items={authoriedNavigationItems}\r\n onItemClick={(event, itemId) => {\r\n const navigationItem = findNavigationItemById(\r\n itemId,\r\n mergedNavigationItems\r\n );\r\n if (\r\n navigationItem?.action === \"NAVIGATION\" &&\r\n navigationItem?.actionPayload != null &&\r\n (navigationItem.children === undefined ||\r\n navigationItem.children === null ||\r\n navigationItem.children.length == 0)\r\n ) {\r\n navigate(navigationItem?.actionPayload?.path || \"\");\r\n }\r\n }}\r\n sx={{\r\n height: \"fit-content\",\r\n flexGrow: 1,\r\n maxWidth: DRAWER_WIDTH,\r\n direction: appLayoutState.appDirection,\r\n maxHeight: isMobile ? 300 : undefined,\r\n overflowY: \"auto\",\r\n overflowX: \"auto\",\r\n }}\r\n slots={{ item: CustomTreeItem }}\r\n />\r\n );\r\n}\r\n","import Divider from \"@mui/material/Divider\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport Drawer from \"@mui/material/Drawer\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { DrawerHeader } from \"./DrawerHeader\";\r\nimport { Box, Typography, useTheme } from \"@mui/material\";\r\nimport { DRAWER_WIDTH } from \"../redux/features/common/AppLayoutSlice\";\r\nimport NavigationTree from \"./NavigationTree\";\r\nimport { useSession } from \"../hooks\";\r\nimport { toggleSideBarState } from \"../redux/features/common/SideBarSlice\";\r\n\r\nconst SideBar: React.FC = () => {\r\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\r\n const { UserSession } = useSession();\r\n const currentOrganization = UserSession.value.currentOrganization;\r\n const theme = useTheme();\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const SideBarState = useSelector((state: any) => state.SideBar);\r\n const dispatch = useDispatch();\r\n const toggleSideBar = () => {\r\n dispatch(toggleSideBarState());\r\n };\r\n return (\r\n <Drawer\r\n sx={{\r\n width: DRAWER_WIDTH,\r\n flexShrink: 0,\r\n \"& .MuiDrawer-paper\": {\r\n width: DRAWER_WIDTH,\r\n boxSizing: \"border-box\",\r\n },\r\n }}\r\n variant=\"persistent\"\r\n anchor={AppLayout.appDirection === \"ltr\" ? \"left\" : \"right\"}\r\n open={SideBarState.isOpened}\r\n >\r\n <DrawerHeader>\r\n <Box sx={{ width: \"100%\" }}>\r\n <Typography\r\n color=\"primary\"\r\n sx={{\r\n width: \"100%\",\r\n textAlign: \"center\",\r\n fontSize: 18,\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n System Content\r\n </Typography>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-around\",\r\n marginTop: 1,\r\n }}\r\n >\r\n <Typography sx={{ fontSize: 12 }} color=\"textDisabled\">\r\n {`${AppInfo.appName} - ${\r\n AppLayout.appDirection === \"ltr\"\r\n ? currentOrganization?.organizationEnName\r\n : currentOrganization?.organizationArName\r\n }`}\r\n </Typography>\r\n <Typography sx={{ fontSize: 12 }} color=\"textDisabled\">\r\n V.{AppInfo.appVersion}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n <IconButton onClick={toggleSideBar}>\r\n {theme.direction === \"ltr\" ? (\r\n <FontAwesomeIcon icon=\"angle-left\" />\r\n ) : (\r\n <FontAwesomeIcon icon=\"angle-right\" />\r\n )}\r\n </IconButton>\r\n </DrawerHeader>\r\n <Divider />\r\n <NavigationTree />\r\n </Drawer>\r\n );\r\n};\r\n\r\nexport default SideBar;\r\n","import rtlPlugin from \"stylis-plugin-rtl\";\r\nimport { prefixer } from \"stylis\";\r\nimport createCache from \"@emotion/cache\";\r\n\r\nexport const cacheRtl = createCache({\r\n key: \"muirtl\",\r\n stylisPlugins: [prefixer, rtlPlugin],\r\n});\r\n\r\nexport const cacheLtr = createCache({\r\n key: \"mui\",\r\n});","import { useEffect, useState } from \"react\";\r\nimport TransferList from \"../../templates/TransferList\";\r\nimport { Box, Button } from \"@mui/material\";\r\nimport { toast } from \"react-toastify\";\r\nimport { useAxios } from \"../../../hooks\";\r\n\r\ntype OrgMemberRoleFormProps = {\r\n selectedRecord: any;\r\n closeModalFn: () => void;\r\n};\r\n\r\nconst OrgMemberRoleForm: React.FC<OrgMemberRoleFormProps> = (props) => {\r\n const [selectedOptions, setSelectedOptions] = useState([]);\r\n const [availableOptions, setAvailableOptions] = useState([]);\r\n const { handlePostRequest, handleGetRequest } = useAxios();\r\n\r\n const getOrgMemberRoles = async () => {\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/admin/organization/member/roles\",\r\n showMask: true,\r\n parameters: {\r\n orgMemberId: props.selectedRecord.id,\r\n organizationId: props.selectedRecord.organizationId,\r\n },\r\n successCallBkFn: (response: any) => {\r\n setSelectedOptions(response.data.currentRoles);\r\n setAvailableOptions(response.data.availableRoles);\r\n },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (props.selectedRecord) {\r\n getOrgMemberRoles();\r\n }\r\n }, [props.selectedRecord]);\r\n const saveOrgMemberRoles = async () => {\r\n await handlePostRequest({\r\n endPointURI: \"api/v1/admin/organization/member/roles\",\r\n showMask: true,\r\n parameters: { orgMemberId: props.selectedRecord.id },\r\n data: selectedOptions,\r\n successCallBkFn: () => {\r\n toast.success(\"Your request has been proccesed successfully\");\r\n if (props.closeModalFn) {\r\n props.closeModalFn();\r\n }\r\n },\r\n });\r\n };\r\n return (\r\n <>\r\n <TransferList\r\n displayField=\"roleName\"\r\n options={availableOptions}\r\n valueField=\"id\"\r\n selectedOptions={selectedOptions}\r\n setSelection={setSelectedOptions}\r\n />\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n width: \"100%\",\r\n }}\r\n >\r\n <Button\r\n variant=\"contained\"\r\n onClick={saveOrgMemberRoles}\r\n sx={{ marginRight: 1, marginLeft: 1 }}\r\n >\r\n Save\r\n </Button>\r\n <Button variant=\"contained\" color=\"error\" onClick={props.closeModalFn}>\r\n Cancel\r\n </Button>\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default OrgMemberRoleForm;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useWindow } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useSelector } from \"react-redux\";\r\nimport OrgMemberRoleForm from \"./OrgMemberRoleForm\";\r\n\r\ntype OrganizationMemberGridProps = {\r\n selectedPerson: any;\r\n};\r\nconst OrganizationMemberGrid: React.FC<OrganizationMemberGridProps> = (\r\n props\r\n) => {\r\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\r\n const {\r\n Window: OrganizationMemberRolesWindow,\r\n setWindowState: setOrganizationMemberRolesWindowState,\r\n } = useWindow({\r\n windowIcon: \"tag\",\r\n windowTitle: \"Organization Member Roles\",\r\n width: \"50%\",\r\n });\r\n const SystemOrganizations = useSelector(\r\n (state: any) => state.commonStores.stores.SystemOrganizations.data\r\n );\r\n const SystemOrganizationRanks = useSelector(\r\n (state: any) => state.commonStores.stores.SystemOrganizationRanks.data\r\n );\r\n const SystemOrganizationUnits = useSelector(\r\n (state: any) => state.commonStores.stores.SystemOrganizationUnits.data\r\n );\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/admin/organizationmember/all\",\r\n deleteById: \"api/v1/admin/organizationmember\",\r\n save: \"api/v1/admin/organizationmember\",\r\n findById: \"api/v1/admin/organizationmember\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_MEMBER_IS_ACTIVE\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_MEMBER_IS_DEFAULT\",\r\n fieldName: \"isDefault\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_MEMBER_ORGANIZATION_ID\",\r\n fieldName: \"organizationId\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: SystemOrganizations,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"organizationEnName\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_MEMBER_ORGANIZATION_RANK_ID\",\r\n fieldName: \"organizationRankId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemOrganizationRanks,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"rankDisplay\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_MEMBER_ORGANIZATION_UNIT_ID\",\r\n fieldName: \"organizationUnitId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemOrganizationUnits,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"fullPath\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Membership number\",\r\n fieldName: \"organizationMembershipNumber\",\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n fieldLabel: \"ORGANIZATION_MEMBER_PERSON_ID\",\r\n fieldName: \"personId\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <OrganizationMemberRolesWindow>\r\n <OrgMemberRoleForm\r\n selectedRecord={selectedRecord}\r\n closeModalFn={() => {\r\n setOrganizationMemberRolesWindowState(false);\r\n }}\r\n />\r\n </OrganizationMemberRolesWindow>\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n hideInfoBar={true}\r\n data={data}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n rowActions={[\r\n {\r\n icon: \"tag\",\r\n label: \"Roles\",\r\n actionFn: async (data) => {\r\n setSelectedRecord(data);\r\n setOrganizationMemberRolesWindowState(true);\r\n },\r\n },\r\n ]}\r\n gridLoadParametersValues={{ personId: props.selectedPerson.id }}\r\n keyColumnName={\"id\"}\r\n gridTitle=\"ORGANIZATION_MEMBER_PLURAL\"\r\n girdIcon=\"table-cells\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"ORGANIZATION_MEMBER_EDIT\",\r\n preActionValidation: async (data) => {\r\n data.personId = props.selectedPerson.id;\r\n return true;\r\n },\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"ORGANIZATION_MEMBER_DELETE\",\r\n }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default OrganizationMemberGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useAxios } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { setStoreData } from \"../../../redux/features/common/CommonStoreSlice\";\r\n\r\nconst OrganizationRankGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n commonStoreKey: \"CurrentOrganizationRanks\",\r\n deleteById: \"api/v1/admin/organizationrank\",\r\n save: \"api/v1/admin/organizationrank\",\r\n findById: \"api/v1/admin/organizationrank\",\r\n setData: setData,\r\n });\r\n\r\n const { handleGetRequest } = useAxios();\r\n const SystemOrganizationRanks = useSelector(\r\n (state: any) => state.commonStores.stores.SystemOrganizationRanks\r\n );\r\n const dispatch = useDispatch();\r\n const loadOrganizationRanks = async () => {\r\n await handleGetRequest({\r\n endPointURI: SystemOrganizationRanks.url,\r\n showMask: false,\r\n successCallBkFn: (response) => {\r\n dispatch(\r\n setStoreData({\r\n storeKey: \"SystemOrganizationRanks\",\r\n data: response.data,\r\n })\r\n );\r\n },\r\n failureCallBkFn: () => {\r\n dispatch(\r\n setStoreData({ storeKey: \"SystemOrganizationRanks\", data: [] })\r\n );\r\n },\r\n });\r\n };\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n fieldLabel: \"ORGANIZATION_RANK_ORGANIZATION_ID\",\r\n fieldName: \"organizationId\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_RANK_RANK_ORDER\",\r\n fieldName: \"rankOrder\",\r\n required: true,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_RANK_RANK_CODE\",\r\n fieldName: \"rankCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_RANK_RANK_AR_NAME\",\r\n fieldName: \"rankArName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_RANK_RANK_EN_NAME\",\r\n fieldName: \"rankEnName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_RANK_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n setData={setData}\r\n editMode={{ editMode: \"row\", reloadAfterSave: true }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle=\"ORGANIZATION_RANK_PLURAL\"\r\n girdIcon=\"street-view\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"ORGANIZATION_RANK_EDIT\",\r\n postActionCallBack: () => {\r\n loadOrganizationRanks();\r\n },\r\n }}\r\n deleteAction={{ isEnabled: true, authority: \"ORGANIZATION_RANK_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default OrganizationRankGrid;\r\n","import { useEffect, useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useAxios } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { setStoreData } from \"../../../redux/features/common/CommonStoreSlice\";\r\n\r\nconst OrganizationUnitGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const { handleGetRequest } = useAxios();\r\n const SystemOrganizationUnits = useSelector(\r\n (state: any) => state.commonStores.stores.SystemOrganizationUnits\r\n );\r\n const dispatch = useDispatch();\r\n const loadOrganizationUnits = async () => {\r\n await handleGetRequest({\r\n endPointURI: SystemOrganizationUnits.url,\r\n showMask: false,\r\n successCallBkFn: (response) => {\r\n dispatch(\r\n setStoreData({\r\n storeKey: \"SystemOrganizationUnits\",\r\n data: response.data,\r\n })\r\n );\r\n },\r\n failureCallBkFn: () => {\r\n dispatch(\r\n setStoreData({ storeKey: \"SystemOrganizationUnits\", data: [] })\r\n );\r\n },\r\n });\r\n };\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/public/organizationunit/all\",\r\n deleteById: \"api/v1/admin/organizationunit\",\r\n save: \"api/v1/admin/organizationunit\",\r\n findById: \"api/v1/admin/organizationunit\",\r\n setData: setData,\r\n });\r\n\r\n const organizationUnitTypes = useSelector(\r\n (state: any) => state.commonStores.stores.SystemOrganizationUnitType.data\r\n );\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n fieldLabel: \"ORGANIZATION_UNIT_ORGANIZATION_ID\",\r\n fieldName: \"organizationId\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_UNIT_ORGANIZATION_UNIT_TYPE_ID\",\r\n fieldName: \"organizationUnitTypeId\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: organizationUnitTypes,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"unitTypeEnName\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_UNIT_ORGANIZATION_UNIT_AR_NAME\",\r\n fieldName: \"organizationUnitArName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_UNIT_ORGANIZATION_UNIT_EN_NAME\",\r\n fieldName: \"organizationUnitEnName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_UNIT_ORGANIZATION_UNIT_PARENT_ID\",\r\n fieldName: \"organizationUnitParentId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: data,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"organizationUnitEnName\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_UNIT_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle=\"ORGANIZATION_UNIT_PLURAL\"\r\n girdIcon=\"folder-tree\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"ORGANIZATION_UNIT_EDIT\",\r\n postActionCallBack: () => {\r\n loadOrganizationUnits();\r\n },\r\n }}\r\n deleteAction={{ isEnabled: true, authority: \"ORGANIZATION_UNIT_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default OrganizationUnitGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst OrganizationUnitTypeGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n commonStoreKey: \"SystemOrganizationUnitType\",\r\n deleteById: \"api/v1/admin/organizationunittype\",\r\n save: \"api/v1/admin/organizationunittype\",\r\n findById: \"api/v1/admin/organizationunittype\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_ORGANIZATION_ID\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n fieldName: \"organizationId\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_ORGANIZATION_UNIT_TYPE_ORDER\",\r\n fieldName: \"organizationUnitTypeOrder\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_UNIT_TYPE_CODE\",\r\n fieldName: \"unitTypeCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_UNIT_TYPE_AR_NAME\",\r\n fieldName: \"unitTypeArName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_UNIT_TYPE_EN_NAME\",\r\n fieldName: \"unitTypeEnName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_UNIT_TYPE_IS_ACTIVE\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n setData={setData}\r\n editMode={{ editMode: \"row\", reloadAfterSave: true }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle=\"ORGANIZATION_UNIT_TYPE_PLURAL\"\r\n girdIcon=\"tags\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"ORGANIZATION_UNIT_TYPE_EDIT\",\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"ORGANIZATION_UNIT_TYPE_DELETE\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default OrganizationUnitTypeGrid;\r\n","import { useEffect, useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useAxios } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nconst SystemApplicationAuthorityGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n commonStoreKey: \"SystemApplicationAuthorities\",\r\n deleteById: \"api/v1/admin/systemapplicationauthority\",\r\n save: \"api/v1/admin/systemapplicationauthority\",\r\n findById: \"api/v1/admin/systemapplicationauthority\",\r\n setData: setData,\r\n });\r\n\r\n const SystemApplicationModules = useSelector(\r\n (state: any) => state.commonStores.stores.SystemApplicationModules.data\r\n );\r\n const { handleGetRequest } = useAxios();\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_SYSTEM_APPLICATION_ID\",\r\n fieldName: \"systemApplicationId\",\r\n required: false,\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_SYSTEM_MODULE_ID\",\r\n fieldName: \"systemModuleId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemApplicationModules,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"moduleName\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_AUTHORITY_NAME\",\r\n fieldName: \"authorityName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_AUTHORITY_CODE\",\r\n fieldName: \"authorityCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_AUTHORITY_DESCRIPTION\",\r\n fieldName: \"authorityDescription\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_AUTHORITY_IS_ACTIVE\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle=\"SYSTEM_APPLICATION_AUTHORITY_PLURAL\"\r\n girdIcon=\"key\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"SYSTEM_APPLICATION_AUTHORITY_EDIT\",\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"SYSTEM_APPLICATION_AUTHORITY_DELETE\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default SystemApplicationAuthorityGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst SystemApplicationModuleGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n commonStoreKey: \"SystemApplicationModules\",\r\n deleteById: \"api/v1/admin/systemapplicationmodule\",\r\n save: \"api/v1/admin/systemapplicationmodule\",\r\n findById: \"api/v1/admin/systemapplicationmodule\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_MODULE_MODULE_CODE\",\r\n fieldName: \"moduleCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_MODULE_MODULE_NAME\",\r\n fieldName: \"moduleName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_MODULE_MODULE_DESCRIPTION\",\r\n fieldName: \"moduleDescription\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_IS_ACTIVE\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_MODULE_SYSTEM_APPLICATION_ID\",\r\n fieldName: \"systemApplicationId\",\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{ editMode: \"row\", reloadAfterSave: true }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n hideInfoBar={true}\r\n gridTitle=\"SYSTEM_APPLICATION_MODULE_PLURAL\"\r\n girdIcon=\"layer-group\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"SYSTEM_APPLICATION_MODULE_EDIT\",\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"SYSTEM_APPLICATION_MODULE_DELETE\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default SystemApplicationModuleGrid;\r\n","import { useEffect, useState } from \"react\";\r\nimport TransferList from \"../../templates/TransferList\";\r\nimport { Box, Button } from \"@mui/material\";\r\nimport { toast } from \"react-toastify\";\r\nimport { useAxios } from \"../../../hooks\";\r\n\r\ntype RoleAuthoritiesFormProps = {\r\n roleId: number;\r\n closeModalFn: () => void;\r\n};\r\n\r\nconst RoleAuthoritiesForm: React.FC<RoleAuthoritiesFormProps> = (props) => {\r\n const [selectedOptions, setSelectedOptions] = useState([]);\r\n const [availableAuthorities, setAvailableAuthorities] = useState([]);\r\n const { handlePostRequest, handleGetRequest } = useAxios();\r\n\r\n const getRoleAuthorities = async () => {\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/admin/systemApplicationRoleAuthorities\",\r\n showMask: true,\r\n parameters: {\r\n roleId: props.roleId,\r\n },\r\n successCallBkFn: (response: any) => {\r\n setSelectedOptions(response.data.selectedAuthorities);\r\n setAvailableAuthorities(response.data.availableAuthorities);\r\n },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (props.roleId) {\r\n getRoleAuthorities();\r\n }\r\n }, [props.roleId]);\r\n const saveRoleAuthorities = async () => {\r\n await handlePostRequest({\r\n endPointURI: \"api/v1/admin/systemApplicationRoleAuthorities\",\r\n showMask: true,\r\n parameters: { roleId: props.roleId },\r\n data: selectedOptions,\r\n successCallBkFn: () => {\r\n toast.success(\"Your request has been proccesed successfully\");\r\n if (props.closeModalFn) {\r\n props.closeModalFn();\r\n }\r\n },\r\n });\r\n };\r\n return (\r\n <>\r\n <TransferList\r\n displayField=\"authorityName\"\r\n options={availableAuthorities}\r\n valueField=\"id\"\r\n selectedOptions={selectedOptions}\r\n setSelection={setSelectedOptions}\r\n />\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-end\",\r\n width: \"100%\",\r\n }}\r\n >\r\n <Button\r\n variant=\"contained\"\r\n onClick={saveRoleAuthorities}\r\n sx={{ marginRight: 1, marginLeft: 1 }}\r\n >\r\n Save\r\n </Button>\r\n <Button variant=\"contained\" color=\"error\" onClick={props.closeModalFn}>\r\n Cancel\r\n </Button>\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default RoleAuthoritiesForm;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useWindow } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport RoleAuthoritiesForm from \"./RoleAuthoritiesForm\";\r\n\r\nconst SystemApplicationRoleGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const [selectedRole, setSelectedRole] = useState(null);\r\n const {\r\n Window: RoleaAuthoritiesWindow,\r\n setWindowState: setRoleAuthoritiesWindowState,\r\n } = useWindow({\r\n windowTitle: \"System Application Role Authorities\",\r\n windowIcon: \"key\",\r\n width: \"50%\",\r\n });\r\n const apiActions = useApiActions({\r\n commonStoreKey: \"SystemApplicationRoles\",\r\n deleteById: \"api/v1/admin/systemapplicationrole\",\r\n save: \"api/v1/admin/systemapplicationrole\",\r\n findById: \"api/v1/admin/systemapplicationrole\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_ROLE_SYSTEM_APPLICATION_ID\",\r\n fieldName: \"systemApplicationId\",\r\n required: false,\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_ROLE_ROLE_NAME\",\r\n fieldName: \"roleName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_ROLE_ROLE_DESCRIPTION\",\r\n fieldName: \"roleDescription\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_ROLE_IS_ACTIVE\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <RoleaAuthoritiesWindow>\r\n <RoleAuthoritiesForm\r\n roleId={selectedRole?.id}\r\n closeModalFn={() => {\r\n setRoleAuthoritiesWindowState(false);\r\n }}\r\n />\r\n </RoleaAuthoritiesWindow>\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n setData={setData}\r\n editMode={{ editMode: \"row\", reloadAfterSave: true }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle=\"SYSTEM_APPLICATION_ROLE_PLURAL\"\r\n girdIcon=\"tag\"\r\n rowActions={[\r\n {\r\n icon: \"key\",\r\n actionFn: async (data) => {\r\n setSelectedRole(data);\r\n setRoleAuthoritiesWindowState(true);\r\n },\r\n label: \"Authorities\",\r\n },\r\n ]}\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"SYSTEM_APPLICATION_ROLE_EDIT\",\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"SYSTEM_APPLICATION_ROLE_DELETE\",\r\n }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default SystemApplicationRoleGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\ntype DataQueryParameterGridProps = {\r\n selectedRecord: any;\r\n};\r\n\r\nconst DataQueryParameterGrid: React.FC<DataQueryParameterGridProps> = (\r\n props\r\n) => {\r\n const SystemEntityParameters = useSelector(\r\n (state: any) => state.commonStores.stores.SystemEntityParameters.data\r\n );\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/dataqueryparameter/all\",\r\n deleteById: \"api/v1/dev/dataqueryparameter\",\r\n save: \"api/v1/dev/dataqueryparameter\",\r\n findById: \"api/v1/dev/dataqueryparameter\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATA_QUERY_PARAMETER_DATA_QUERY_ID\",\r\n fieldName: \"dataQueryId\",\r\n required: false,\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATA_QUERY_PARAMETER_ENTITY_PARAMETER_ID\",\r\n fieldName: \"entityParameterId\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: SystemEntityParameters,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"parameterCode\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATA_QUERY_PARAMETER_DEFAULT_VALUE\",\r\n fieldName: \"defaultValue\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATA_QUERY_PARAMETER_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATA_QUERY_PARAMETER_HIDDEN\",\r\n fieldName: \"hidden\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATA_QUERY_PARAMETER_MANDATORY\",\r\n fieldName: \"mandatory\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n hideInfoBar={true}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridLoadParametersValues={{ dataQueryId: props.selectedRecord.id }}\r\n gridTitle={t(\"DATA_QUERY_PARAMETER_PLURAL\")}\r\n girdIcon=\"table-cells\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"DATA_QUERY_PARAMETER_EDIT\",\r\n preActionValidation: async (data) => {\r\n data.dataQueryId = props.selectedRecord.id;\r\n return true;\r\n },\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"DATA_QUERY_PARAMETER_DELETE\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default DataQueryParameterGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nconst LookupGrid: React.FC = () => {\r\n const SystemOrganizations = useSelector(\r\n (state: any) => state.commonStores.stores.SystemOrganizations.data\r\n );\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/lookup/all\",\r\n deleteById: \"api/v1/dev/lookup\",\r\n save: \"api/v1/dev/lookup\",\r\n findById: \"api/v1/dev/lookup\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Organization\",\r\n fieldName: \"organizationId\",\r\n options: SystemOrganizations,\r\n optionDisplayField: \"organizationEnName\",\r\n optionValueField: \"id\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"LOOKUP_LOOKUP_TYPE\",\r\n fieldName: \"lookupType\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"LOOKUP_LOOKUP_AR_DISPLAY\",\r\n fieldName: \"lookupArDisplay\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"LOOKUP_LOOKUP_EN_DISPLAY\",\r\n fieldName: \"lookupEnDisplay\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"LOOKUP_LOOKUP_VALUE\",\r\n fieldName: \"lookupValue\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"LOOKUP_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"System Application\",\r\n fieldName: \"systemApplicationId\",\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n hideInfoBar={true}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"LOOKUP_PLURAL\")}\r\n girdIcon=\"list-check\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"LOOKUP_EDIT\",\r\n }}\r\n deleteAction={{ isEnabled: true, authority: \"LOOKUP_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default LookupGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\ntype ReportParameterGridProps = {\r\n selectedRecord: any;\r\n};\r\n\r\nconst ReportParameterGrid: React.FC<ReportParameterGridProps> = (props) => {\r\n const { t } = useTranslation();\r\n const SystemEntityParameters = useSelector(\r\n (state: any) => state.commonStores.stores.SystemEntityParameters.data\r\n );\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/reportparameter/all\",\r\n deleteById: \"api/v1/dev/reportparameter\",\r\n save: \"api/v1/dev/reportparameter\",\r\n findById: \"api/v1/dev/reportparameter\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_PARAMETER_ENTITY_PARAMETER_ID\",\r\n fieldName: \"entityParameterId\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: SystemEntityParameters,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"parameterCode\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_PARAMETER_DEFAULT_VALUE\",\r\n fieldName: \"defaultValue\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_PARAMETER_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_PARAMETER_HIDDEN\",\r\n fieldName: \"hidden\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_PARAMETER_MANDATORY\",\r\n fieldName: \"mandatory\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_PARAMETER_REPORT_ID\",\r\n fieldName: \"reportId\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n setData={setData}\r\n gridLoadParametersValues={{ reportId: props.selectedRecord.id }}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"REPORT_PARAMETER_PLURAL\")}\r\n girdIcon=\"p\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"REPORT_PARAMETER_EDIT\",\r\n preActionValidation: async (data) => {\r\n data.reportId = props.selectedRecord.id;\r\n return true;\r\n },\r\n }}\r\n deleteAction={{ isEnabled: true, authority: \"REPORT_PARAMETER_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default ReportParameterGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\n\r\nexport const storageTypes = [{ value: \"FILE_SYSTEM\" }, { value: \"SFTP\" }];\r\n\r\nconst AttachmentConfigGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/attachmentconfig/all\",\r\n deleteById: \"api/v1/dev/attachmentconfig\",\r\n save: \"api/v1/dev/attachmentconfig\",\r\n findById: \"api/v1/dev/attachmentconfig\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ATTACHMENT_CONFIG_ATTACHMENT_CODE\",\r\n fieldName: \"attachmentCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ATTACHMENT_CONFIG_RELATED_DATABASE_TABLE\",\r\n fieldName: \"relatedDatabaseTable\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ATTACHMENT_CONFIG_STORAGE_TYPE\",\r\n fieldName: \"storageType\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: storageTypes,\r\n optionDisplayField: \"value\",\r\n optionValueField: \"value\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Include App Code in attachment path\",\r\n fieldName: \"includeAppCodeInPath\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ATTACHMENT_CONFIG_UPLOAD_DIRECTORY\",\r\n fieldName: \"uploadDirectory\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ATTACHMENT_CONFIG_ALLOWED_FILE_TYPES\",\r\n fieldName: \"allowedFileTypes\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ATTACHMENT_CONFIG_ATTACHMENT_CATEGORIES\",\r\n fieldName: \"attachmentCategories\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Is Category Mandatory\",\r\n fieldName: \"isCategoryRequired\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ATTACHMENT_CONFIG_MAX_ALLOWED_NUMBER_OF_FILES\",\r\n fieldName: \"maxAllowedNumberOfFiles\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ATTACHMENT_CONFIG_DOWNLOAD_AUTHORITY_KEY\",\r\n fieldName: \"downloadAuthorityKey\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ATTACHMENT_CONFIG_UPLOAD_AUTHORITY_KEY\",\r\n fieldName: \"uploadAuthorityKey\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalIcon: \"paperclip\",\r\n modalTitle: \"Attachment Configuration\",\r\n },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"ATTACHMENT_CONFIG_PLURAL\")}\r\n girdIcon=\"paperclip\"\r\n editAction={{ isEnabled: true, authority: \"ATTACHMENT_CONFIG_EDIT\" }}\r\n deleteAction={{ isEnabled: true, authority: \"ATTACHMENT_CONFIG_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default AttachmentConfigGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useWindow } from \"../../../hooks\";\r\nimport {\r\n FormActionProps,\r\n FormElementProps,\r\n} from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { UseFormReturn } from \"react-hook-form\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { toast } from \"react-toastify\";\r\nimport ReportParametersForm from \"./ReportParametersForm\";\r\nimport ReportParameterGrid from \"./ReportParameterGrid\";\r\nimport ReportViewer from \"../../templates/report/ReportViewer\";\r\nimport { storageTypes } from \"./AttachmentConfigGrid\";\r\n\r\ntype ValidationCritria = {\r\n isVisible: boolean;\r\n isMandatory: boolean;\r\n};\r\n\r\nexport type ReportType = \"Jasper\" | \"Excel\" | \"Blueprint\";\r\n\r\ntype ReportValidationOptions = {\r\n useSysDatasource: ValidationCritria;\r\n datasourceConId: ValidationCritria;\r\n reportBluePrintId: ValidationCritria;\r\n reportExcelDataQueryId: ValidationCritria;\r\n reportJasperName: ValidationCritria;\r\n};\r\n\r\ntype validationObjectType = {\r\n [key in ReportType]: ReportValidationOptions;\r\n};\r\n\r\nconst validationObject: validationObjectType = {\r\n Blueprint: {\r\n useSysDatasource: { isMandatory: false, isVisible: false },\r\n datasourceConId: { isMandatory: false, isVisible: false },\r\n reportBluePrintId: { isMandatory: true, isVisible: true },\r\n reportExcelDataQueryId: { isMandatory: false, isVisible: false },\r\n reportJasperName: { isMandatory: false, isVisible: false },\r\n },\r\n Jasper: {\r\n useSysDatasource: { isMandatory: false, isVisible: true },\r\n datasourceConId: { isMandatory: false, isVisible: true },\r\n reportBluePrintId: { isMandatory: false, isVisible: false },\r\n reportExcelDataQueryId: { isMandatory: false, isVisible: false },\r\n reportJasperName: { isMandatory: true, isVisible: true },\r\n },\r\n Excel: {\r\n useSysDatasource: { isMandatory: false, isVisible: false },\r\n datasourceConId: { isMandatory: false, isVisible: false },\r\n reportBluePrintId: { isMandatory: false, isVisible: false },\r\n reportExcelDataQueryId: { isMandatory: true, isVisible: true },\r\n reportJasperName: { isMandatory: false, isVisible: false },\r\n },\r\n};\r\n\r\nconst adjustFormAccordingToReportType = (\r\n value: any,\r\n formActions: FormActionProps,\r\n formManager: UseFormReturn\r\n) => {\r\n if (value && validationObject[value]) {\r\n const validationObjects: ReportValidationOptions = validationObject[value];\r\n const fields = Object.keys(validationObjects);\r\n for (const field of fields) {\r\n const validationCritria: ValidationCritria = validationObjects[field];\r\n if (validationCritria.isVisible) {\r\n formActions.showField(field);\r\n } else {\r\n formActions.hideField(field);\r\n formManager.setValue(field, null);\r\n }\r\n }\r\n } else {\r\n formActions.hideField(\"useSysDatasource\");\r\n formActions.hideField(\"datasourceConId\");\r\n formActions.hideField(\"reportBluePrintId\");\r\n formActions.hideField(\"reportExcelDataQueryId\");\r\n formActions.hideField(\"reportJasperName\");\r\n formManager.setValue(\"useSysDatasource\", null);\r\n formManager.setValue(\"datasourceConId\", null);\r\n formManager.setValue(\"reportBluePrintId\", null);\r\n formManager.setValue(\"reportExcelDataQueryId\", null);\r\n formManager.setValue(\"reportJasperName\", null);\r\n }\r\n};\r\n\r\nconst ReportGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [selectedRecord, setSelectedRecord] = useState(null);\r\n const {\r\n Window: ReporTrialWindow,\r\n setWindowState: setReportTrialWindowState,\r\n } = useWindow({\r\n windowTitle: \"Report View\",\r\n windowIcon: \"eye\",\r\n width: \"80%\",\r\n });\r\n const {\r\n Window: ReportParameterWindow,\r\n setWindowState: setReportParameterWindowState,\r\n } = useWindow({\r\n windowTitle: \"Report Parameters\",\r\n windowIcon: \"p\",\r\n width: \"80%\",\r\n });\r\n const [data, setData] = useState([]);\r\n const SystemDataSources = useSelector(\r\n (state: any) => state.commonStores.stores.SystemDataSources.data\r\n );\r\n const SystemDataQueries = useSelector(\r\n (state: any) => state.commonStores.stores.SystemDataQueries.data\r\n );\r\n const SystemBluePrints = useSelector(\r\n (state: any) => state.commonStores.stores.SystemBluePrints.data\r\n );\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/report/all\",\r\n deleteById: \"api/v1/dev/report\",\r\n save: \"api/v1/dev/report\",\r\n findById: \"api/v1/dev/report\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_REPORT_TYPE\",\r\n fieldName: \"reportType\",\r\n options: [\r\n { value: \"Excel\" },\r\n { value: \"Jasper\" },\r\n { value: \"Blueprint\" },\r\n ],\r\n optionDisplayField: \"value\",\r\n optionValueField: \"value\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n formProps: {\r\n onValueChangeCallBack(\r\n value,\r\n formManager,\r\n formActions,\r\n selectedRecord\r\n ) {\r\n adjustFormAccordingToReportType(value, formActions, formManager);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_REPORT_CODE\",\r\n fieldName: \"reportCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_REPORT_NAME\",\r\n fieldName: \"reportName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ATTACHMENT_CONFIG_STORAGE_TYPE\",\r\n fieldName: \"storageType\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: storageTypes,\r\n optionDisplayField: \"value\",\r\n optionValueField: \"value\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_REPORT_CATEGORY\",\r\n fieldName: \"reportCategory\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Authority Code\",\r\n fieldName: \"reportAuthorityCode\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_REPORT_EXPORT_NAME\",\r\n fieldName: \"reportExportName\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_USE_SYS_DATASOURCE\",\r\n fieldName: \"useSysDatasource\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n formProps: {\r\n onValueChangeCallBack(\r\n value,\r\n formManager,\r\n formActions,\r\n selectedRecord\r\n ) {\r\n if (value) {\r\n formActions.hideField(\"datasourceConId\");\r\n formManager.setValue(\"datasourceConId\", null);\r\n } else {\r\n formActions.showField(\"datasourceConId\");\r\n }\r\n },\r\n },\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_DATASOURCE_CON_ID\",\r\n fieldName: \"datasourceConId\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemDataSources,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"connectionName\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_REPORT_BLUE_PRINT_ID\",\r\n fieldName: \"reportBluePrintId\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemBluePrints,\r\n optionDisplayField: \"bluePrintCode\",\r\n optionValueField: \"id\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_REPORT_EXCEL_DATA_QUERY_ID\",\r\n fieldName: \"reportExcelDataQueryId\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemDataQueries,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"queryName\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"REPORT_REPORT_JASPER_NAME\",\r\n fieldName: \"reportJasperName\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Include App Code in attachment path\",\r\n fieldName: \"includeAppCodeInPath\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Active\",\r\n fieldName: \"isActive\",\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <ReporTrialWindow>\r\n <ReportViewer\r\n reportCode={selectedRecord?.reportCode}\r\n resultMode=\"App\"\r\n />\r\n </ReporTrialWindow>\r\n <ReportParameterWindow>\r\n <ReportParameterGrid selectedRecord={selectedRecord} />\r\n </ReportParameterWindow>\r\n <TemplateGrid\r\n attachment={{ attachmentCode: \"JASPER_REPORTS\" }}\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalTitle: \"Report\",\r\n modalIcon: \"file\",\r\n modalWidth: 300,\r\n },\r\n }}\r\n rowActions={[\r\n {\r\n icon: \"p\",\r\n label: \"Report Parameters\",\r\n isActionVisibleForRecord: (record) => {\r\n return record.reportType === \"Jasper\";\r\n },\r\n actionFn: async (data, recordIdsToProcessActionOn) => {\r\n setSelectedRecord(data);\r\n setReportParameterWindowState(true);\r\n },\r\n },\r\n {\r\n icon: \"eye\",\r\n label: \"View Report\",\r\n actionFn: async (data, recordIdsToProcessActionOn) => {\r\n setSelectedRecord(data);\r\n setReportTrialWindowState(true);\r\n },\r\n },\r\n ]}\r\n formLoadCallBk={(\r\n formActions: FormActionProps,\r\n formManager: UseFormReturn,\r\n record: any\r\n ) => {\r\n adjustFormAccordingToReportType(\r\n record.reportType,\r\n formActions,\r\n formManager\r\n );\r\n if (record?.useSysDatasource === true) {\r\n formActions.hideField(\"datasourceConId\");\r\n }\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"REPORT_PLURAL\")}\r\n girdIcon=\"table-cells\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"REPORT_EDIT\",\r\n preActionValidation: (record) => {\r\n if (\r\n record?.reportType === \"Jasper\" &&\r\n record?.useSysDatasource === false &&\r\n !record?.datasourceConId\r\n ) {\r\n toast.error(\"You must choose the datasource\");\r\n return false;\r\n }\r\n if (record?.reportType === \"Jasper\" && !record?.reportJasperName) {\r\n toast.error(\"You must enter the jasper report name\");\r\n return false;\r\n }\r\n\r\n if (\r\n record?.reportType === \"Blueprint\" &&\r\n !record?.reportBluePrintId\r\n ) {\r\n toast.error(\"You must choose the report blueprint\");\r\n return false;\r\n }\r\n if (\r\n record?.reportType === \"Excel\" &&\r\n !record?.reportExcelDataQueryId\r\n ) {\r\n toast.error(\"You must choose the report query\");\r\n return false;\r\n }\r\n return true;\r\n },\r\n }}\r\n deleteAction={{ isEnabled: true, authority: \"REPORT_DELETE\" }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default ReportGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { isValidEmail } from \"../../../util\";\r\nimport { toast } from \"react-toastify\";\r\n\r\ntype MailRecipientGridProps = {\r\n selectedRecord: any;\r\n callBkFn: () => void;\r\n};\r\n\r\nconst MailRecipientGrid: React.FC<MailRecipientGridProps> = (props) => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/mailrecipient/all\",\r\n deleteById: \"api/v1/dev/mailrecipient\",\r\n save: \"api/v1/dev/mailrecipient\",\r\n findById: \"api/v1/dev/mailrecipient\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_RECIPIENT_MAIL_TEMPLATE_ID\",\r\n fieldName: \"mailTemplateId\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_RECIPIENT_RECIPIENT_TYPE\",\r\n fieldName: \"recipientType\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: [{ value: \"To\" }, { value: \"CC\" }],\r\n optionDisplayField: \"value\",\r\n optionValueField: \"value\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_RECIPIENT_RECIPIENT_MAIL\",\r\n fieldName: \"recipientMail\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_RECIPIENT_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n gridLoadParametersValues={{mailTemplateId:props.selectedRecord.id}}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"MAIL_RECIPIENT_PLURAL\")}\r\n girdIcon=\"users\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"MAIL_RECIPIENT_EDIT\",\r\n preActionValidation: (record) => {\r\n if (record?.recipientMail && !isValidEmail(record.recipientMail)) {\r\n toast.error(\"You must enter a valid email address\");\r\n return false;\r\n }\r\n record.mailTemplateId = props.selectedRecord.id;\r\n return true;\r\n },\r\n }}\r\n deleteAction={{ isEnabled: true, authority: \"MAIL_RECIPIENT_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default MailRecipientGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\ntype MailBodyGridProps = {\r\n selectedRecord: any;\r\n callBkFn: () => void;\r\n};\r\n\r\nconst MailBodyGrid: React.FC<MailBodyGridProps> = (props) => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const SystemDataQueries = useSelector(\r\n (state: any) => state.commonStores.stores.SystemDataQueries.data\r\n );\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/mailbody/all\",\r\n deleteById: \"api/v1/dev/mailbody\",\r\n save: \"api/v1/dev/mailbody\",\r\n findById: \"api/v1/dev/mailbody\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_BODY_BODY_NAME\",\r\n fieldName: \"bodyName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_BODY_BODY_ORDER\",\r\n fieldName: \"bodyOrder\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_BODY_BODY_CONTENT\",\r\n fieldName: \"bodyContent\",\r\n required: true,\r\n fieldType: \"text\",\r\n muiTextFieldProps: { multiline: true, rows: 6 },\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_BODY_BODY_CONTENT_DATA_QUERY_ID\",\r\n fieldName: \"bodyContentDataQueryId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemDataQueries,\r\n optionDisplayField: \"queryName\",\r\n optionValueField: \"id\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_BODY_PRINT_FOR_EACH_RECORD\",\r\n fieldName: \"printForEachRecord\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_BODY_IS_MAIN\",\r\n fieldName: \"isMain\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_BODY_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_BODY_MAIL_TEMPLATE_ID\",\r\n fieldName: \"mailTemplateId\",\r\n required: false,\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n fieldType: \"number\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n gridLoadParametersValues={{ mailTemplateId: props.selectedRecord.id }}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalIcon: { prefix: \"fas\", iconName: \"envelope-open-text\" },\r\n modalTitle: \"Mail Body\",\r\n modalWidth: \"50%\",\r\n },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"MAIL_BODY_PLURAL\")}\r\n girdIcon={{ prefix: \"fas\", iconName: \"envelope-open-text\" }}\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"MAIL_BODY_EDIT\",\r\n preActionValidation: async (record) => {\r\n record.mailTemplateId = props.selectedRecord.id;\r\n return true;\r\n },\r\n }}\r\n deleteAction={{ isEnabled: true, authority: \"MAIL_BODY_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default MailBodyGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\ntype MailAttachmentGridProps = {\r\n selectedRecord: any;\r\n callBkFn: () => void;\r\n};\r\n\r\nconst MailAttachmentGrid: React.FC<MailAttachmentGridProps> = (props) => {\r\n const SystemReports = useSelector(\r\n (state: any) => state.commonStores.stores.SystemReports.data\r\n );\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/mailattachment/all\",\r\n deleteById: \"api/v1/dev/mailattachment\",\r\n save: \"api/v1/dev/mailattachment\",\r\n findById: \"api/v1/dev/mailattachment\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n options: SystemReports,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"reportName\",\r\n fieldLabel: \"REPORT_REPORT_NAME\",\r\n fieldName: \"reportId\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_ATTACHMENT_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_ATTACHMENT_MAIL_TEMPLATE_ID\",\r\n fieldName: \"mailTemplateId\",\r\n required: false,\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n fieldType: \"number\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n gridLoadParametersValues={{ mailTemplateId: props.selectedRecord.id }}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"MAIL_ATTACHMENT_PLURAL\")}\r\n girdIcon=\"paperclip\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"MAIL_ATTACHMENT_EDIT\",\r\n preActionValidation: (record) => {\r\n record.mailTemplateId = props.selectedRecord.id;\r\n return true;\r\n },\r\n }}\r\n deleteAction={{ isEnabled: true, authority: \"MAIL_ATTACHMENT_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default MailAttachmentGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport {\r\n FormActionProps,\r\n FormElementProps,\r\n} from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { UseFormReturn } from \"react-hook-form\";\r\n\r\ntype ValidationCritria = {\r\n isVisible: boolean;\r\n isMandatory: boolean;\r\n};\r\n\r\nexport type EngineType = \"Gmail\" | \"Azure\";\r\n\r\ntype ReportValidationOptions = {\r\n mailHost: ValidationCritria;\r\n mailPort: ValidationCritria;\r\n mailUsername: ValidationCritria;\r\n mailPassword: ValidationCritria; \r\n mailProtocol: ValidationCritria;\r\n isMailSmtpAuthEnabled: ValidationCritria;\r\n isMailStarttlsEnabled: ValidationCritria;\r\n isSmtpSSlEnabled: ValidationCritria;\r\n azureGraphApiClientId: ValidationCritria;\r\n azureGraphApiClientSecret: ValidationCritria;\r\n azureGraphApiTenantId: ValidationCritria;\r\n azureGraphApiScope: ValidationCritria;\r\n azureGraphApiEmailId: ValidationCritria;\r\n};\r\n\r\ntype validationObjectType = {\r\n [key in EngineType]: ReportValidationOptions;\r\n};\r\n\r\nconst validationObject: validationObjectType = {\r\n Gmail: {\r\n mailHost: { isMandatory: true, isVisible: true },\r\n mailPort: { isMandatory: true, isVisible: true },\r\n mailUsername: { isMandatory: true, isVisible: true },\r\n mailPassword: { isMandatory: true, isVisible: true }, \r\n mailProtocol: { isMandatory: true, isVisible: true },\r\n isMailSmtpAuthEnabled: { isMandatory: true, isVisible: true },\r\n isMailStarttlsEnabled: { isMandatory: true, isVisible: true },\r\n isSmtpSSlEnabled: { isMandatory: true, isVisible: true },\r\n azureGraphApiClientId: { isMandatory: false, isVisible: false },\r\n azureGraphApiClientSecret: { isMandatory: false, isVisible: false },\r\n azureGraphApiTenantId: { isMandatory: false, isVisible: false },\r\n azureGraphApiScope: { isMandatory: false, isVisible: false },\r\n azureGraphApiEmailId: { isMandatory: false, isVisible: false },\r\n },\r\n Azure: {\r\n mailHost: { isMandatory: false, isVisible: false },\r\n mailPort: { isMandatory: false, isVisible: false },\r\n mailUsername: { isMandatory: false, isVisible: false },\r\n mailPassword: { isMandatory: false, isVisible: false }, \r\n mailProtocol: { isMandatory: false, isVisible: false },\r\n isMailSmtpAuthEnabled: { isMandatory: false, isVisible: false },\r\n isMailStarttlsEnabled: { isMandatory: false, isVisible: false },\r\n isSmtpSSlEnabled: { isMandatory: false, isVisible: false },\r\n azureGraphApiClientId: { isMandatory: true, isVisible: true },\r\n azureGraphApiClientSecret: { isMandatory: true, isVisible: true },\r\n azureGraphApiTenantId: { isMandatory: true, isVisible: true },\r\n azureGraphApiScope: { isMandatory: true, isVisible: true },\r\n azureGraphApiEmailId: { isMandatory: true, isVisible: true },\r\n },\r\n};\r\n\r\nconst adjustFormAccordingToEngineType = (\r\n value: any,\r\n formActions: FormActionProps,\r\n formManager: UseFormReturn\r\n) => {\r\n if (value && validationObject[value]) {\r\n const validationObjects: ReportValidationOptions = validationObject[value];\r\n const fields = Object.keys(validationObjects);\r\n for (const field of fields) {\r\n const validationCritria: ValidationCritria = validationObjects[field];\r\n if (validationCritria.isVisible) {\r\n formActions.showField(field);\r\n } else {\r\n formActions.hideField(field);\r\n formManager.setValue(field, null);\r\n }\r\n }\r\n } else {\r\n formActions.hideField(\"mailHost\");\r\n formManager.setValue(\"mailHost\", null);\r\n formActions.hideField(\"mailPort\");\r\n formManager.setValue(\"mailPort\", null);\r\n formActions.hideField(\"mailUsername\");\r\n formManager.setValue(\"mailUsername\", null);\r\n formActions.hideField(\"mailPassword\");\r\n formManager.setValue(\"mailPassword\", null); \r\n formActions.hideField(\"mailProtocol\");\r\n formManager.setValue(\"mailProtocol\", null);\r\n formActions.hideField(\"isMailSmtpAuthEnabled\");\r\n formManager.setValue(\"isMailSmtpAuthEnabled\", null);\r\n formActions.hideField(\"isMailStarttlsEnabled\");\r\n formManager.setValue(\"isMailStarttlsEnabled\", null);\r\n formActions.hideField(\"isSmtpSSlEnabled\");\r\n formManager.setValue(\"isSmtpSSlEnabled\", null);\r\n formActions.hideField(\"azureGraphApiClientId\");\r\n formManager.setValue(\"azureGraphApiClientId\", null);\r\n formActions.hideField(\"azureGraphApiClientSecret\");\r\n formManager.setValue(\"azureGraphApiClientSecret\", null);\r\n formActions.hideField(\"azureGraphApiTenantId\");\r\n formManager.setValue(\"azureGraphApiTenantId\", null);\r\n formActions.hideField(\"azureGraphApiScope\");\r\n formManager.setValue(\"azureGraphApiScope\", null);\r\n formActions.hideField(\"azureGraphApiEmailId\");\r\n formManager.setValue(\"azureGraphApiEmailId\", null);\r\n }\r\n};\r\n\r\nconst MailSenderConfigGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/mailsenderconfig/all\",\r\n deleteById: \"api/v1/dev/mailsenderconfig\",\r\n save: \"api/v1/dev/mailsenderconfig\",\r\n findById: \"api/v1/dev/mailsenderconfig\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Name\",\r\n fieldName: \"configName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Engine\",\r\n fieldName: \"mailEngine\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: [{ value: \"Gmail\" }, { value: \"Azure\" }],\r\n optionDisplayField: \"value\",\r\n optionValueField: \"value\",\r\n formProps: {\r\n onValueChangeCallBack(\r\n value,\r\n formManager,\r\n formActions,\r\n selectedRecord\r\n ) {\r\n adjustFormAccordingToEngineType(value, formActions, formManager);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Hostname\",\r\n fieldName: \"mailHost\",\r\n required: false,\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"port\",\r\n fieldName: \"mailPort\",\r\n required: false,\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"username\",\r\n fieldName: \"mailUsername\",\r\n required: false,\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"password\",\r\n fieldName: \"mailPassword\",\r\n required: false,\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Workflow Approval Receive Email\",\r\n fieldName: \"workFlowApprovalReceiveEmail\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Protocol\",\r\n fieldName: \"mailProtocol\",\r\n required: false,\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Enable Smtp Auth\",\r\n fieldName: \"isMailSmtpAuthEnabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Enable Start TLS\",\r\n fieldName: \"isMailStarttlsEnabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Enable SSL\",\r\n fieldName: \"isSmtpSSlEnabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Azure Graph API Client Id\",\r\n fieldName: \"azureGraphApiClientId\",\r\n required: false,\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Azure Graph API Secret\",\r\n fieldName: \"azureGraphApiClientSecret\",\r\n required: false,\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Azure Graph API Tenant Id\",\r\n fieldName: \"azureGraphApiTenantId\",\r\n required: false,\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Azure Graph API Scope\",\r\n fieldName: \"azureGraphApiScope\",\r\n required: false,\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Azure Graph API Email Id\",\r\n fieldName: \"azureGraphApiEmailId\",\r\n required: false,\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Default\",\r\n fieldName: \"isDefault\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Active\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalIcon: { iconName: \"paper-plane\", prefix: \"fas\" },\r\n modalTitle: \"Mail Sender Configuration\",\r\n modalWidth: 300,\r\n },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"Mail Sender Configuration\")}\r\n girdIcon={{ iconName: \"paper-plane\", prefix: \"fas\" }}\r\n editAction={{ isEnabled: true, authority: \"MAIL_SENDER_CONFIG_EDIT\" }}\r\n deleteAction={{ isEnabled: true, authority: \"MAIL_SENDER_CONFIG_DELETE\" }}\r\n formLoadCallBk={(\r\n formActions: FormActionProps,\r\n formManager: UseFormReturn,\r\n record: any\r\n ) => {\r\n adjustFormAccordingToEngineType(\r\n record.mailEngine,\r\n formActions,\r\n formManager\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default MailSenderConfigGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\ntype WorkflowDocumentStatusGridProps = {\r\n selectedRecord: any;\r\n};\r\n\r\nconst WorkflowDocumentStatusGrid: React.FC<WorkflowDocumentStatusGridProps> = (\r\n props\r\n) => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/workflowdocumentstatus/all\",\r\n deleteById: \"api/v1/dev/workflowdocumentstatus\",\r\n save: \"api/v1/dev/workflowdocumentstatus\",\r\n findById: \"api/v1/dev/workflowdocumentstatus\",\r\n setData: setData,\r\n });\r\n const SystemDataQueries = useSelector(\r\n (state: any) => state.commonStores.stores.SystemDataQueries.data\r\n );\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_STATUS_DOCUMENT_STATUS_CODE\",\r\n fieldName: \"documentStatusCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Status Arabic Name\",\r\n fieldName: \"documentStatusArName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Status English Name\",\r\n fieldName: \"documentStatusEnName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_STATUS_DOCUMENT_STATUS_ORDER\",\r\n fieldName: \"documentStatusOrder\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_STATUS_IS_ZERO_STATE\",\r\n fieldName: \"isZeroState\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"Next Actions Query (must return array of actions in table named workflow_document_action)\",\r\n fieldName: \"nextActionsQueryId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemDataQueries,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"queryName\",\r\n gridProps: { hidden: true },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"Next Action Takers Query (must return array of persons in table named person)\",\r\n fieldName: \"nextActionTakersQueryId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemDataQueries,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"queryName\",\r\n gridProps: { hidden: true },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Next Action Takers Authority\",\r\n fieldName: \"nextActionTakersAuthority\",\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_STATUS_WORKFLOW_DOCUMENT_ID\",\r\n fieldName: \"workflowDocumentId\",\r\n required: false,\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_STATUS_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n hideInfoBar={true}\r\n gridLoadParametersValues={{\r\n workflowDocumentId: props.selectedRecord.id,\r\n }}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalIcon: \"tag\",\r\n modalTitle: \"Workflow Document Status\",\r\n modalWidth: 600,\r\n },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"WORKFLOW_DOCUMENT_STATUS_PLURAL\")}\r\n girdIcon=\"tags\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"WORKFLOW_DOCUMENT_STATUS_EDIT\",\r\n preActionValidation: (record) => {\r\n record.workflowDocumentId = props.selectedRecord.id;\r\n return true;\r\n },\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"WORKFLOW_DOCUMENT_STATUS_DELETE\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default WorkflowDocumentStatusGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\ntype WorkflowDocumentActionMailGridProps = {\r\n selectedRecord: any;\r\n};\r\n\r\nconst WorkflowDocumentActionMailGrid: React.FC<\r\n WorkflowDocumentActionMailGridProps\r\n> = (props) => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/workflowdocumentactionmail/all\",\r\n deleteById: \"api/v1/dev/workflowdocumentactionmail\",\r\n save: \"api/v1/dev/workflowdocumentactionmail\",\r\n findById: \"api/v1/dev/workflowdocumentactionmail\",\r\n setData: setData,\r\n });\r\n\r\n const SystemMailTemplates = useSelector(\r\n (state: any) => state.commonStores.stores.SystemMailTemplates.data\r\n );\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_MAIL_DOCUMENT_ACTION_ID\",\r\n fieldName: \"documentActionId\",\r\n required: false,\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_MAIL_MAIL_TEMPLATE_ID\",\r\n fieldName: \"mailTemplateId\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: SystemMailTemplates,\r\n optionDisplayField: \"mailTemplateName\",\r\n optionValueField: \"id\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_MAIL_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n gridLoadParametersValues={{ actionId: props.selectedRecord.id }}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"WORKFLOW_DOCUMENT_ACTION_MAIL_PLURAL\")}\r\n girdIcon=\"table-cells\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"WORKFLOW_DOCUMENT_ACTION_MAIL_EDIT\",\r\n preActionValidation: (record) => {\r\n record.documentActionId = props.selectedRecord.id;\r\n return true;\r\n },\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"WORKFLOW_DOCUMENT_ACTION_MAIL_DELETE\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default WorkflowDocumentActionMailGrid;\r\n","import { useEffect, useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions, useAxios, useWindow } from \"../../../hooks\";\r\nimport WorkflowDocumentActionMailGrid from \"./WorkflowDocumentActionMailGrid\";\r\n\r\ntype WorkflowDocumentActionGridProps = {\r\n selectedRecord: any;\r\n};\r\n\r\nconst WorkflowDocumentActionGrid: React.FC<WorkflowDocumentActionGridProps> = (\r\n props\r\n) => {\r\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\r\n const {\r\n Window: ActionMailsWindow,\r\n setWindowState: setActionMailWindowState,\r\n } = useWindow({\r\n windowTitle: \"Action Mail Notification\",\r\n windowIcon: \"envelope\",\r\n width: \"50%\",\r\n });\r\n const { t } = useTranslation();\r\n const { handleGetRequest } = useAxios();\r\n const [workflowStates, setWorkflowStates] = useState<Array<any>>([]);\r\n const loadWorkFlowDocumentStates = async () => {\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/dev/workflowdocumentstatus/all\",\r\n showMask: true,\r\n parameters: {\r\n workflowDocumentId: props.selectedRecord.id,\r\n },\r\n successCallBkFn: (response: any) => {\r\n setWorkflowStates(response.data);\r\n },\r\n });\r\n };\r\n useEffect(() => {\r\n loadWorkFlowDocumentStates();\r\n }, [props.selectedRecord]);\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/workflowdocumentaction/all\",\r\n deleteById: \"api/v1/dev/workflowdocumentaction\",\r\n save: \"api/v1/dev/workflowdocumentaction\",\r\n findById: \"api/v1/dev/workflowdocumentaction\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_DOCUMENT_ACTION_CODE\",\r\n fieldName: \"documentActionCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Action Arabic Name\",\r\n fieldName: \"documentActionArName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Action English Name\",\r\n fieldName: \"documentActionEnName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_NEXT_DOCUMENT_STATUS_ID\",\r\n fieldName: \"nextDocumentStatusId\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: workflowStates,\r\n optionDisplayField: \"documentStatusCode\",\r\n optionValueField: \"id\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"Post Action Endpoint ( system will call it with post method and parameters refDocumentId , workflowActionId)\",\r\n fieldName: \"postActionEndpoint\",\r\n required: false,\r\n fieldType: \"text\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"Pre Action Endpoint ( system will call it with post method and parameters refDocumentId , workflowActionId)\",\r\n fieldName: \"preActionEndpoint\",\r\n required: false,\r\n fieldType: \"text\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_REQUIRE_COMMENT\",\r\n fieldName: \"requireComment\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_ACTION_WORKFLOW_DOCUMENT_ID\",\r\n fieldName: \"workflowDocumentId\",\r\n required: false,\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <ActionMailsWindow>\r\n <WorkflowDocumentActionMailGrid selectedRecord={selectedRecord} />\r\n </ActionMailsWindow>\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n gridLoadParametersValues={{\r\n workflowDocumentId: props.selectedRecord.id,\r\n }}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalIcon: \"stamp\",\r\n modalTitle: \"Workflow Document Action\",\r\n modalWidth: 700,\r\n },\r\n }}\r\n rowActions={[\r\n {\r\n label: \"Action Mail Notifications\",\r\n icon: \"envelope\",\r\n actionFn: async (data) => {\r\n setSelectedRecord(data);\r\n setActionMailWindowState(true);\r\n },\r\n },\r\n ]}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"WORKFLOW_DOCUMENT_ACTION_PLURAL\")}\r\n girdIcon=\"stamp\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"WORKFLOW_DOCUMENT_ACTION_EDIT\",\r\n preActionValidation: (record) => {\r\n record.workflowDocumentId = props.selectedRecord.id;\r\n return true;\r\n },\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"WORKFLOW_DOCUMENT_ACTION_DELETE\",\r\n }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default WorkflowDocumentActionGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport {\r\n FormActionProps,\r\n FormElementProps,\r\n} from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { UseFormReturn } from \"react-hook-form\";\r\n\r\ntype ValidationCritria = {\r\n isVisible: boolean;\r\n isMandatory: boolean;\r\n};\r\n\r\nexport type WidgetType =\r\n | \"LineChart\"\r\n | \"ColumnChart\"\r\n | \"PieChart\"\r\n | \"Card\"\r\n | \"CircularProgress\"\r\n | \"LinearProgress\";\r\n\r\ntype WidgetValidationOptions = {\r\n height: ValidationCritria;\r\n width: ValidationCritria;\r\n horizontalAxisField: ValidationCritria;\r\n horizontalAxisLabel: ValidationCritria;\r\n seriesKeys: ValidationCritria;\r\n verticalAxisField: ValidationCritria;\r\n verticalAxisLabel: ValidationCritria;\r\n};\r\n\r\ntype validationObjectType = {\r\n [key in WidgetType]: WidgetValidationOptions;\r\n};\r\n\r\nconst validationObject: validationObjectType = {\r\n LineChart: {\r\n height: { isMandatory: true, isVisible: true },\r\n width: { isMandatory: true, isVisible: true },\r\n horizontalAxisField: { isMandatory: true, isVisible: true },\r\n horizontalAxisLabel: { isMandatory: true, isVisible: true },\r\n seriesKeys: { isMandatory: false, isVisible: false },\r\n verticalAxisField: { isMandatory: true, isVisible: true },\r\n verticalAxisLabel: { isMandatory: true, isVisible: true },\r\n },\r\n ColumnChart: {\r\n height: { isMandatory: true, isVisible: true },\r\n width: { isMandatory: true, isVisible: true },\r\n horizontalAxisField: { isMandatory: true, isVisible: true },\r\n horizontalAxisLabel: { isMandatory: true, isVisible: true },\r\n seriesKeys: { isMandatory: false, isVisible: false },\r\n verticalAxisField: { isMandatory: true, isVisible: true },\r\n verticalAxisLabel: { isMandatory: true, isVisible: true },\r\n },\r\n PieChart: {\r\n height: { isMandatory: true, isVisible: true },\r\n width: { isMandatory: true, isVisible: true },\r\n horizontalAxisField: { isMandatory: true, isVisible: true },\r\n horizontalAxisLabel: { isMandatory: false, isVisible: false },\r\n seriesKeys: { isMandatory: false, isVisible: false },\r\n verticalAxisField: { isMandatory: true, isVisible: true },\r\n verticalAxisLabel: { isMandatory: false, isVisible: false },\r\n },\r\n Card: {\r\n height: { isMandatory: true, isVisible: true },\r\n width: { isMandatory: true, isVisible: true },\r\n horizontalAxisField: { isMandatory: true, isVisible: true },\r\n horizontalAxisLabel: { isMandatory: false, isVisible: false },\r\n seriesKeys: { isMandatory: false, isVisible: false },\r\n verticalAxisField: { isMandatory: true, isVisible: true },\r\n verticalAxisLabel: { isMandatory: false, isVisible: false },\r\n },\r\n CircularProgress: {\r\n height: { isMandatory: false, isVisible: false },\r\n width: { isMandatory: false, isVisible: false },\r\n horizontalAxisField: { isMandatory: false, isVisible: false },\r\n horizontalAxisLabel: { isMandatory: false, isVisible: false },\r\n seriesKeys: { isMandatory: false, isVisible: false },\r\n verticalAxisField: { isMandatory: false, isVisible: false },\r\n verticalAxisLabel: { isMandatory: false, isVisible: false },\r\n },\r\n LinearProgress: {\r\n height: { isMandatory: false, isVisible: false },\r\n width: { isMandatory: false, isVisible: false },\r\n horizontalAxisField: { isMandatory: false, isVisible: false },\r\n horizontalAxisLabel: { isMandatory: false, isVisible: false },\r\n seriesKeys: { isMandatory: false, isVisible: false },\r\n verticalAxisField: { isMandatory: false, isVisible: false },\r\n verticalAxisLabel: { isMandatory: false, isVisible: false },\r\n },\r\n};\r\n\r\nconst adjustFormAccordingToWidgetType = (\r\n value: any,\r\n formActions: FormActionProps,\r\n formManager: UseFormReturn\r\n) => {\r\n if (value && validationObject[value]) {\r\n const validationObjects: WidgetValidationOptions = validationObject[value];\r\n const fields = Object.keys(validationObjects);\r\n for (const field of fields) {\r\n const validationCritria: ValidationCritria = validationObjects[field];\r\n if (validationCritria.isVisible) {\r\n formActions.showField(field);\r\n } else {\r\n formActions.hideField(field);\r\n formManager.setValue(field, null);\r\n }\r\n }\r\n } else {\r\n formActions.hideField(\"height\");\r\n formManager.setValue(\"height\", null);\r\n formActions.hideField(\"width\");\r\n formManager.setValue(\"width\", null);\r\n formActions.hideField(\"horizontalAxisField\");\r\n formManager.setValue(\"horizontalAxisField\", null);\r\n formActions.hideField(\"horizontalAxisLabel\");\r\n formManager.setValue(\"horizontalAxisLabel\", null);\r\n formActions.hideField(\"seriesKeys\");\r\n formManager.setValue(\"seriesKeys\", null);\r\n formActions.hideField(\"verticalAxisField\");\r\n formManager.setValue(\"verticalAxisField\", null);\r\n formActions.hideField(\"verticalAxisLabel\");\r\n formManager.setValue(\"verticalAxisLabel\", null);\r\n }\r\n};\r\n\r\nconst WidgetGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const SystemDataQueries = useSelector(\r\n (state: any) => state.commonStores.stores.SystemDataQueries.data\r\n );\r\n const SystemWidgetTypes = useSelector(\r\n (state: any) => state.commonStores.stores.SystemWidgetTypes.data\r\n );\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n commonStoreKey: \"SystemWidgets\",\r\n deleteById: \"api/v1/dev/widget\",\r\n save: \"api/v1/dev/widget\",\r\n findById: \"api/v1/dev/widget\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_WIDGET_TYPE\",\r\n fieldName: \"widgetType\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: SystemWidgetTypes,\r\n optionDisplayField: \"name\",\r\n optionValueField: \"name\",\r\n formProps: {\r\n onValueChangeCallBack(\r\n value,\r\n formManager,\r\n formActions,\r\n selectedRecord\r\n ) {\r\n adjustFormAccordingToWidgetType(value, formActions, formManager);\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Query\",\r\n fieldName: \"dataQueryId\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: SystemDataQueries,\r\n optionDisplayField: \"queryName\",\r\n optionValueField: \"id\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_WIDGET_NAME\",\r\n fieldName: \"widgetName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_ICON\",\r\n fieldName: \"icon\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_TITLE\",\r\n fieldName: \"title\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_WIDGET_DESCRIPTION\",\r\n fieldName: \"widgetDescription\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_HEIGHT\",\r\n fieldName: \"height\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_WIDTH\",\r\n fieldName: \"width\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: [\r\n { value: 1 },\r\n { value: 2 },\r\n { value: 3 },\r\n { value: 4 },\r\n { value: 5 },\r\n { value: 6 },\r\n { value: 7 },\r\n { value: 8 },\r\n { value: 9 },\r\n { value: 10 },\r\n { value: 11 },\r\n { value: 12 },\r\n ],\r\n optionDisplayField: \"value\",\r\n optionValueField: \"value\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"group\",\r\n props: {\r\n style: { padding: 1, border: \"1px solid black\", width: \"100%\" },\r\n label: \"Data Specs\",\r\n elements: [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_HORIZONTAL_AXIS_FIELD\",\r\n fieldName: \"horizontalAxisField\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_HORIZONTAL_AXIS_LABEL\",\r\n fieldName: \"horizontalAxisLabel\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_SERIES_KEYS\",\r\n fieldName: \"seriesKeys\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_VERTICAL_AXIS_FIELD\",\r\n fieldName: \"verticalAxisField\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WIDGET_VERTICAL_AXIS_LABEL\",\r\n fieldName: \"verticalAxisLabel\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: { modalIcon: \"chart-pie\", modalTitle: \"Widget\" },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"WIDGET_PLURAL\")}\r\n girdIcon=\"chart-pie\"\r\n editAction={{ isEnabled: true, authority: \"WIDGET_EDIT\" }}\r\n deleteAction={{ isEnabled: true, authority: \"WIDGET_DELETE\" }}\r\n formLoadCallBk={(\r\n formActions: FormActionProps,\r\n formManager: UseFormReturn,\r\n record: any\r\n ) => {\r\n adjustFormAccordingToWidgetType(\r\n record.widgetType,\r\n formActions,\r\n formManager\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default WidgetGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\ntype DashboardWidgetGridProps = {\r\n selectedRecord: any;\r\n};\r\n\r\nconst DashboardWidgetGrid: React.FC<DashboardWidgetGridProps> = (props) => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const SystemWidgets = useSelector(\r\n (state: any) => state.commonStores.stores.SystemWidgets.data\r\n );\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/dashboardwidget/all\",\r\n deleteById: \"api/v1/dev/dashboardwidget\",\r\n save: \"api/v1/dev/dashboardwidget\",\r\n findById: \"api/v1/dev/dashboardwidget\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DASHBOARD_WIDGET_DASHBOARD_ID\",\r\n fieldName: \"dashboardId\",\r\n required: false,\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DASHBOARD_WIDGET_WIDGET_ID\",\r\n fieldName: \"widgetId\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: SystemWidgets,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"widgetName\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DASHBOARD_WIDGET_WIDGET_ORDER\",\r\n fieldName: \"widgetOrder\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DASHBOARD_WIDGET_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n hideInfoBar={true}\r\n formElements={formElements}\r\n gridLoadParametersValues={{ dashboardId: props.selectedRecord.id }}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"DASHBOARD_WIDGET_PLURAL\")}\r\n girdIcon=\"table-cells\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"DASHBOARD_WIDGET_EDIT\",\r\n preActionValidation: async (data) => {\r\n data.dashboardId = props.selectedRecord.id;\r\n return true;\r\n },\r\n }}\r\n deleteAction={{ isEnabled: true, authority: \"DASHBOARD_WIDGET_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default DashboardWidgetGrid;\r\n","import Home from \"../components/common/Home\";\r\nimport { ADMINISTRATION_ROUTES } from \"./administration\";\r\nimport { SystemRoute } from \"./types\";\r\n\r\nexport const SYSTEM_ROUTES: Array<SystemRoute> = [\r\n {\r\n path: \"/\",\r\n component: Home,\r\n },\r\n ...ADMINISTRATION_ROUTES,\r\n];\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Box } from \"@mui/material\";\r\nimport { TemplateForm } from \"../templates\";\r\nimport ReportViewer from \"../templates/report/ReportViewer\";\r\nimport WorkflowDocumentPanel from \"../templates/workflow/WorkflowDocumentPanel\";\r\nimport DashboardViewer from \"../templates/visuals/DashboardViewer\";\r\nimport AttachmentPanel from \"../templates/attachment/AttachmentPanel\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nconst Home: React.FC = () => {\r\n const AppInfo = useSelector((state: any) => state.AppInfo.value); \r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n flex: 1,\r\n fontSize: 24,\r\n fontWeight: \"bold\",\r\n }}\r\n >\r\n <img\r\n src={AppInfo.appLogo}\r\n style={{ margin: 5, height: 200, width: 200 }}\r\n />\r\n <div>\r\n Welcome to {AppInfo.appName} v.{AppInfo.appVersion}\r\n </div>\r\n <div style={{ fontSize: 16 }}>\r\n Use side menu [\r\n <FontAwesomeIcon\r\n icon=\"bars\"\r\n style={{ marginLeft: 10, marginRight: 10 }}\r\n />\r\n ] to navigate to your authorized system modules\r\n </div>\r\n </Box>\r\n );\r\n};\r\n\r\nexport default Home;\r\n","import { SystemRoute } from \"../types\";\r\nimport { adminRoutes } from \"./adminRoutes\";\r\nimport { devRoutes } from \"./devRoutes\";\r\n\r\nexport const ADMINISTRATION_ROUTES: Array<SystemRoute> = [\r\n ...adminRoutes,\r\n ...devRoutes,\r\n];\r\n","import { SystemRoute } from \"../types\";\r\nimport OrganizationGrid from \"../../components/administration/admin/OrganizationGrid\";\r\nimport OrganizationMemberGrid from \"../../components/administration/admin/OrganizationMemberGrid\";\r\nimport OrganizationMemberRoleGrid from \"../../components/administration/admin/OrganizationMemberRoleGrid\";\r\nimport OrganizationRankGrid from \"../../components/administration/admin/OrganizationRankGrid\";\r\nimport OrganizationUnitGrid from \"../../components/administration/admin/OrganizationUnitGrid\";\r\nimport OrganizationUnitTypeGrid from \"../../components/administration/admin/OrganizationUnitTypeGrid\";\r\nimport PersonGrid from \"../../components/administration/admin/PersonGrid\";\r\nimport SystemApplicationGrid from \"../../components/administration/admin/SystemApplicationGrid\";\r\nimport SystemApplicationAuthorityGrid from \"../../components/administration/admin/SystemApplicationAuthorityGrid\";\r\nimport SystemApplicationModuleGrid from \"../../components/administration/admin/SystemApplicationModuleGrid\";\r\nimport SystemApplicationRoleGrid from \"../../components/administration/admin/SystemApplicationRoleGrid\";\r\nimport SystemApplicationRoleAuthorityGrid from \"../../components/administration/admin/SystemApplicationRoleAuthorityGrid\";\r\nimport OrganizationApplicationModuleGrid from \"../../components/administration/admin/OrganizationApplicationModuleGrid\";\r\nexport const adminRoutes: Array<SystemRoute> = [\r\n {\r\n path: \"admin/organizations\",\r\n component: OrganizationGrid,\r\n authority: \"ORGANIZATION_VIEW\",\r\n },\r\n {\r\n path: \"admin/organizationmembers\",\r\n component: OrganizationMemberGrid,\r\n authority: \"ORGANIZATION_MEMBER_VIEW\",\r\n },\r\n {\r\n path: \"admin/organizationmemberroles\",\r\n component: OrganizationMemberRoleGrid,\r\n authority: \"ORGANIZATION_MEMBER_ROLE_VIEW\",\r\n },\r\n {\r\n path: \"admin/organizationranks\",\r\n component: OrganizationRankGrid,\r\n authority: \"ORGANIZATION_RANK_VIEW\",\r\n },\r\n {\r\n path: \"admin/organizationunits\",\r\n component: OrganizationUnitGrid,\r\n authority: \"ORGANIZATION_UNIT_VIEW\",\r\n },\r\n {\r\n path: \"admin/organizationunittypes\",\r\n component: OrganizationUnitTypeGrid,\r\n authority: \"ORGANIZATION_UNIT_TYPE_VIEW\",\r\n },\r\n {\r\n path: \"admin/persons\",\r\n component: PersonGrid,\r\n authority: \"PERSON_VIEW\",\r\n },\r\n {\r\n path: \"admin/systemapplications\",\r\n component: SystemApplicationGrid,\r\n authority: \"SYSTEM_APPLICATION_VIEW\",\r\n },\r\n {\r\n path: \"admin/systemapplicationauthorities\",\r\n component: SystemApplicationAuthorityGrid,\r\n authority: \"SYSTEM_APPLICATION_AUTHORITY_VIEW\",\r\n },\r\n {\r\n path: \"admin/systemapplicationmodules\",\r\n component: SystemApplicationModuleGrid,\r\n authority: \"SYSTEM_APPLICATION_MODULE_VIEW\",\r\n },\r\n {\r\n path: \"admin/systemapplicationroles\",\r\n component: SystemApplicationRoleGrid,\r\n authority: \"SYSTEM_APPLICATION_ROLE_VIEW\",\r\n },\r\n {\r\n path: \"admin/systemapplicationroleauthorities\",\r\n component: SystemApplicationRoleAuthorityGrid,\r\n authority: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_VIEW\",\r\n },\r\n {\r\n path: \"admin/org/apps\",\r\n component: OrganizationApplicationModuleGrid,\r\n authority: \"ORGANIZATION_ADMIN\",\r\n },\r\n {\r\n path: \"admin/org/unit/types\",\r\n component: OrganizationUnitTypeGrid,\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n },\r\n {\r\n path: \"admin/org/units\",\r\n component: OrganizationUnitGrid,\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n },\r\n {\r\n path: \"admin/org/ranks\",\r\n component: OrganizationRankGrid,\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n },\r\n];\r\n\r\n// import { adminRoutes } from \"./adminRoutes\";\r\n// [...adminRoutes]\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useWindow } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport OrganizationApplicationModuleGrid from \"./OrganizationApplicationModuleGrid\";\r\nimport OrganizationUnitTypeGrid from \"./OrganizationUnitTypeGrid\";\r\nimport OrganizationUnitGrid from \"./OrganizationUnitGrid\";\r\nimport OrganizationRankGrid from \"./OrganizationRankGrid\";\r\nimport { Box } from \"@mui/material\";\r\nimport { AttachmentImageViewer } from \"../../templates\";\r\n\r\nconst OrganizationGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n commonStoreKey: \"SystemOrganizations\",\r\n deleteById: \"api/v1/org/admin/organization\",\r\n save: \"api/v1/org/admin/organization\",\r\n findById: \"api/v1/org/admin/organization\",\r\n setData: setData,\r\n });\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Logo\",\r\n fieldName: \"custom\",\r\n fieldType: \"custom\",\r\n gridProps: {\r\n muiProps: {\r\n align: \"center\",\r\n headerAlign: \"center\",\r\n renderCell: (params) => {\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n height: \"100%\",\r\n }}\r\n >\r\n <AttachmentImageViewer\r\n showAsAvatar={true}\r\n attachmentCode=\"ORGANIZATION_LOGOS\"\r\n refKey={params.id + \"\"}\r\n />\r\n </Box>\r\n );\r\n },\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_ORGANIZATION_CODE\",\r\n fieldName: \"organizationCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_ORGANIZATION_AR_NAME\",\r\n fieldName: \"organizationArName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_ORGANIZATION_EN_NAME\",\r\n fieldName: \"organizationEnName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_IS_ACTIVE\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <TemplateGrid\r\n attachment={{ attachmentCode: \"ORGANIZATION_LOGOS\" }}\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle=\"ORGANIZATION_PLURAL\"\r\n girdIcon=\"globe\"\r\n editAction={{ isEnabled: true, authority: \"ORGANIZATION_EDIT\" }}\r\n deleteAction={{ isEnabled: true, authority: \"ORGANIZATION_DELETE\" }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default OrganizationGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport {useApiActions} from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst OrganizationMemberRoleGrid: React.FC = () => {\r\n\tconst { t } = useTranslation();\r\n\tconst [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n \tfindAll: \"api/v1/admin/organizationmemberrole/all\",\r\n \tdeleteById: \"api/v1/admin/organizationmemberrole\",\r\n \tsave: \"api/v1/admin/organizationmemberrole\",\r\n\t\tfindById: \"api/v1/admin/organizationmemberrole\",\r\n \tsetData: setData,\r\n \t});\r\n\t\r\n\tconst formElements: Array<FormElementProps> = [\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n \t\t\t\ttype: \"field\",\r\n \t\t\t\tmode: \"props\",\r\n \t\t\t\tprops: {\r\n \t\t\t\tfieldLabel: \"ORGANIZATION_MEMBER_ROLE_IS_ACTIVE\",\r\n \t\t\t\tfieldName: \"isActive\",\r\n \t\t\t\trequired: false,\r\n \t\t\t\tfieldType: \"checkbox\",\r\n \t\t\t\t},\r\n \t\t\t},\r\n\t\t\t\t\t \t\t\t \t\t\t \t\t\t \t\t\t\t\t\t\t\t\t\t{\r\n \t\t\t\ttype: \"field\",\r\n \t\t\t\tmode: \"props\",\r\n \t\t\t\tprops: {\r\n \t\t\t\tfieldLabel: \"ORGANIZATION_MEMBER_ROLE_END_DATE\",\r\n \t\t\t\tfieldName: \"endDate\",\r\n \t\t\t\trequired: false,\r\n \t\t\t\tfieldType: \"datetime\",\r\n \t\t\t\t},\r\n \t\t\t},\r\n\t\t\t\t\t \t\t\t \t\t\t \t\t\t\t\t\t \t\t\t{\r\n \t\t\t\ttype: \"field\",\r\n \t\t\t\tmode: \"props\",\r\n \t\t\t\tprops: {\r\n \t\t\t\tfieldLabel: \"ORGANIZATION_MEMBER_ROLE_ORGANIZATION_MEMBER_ID\",\r\n \t\t\t\tfieldName: \"organizationMemberId\",\r\n \t\t\t\trequired: true,\r\n \t\t\t\tfieldType: \"text\",\r\n \t\t\t\t},\r\n \t\t\t},\t\t\t\r\n\t\t\t\t\t \t\t\t\t\t\t\t\t\t\t{\r\n \t\t\t\ttype: \"field\",\r\n \t\t\t\tmode: \"props\",\r\n \t\t\t\tprops: {\r\n \t\t\t\tfieldLabel: \"ORGANIZATION_MEMBER_ROLE_START_DATE\",\r\n \t\t\t\tfieldName: \"startDate\",\r\n \t\t\t\trequired: false,\r\n \t\t\t\tfieldType: \"datetime\",\r\n \t\t\t\t},\r\n \t\t\t},\r\n\t\t\t\t\t \t\t\t\t\t\t \t\t\t{\r\n \t\t\t\ttype: \"field\",\r\n \t\t\t\tmode: \"props\",\r\n \t\t\t\tprops: {\r\n \t\t\t\tfieldLabel: \"ORGANIZATION_MEMBER_ROLE_SYSTEM_APPLICATION_ROLE_ID\",\r\n \t\t\t\tfieldName: \"systemApplicationRoleId\",\r\n \t\t\t\trequired: true,\r\n \t\t\t\tfieldType: \"text\",\r\n \t\t\t\t},\r\n \t\t\t},\t\t\t\r\n\t\t\t\t\t \t\t\t \t\t\t \t\t\t \t\t];\r\n\r\n\treturn (\r\n \t<TemplateGrid\r\n \t\tapiActions={apiActions}\r\n \t\tdata={data}\r\n \t\tsetData={setData}\r\n \t\teditMode={{ editMode: \"row\"}}\r\n \t\tformElements={formElements}\r\n\t\t\tkeyColumnName={\"id\"}\r\n \t\tgridTitle=\"ORGANIZATION_MEMBER_ROLE_PLURAL\"\r\n \t\tgirdIcon=\"table-cells\"\r\n \t\teditAction={{ isEnabled: true, authority: \"ORGANIZATION_MEMBER_ROLE_EDIT\" }}\r\n \t\tdeleteAction={{ isEnabled: true, authority: \"ORGANIZATION_MEMBER_ROLE_DELETE\" }}\r\n \t/>\r\n );\r\n};\r\n\r\nexport default OrganizationMemberRoleGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useSession, useWindow } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { toast } from \"react-toastify\";\r\nimport OrganizationMemberGrid from \"./OrganizationMemberGrid\";\r\nimport { Box } from \"@mui/material\";\r\nimport AttachmentImageViewer from \"../../templates/attachment/AttachmentImageViewer\";\r\nimport { useSelector } from \"react-redux\";\r\nimport OrgMemberRoleForm from \"./OrgMemberRoleForm\";\r\nimport ChangePasswordPanel from \"./ChangePasswordPanel\";\r\n\r\nconst PersonGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [selectedPerson, setSelectedPerson] = useState<any>(null);\r\n const { UserInfo } = useSession();\r\n const CurrentOrganizationRanks = useSelector(\r\n (state: any) => state.commonStores.stores.CurrentOrganizationRanks.data\r\n );\r\n const CurrentOrganizationUnits = useSelector(\r\n (state: any) => state.commonStores.stores.CurrentOrganizationUnits.data\r\n );\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/public/person/all\",\r\n deleteById: \"api/v1/admin/person\",\r\n save: \"api/v1/admin/person\",\r\n findById: \"api/v1/admin/person\",\r\n setData: setData,\r\n });\r\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\r\n const {\r\n Window: OrganizationMembersWindow,\r\n setWindowState: setOrganizationMemberWindowState,\r\n } = useWindow({\r\n windowTitle: \"Organizations Membership\",\r\n windowIcon: \"globe\",\r\n });\r\n const {\r\n Window: OrganizationMemberRolesWindow,\r\n setWindowState: setOrganizationMemberRolesWindowState,\r\n } = useWindow({\r\n windowIcon: \"tag\",\r\n windowTitle: \"Organization Member Roles\",\r\n width: \"50%\",\r\n });\r\n const {\r\n Window: ChangePasswordWindow,\r\n setWindowState: setChangePasswordWindow,\r\n } = useWindow({\r\n windowIcon: \"key\",\r\n windowTitle: \"Change Password\",\r\n width: \"fit-content\",\r\n height: \"fit-content\",\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n hidden: true,\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n hidden: true,\r\n fieldLabel: \"organizationMemberId\",\r\n fieldName: \"organizationMemberId\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Image\",\r\n fieldName: \"custom\",\r\n fieldType: \"custom\",\r\n gridProps: {\r\n muiProps: {\r\n align: \"center\",\r\n headerAlign: \"center\",\r\n renderCell: (params) => {\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n height: \"100%\",\r\n }}\r\n >\r\n <AttachmentImageViewer\r\n showAsAvatar={true}\r\n attachmentCode=\"EMPLOYEE_PHOTOS\"\r\n refKey={params.id + \"\"}\r\n />\r\n </Box>\r\n );\r\n },\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"PERSON_EMPLOYEE_AR_NAME\",\r\n fieldName: \"employeeArName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"PERSON_EMPLOYEE_EN_NAME\",\r\n fieldName: \"employeeEnName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"PERSON_EMAIL\",\r\n fieldName: \"email\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"PERSON_MOBILE_NUMBER\",\r\n fieldName: \"mobileNumber\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_MEMBER_ORGANIZATION_RANK_ID\",\r\n fieldName: \"organizationRankId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: CurrentOrganizationRanks,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"rankEnName\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_MEMBER_ORGANIZATION_UNIT_ID\",\r\n fieldName: \"organizationUnitId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: CurrentOrganizationUnits,\r\n optionValueField: \"id\",\r\n optionDisplayField: \"organizationUnitEnName\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Membership number\",\r\n fieldName: \"organizationMembershipNumber\",\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n fieldLabel: \"PERSON_PASSWORD\",\r\n fieldName: \"password\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"PERSON_USERNAME\",\r\n fieldName: \"username\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n hidden: true,\r\n fieldLabel: \"Ref Source\",\r\n fieldName: \"refSource\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n hidden: true,\r\n fieldLabel: \"PERSON_EMPLOYEE_NUMBER\",\r\n fieldName: \"refSyncNumber\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"PERSON_IS_ACTIVE\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <OrganizationMemberRolesWindow>\r\n <OrgMemberRoleForm\r\n selectedRecord={selectedRecord}\r\n closeModalFn={() => {\r\n setOrganizationMemberRolesWindowState(false);\r\n }}\r\n />\r\n </OrganizationMemberRolesWindow>\r\n <OrganizationMembersWindow>\r\n <OrganizationMemberGrid selectedPerson={selectedPerson} />\r\n </OrganizationMembersWindow>\r\n <ChangePasswordWindow>\r\n <ChangePasswordPanel\r\n selectedPerson={selectedPerson}\r\n isSelfService={false}\r\n onSuccessCallBk={() => {\r\n setChangePasswordWindow(false);\r\n }}\r\n />\r\n </ChangePasswordWindow>\r\n <TemplateGrid\r\n attachment={{ attachmentCode: \"EMPLOYEE_PHOTOS\" }}\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalIcon: \"user\",\r\n modalTitle: \"Person Profile\",\r\n modalWidth: 300,\r\n },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle=\"PERSON_PLURAL\"\r\n rowActions={[\r\n {\r\n icon: \"key\",\r\n label: \"Change User Password\",\r\n actionFn: async (data) => {\r\n setSelectedPerson(data);\r\n setChangePasswordWindow(true);\r\n },\r\n },\r\n {\r\n icon: \"tags\",\r\n label: \"Current Organization User Roles\",\r\n isActionDisabledForRecord: (data) => {\r\n return !data?.organizationMemberId;\r\n },\r\n actionFn: async (data) => {\r\n setSelectedRecord({\r\n organizationId: UserInfo?.currentOrganization?.id,\r\n id: data?.organizationMemberId,\r\n });\r\n setOrganizationMemberRolesWindowState(true);\r\n },\r\n },\r\n {\r\n icon: \"globe\",\r\n label: \"User Organizations\",\r\n actionFn: async (data) => {\r\n setSelectedPerson(data);\r\n setOrganizationMemberWindowState(true);\r\n },\r\n },\r\n ]}\r\n girdIcon=\"users\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"PERSON_EDIT\",\r\n preActionValidation: (data) => {\r\n if (\r\n data.refSource != undefined &&\r\n data.refSource != null &&\r\n data.refSource != \"\"\r\n ) {\r\n toast.error(\r\n \"This Person Was synced from other system therefore you can't modify this record\"\r\n );\r\n return false;\r\n }\r\n return true;\r\n },\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"PERSON_DELETE\",\r\n preActionValidation: (data) => {\r\n if (\r\n data.refSource != undefined &&\r\n data.refSource != null &&\r\n data.refSource != \"\"\r\n ) {\r\n toast.error(\r\n \"This Person Was synced from other system therefore you can't modify this record\"\r\n );\r\n return false;\r\n }\r\n return true;\r\n },\r\n }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default PersonGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useWindow } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst SystemApplicationGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/org/admin/systemapplication/all\",\r\n deleteById: \"api/v1/org/admin/systemapplication\",\r\n save: \"api/v1/org/admin/systemapplication\",\r\n findById: \"api/v1/org/admin/systemapplication\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_APPLICATION_CODE\",\r\n fieldName: \"applicationCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_APPLICATION_NAME\",\r\n fieldName: \"applicationName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_APPLICATION_DESCRIPTION\",\r\n fieldName: \"applicationDescription\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_IS_ACTIVE\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle=\"SYSTEM_APPLICATION_PLURAL\"\r\n girdIcon=\"window-restore\"\r\n editAction={{ isEnabled: true, authority: \"SYSTEM_APPLICATION_EDIT\" }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"SYSTEM_APPLICATION_DELETE\",\r\n }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default SystemApplicationGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst SystemApplicationRoleAuthorityGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/admin/systemapplicationroleauthority/all\",\r\n deleteById: \"api/v1/admin/systemapplicationroleauthority\",\r\n save: \"api/v1/admin/systemapplicationroleauthority\",\r\n findById: \"api/v1/admin/systemapplicationroleauthority\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_IS_ACTIVE\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"SYSTEM_APPLICATION_ROLE_AUTHORITY_SYSTEM_APPLICATION_AUTHORITY_ID\",\r\n fieldName: \"systemApplicationAuthorityId\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"SYSTEM_APPLICATION_ROLE_AUTHORITY_SYSTEM_APPLICATION_ROLE_ID\",\r\n fieldName: \"systemApplicationRoleId\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle=\"SYSTEM_APPLICATION_ROLE_AUTHORITY_PLURAL\"\r\n girdIcon=\"table-cells\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_EDIT\",\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_DELETE\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default SystemApplicationRoleAuthorityGrid;\r\n","import { useEffect, useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useAxios } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nconst OrganizationApplicationModuleGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const { handleGetRequest } = useAxios();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/org/admin/organizationapplicationmodule/all\",\r\n deleteById: \"api/org/v1/admin/organizationapplicationmodule\",\r\n save: \"api/v1/org/admin/organizationapplicationmodule\",\r\n findById: \"api/org/v1/admin/organizationapplicationmodule\",\r\n setData: setData,\r\n });\r\n const SystemApplicationModules = useSelector(\r\n (state: any) => state.commonStores.stores.SystemApplicationModules.data\r\n );\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"ORGANIZATION_APPLICATION_MODULE_SYSTEM_APPLICATION_MODULE_ID\",\r\n fieldName: \"systemApplicationModuleId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemApplicationModules,\r\n optionDisplayField: \"moduleName\",\r\n optionValueField: \"id\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n fieldLabel: \"ORGANIZATION_APPLICATION_MODULE_ORGANIZATION_ID\",\r\n fieldName: \"organizationId\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_APPLICATION_MODULE_SUBSCRIPTION_DATE\",\r\n fieldName: \"subscriptionDate\",\r\n required: true,\r\n fieldType: \"date\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_APPLICATION_MODULE_EXPIRATION_DATE\",\r\n fieldName: \"expirationDate\",\r\n required: false,\r\n fieldType: \"date\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ORGANIZATION_APPLICATION_MODULE_IS_ACTIVE\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n hideInfoBar={true}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle=\"ORGANIZATION_APPLICATION_MODULE_PLURAL\"\r\n girdIcon=\"layer-group\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"ORGANIZATION_APPLICATION_MODULE_EDIT\",\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"ORGANIZATION_APPLICATION_MODULE_DELETE\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default OrganizationApplicationModuleGrid;\r\n","import { SystemRoute } from \"../types\";\r\nimport BluePrintGrid from \"../../components/administration/dev/BluePrintGrid\";\r\nimport DataQueryGrid from \"../../components/administration/dev/DataQueryGrid\";\r\nimport DatasourceConnectionGrid from \"../../components/administration/dev/DatasourceConnectionGrid\";\r\nimport EntityParameterGrid from \"../../components/administration/dev/EntityParameterGrid\";\r\n\r\nimport LookupGrid from \"../../components/administration/dev/LookupGrid\";\r\n\r\nimport ReportGrid from \"../../components/administration/dev/ReportGrid\";\r\nimport MailTemplateGrid from \"../../components/administration/dev/MailTemplateGrid\";\r\nimport MailSenderConfigGrid from \"../../components/administration/dev/MailSenderConfigGrid\";\r\nimport WorkflowDocumentGrid from \"../../components/administration/dev/WorkflowDocumentGrid\";\r\nimport WidgetGrid from \"../../components/administration/dev/WidgetGrid\";\r\nimport DashboardGrid from \"../../components/administration/dev/DashboardGrid\";\r\nimport DashboardRouteView from \"../../components/templates/visuals/DashboardRouteView\";\r\nimport WorkflowDocumentMailLogGrid from \"../../components/administration/dev/WorkflowDocumentMailLogGrid\";\r\nimport MailNotificationQueueGrid from \"../../components/administration/dev/MailNotificationQueueGrid\";\r\nimport SystemApplicationAuthorityGrid from \"../../components/administration/admin/SystemApplicationAuthorityGrid\";\r\nimport SystemApplicationRoleGrid from \"../../components/administration/admin/SystemApplicationRoleGrid\";\r\nimport SystemApplicationModuleGrid from \"../../components/administration/admin/SystemApplicationModuleGrid\";\r\nimport AttachmentConfigGrid from \"../../components/administration/dev/AttachmentConfigGrid\";\r\nimport NotificationGrid from \"../../components/administration/dev/NotificationGrid\";\r\nimport MyNotificationsPanel from \"../../components/common/MyNotificationsPanel\";\r\nimport WorkflowRouteComponent from \"../../components/templates/workflow/WorkflowRouteComponent\";\r\n\r\nexport const devRoutes: Array<SystemRoute> = [\r\n {\r\n path: \"dev/blueprints\",\r\n component: BluePrintGrid,\r\n authority: \"BLUE_PRINT_VIEW\",\r\n },\r\n {\r\n path: \"dev/dataqueries\",\r\n component: DataQueryGrid,\r\n authority: \"DATA_QUERY_VIEW\",\r\n },\r\n {\r\n path: \"dev/datasourceconnections\",\r\n component: DatasourceConnectionGrid,\r\n authority: \"DATASOURCE_CONNECTION_VIEW\",\r\n },\r\n {\r\n path: \"dev/entityparameters\",\r\n component: EntityParameterGrid,\r\n authority: \"ENTITY_PARAMETER_VIEW\",\r\n },\r\n {\r\n path: \"dev/lookups\",\r\n component: LookupGrid,\r\n authority: \"LOOKUP_VIEW\",\r\n },\r\n {\r\n path: \"dev/reports\",\r\n component: ReportGrid,\r\n authority: \"REPORT_VIEW\",\r\n },\r\n {\r\n path: \"dev/mailtemplates\",\r\n component: MailTemplateGrid,\r\n authority: \"MAILTEMPLATE_VIEW\",\r\n },\r\n {\r\n path: \"dev/mailsender/config\",\r\n component: MailSenderConfigGrid,\r\n authority: \"MAILTEMPLATE_VIEW\",\r\n },\r\n {\r\n path: \"dev/workflowdocuments\",\r\n component: WorkflowDocumentGrid,\r\n authority: \"WORKFLOW_DOCUMENT_VIEW\",\r\n },\r\n {\r\n path: \"dev/widgets\",\r\n component: WidgetGrid,\r\n authority: \"WIDGET_VIEW\",\r\n },\r\n {\r\n path: \"dev/dashboards\",\r\n component: DashboardGrid,\r\n authority: \"DASHBOARD_VIEW\",\r\n },\r\n {\r\n path: \"dashboard/:dashboardCode\",\r\n component: DashboardRouteView,\r\n },\r\n {\r\n path: \"dev/workflowdocumentmaillogs\",\r\n component: WorkflowDocumentMailLogGrid,\r\n },\r\n {\r\n path: \"dev/mailnotificationqueues\",\r\n component: MailNotificationQueueGrid,\r\n },\r\n {\r\n path: \"dev/system/authorities\",\r\n component: SystemApplicationAuthorityGrid,\r\n },\r\n {\r\n path: \"dev/system/roles\",\r\n component: SystemApplicationRoleGrid,\r\n },\r\n {\r\n path: \"dev/system/lookups\",\r\n component: LookupGrid,\r\n },\r\n {\r\n path: \"dev/system/modules\",\r\n component: SystemApplicationModuleGrid,\r\n },\r\n {\r\n path: \"dev/attachmentconfigs\",\r\n component: AttachmentConfigGrid,\r\n },\r\n {\r\n path: \"dev/notifications\",\r\n component: NotificationGrid,\r\n },\r\n {\r\n path: \"myNotifications\",\r\n component: MyNotificationsPanel,\r\n },\r\n {\r\n path: \"workflow/:workflowDocumentCode/:refDocumentId\",\r\n component: WorkflowRouteComponent,\r\n },\r\n];\r\n\r\n// import { devRoutes } from \"./devRoutes\";\r\n// [...devRoutes]\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nconst BluePrintGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const SystemDataQueries = useSelector(\r\n (state: any) => state.commonStores.stores.SystemDataQueries.data\r\n );\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n commonStoreKey: \"SystemBluePrints\",\r\n deleteById: \"api/v1/dev/blueprint\",\r\n save: \"api/v1/dev/blueprint\",\r\n findById: \"api/v1/dev/blueprint\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"BLUE_PRINT_BLUE_PRINT_CODE\",\r\n fieldName: \"bluePrintCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"BLUE_PRINT_QUERY_ID\",\r\n fieldName: \"queryId\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: SystemDataQueries,\r\n optionDisplayField: \"queryName\",\r\n optionValueField: \"id\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{ editMode: \"row\", reloadAfterSave: true }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"BLUE_PRINT_PLURAL\")}\r\n girdIcon=\"table-cells\"\r\n editAction={{ isEnabled: true, authority: \"BLUE_PRINT_EDIT\" }}\r\n deleteAction={{ isEnabled: true, authority: \"BLUE_PRINT_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default BluePrintGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useWindow } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useSelector } from \"react-redux\";\r\nimport DataQueryParametersForm from \"./DataQueryParametersForm\";\r\nimport DataQueryParameterGrid from \"./DataQueryParameterGrid\";\r\n\r\nconst DataQueryGrid: React.FC = () => {\r\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\r\n const {\r\n Window: DataQueryParameterWindow,\r\n setWindowState: setDataQueryParameterWindow,\r\n } = useWindow({\r\n width: \"50%\",\r\n windowTitle: \"Data query parameters\",\r\n windowIcon: \"p\",\r\n });\r\n const SystemDataSources = useSelector(\r\n (state: any) => state.commonStores.stores.SystemDataSources.data\r\n );\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n commonStoreKey: \"SystemDataQueries\",\r\n deleteById: \"api/v1/dev/dataquery\",\r\n save: \"api/v1/dev/dataquery\",\r\n findById: \"api/v1/dev/dataquery\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATA_QUERY_QUERY_NAME\",\r\n fieldName: \"queryName\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATA_QUERY_USE_SYS_CON\",\r\n fieldName: \"useSysCon\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n formProps: {\r\n onValueChangeCallBack(\r\n value,\r\n formManager,\r\n formActions,\r\n selectedRecord\r\n ) {\r\n if (value) {\r\n formActions.hideField(\"datasourceConId\");\r\n formManager.setValue(\"datasourceConId\", null);\r\n } else {\r\n formActions.showField(\"datasourceConId\");\r\n }\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATA_QUERY_DATASOURCE_CON_ID\",\r\n fieldName: \"datasourceConId\",\r\n required: false,\r\n options: SystemDataSources,\r\n optionDisplayField: \"connectionName\",\r\n optionValueField: \"id\",\r\n fieldType: \"combobox\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATA_QUERY_QUERY_STR\",\r\n fieldName: \"queryStr\",\r\n formProps: { fieldHeight: 400 },\r\n gridProps: {\r\n hidden: true,\r\n },\r\n muiTextFieldProps: {\r\n multiline: true,\r\n rows: 4,\r\n },\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <DataQueryParameterWindow>\r\n <DataQueryParameterGrid selectedRecord={selectedRecord} />\r\n </DataQueryParameterWindow>\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n rowActions={[\r\n {\r\n label: \"Query Parameters\",\r\n actionFn: async (data) => {\r\n setSelectedRecord(data);\r\n setDataQueryParameterWindow(true);\r\n },\r\n icon: \"p\",\r\n },\r\n ]}\r\n data={data}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalTitle: \"System Query\",\r\n modalWidth: 600,\r\n modalIcon: \"file-code\",\r\n },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"DATA_QUERY_PLURAL\")}\r\n girdIcon=\"table-cells\"\r\n editAction={{ isEnabled: true, authority: \"DATA_QUERY_EDIT\" }}\r\n deleteAction={{ isEnabled: true, authority: \"DATA_QUERY_DELETE\" }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default DataQueryGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions, useAxios } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { toast } from \"react-toastify\";\r\n\r\nconst DatasourceConnectionGrid: React.FC = () => {\r\n const { handleGetRequest } = useAxios();\r\n const SystemDataSourceType = useSelector(\r\n (state: any) => state.commonStores.stores.SystemDataSourceType.data\r\n );\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n deleteById: \"api/v1/dev/datasourceconnection\",\r\n save: \"api/v1/dev/datasourceconnection\",\r\n findById: \"api/v1/dev/datasourceconnection\",\r\n setData: setData,\r\n commonStoreKey: \"SystemDataSources\",\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ID\",\r\n fieldName: \"id\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATASOURCE_CONNECTION_CONNECTION_NAME\",\r\n fieldName: \"connectionName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATASOURCE_CONNECTION_DATASOURCE_TYPE\",\r\n fieldName: \"datasourceType\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: SystemDataSourceType,\r\n optionValueField: \"value\",\r\n optionDisplayField: \"value\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATASOURCE_CONNECTION_DATASOURCE_URL\",\r\n fieldName: \"datasourceUrl\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATASOURCE_CONNECTION_DATASOURCE_USERNAME\",\r\n fieldName: \"datasourceUsername\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATASOURCE_CONNECTION_DATASOURCE_PASSWORD\",\r\n fieldName: \"datasourcePassword\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DATASOURCE_CONNECTION_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalTitle: \"Datasource Connection\",\r\n modalIcon: \"plug\",\r\n modalWidth: 300,\r\n },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"DATASOURCE_CONNECTION_PLURAL\")}\r\n girdIcon=\"plug\"\r\n rowActions={[\r\n {\r\n icon: \"plug\",\r\n label: \"test connection\",\r\n actionFn: async (data) => {\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/dev/datasourceConnection/test\",\r\n showMask: true,\r\n parameters: {\r\n id: data.id,\r\n },\r\n // loadingMessage: \"checking datasource connectivity\",\r\n successCallBkFn: (response: any) => {\r\n toast.success(response.data);\r\n },\r\n });\r\n },\r\n },\r\n ]}\r\n editAction={{ isEnabled: true, authority: \"DATASOURCE_CONNECTION_EDIT\" }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"DATASOURCE_CONNECTION_DELETE\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default DatasourceConnectionGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { DATE_FORMAT, DATE_TIME_FORMAT } from \"../../../util\";\r\n\r\nconst EntityParameterGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const SystemParameterTypes = useSelector(\r\n (state: any) => state.commonStores.stores.SystemParameterTypes.data\r\n );\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n commonStoreKey: \"SystemEntityParameters\",\r\n deleteById: \"api/v1/dev/entityparameter\",\r\n save: \"api/v1/dev/entityparameter\",\r\n findById: \"api/v1/dev/entityparameter\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_CODE\",\r\n fieldName: \"parameterCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_LABEL\",\r\n fieldName: \"parameterLabel\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_TYPE\",\r\n fieldName: \"parameterType\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: SystemParameterTypes,\r\n optionDisplayField: \"value\",\r\n optionValueField: \"value\",\r\n formProps: {\r\n onValueChangeCallBack(\r\n value,\r\n formManager,\r\n formActions,\r\n selectedRecord\r\n ) {\r\n if (value === \"combobox\") {\r\n formManager.setValue(\"parameterValueFormat\", null);\r\n formActions.showField(\"parameterDataQueryId\");\r\n formActions.showField(\"parameterDataset\");\r\n formActions.showField(\"parameterDisplayField\");\r\n formActions.showField(\"parameterValueField\");\r\n formActions.hideField(\"parameterValueFormat\");\r\n } else if (value === \"date\" || value === \"datetime\") {\r\n if (value === \"date\") {\r\n formManager.setValue(\"parameterValueFormat\", DATE_FORMAT);\r\n } else if (value === \"datetime\") {\r\n formManager.setValue(\"parameterValueFormat\", DATE_TIME_FORMAT);\r\n }\r\n formActions.hideField(\"parameterDataQueryId\");\r\n formActions.hideField(\"parameterDataset\");\r\n formActions.hideField(\"parameterDisplayField\");\r\n formActions.hideField(\"parameterValueField\");\r\n formActions.showField(\"parameterValueFormat\");\r\n } else {\r\n formManager.setValue(\"parameterValueFormat\", null);\r\n formActions.hideField(\"parameterDataQueryId\");\r\n formActions.hideField(\"parameterDataset\");\r\n formActions.hideField(\"parameterDisplayField\");\r\n formActions.hideField(\"parameterValueField\");\r\n formActions.hideField(\"parameterValueFormat\");\r\n }\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_DATA_QUERY_ID\",\r\n fieldName: \"parameterDataQueryId\",\r\n hidden: true,\r\n required: false,\r\n fieldType: \"text\",\r\n formProps: {\r\n onValueChangeCallBack(\r\n value,\r\n formManager,\r\n formActions,\r\n selectedRecord\r\n ) {\r\n if (value != null && value != \"\") {\r\n formManager.setValue(\"parameterDataset\", null);\r\n formActions.hideField(\"parameterDataset\");\r\n } else {\r\n formActions.showField(\"parameterDataset\");\r\n }\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_DATASET\",\r\n fieldName: \"parameterDataset\",\r\n hidden: true,\r\n required: false,\r\n fieldType: \"text\",\r\n formProps: {\r\n onValueChangeCallBack(\r\n value,\r\n formManager,\r\n formActions,\r\n selectedRecord\r\n ) {\r\n if (value != null && value != \"\") {\r\n formManager.setValue(\"parameterDataQueryId\", null);\r\n formActions.hideField(\"parameterDataQueryId\");\r\n } else {\r\n formActions.showField(\"parameterDataQueryId\");\r\n }\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_DISPLAY_FIELD\",\r\n fieldName: \"parameterDisplayField\",\r\n hidden: true,\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_VALUE_FIELD\",\r\n fieldName: \"parameterValueField\",\r\n hidden: true,\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ENTITY_PARAMETER_PARAMETER_VALUE_FORMAT\",\r\n fieldName: \"parameterValueFormat\",\r\n required: false,\r\n hidden: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"ENTITY_PARAMETER_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalTitle: \"Entity Parameter\",\r\n modalIcon: \"p\",\r\n modalWidth: 300,\r\n },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"ENTITY_PARAMETER_PLURAL\")}\r\n girdIcon=\"p\"\r\n editAction={{ isEnabled: true, authority: \"ENTITY_PARAMETER_EDIT\" }}\r\n deleteAction={{ isEnabled: true, authority: \"ENTITY_PARAMETER_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default EntityParameterGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\n\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions, useWindow } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { toast } from \"react-toastify\";\r\nimport MailRecipientGrid from \"./MailRecipientGrid\";\r\nimport MailBodyGrid from \"./MailBodyGrid\";\r\nimport MailAttachmentGrid from \"./MailAttachmentGrid\";\r\n\r\nconst MailTemplateGrid: React.FC = () => {\r\n const SystemDataQueries = useSelector(\r\n (state: any) => state.commonStores.stores.SystemDataQueries.data\r\n );\r\n const SystemTimeIntervals = useSelector(\r\n (state: any) => state.commonStores.stores.SystemTimeIntervals.data\r\n );\r\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\r\n const {\r\n Window: MailRecipentsWindow,\r\n setWindowState: setMailRecipientsWindowState,\r\n } = useWindow({ windowTitle: \"Mail Receipents\", windowIcon: \"users\" });\r\n const { Window: MailBodiesWindow, setWindowState: setMailBodiesWindowState } =\r\n useWindow({\r\n windowTitle: \"Mail Bodies\",\r\n windowIcon: { prefix: \"fas\", iconName: \"envelope-open-text\" },\r\n });\r\n const {\r\n Window: MailAttachmentWindow,\r\n setWindowState: setMailAttachmentWindowState,\r\n } = useWindow({\r\n windowTitle: \"Mail Attachment\",\r\n windowIcon: \"paperclip\",\r\n width: 500,\r\n });\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n commonStoreKey: \"SystemMailTemplates\",\r\n deleteById: \"api/v1/dev/mailtemplate\",\r\n save: \"api/v1/dev/mailtemplate\",\r\n findById: \"api/v1/dev/mailtemplate\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_TEMPLATE_MAIL_TEMPLATE_CODE\",\r\n fieldName: \"mailTemplateCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_TEMPLATE_MAIL_TEMPLATE_NAME\",\r\n fieldName: \"mailTemplateName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_TEMPLATE_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"group\",\r\n props: {\r\n label: \"subject\",\r\n icon: \"users\",\r\n style: { padding: 1, border: \"0.5px dashed black\", margin: 1 },\r\n elements: [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_TEMPLATE_MAIL_SUBJECT\",\r\n fieldName: \"mailSubject\",\r\n required: true,\r\n fieldType: \"text\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_TEMPLATE_SUBJECT_DATA_QUERY_ID\",\r\n fieldName: \"subjectDataQueryId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemDataQueries,\r\n optionDisplayField: \"queryName\",\r\n optionValueField: \"id\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n\r\n {\r\n type: \"group\",\r\n props: {\r\n label: \"Recipients\",\r\n icon: \"users\",\r\n style: { padding: 1, border: \"0.5px dashed black\", margin: 1 },\r\n elements: [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"To Recipient Query (must return list of objects with property email)\",\r\n fieldName: \"mailToDataQueryId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemDataQueries,\r\n optionDisplayField: \"queryName\",\r\n optionValueField: \"id\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"CC Recipient Query (must return list of objects with property email)\",\r\n fieldName: \"mailCcDataQueryId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemDataQueries,\r\n optionDisplayField: \"queryName\",\r\n optionValueField: \"id\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n {\r\n type: \"group\",\r\n props: {\r\n label: \"Periodical Configuration\",\r\n icon: \"history\",\r\n style: { padding: 1, border: \"0.5px dashed black\", margin: 1 },\r\n elements: [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_TEMPLATE_PERIODICAL\",\r\n fieldName: \"periodical\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_TEMPLATE_PERIOD_TYPE\",\r\n fieldName: \"periodType\",\r\n options: SystemTimeIntervals,\r\n optionDisplayField: \"value\",\r\n optionValueField: \"value\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_TEMPLATE_PERIOD_VALUE\",\r\n fieldName: \"periodValue\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_TEMPLATE_START_SENDING_AT\",\r\n fieldName: \"startSendingAt\",\r\n required: false,\r\n fieldType: \"datetime\",\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <MailRecipentsWindow>\r\n <MailRecipientGrid\r\n selectedRecord={selectedRecord}\r\n callBkFn={() => {\r\n setMailRecipientsWindowState(false);\r\n }}\r\n />\r\n </MailRecipentsWindow>\r\n <MailBodiesWindow>\r\n <MailBodyGrid\r\n selectedRecord={selectedRecord}\r\n callBkFn={() => {\r\n setMailRecipientsWindowState(false);\r\n }}\r\n />\r\n </MailBodiesWindow>\r\n <MailAttachmentWindow>\r\n <MailAttachmentGrid\r\n selectedRecord={selectedRecord}\r\n callBkFn={() => {\r\n setMailAttachmentWindowState(false);\r\n }}\r\n />\r\n </MailAttachmentWindow>\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalWidth: 300,\r\n modalTitle: \"Mail Template\",\r\n modalIcon: \"envelope\",\r\n },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"MAIL_TEMPLATE_PLURAL\")}\r\n girdIcon=\"envelope\"\r\n rowActions={[\r\n {\r\n icon: \"users\",\r\n label: \"Recipients\",\r\n actionFn: async (data) => {\r\n setSelectedRecord(data);\r\n setMailRecipientsWindowState(true);\r\n },\r\n },\r\n {\r\n icon: { prefix: \"fas\", iconName: \"envelope-open-text\" },\r\n label: \"Mail Body\",\r\n actionFn: async (data) => {\r\n setSelectedRecord(data);\r\n setMailBodiesWindowState(true);\r\n },\r\n },\r\n {\r\n icon: \"paperclip\",\r\n label: \"Mail Attachments\",\r\n actionFn: async (data) => {\r\n setSelectedRecord(data);\r\n setMailAttachmentWindowState(true);\r\n },\r\n },\r\n ]}\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"MAIL_TEMPLATE_EDIT\",\r\n preActionValidation: (record) => {\r\n if (record?.periodical === true && !record?.periodType) {\r\n toast.error(\r\n \"You must specifiy the period type since this email is periodical\"\r\n );\r\n return false;\r\n }\r\n if (record?.periodical === true && !record?.periodValue) {\r\n toast.error(\r\n \"You must specifiy the period value since this email is periodical\"\r\n );\r\n return false;\r\n }\r\n if (record?.periodical === true && !record?.startSendingAt) {\r\n toast.error(\r\n \"You must specifiy the start sending time since this email is periodical\"\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n },\r\n }}\r\n deleteAction={{ isEnabled: true, authority: \"MAIL_TEMPLATE_DELETE\" }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default MailTemplateGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions, useWindow } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\nimport WorkflowDocumentStatusGrid from \"./WorkflowDocumentStatusGrid\";\r\nimport WorkflowDocumentActionGrid from \"./WorkflowDocumentActionGrid\";\r\n\r\nconst WorkflowDocumentGrid: React.FC = () => {\r\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\r\n const {\r\n Window: WorkflowStatusWindow,\r\n setWindowState: setWorkflowStatusWindowState,\r\n } = useWindow({\r\n windowTitle: \"Document Status\",\r\n windowIcon: \"tag\",\r\n });\r\n const {\r\n Window: WorkflowActionWindow,\r\n setWindowState: setWorkflowActionWindowState,\r\n } = useWindow({\r\n windowTitle: \"Document Action\",\r\n windowIcon: \"stamp\",\r\n });\r\n const SystemOrganizations = useSelector(\r\n (state: any) => state.commonStores.stores.SystemOrganizations.data\r\n );\r\n const SystemReports = useSelector(\r\n (state: any) => state.commonStores.stores.SystemReports.data\r\n );\r\n const SystemDataSources = useSelector(\r\n (state: any) => state.commonStores.stores.SystemDataSources.data\r\n );\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/workflowdocument/all\",\r\n deleteById: \"api/v1/dev/workflowdocument\",\r\n save: \"api/v1/dev/workflowdocument\",\r\n findById: \"api/v1/dev/workflowdocument\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_ORG_CODE\",\r\n fieldName: \"orgCode\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemOrganizations,\r\n optionDisplayField: \"organizationCode\",\r\n optionValueField: \"id\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_CODE\",\r\n fieldName: \"documentCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Workflow Document En Display Name\",\r\n fieldName: \"documentEnName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Workflow Document Ar Display Name\",\r\n fieldName: \"documentArName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Report To be Attached For The Document ( will be passed a parameter called doc_id)\",\r\n fieldName: \"documentReportId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemReports,\r\n optionDisplayField: \"reportName\",\r\n optionValueField: \"id\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_APPROVAL_ALLOWED\",\r\n fieldName: \"mailApprovalAllowed\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"group\",\r\n props: {\r\n icon: \"bell\",\r\n style: { border: \"1px dashed black\", padding: 1, marginBottom: 1 },\r\n label: \"App Visual Notifications\",\r\n elements: [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_APP_NOTIFICATION_ICON\",\r\n fieldName: \"appNotificationIcon\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_APP_NOTIFICATION_STYLE\",\r\n fieldName: \"appNotificationStyle\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_APP_VIEW_ROUTE\",\r\n fieldName: \"appViewRoute\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n\r\n {\r\n type: \"group\",\r\n props: {\r\n icon: \"database\",\r\n style: { border: \"1px dashed black\", padding: 1, marginBottom: 1 },\r\n label: \"Related Document Database\",\r\n elements: [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_USE_SYSTEM_CON\",\r\n fieldName: \"useSystemCon\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n formProps: {\r\n onValueChangeCallBack(\r\n value,\r\n formManager,\r\n formActions,\r\n selectedRecord\r\n ) {\r\n if (value) {\r\n formActions.hideField(\"documentConId\");\r\n formManager.setValue(\"documentConId\", null);\r\n } else {\r\n formActions.showField(\"documentConId\");\r\n }\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_CON_ID\",\r\n fieldName: \"documentConId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemDataSources,\r\n optionDisplayField: \"connectionName\",\r\n optionValueField: \"id\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_DATABASE_NAME\",\r\n fieldName: \"documentDatabaseName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_DATABASE_TABLE\",\r\n fieldName: \"documentDatabaseTable\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_ID_FIELD\",\r\n fieldName: \"documentIdField\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_STATUS_FIELD\",\r\n fieldName: \"documentStatusField\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_DOCUMENT_NUMBER_FIELD\",\r\n fieldName: \"documentNumberField\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n ],\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <WorkflowStatusWindow>\r\n <WorkflowDocumentStatusGrid selectedRecord={selectedRecord} />\r\n </WorkflowStatusWindow>\r\n <WorkflowActionWindow>\r\n <WorkflowDocumentActionGrid selectedRecord={selectedRecord} />\r\n </WorkflowActionWindow>\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n formLoadCallBk={(formActions, formManager, record) => {\r\n if (record.useSystemCon === true) {\r\n formActions.hideField(\"documentConId\");\r\n } else {\r\n formActions.showField(\"documentConId\");\r\n }\r\n }}\r\n data={data}\r\n setData={setData}\r\n rowActions={[\r\n {\r\n icon: \"tag\",\r\n label: \"Document States\",\r\n actionFn: async (data) => {\r\n setSelectedRecord(data);\r\n setWorkflowStatusWindowState(true);\r\n },\r\n },\r\n {\r\n icon: \"stamp\",\r\n label: \"Document Actions\",\r\n actionFn: async (data) => {\r\n setSelectedRecord(data);\r\n setWorkflowActionWindowState(true);\r\n },\r\n },\r\n ]}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalIcon: \"chart-diagram\",\r\n modalTitle: t(\"WORKFLOW_DOCUMENT_SINGULAR\"),\r\n },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"WORKFLOW_DOCUMENT_PLURAL\")}\r\n girdIcon=\"chart-diagram\"\r\n editAction={{ isEnabled: true, authority: \"WORKFLOW_DOCUMENT_EDIT\" }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"WORKFLOW_DOCUMENT_DELETE\",\r\n }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default WorkflowDocumentGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions, useWindow } from \"../../../hooks\";\r\nimport DashboardWidgetGrid from \"./DashboardWidgetGrid\";\r\nimport { useNavigate } from \"react-router-dom\";\r\n\r\nconst DashboardGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [selectedRecord, setSelectedRecord] = useState<any>(null);\r\n const { Window: WidgetsWindows, setWindowState: setWidgetsWindowState } =\r\n useWindow({\r\n windowTitle: \"Dashboard Widgets\",\r\n windowIcon: \"chart-pie\",\r\n });\r\n const [data, setData] = useState([]);\r\n const navigate = useNavigate();\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/dashboard/all\",\r\n deleteById: \"api/v1/dev/dashboard\",\r\n save: \"api/v1/dev/dashboard\",\r\n findById: \"api/v1/dev/dashboard\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DASHBOARD_DASHBOARD_CODE\",\r\n fieldName: \"dashboardCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DASHBOARD_DASHBOARD_NAME\",\r\n fieldName: \"dashboardName\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DASHBOARD_DASHBOARD_TITLE\",\r\n fieldName: \"dashboardTitle\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"DASHBOARD_ENABLED\",\r\n fieldName: \"enabled\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n <WidgetsWindows>\r\n <DashboardWidgetGrid selectedRecord={selectedRecord} />\r\n </WidgetsWindows>\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n rowActions={[\r\n {\r\n label: \"Widgets\",\r\n icon: \"chart-pie\",\r\n actionFn: async (data) => {\r\n setSelectedRecord(data);\r\n setWidgetsWindowState(true);\r\n },\r\n },\r\n {\r\n label: \"View\",\r\n icon: \"eye\",\r\n actionFn: async (data) => {\r\n navigate(\"/dashboard/\" + data.dashboardCode);\r\n },\r\n },\r\n ]}\r\n gridTitle={t(\"DASHBOARD_PLURAL\")}\r\n girdIcon=\"square-poll-vertical\"\r\n editAction={{ isEnabled: true, authority: \"DASHBOARD_EDIT\" }}\r\n deleteAction={{ isEnabled: true, authority: \"DASHBOARD_DELETE\" }}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default DashboardGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\n\r\nconst WorkflowDocumentMailLogGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/workflowdocumentmaillog/all\",\r\n deleteById: \"api/v1/dev/workflowdocumentmaillog\",\r\n save: \"api/v1/dev/workflowdocumentmaillog\",\r\n findById: \"api/v1/dev/workflowdocumentmaillog\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_GRAPH_API_MSG_ID\",\r\n fieldName: \"graphApiMsgId\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_IS_PROCESSED\",\r\n fieldName: \"isProcessed\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_MAIL_ACTION_CODE\",\r\n fieldName: \"mailActionCode\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_MAIL_BODY_CONTENT\",\r\n fieldName: \"mailBodyContent\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_MAIL_FROM\",\r\n fieldName: \"mailFrom\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_MAIL_SUBJECT\",\r\n fieldName: \"mailSubject\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_PROCESS_MESSAGE\",\r\n fieldName: \"processMessage\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_PROCESS_TIME\",\r\n fieldName: \"processTime\",\r\n required: false,\r\n fieldType: \"datetime\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_REF_DOC_ID\",\r\n fieldName: \"refDocId\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_WORKFLOW_DOCUMENT_ID\",\r\n fieldName: \"workflowDocumentId\",\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"WORKFLOW_DOCUMENT_MAIL_LOG_MAIL_RECEIVE_TIME\",\r\n fieldName: \"mailReceiveTime\",\r\n required: false,\r\n fieldType: \"datetime\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{ editMode: \"row\" }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"WORKFLOW_DOCUMENT_MAIL_LOG_PLURAL\")}\r\n girdIcon=\"table-cells\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"WORKFLOW_DOCUMENT_MAIL_LOG_EDIT\",\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"WORKFLOW_DOCUMENT_MAIL_LOG_DELETE\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default WorkflowDocumentMailLogGrid;\r\n","import { useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions, useAxios, useConfirmationWindow } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nconst MailNotificationQueueGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const { handlePostRequest } = useAxios();\r\n\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/mailnotificationqueue/all\",\r\n deleteById: \"api/v1/dev/mailnotificationqueue\",\r\n save: \"api/v1/dev/mailnotificationqueue\",\r\n findById: \"api/v1/dev/mailnotificationqueue\",\r\n setData: setData,\r\n });\r\n const SystemMailTemplates = useSelector(\r\n (state: any) => state.commonStores.stores.SystemMailTemplates.data\r\n );\r\n\r\n const resendMail = async (id: any) => {\r\n await handlePostRequest({\r\n endPointURI: \"api/v1/public/mailNotification/resend\",\r\n showMask: true,\r\n parameters: {\r\n mailNotificationQueueId: id,\r\n },\r\n successCallBkFn: (response: any) => {\r\n apiActions.reloadData();\r\n },\r\n });\r\n };\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_MAIL_TEMPLATE_ID\",\r\n fieldName: \"mailTemplateId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemMailTemplates,\r\n optionDisplayField: \"mailTemplateName\",\r\n optionValueField: \"id\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_CUSTOM_MAIL_ATTACHED_REPORT_ID\",\r\n fieldName: \"customMailAttachedReportId\",\r\n required: false,\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_CUSTOM_MAIL_BODY\",\r\n fieldName: \"customMailBody\",\r\n required: false,\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_CUSTOM_MAIL_SUBJECT\",\r\n fieldName: \"customMailSubject\",\r\n required: false,\r\n hidden: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_CUSTOM_RECIPIENTS\",\r\n fieldName: \"customRecipients\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_IS_NOTIFIED\",\r\n fieldName: \"isNotified\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_NOTIFICATION_TIME\",\r\n fieldName: \"notificationTime\",\r\n required: false,\r\n fieldType: \"datetime\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_NOTIFICATION_MESSAGE\",\r\n fieldName: \"notificationMessage\",\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"MAIL_NOTIFICATION_QUEUE_MAIL_PARAMETERS\",\r\n fieldName: \"mailParameters\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n required: false,\r\n fieldType: \"text\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n disableDefaultAction={true}\r\n data={data}\r\n setData={setData}\r\n editMode={{ editMode: \"none\" }}\r\n formElements={formElements}\r\n rowActions={[\r\n {\r\n actionFn: async (data) => {\r\n resendMail(data.id);\r\n },\r\n label: \"Resend\",\r\n icon: \"repeat\",\r\n confirmationMessage: \"Are you sure you want to resend this email ?\",\r\n isConfirmationRequired: true,\r\n },\r\n ]}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"MAIL_NOTIFICATION_QUEUE_PLURAL\")}\r\n girdIcon=\"table-cells\"\r\n editAction={{\r\n isEnabled: true,\r\n authority: \"MAIL_NOTIFICATION_QUEUE_EDIT\",\r\n }}\r\n deleteAction={{\r\n isEnabled: true,\r\n authority: \"MAIL_NOTIFICATION_QUEUE_DELETE\",\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default MailNotificationQueueGrid;\r\n","import { useEffect, useState } from \"react\";\r\nimport TemplateGrid from \"../../templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid\";\r\nimport { FormElementProps } from \"../../templates/DataEntryTemplates/DataEntryTypes\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useApiActions } from \"../../../hooks\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { Box } from \"@mui/material\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport useInterval from \"../../../hooks/useInterval\";\r\n\r\nconst NotificationGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const SystemTimeIntervals = useSelector(\r\n (state: any) => state.commonStores.stores.SystemTimeIntervals.data\r\n );\r\n const SystemDataQueries = useSelector(\r\n (state: any) => state.commonStores.stores.SystemDataQueries.data\r\n );\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/dev/notification/all\",\r\n deleteById: \"api/v1/dev/notification\",\r\n save: \"api/v1/dev/notification\",\r\n findById: \"api/v1/dev/notification\",\r\n setData: setData,\r\n });\r\n\r\n const formElements: Array<FormElementProps> = [\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"id\",\r\n fieldName: \"id\",\r\n fieldType: \"number\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createTime\",\r\n fieldName: \"createTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"createdBy\",\r\n fieldName: \"createdBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateBy\",\r\n fieldName: \"lastUpdateBy\",\r\n fieldType: \"text\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"lastUpdateTime\",\r\n fieldName: \"lastUpdateTime\",\r\n fieldType: \"datetime\",\r\n hidden: true,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"NOTIFICATION_NOTIFICATION_CODE\",\r\n fieldName: \"notificationCode\",\r\n required: true,\r\n fieldType: \"text\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Notification Data Query ( will be passed a parameter call last_run_time represents last check time)\",\r\n fieldName: \"notificationQueryId\",\r\n required: true,\r\n fieldType: \"combobox\",\r\n options: SystemDataQueries,\r\n optionDisplayField: \"queryName\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n optionValueField: \"id\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"Users to notify Query (must have username property in the result set)\",\r\n fieldName: \"usersToNotifyQueryId\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: SystemDataQueries,\r\n optionDisplayField: \"queryName\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n optionValueField: \"id\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"NOTIFICATION_AUTHORITY_TO_NOTIFY\",\r\n fieldName: \"authorityToNotify\",\r\n required: false,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Interval Type\",\r\n fieldName: \"intervalType\",\r\n fieldType: \"combobox\",\r\n options: SystemTimeIntervals,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n optionDisplayField: \"value\",\r\n optionValueField: \"value\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Interval Value (minmum value 20 seconds)\",\r\n fieldName: \"intervalValue\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Start Notifing Date\",\r\n fieldName: \"startNotificationFrom\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n fieldType: \"datetime\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"NOTIFICATION_SYSTEM_APPLICATION_ID\",\r\n fieldName: \"systemApplicationId\",\r\n hidden: true,\r\n gridProps: { hidden: true },\r\n required: false,\r\n fieldType: \"number\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"NOTIFICATION_NOTIFICATION_ICON\",\r\n fieldName: \"notificationIcon\",\r\n required: true,\r\n fieldType: \"text\",\r\n gridProps: {\r\n muiProps: {\r\n renderCell: (params: any) => {\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n color: params?.row?.notificationIconColor,\r\n justifyContent: \"center\",\r\n height: \"100%\",\r\n }}\r\n >\r\n {params?.row?.notificationIcon ? (\r\n <FontAwesomeIcon icon={params.row.notificationIcon} />\r\n ) : (\r\n <></>\r\n )}\r\n </Box>\r\n );\r\n },\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"NOTIFICATION_NOTIFICATION_AR_TEXT\",\r\n fieldName: \"notificationArText\",\r\n required: true,\r\n fieldType: \"text\",\r\n gridProps: {\r\n muiProps: {\r\n renderCell: (params: any) => {\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n color: params?.row?.notificationTextColor,\r\n justifyContent: \"center\",\r\n height: \"100%\",\r\n }}\r\n >\r\n {params?.row?.notificationArText}\r\n </Box>\r\n );\r\n },\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"NOTIFICATION_NOTIFICATION_EN_TEXT\",\r\n fieldName: \"notificationEnText\",\r\n required: true,\r\n fieldType: \"text\",\r\n gridProps: {\r\n muiProps: {\r\n renderCell: (params: any) => {\r\n return (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n color: params?.row?.notificationTextColor,\r\n justifyContent: \"center\",\r\n height: \"100%\",\r\n }}\r\n >\r\n {params?.row?.notificationEnText}\r\n </Box>\r\n );\r\n },\r\n },\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Last Runtime\",\r\n disabled: true,\r\n fieldName: \"lastIntervalRun\",\r\n fieldType: \"datetime\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Last Successful Runtime\",\r\n fieldName: \"lastSuccessfulRun\",\r\n disabled: true,\r\n fieldType: \"datetime\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"Last Run Message\",\r\n fieldName: \"lastRunMessage\",\r\n disabled: true,\r\n fieldType: \"text\",\r\n },\r\n }, \r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"NOTIFICATION_NOTIFICATION_TEXT_COLOR\",\r\n fieldName: \"notificationTextColor\",\r\n required: false,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n fieldType: \"text\",\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"NOTIFICATION_NOTIFICATION_ICON_COLOR\",\r\n fieldName: \"notificationIconColor\",\r\n required: false,\r\n gridProps: {\r\n hidden: true,\r\n },\r\n fieldType: \"text\",\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"NOTIFICATION_NOTIFICATION_ACTION\",\r\n fieldName: \"notificationAction\",\r\n required: false,\r\n fieldType: \"combobox\",\r\n options: [{ value: \"NAVIGATION\" }],\r\n optionDisplayField: \"value\",\r\n optionValueField: \"value\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"Action Payload (must be a rout in case of NAVIGATION with parameter values betweem @@)\",\r\n fieldName: \"notificationActionPayload\",\r\n required: false,\r\n fieldType: \"text\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel:\r\n \"Organization Id Field on the Notification Query result set if it supports it\",\r\n fieldName: \"organizationIdField\",\r\n required: false,\r\n fieldType: \"text\",\r\n gridProps: {\r\n hidden: true,\r\n },\r\n },\r\n },\r\n {\r\n type: \"field\",\r\n mode: \"props\",\r\n props: {\r\n fieldLabel: \"NOTIFICATION_IS_ACTIVE\",\r\n fieldName: \"isActive\",\r\n required: false,\r\n fieldType: \"checkbox\",\r\n },\r\n },\r\n ];\r\n\r\n return (\r\n <TemplateGrid\r\n apiActions={apiActions}\r\n data={data}\r\n setData={setData}\r\n editMode={{\r\n editMode: \"modal\",\r\n specs: {\r\n modalIcon: \"bell\",\r\n modalTitle: \"System Notification\",\r\n modalWidth: \"300\",\r\n },\r\n }}\r\n formElements={formElements}\r\n keyColumnName={\"id\"}\r\n gridTitle={t(\"NOTIFICATION_PLURAL\")}\r\n girdIcon=\"bell\"\r\n editAction={{ isEnabled: true, authority: \"NOTIFICATION_EDIT\" }}\r\n deleteAction={{ isEnabled: true, authority: \"NOTIFICATION_DELETE\" }}\r\n />\r\n );\r\n};\r\n\r\nexport default NotificationGrid;\r\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { Box, Button } from \"@mui/material\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useAxios, useSession } from \"../../hooks\";\r\nimport { useState } from \"react\";\r\nimport useInterval from \"../../hooks/useInterval\";\r\nimport { notificationsCheckIntervalSeconds } from \"../../layout/NotificationButton\";\r\nimport NotificationItem from \"./NotificationItem\";\r\n\r\nconst MyNotificationsPanel: React.FC = () => {\r\n const { UserInfo } = useSession();\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const { handleGetRequest, handlePostRequest } = useAxios();\r\n const [notifications, setNotifications] = useState<Array<Notification>>([]);\r\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\r\n const acknowledgeAllCurrentNotifications = async () => {\r\n await handlePostRequest({\r\n endPointURI: \"api/v1/public/notification/all/notified\",\r\n showMask: true,\r\n });\r\n };\r\n\r\n const archiveAllCurrentNotifications = async () => {\r\n await handlePostRequest({\r\n endPointURI: \"api/v1/public/notification/all/archive\",\r\n showMask: true,\r\n });\r\n };\r\n\r\n const loadUserNotifications = () => {\r\n if (UserInfo.isAuthenticated === true) {\r\n handleGetRequest({\r\n endPointURI: \"api/v1/public/notifications\",\r\n showMask: false,\r\n successCallBkFn: (response: any) => {\r\n setNotifications(response.data);\r\n },\r\n });\r\n }\r\n };\r\n if (AppInfo?.enableUINotifications === true) {\r\n useInterval(\r\n loadUserNotifications,\r\n notificationsCheckIntervalSeconds * 1000\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <Box\r\n sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}\r\n >\r\n <Box sx={{ flex: 1 }}></Box>\r\n <h3>\r\n <FontAwesomeIcon\r\n icon=\"bell\"\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n />\r\n {AppLayout.appDirection === \"ltr\" ? \"Notifications\" : \"الاشعارات\"}\r\n </h3>\r\n <Box sx={{ flex: 1 }}></Box>\r\n <Button\r\n sx={{ textTransform: \"none\" }}\r\n onClick={acknowledgeAllCurrentNotifications}\r\n >\r\n Mark All Read\r\n </Button>\r\n <Button\r\n color=\"error\"\r\n sx={{ textTransform: \"none\" }}\r\n onClick={archiveAllCurrentNotifications}\r\n >\r\n Delete All\r\n </Button>\r\n </Box>\r\n <Box\r\n sx={{\r\n flex: 1,\r\n width: \"100%\",\r\n display: \"flex\",\r\n overflowY: \"auto\",\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n flexGrow: 1,\r\n width: \"fit-content\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflowY: \"auto\",\r\n alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n }}\r\n >\r\n {notifications.map((notification: Notification, index) => {\r\n return (\r\n <NotificationItem\r\n {...notification}\r\n showDivider={index < notifications.length - 1}\r\n />\r\n );\r\n })}\r\n </Box>\r\n </Box>\r\n </>\r\n );\r\n};\r\n\r\nexport default MyNotificationsPanel;\r\n","import { Box } from \"@mui/material\";\r\nimport { useSession } from \"../hooks\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\ntype RouteWrapperProps = {\r\n authority?: string;\r\n applicationModule?: string;\r\n children?: React.ReactNode;\r\n};\r\nconst RouteWrapper: React.FC<RouteWrapperProps> = (props) => {\r\n const { isUserAuthorized, isCurrentOrganizationAuthorizedToModule } =\r\n useSession();\r\n if (\r\n props?.applicationModule &&\r\n !isCurrentOrganizationAuthorizedToModule(props?.applicationModule)\r\n ) {\r\n return (\r\n <Box\r\n sx={{\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n color: \"red\",\r\n }}\r\n >\r\n <h2>\r\n <FontAwesomeIcon\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n icon=\"cancel\"\r\n />\r\n Your organization didn't subscribe for this system module\r\n </h2>\r\n </Box>\r\n );\r\n }\r\n if (props?.authority && !isUserAuthorized(props.authority)) {\r\n return (\r\n <Box\r\n sx={{\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n color: \"red\",\r\n }}\r\n >\r\n <h2>\r\n <FontAwesomeIcon\r\n style={{ marginRight: 10, marginLeft: 10 }}\r\n icon=\"cancel\"\r\n />\r\n You aren't authorized to access this page\r\n </h2>\r\n </Box>\r\n );\r\n }\r\n return <>{props.children}</>;\r\n};\r\n\r\nexport default RouteWrapper;\r\n","import { Box } from \"@mui/material\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { CacheProvider } from \"@emotion/react\";\r\nimport { Route, Routes } from \"react-router-dom\";\r\nimport { cacheLtr, cacheRtl } from \"../components/common/LayoutHandlers\";\r\nimport { SYSTEM_ROUTES } from \"../routes\";\r\nimport { SystemRoute } from \"../routes/types\";\r\nimport RouteWrapper from \"./RouteWrapper\";\r\nimport { useAxios, useLoadingMask, useSession } from \"../hooks\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { setStoreData } from \"../redux/features/common/CommonStoreSlice\";\r\n\r\nconst MainContent: React.FC = () => {\r\n const AppLayoutState = useSelector((state: any) => state.AppLayout);\r\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\r\n const businessRoutes = useSelector(\r\n (state: any) => state.AppInfo.value.businessRoutes\r\n );\r\n const { UserInfo } = useSession();\r\n const dispatch = useDispatch();\r\n const { show, hide } = useLoadingMask();\r\n const commonStores = useSelector((state: any) => state.commonStores);\r\n const [isAutoLoadLoaded, setAutoLoadLoaded] = useState<boolean>(false);\r\n const { isUserAuthorized } = useSession();\r\n const { handleGetRequest } = useAxios();\r\n const loadCommonStores = async () => {\r\n show(\"Loading ... please wait\");\r\n setAutoLoadLoaded(false);\r\n const stores = commonStores.stores;\r\n const storeKeys = commonStores.storeKeys;\r\n for (let storeKey of storeKeys) {\r\n if (\r\n (stores[storeKey]?.authority === undefined ||\r\n stores[storeKey]?.authority === null ||\r\n isUserAuthorized(stores[storeKey]?.authority)) &&\r\n stores[storeKey]?.url != \"\" &&\r\n stores[storeKey].autoLoad === true\r\n ) {\r\n await handleGetRequest({\r\n endPointURI: stores[storeKey].url,\r\n showMask: false,\r\n successCallBkFn: (response) => {\r\n dispatch(setStoreData({ storeKey, data: response.data }));\r\n },\r\n failureCallBkFn: () => {\r\n dispatch(setStoreData({ storeKey, data: [] }));\r\n },\r\n });\r\n }\r\n }\r\n setAutoLoadLoaded(true);\r\n hide();\r\n };\r\n\r\n useEffect(() => {\r\n if (commonStores?.storeKeys) {\r\n loadCommonStores();\r\n }\r\n }, [commonStores.storeKeys, UserInfo?.currentOrganization]);\r\n return (\r\n <CacheProvider\r\n value={AppLayoutState.appDirection === \"ltr\" ? cacheLtr : cacheRtl}\r\n >\r\n {isAutoLoadLoaded ? (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n // alignItems: \"center\",\r\n justifyContent: \"flex-start\",\r\n flex: 1,\r\n overflow: \"hidden\",\r\n padding: 3,\r\n }}\r\n >\r\n <Routes>\r\n {AppInfo.enableAdministrationModule\r\n ? SYSTEM_ROUTES.map((route: SystemRoute, index) => {\r\n return (\r\n <Route\r\n key={\"adm\" + index}\r\n path={route.path}\r\n element={\r\n <RouteWrapper\r\n authority={route.authority}\r\n applicationModule={route.applicationModule}\r\n >\r\n <route.component />\r\n </RouteWrapper>\r\n }\r\n />\r\n );\r\n })\r\n : null}\r\n {businessRoutes.map((route: SystemRoute, index) => {\r\n return (\r\n <Route\r\n key={\"bs\" + index}\r\n path={route.path}\r\n element={\r\n <RouteWrapper authority={route.authority}>\r\n <route.component />\r\n </RouteWrapper>\r\n }\r\n />\r\n );\r\n })}\r\n </Routes>\r\n </Box>\r\n ) : (\r\n <></>\r\n )}\r\n </CacheProvider>\r\n );\r\n};\r\n\r\nexport default MainContent;\r\n","import { styled } from \"@mui/material/styles\";\r\nimport { grey } from \"@mui/material/colors\";\r\nimport SwipeableDrawer from \"@mui/material/SwipeableDrawer\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { Box, Typography } from \"@mui/material\";\r\nimport { AppLayoutActions } from \"../redux/features/common/AppLayoutSlice\";\r\nimport NavigationTree from \"./NavigationTree\";\r\nimport { setSideBarState } from \"../redux/features/common/SideBarSlice\";\r\n\r\nconst drawerBleeding = 56;\r\n\r\ninterface Props {\r\n /**\r\n * Injected by the documentation to work in an iframe.\r\n * You won't need it on your project.\r\n */\r\n window?: () => Window;\r\n}\r\n\r\nconst Puller = styled(\"div\")(({ theme }) => ({\r\n width: 30,\r\n height: 6,\r\n margin: 10,\r\n backgroundColor: grey[300],\r\n borderRadius: 3,\r\n // position: \"absolute\",\r\n top: 8,\r\n // left: \"calc(50% - 15px)\",\r\n ...theme.applyStyles(\"dark\", {\r\n backgroundColor: grey[900],\r\n }),\r\n}));\r\n\r\nexport default function MobileDrawer(props: Props) {\r\n const { window } = props;\r\n const SideBarState = useSelector((state: any) => state.SideBar);\r\n const AppInfo = useSelector((state: any) => state.AppInfo.value);\r\n const dispatch = useDispatch();\r\n const toggleDrawer = (newState: boolean) => {\r\n dispatch(setSideBarState(newState));\r\n };\r\n // This is used only for the example\r\n const container =\r\n window !== undefined ? () => window().document.body : undefined;\r\n\r\n return (\r\n <SwipeableDrawer\r\n container={container}\r\n anchor=\"bottom\"\r\n open={SideBarState.isOpened}\r\n onClose={() => {\r\n toggleDrawer(false);\r\n }}\r\n onOpen={() => {\r\n toggleDrawer(true);\r\n }}\r\n swipeAreaWidth={drawerBleeding}\r\n disableSwipeToOpen={false}\r\n ModalProps={{\r\n keepMounted: true,\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n height: \"100%\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n <Puller />\r\n <Box\r\n sx={{\r\n flexGrow: 1,\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n width: \"99%\",\r\n overflowY: \"auto\",\r\n }}\r\n >\r\n <NavigationTree />\r\n </Box>\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-around\",\r\n marginTop: 1,\r\n width: \"100%\",\r\n }}\r\n >\r\n <Typography sx={{ fontSize: 12 }} color=\"textDisabled\">\r\n {AppInfo.appName}\r\n </Typography>\r\n <Typography sx={{ fontSize: 12 }} color=\"textDisabled\">\r\n V.{AppInfo.appVersion}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n </SwipeableDrawer>\r\n );\r\n}\r\n","import { useSelector } from \"react-redux\";\r\nimport { Backdrop, CircularProgress } from \"@mui/material\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst LoadingMask: React.FC = () => {\r\n const { t } = useTranslation();\r\n const loadingMask = useSelector((state: any) => state.loadingMask.value);\r\n const AppLayoutState = useSelector((state: any) => state.AppLayout);\r\n\r\n return (\r\n <Backdrop\r\n dir={AppLayoutState.appDirection}\r\n sx={{ color: \"#fff\", zIndex: (theme) => theme.zIndex.drawer + 1 }}\r\n open={loadingMask.isOpened}\r\n >\r\n <CircularProgress color=\"inherit\" />\r\n <div style={{ marginRight: 10, marginLeft: 10 }}>\r\n {loadingMask?.message || t(\"DEFAULT_LOADING_MESSAGE\")}\r\n </div>\r\n </Backdrop>\r\n );\r\n};\r\n\r\nexport default LoadingMask;\r\n","import {\r\n Box,\r\n Button,\r\n CircularProgress,\r\n createTheme,\r\n Paper,\r\n TextField,\r\n Typography,\r\n} from \"@mui/material\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { ThemeProvider } from \"@emotion/react\";\r\nimport { useEffect, useState } from \"react\";\r\nimport axios from \"axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport { UserSessionActions } from \"../../redux/features/common/UserSessionSlice\";\r\nimport {\r\n DARK_THEME_INITIAL_MAIN_COLOR,\r\n DARK_THEME_INITIAL_SECANDARY_COLOR,\r\n} from \"../../util\";\r\n\r\nconst Login: React.FC = () => {\r\n const appInfo = useSelector((state: any) => state.AppInfo.value);\r\n const [username, setUsername] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [isLoginInProcess, setIsLoginInProcess] = useState(false);\r\n const UserSessionState = useSelector((state: any) => state.UserSession.value);\r\n const dispatch = useDispatch();\r\n const handleLogin = async () => {\r\n if (username == null || username == \"\") {\r\n toast.error(\"username is required to proceed\");\r\n return;\r\n }\r\n if (password == null || password == \"\") {\r\n toast.error(\"password is required to proceed\");\r\n return;\r\n }\r\n setIsLoginInProcess(true);\r\n let response: any = null;\r\n try {\r\n response = await axios.post(\r\n `${appInfo.apiBaseUrl}/api/auth/login`,\r\n {\r\n username,\r\n password,\r\n },\r\n {\r\n withCredentials: true,\r\n }\r\n );\r\n if (response.data != null && response.data !== \"\") {\r\n setIsLoginInProcess(false);\r\n const UserSession = {\r\n ...response.data,\r\n isAuthenticated: true,\r\n };\r\n dispatch(UserSessionActions.setAuthenticated(UserSession));\r\n }\r\n } catch (e: any) {\r\n setIsLoginInProcess(false);\r\n toast.error(\r\n e?.response?.data ||\r\n \"failed to authenticate, contact your administrator\"\r\n );\r\n }\r\n };\r\n const userSession = useSelector((state: any) => state.UserSession.value);\r\n const loginTheme = createTheme({\r\n components: {\r\n MuiCssBaseline: {\r\n styleOverrides: `\r\n /* Custom Scrollbar */\r\n * {\r\n scrollbar-width: thin;\r\n scrollbar-color: ${\r\n appInfo.appTheme?.dark?.primaryColor ||\r\n DARK_THEME_INITIAL_MAIN_COLOR\r\n } #121212;\r\n }\r\n \r\n /* Webkit Browsers */\r\n *::-webkit-scrollbar {\r\n width: 12px;\r\n height: 10px;\r\n } \r\n `,\r\n },\r\n },\r\n palette: {\r\n mode: \"dark\",\r\n primary: {\r\n main:\r\n appInfo.appTheme?.dark?.primaryColor || DARK_THEME_INITIAL_MAIN_COLOR,\r\n },\r\n secondary: {\r\n main:\r\n appInfo.appTheme?.dark?.secondaryColor ||\r\n DARK_THEME_INITIAL_SECANDARY_COLOR,\r\n },\r\n },\r\n });\r\n const checkUserSession = async () => {\r\n if (appInfo?.apiBaseUrl) {\r\n if (userSession.isAuthenticated == null) {\r\n try {\r\n let response = await axios.get(\r\n `${appInfo.apiBaseUrl}/api/auth/userInfo`,\r\n {\r\n withCredentials: true,\r\n }\r\n );\r\n if (response != null && response.data != null) {\r\n const UserSession = {\r\n ...response.data,\r\n isAuthenticated: true,\r\n };\r\n dispatch(UserSessionActions.setAuthenticated(UserSession));\r\n } else {\r\n dispatch(UserSessionActions.setUnAuthenticated());\r\n }\r\n } catch (error) {\r\n dispatch(UserSessionActions.setUnAuthenticated());\r\n }\r\n }\r\n }\r\n };\r\n useEffect(() => {\r\n checkUserSession();\r\n }, [appInfo]);\r\n return (\r\n <ThemeProvider theme={loginTheme}>\r\n <Paper\r\n sx={{\r\n display: \"flex\",\r\n height: \"100vh\",\r\n width: \"100%\",\r\n borderRadius: 0,\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n {UserSessionState.isAuthenticated == false ? (\r\n <Box\r\n sx={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <img src={appInfo?.appLogo} width={150} height={150} />\r\n <Typography sx={{ m: 1 }} variant=\"h4\" color=\"textSecondary\">\r\n {appInfo?.appName}\r\n </Typography>\r\n <Typography\r\n sx={{\r\n paddingRight: 1,\r\n width: \"100%\",\r\n textAlign: \"right\",\r\n fontSize: 10,\r\n }}\r\n variant=\"caption\"\r\n color=\"textSecondary\"\r\n >\r\n V.{appInfo.appVersion}\r\n </Typography>\r\n <TextField\r\n label=\"username\"\r\n sx={{ width: 300, m: 1 }}\r\n value={username}\r\n onChange={(event) => {\r\n setUsername(event.target.value);\r\n }}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\") {\r\n handleLogin();\r\n }\r\n }}\r\n />\r\n <TextField\r\n label=\"password\"\r\n sx={{ width: 300, m: 1 }}\r\n value={password}\r\n type=\"password\"\r\n onChange={(event) => {\r\n setPassword(event.target.value);\r\n }}\r\n onKeyDown={(event) => {\r\n if (event.key === \"Enter\") {\r\n handleLogin();\r\n }\r\n }}\r\n />\r\n <Button\r\n loading={isLoginInProcess}\r\n onClick={handleLogin}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n sx={{ m: 1 }}\r\n >\r\n login\r\n </Button>\r\n </Box>\r\n ) : (\r\n <>\r\n <CircularProgress sx={{ marginRight: 1 }} />\r\n <div>You will be redirected shortly ... please wait</div>\r\n </>\r\n )}\r\n </Paper>\r\n </ThemeProvider>\r\n );\r\n};\r\n\r\nexport default Login;\r\n","import { styled, useTheme } from \"@mui/material/styles\";\r\nimport CssBaseline from \"@mui/material/CssBaseline\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport TopBar from \"./TopBar\";\r\nimport { DrawerHeader } from \"./DrawerHeader\";\r\nimport SideBar from \"./SideBar\";\r\nimport MainContent from \"./MainContent\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\nimport MobileDrawer from \"./MobileDrawer\";\r\nimport { ToastContainer } from \"react-toastify\";\r\nimport { useEffect, useState } from \"react\";\r\nimport useLoadingMask from \"../hooks/useLoadingMask\";\r\nimport { useIsMobile } from \"../hooks/UseMobile\";\r\nimport useSession from \"../hooks/UseSession\";\r\nimport useAxios from \"../hooks/useAxios\";\r\nimport { DRAWER_WIDTH } from \"../redux/features/common/AppLayoutSlice\";\r\nimport { UserSessionProps } from \"../redux/features/common/UserSessionSlice\";\r\nimport LoadingMask from \"../components/common/LoadingMask\";\r\nimport Login from \"../components/common/Login\";\r\nimport { setStoreData } from \"../redux/features/common/CommonStoreSlice\";\r\n\r\nconst Main = styled(\"main\", {\r\n shouldForwardProp: (prop) => prop !== \"open\",\r\n})<{\r\n open?: boolean;\r\n}>(({ theme: any, open }) => {\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n const theme = useTheme();\r\n const isMobile = useIsMobile();\r\n\r\n return {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflow: \"hidden\",\r\n flexGrow: 1,\r\n width: !isMobile && open ? `calc(100% - ${DRAWER_WIDTH}px)` : \"100%\",\r\n direction: AppLayout.appDirection,\r\n justifyContent: \"flex-start\",\r\n transition:\r\n open === true\r\n ? theme.transitions.create([\"margin\", \"width\"], {\r\n easing: theme.transitions.easing.easeOut,\r\n duration: theme.transitions.duration.enteringScreen,\r\n })\r\n : theme.transitions.create([\"margin\", \"width\"], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n marginLeft:\r\n !isMobile && AppLayout.appDirection === \"ltr\" && open === true\r\n ? DRAWER_WIDTH + \"px\"\r\n : 0,\r\n marginRight:\r\n !isMobile && AppLayout.appDirection === \"rtl\" && open === true\r\n ? DRAWER_WIDTH + \"px\"\r\n : 0,\r\n };\r\n});\r\n\r\nexport default function Layout() {\r\n const SideBarState = useSelector((state: any) => state.SideBar);\r\n const isMobile = useIsMobile();\r\n const UserSession: UserSessionProps = useSelector(\r\n (state: any) => state.UserSession\r\n );\r\n const AppLayout = useSelector((state: any) => state.AppLayout);\r\n\r\n return (\r\n <BrowserRouter>\r\n <ToastContainer\r\n rtl={AppLayout.appDirection === \"rtl\"}\r\n draggable={true}\r\n position=\"bottom-center\"\r\n />\r\n <LoadingMask />\r\n {UserSession.value.isAuthenticated === true ? (\r\n <Main open={SideBarState.isOpened}>\r\n <CssBaseline />\r\n <TopBar />\r\n {!isMobile ? <SideBar /> : null}\r\n {isMobile ? <MobileDrawer /> : null}\r\n <DrawerHeader />\r\n <MainContent />\r\n </Main>\r\n ) : (\r\n <Login />\r\n )}\r\n </BrowserRouter>\r\n );\r\n}\r\n","import { createSlice, Reducer } from \"@reduxjs/toolkit\";\r\nimport { SystemRoute } from \"../../../routes/types\";\r\nimport { ExtendedTreeItemProps } from \"../../../navigationItems\";\r\nimport { StoreMetaData } from \"./CommonStoreSlice\";\r\n\r\nexport type AppInfo = {\r\n documentTitle: string | null;\r\n apiBaseUrl: string | null;\r\n appName: string | null;\r\n appVersion: string | null;\r\n appLogo: any | null;\r\n businessLocals?: {\r\n ar: { [key: string]: string };\r\n en: { [key: string]: string };\r\n };\r\n businessRoutes?: Array<SystemRoute>;\r\n businessNavigationItems?: Array<ExtendedTreeItemProps>;\r\n businessReduxReducers?: { [key: string]: Reducer<any> };\r\n businessCommonStoresMetaData?: { [key: string]: StoreMetaData };\r\n muiPremiumKey: string;\r\n enableAdministrationModule: boolean;\r\n enableUINotifications: Boolean;\r\n appTheme?: {\r\n light: { primaryColor: string; secondaryColor: string };\r\n dark: { primaryColor: string; secondaryColor: string };\r\n };\r\n};\r\n\r\nexport type AppInfoProp = {\r\n value: AppInfo;\r\n};\r\n\r\nconst initialState: AppInfoProp = {\r\n value: {\r\n documentTitle: null,\r\n apiBaseUrl: null,\r\n appName: null,\r\n appVersion: null,\r\n appLogo: null,\r\n muiPremiumKey: null,\r\n enableAdministrationModule: false,\r\n enableUINotifications: false,\r\n businessRoutes: [],\r\n businessNavigationItems: [],\r\n businessReduxReducers: {},\r\n businessCommonStoresMetaData: {},\r\n appTheme: {\r\n light: { primaryColor: \"#37505C\", secondaryColor: \"#ff6d00\" },\r\n dark: { primaryColor: \"#ea690e\", secondaryColor: \"#74776B\" },\r\n },\r\n },\r\n};\r\n\r\nconst AppInfoSlice = createSlice({\r\n name: \"AppInfo\",\r\n initialState: initialState,\r\n reducers: {\r\n setAppInfo: (state, action) => {\r\n state.value = action.payload;\r\n },\r\n },\r\n});\r\n\r\nexport const AppInfoActions = AppInfoSlice.actions;\r\nexport default AppInfoSlice.reducer;\r\n","import { CommonStores } from \"../common/CommonStoreSlice\";\r\n\r\nexport const ADMINISTRATION_STORES: CommonStores = {\r\n SystemDataSourceType: {\r\n autoLoad: false,\r\n data: [{ value: \"Mysql\" }, { value: \"Oracle\" }, { value: \"DB2\" }],\r\n url: \"\",\r\n },\r\n SystemParameterTypes: {\r\n autoLoad: false,\r\n url: \"\",\r\n data: [\r\n { value: \"text\" },\r\n { value: \"number\" },\r\n { value: \"date\" },\r\n { value: \"datetime\" },\r\n { value: \"combobox\" },\r\n { value: \"checkbox\" },\r\n { value: \"html\" },\r\n { value: \"lookup\" },\r\n ],\r\n },\r\n SystemReportTypes: {\r\n autoLoad: false,\r\n url: \"\",\r\n data: [{ value: \"Excel\" }, { value: \"Jasper\" }, { value: \"Blueprint\" }],\r\n },\r\n SystemWidgetTypes: {\r\n autoLoad: false,\r\n url: \"\",\r\n data: [\r\n { name: \"LineChart\" },\r\n { name: \"ColumnChart\" },\r\n { name: \"PieChart\" },\r\n { name: \"Card\" },\r\n { name: \"CircularProgress\" },\r\n { name: \"LinearProgress\" },\r\n ],\r\n },\r\n SystemTimeIntervals: {\r\n autoLoad: false,\r\n url: \"\",\r\n data: [\r\n { value: \"second\" },\r\n { value: \"minute\" },\r\n { value: \"hour\" },\r\n { value: \"day\" },\r\n { value: \"week\" },\r\n { value: \"month\" },\r\n { value: \"year\" },\r\n ],\r\n },\r\n SystemMailRecipientTypes: {\r\n autoLoad: false,\r\n url: \"\",\r\n data: [{ name: \"To\" }, { name: \"CC\" }],\r\n },\r\n SystemOrganizations: {\r\n autoLoad: true,\r\n url: \"api/v1/public/organization/all\",\r\n data: [],\r\n },\r\n SystemOrganizationRanks: {\r\n autoLoad: true,\r\n url: \"api/v1/public/organization/ranks/all\",\r\n data: [],\r\n },\r\n CurrentOrganizationRanks: {\r\n autoLoad: true,\r\n url: \"api/v1/public/organizationrank/all\",\r\n data: [],\r\n },\r\n SystemOrganizationUnits: {\r\n autoLoad: true,\r\n url: \"api/v1/public/organization/units/all\",\r\n data: [],\r\n },\r\n CurrentOrganizationUnits: {\r\n autoLoad: true,\r\n url: \"api/v1/public/organizationunit/all\",\r\n data: [],\r\n },\r\n SystemOrganizationUnitType: {\r\n autoLoad: true,\r\n url: \"api/v1/public/organizationunittype/all\",\r\n data: [],\r\n },\r\n SystemDataSources: {\r\n autoLoad: true,\r\n data: [],\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n url: \"api/v1/dev/datasourceconnection/all\",\r\n },\r\n SystemDataQueries: {\r\n autoLoad: true,\r\n data: [],\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n url: \"api/v1/dev/dataquery/all\",\r\n },\r\n SystemBluePrints: {\r\n autoLoad: true,\r\n data: [],\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n url: \"api/v1/dev/blueprint/all\",\r\n },\r\n SystemReports: {\r\n autoLoad: true,\r\n data: [],\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n url: \"api/v1/dev/report/all\",\r\n },\r\n SystemEntityParameters: {\r\n autoLoad: true,\r\n data: [],\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n url: \"api/v1/dev/entityparameter/all\",\r\n },\r\n SystemMailTemplates: {\r\n autoLoad: true,\r\n data: [],\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n url: \"api/v1/dev/mailtemplate/all\",\r\n },\r\n SystemWidgets: {\r\n autoLoad: true,\r\n data: [],\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n url: \"api/v1/dev/widget/all\",\r\n },\r\n SystemApplicationModules: {\r\n autoLoad: true,\r\n data: [],\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n url: \"api/v1/admin/systemapplicationmodule/application/all\",\r\n },\r\n SystemApplicationAuthorities: {\r\n autoLoad: true,\r\n data: [],\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n url: \"api/v1/admin/systemapplicationauthority/all\",\r\n },\r\n SystemApplicationRoles: {\r\n autoLoad: true,\r\n data: [],\r\n authority: \"DEVELOPMENT_ADMIN\",\r\n url: \"api/v1/admin/systemapplicationrole/all\",\r\n },\r\n};\r\n","import { useDispatch, useSelector } from \"react-redux\";\r\nimport { createTheme, ThemeOptions } from \"@mui/material\";\r\nimport { ThemeProvider } from \"@emotion/react\";\r\nimport React, { useEffect } from \"react\";\r\nimport Layout from \"../layout/Layout\";\r\nimport { AppInfo, AppInfoActions } from \"../redux/features/common/AppInfoSlice\";\r\nimport { LicenseInfo } from \"@mui/x-license\";\r\nimport {\r\n DARK_THEME_INITIAL_MAIN_COLOR,\r\n DARK_THEME_INITIAL_SECANDARY_COLOR,\r\n LIGHT_THEME_INITIAL_MAIN_COLOR,\r\n LIGHT_THEME_INITIAL_SECANDARY_COLOR,\r\n} from \"../util\";\r\nimport { setStoresMetaData } from \"../redux/features/common/CommonStoreSlice\";\r\nimport { ADMINISTRATION_STORES } from \"../redux/features/administration/AdministrationStoresMetaData\";\r\n\r\nconst App: React.FC<AppInfo> = (props: AppInfo) => {\r\n const dispatch = useDispatch();\r\n LicenseInfo.setLicenseKey(props.muiPremiumKey);\r\n const LightThemeOptions: ThemeOptions = {\r\n components: {\r\n MuiCssBaseline: {\r\n styleOverrides: `\r\n /* Custom Scrollbar */\r\n * {\r\n scrollbar-width: thin;\r\n scrollbar-color: ${\r\n props.appTheme?.light?.primaryColor ||\r\n LIGHT_THEME_INITIAL_MAIN_COLOR\r\n } #ffffff;\r\n }\r\n \r\n /* Webkit Browsers */\r\n *::-webkit-scrollbar {\r\n width: 12px;\r\n height: 10px;\r\n } \r\n `,\r\n },\r\n },\r\n palette: {\r\n mode: \"light\",\r\n primary: {\r\n main:\r\n props.appTheme?.light?.primaryColor || LIGHT_THEME_INITIAL_MAIN_COLOR,\r\n },\r\n secondary: {\r\n main:\r\n props.appTheme?.light?.secondaryColor ||\r\n LIGHT_THEME_INITIAL_SECANDARY_COLOR,\r\n },\r\n background: {\r\n default: \"#f5f5f5\",\r\n paper: \"#f5f5f5\",\r\n },\r\n },\r\n };\r\n const DarkThemeOptions: ThemeOptions = {\r\n components: {\r\n MuiCssBaseline: {\r\n styleOverrides: `\r\n /* Custom Scrollbar */\r\n * {\r\n scrollbar-width: thin;\r\n scrollbar-color: ${\r\n props.appTheme?.dark?.primaryColor || DARK_THEME_INITIAL_MAIN_COLOR\r\n } #121212;\r\n }\r\n \r\n /* Webkit Browsers */\r\n *::-webkit-scrollbar {\r\n width: 12px;\r\n height: 10px;\r\n } \r\n `,\r\n },\r\n },\r\n palette: {\r\n mode: \"dark\",\r\n primary: {\r\n main:\r\n props.appTheme?.dark?.primaryColor || DARK_THEME_INITIAL_MAIN_COLOR,\r\n },\r\n secondary: {\r\n main:\r\n props.appTheme?.dark?.secondaryColor ||\r\n DARK_THEME_INITIAL_SECANDARY_COLOR,\r\n },\r\n },\r\n };\r\n\r\n let commonStores = {};\r\n if (props.enableAdministrationModule) {\r\n commonStores = { ...ADMINISTRATION_STORES };\r\n }\r\n if (props.businessCommonStoresMetaData) {\r\n commonStores = {\r\n ...commonStores,\r\n ...props.businessCommonStoresMetaData,\r\n };\r\n }\r\n dispatch(setStoresMetaData(commonStores));\r\n const AppLayoutState = useSelector((state: any) => state.AppLayout);\r\n let themeOptions = { ...LightThemeOptions };\r\n if (AppLayoutState.themeMode === \"dark\") {\r\n themeOptions = { ...DarkThemeOptions };\r\n }\r\n const theme = createTheme({\r\n direction: AppLayoutState.appDirection,\r\n ...themeOptions,\r\n });\r\n useEffect(() => {\r\n document.title = props.documentTitle;\r\n dispatch(AppInfoActions.setAppInfo(props));\r\n }, []);\r\n return (\r\n <ThemeProvider theme={theme}>\r\n <Layout />\r\n </ThemeProvider>\r\n );\r\n};\r\n\r\nexport default App;\r\n","import common from \"./common.json\";\r\nimport AdminLocalsEn from \"./adminLocalsEn.json\";\r\nimport devLocalsEn from \"./devLocalsEn.json\";\r\n\r\nexport const ENGLISH_TRANS = {\r\n ...common,\r\n ...AdminLocalsEn,\r\n ...devLocalsEn,\r\n};\r\n","import common from \"./common.json\";\r\nimport adminLocalsAr from \"./adminLocalsAr.json\";\r\nimport devLocalAr from \"./devLocalsAr.json\";\r\n\r\nexport const ARABIC_TRANS = {\r\n ...common,\r\n ...adminLocalsAr,\r\n ...devLocalAr,\r\n};\r\n","import { Provider } from \"react-redux\";\r\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\r\nimport { fab } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { far } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { fas } from \"@fortawesome/free-solid-svg-icons\";\r\nimport \"../styles/index.css\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport App from \"./App\";\r\nimport { AppInfo } from \"../redux/features/common/AppInfoSlice\";\r\nimport AppLayoutReducer from \"../redux/features/common/AppLayoutSlice\";\r\nimport UserSessionReducer from \"../redux/features/common/UserSessionSlice\";\r\nimport LoadingMaskReducer from \"../redux/features/common/LoadingMaskSlice\";\r\nimport CommonStoreReducer from \"../redux/features/common/CommonStoreSlice\";\r\nimport AppInfoReducer from \"../redux/features/common/AppInfoSlice\";\r\nimport SideBarReducer from \"../redux/features/common/SideBarSlice\";\r\nimport { configureStore } from \"@reduxjs/toolkit\";\r\nimport i18n from \"../locales/i18n\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport { ENGLISH_TRANS } from \"../locales/english\";\r\nimport { ARABIC_TRANS } from \"../locales/arabic\";\r\n\r\nlibrary.add(fab);\r\nlibrary.add(far);\r\nlibrary.add(fas);\r\n\r\nexport const BaseApp: React.FC<AppInfo> = (props) => {\r\n const systemReducers = {\r\n AppLayout: AppLayoutReducer,\r\n UserSession: UserSessionReducer,\r\n loadingMask: LoadingMaskReducer,\r\n commonStores: CommonStoreReducer,\r\n SideBar: SideBarReducer,\r\n AppInfo: AppInfoReducer,\r\n ...props?.businessReduxReducers,\r\n };\r\n const store = configureStore({\r\n reducer: systemReducers,\r\n });\r\n const resources = {\r\n en: { translation: { ...ENGLISH_TRANS, ...props?.businessLocals?.en } },\r\n ar: { translation: { ...ARABIC_TRANS, ...props?.businessLocals?.ar } },\r\n };\r\n i18n.use(initReactI18next).init({\r\n resources: resources, // Where we're gonna put translations' files\r\n lng: localStorage.getItem(\"language\") || \"en\", // Set the initial language of the App\r\n fallbackLng: \"en\",\r\n });\r\n return (\r\n <Provider store={store}>\r\n <App {...props} />\r\n </Provider>\r\n );\r\n};\r\n"],"names":["css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","useIsMobile","breakpoint","isMobile","setIsMobile","useState","window","innerWidth","useEffect","handleResize","addEventListener","removeEventListener","DRAWER_WIDTH","initialState","themeMode","localStorage","getItem","appDirection","AppLayoutSlice","createSlice","name","reducers","setThemeMode","state","action","payload","setAppDirection","AppLayoutActions","actions","AppLayoutReducer","reducer","loadingMaskSlice","value","isOpened","message","showLoadingMask","hideLoadingMask","LoadingMaskReducer","useLoadingMask","dispatch","useDispatch","show","hide","UserSessionSlice","isAuthenticated","authorities","setAuthenticated","setUnAuthenticated","UserSessionActions","UserSessionReducer","useAxios","mask","apiBaseUrl","useSelector","AppInfo","axiosInstance","axios","create","baseURL","timeout","withCredentials","defaults","interceptors","response","use","error","status","toast","autoClose","data","Blob","text","then","handleGetRequest","async","props","undefined","showMask","loadingMessage","get","endPointURI","params","parameters","headers","responseType","successCallBkFn","failureCallBkFn","handlePostRequest","post","handleDeleteRequest","delete","HandleDownloadHTTPPostPDF","handleUploadRequest","files","length","formData","FormData","file","append","useConfirmationWindow","open","setOpen","t","useTranslation","ConfirmationWindow","_jsxs","Dialog","_jsx","DialogTitle","title","DialogContent","children","DialogContentText","body","DialogActions","Button","variant","color","onClick","onConfirmationCallBk","autoFocus","useSession","UserSession","UserInfo","isUserAuthorized","authorityCode","grantedAuthority","authority","isCurrentOrganizationAuthorizedToModule","moduleCode","currentOrganization","systemApplicationModules","subscripedModule","toLowerCase","useWindow","windowState","setWindowState","Window","windowProps","jsx","Modal","sx","zIndex","theme","drawer","onClose","onCloseCallBack","Box","position","top","left","maxHeight","transform","height","width","minWidth","minHeight","overflow","bgcolor","display","flexDirection","alignItems","justifyContent","AppBar","Toolbar","FontAwesomeIcon","icon","windowIcon","marginRight","Typography","component","windowTitle","flexGrow","IconButton","Paper","padding","commonStoreSlice","stores","storeKeys","setStoresMetaData","Object","keys","setStoreData","storeKey","CommonStoreReducer","useApiActions","apiActionsProps","CommonStores","commonStores","session","reloadData","commonStoreKey","url","setData","findAll","loadRecordById","recordId","record","findById","findByIdParamName","saveRecord","savedRecord","save","deleteRecordById","result","deleteById","deleteByIdParamName","TemplateTextField","TextField","slotProps","inputLabel","shrink","label","_Fragment","not","a","b","filter","indexOf","intersection","TransferList","valueField","displayField","options","selectedOptions","setSelection","checked","setChecked","React","setLeft","right","setRight","leftFilterValue","setLeftFilterValue","rightFilterValue","setRightFilterValue","leftChecked","rightChecked","handleToggle","currentIndex","newChecked","push","splice","numberOfChecked","items","handleToggleAll","customList","unfilteredItems","side","option","toLocaleLowerCase","includes","Card","CardHeader","px","py","avatar","Checkbox","indeterminate","disabled","inputProps","subheader","fullWidth","onChange","event","target","Divider","List","dense","role","map","jsxs","ListItemButton","cursor","ListItemIcon","tabIndex","disableRipple","ListItemText","id","primary","Grid2","container","spacing","margin","flex","direction","my","size","oldState","newState","concat","CheckBox","FormControlLabel","required","control","checkedValue","e","onChangeCallBack","unCheckedValue","ComboBox","AppLayoutState","AppLayout","Autocomplete","v","getValue","newValue","clearOnBlur","handleHomeEndKeys","getOptionLabel","renderOption","props1","slots","popper","Popper","renderInput","InputLabelProps","errorMessage","helperText","DATE_FORMAT","DATE_TIME_FORMAT","LIGHT_THEME_INITIAL_MAIN_COLOR","LIGHT_THEME_INITIAL_SECANDARY_COLOR","DARK_THEME_INITIAL_MAIN_COLOR","DARK_THEME_INITIAL_SECANDARY_COLOR","Datefield","LocalizationProvider","dateAdapter","AdapterMoment","DatePicker","moment","format","momentValue","isValid","textField","Fragment","DatetimeField","DateTimePicker","SystemLookupCombobox","setOptions","lookupType","loadLookupOptions","generateDateTimeColumn","colDef","renderEditCell","api","setEditCellValue","field","valueParser","row","column","valueFormatter","generateComboColumn","valueGetter","renderCell","find","item","selectedRecord","generateCheckBoxColumn","getElementFields","element","fields","mode","elements","childElement","getAllFields","constructGridColumnsFromFields","isDefaultEditable","columns","tableField","fieldType","gridProps","muiProps","editable","fieldName","headerName","fieldLabel","headerAlign","align","hidden","searchable","optionValueField","optionDisplayField","constructValidationSchema","validationSchemaObj","z","number","required_error","invalid_type_error","optional","nullable","boolean","string","min","getGridSelection","rowSelectionModel","keyColumnName","sRecords","sRecordIds","ids","selectedId","x","selectedRecords","selectedRecordIds","formatMuiErrorMessage","code","args","URL","forEach","arg","searchParams","process","env","NODE_ENV","reactIsModule","exports","Symbol","for","c","d","f","g","h","k","l","m","n","p","q","r","w","y","u","$$typeof","A","reactIs_production_min","AsyncMode","ConcurrentMode","ContextConsumer","Element","ForwardRef","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","require$$0","hasSymbol","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_ASYNC_MODE_TYPE","REACT_CONCURRENT_MODE_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_BLOCK_TYPE","REACT_FUNDAMENTAL_TYPE","REACT_RESPONDER_TYPE","REACT_SCOPE_TYPE","object","$$typeofType","ContextProvider","Memo","hasWarnedAboutDeprecatedIsAsyncMode","reactIs_development","console","isPortal","getOwnPropertySymbols","hasOwnProperty","prototype","propIsEnumerable","propertyIsEnumerable","objectAssign","assign","test1","String","getOwnPropertyNames","test2","i","fromCharCode","join","test3","split","letter","err","shouldUseNative","source","from","symbols","to","val","TypeError","toObject","s","arguments","key","call","ReactPropTypesSecret_1","has","Function","bind","printWarning","ReactPropTypesSecret","loggedTypeFailures","require$$1","Error","checkPropTypes","typeSpecs","values","location","componentName","getStack","typeSpecName","ex","stack","resetWarningCache","checkPropTypes_1","ReactIs","require$$2","require$$3","require$$4","emptyFunctionThatReturnsNull","factoryWithTypeCheckers","isValidElement","throwOnDirectAccess","ITERATOR_SYMBOL","iterator","ANONYMOUS","ReactPropTypes","array","createPrimitiveTypeChecker","bigint","bool","func","symbol","any","createChainableTypeChecker","arrayOf","typeChecker","propName","propFullName","PropTypeError","propValue","Array","isArray","getPropType","elementType","instanceOf","expectedClass","expectedClassName","constructor","node","isNode","objectOf","propType","oneOf","expectedValues","is","valuesString","JSON","stringify","getPreciseType","oneOfType","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","expectedTypes","checkerResult","expectedType","shape","shapeTypes","invalidValidatorError","exact","allKeys","this","validate","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","isRequired","secret","cacheKey","chainedCheckType","every","iteratorFn","maybeIterable","getIteratorFn","step","entries","next","done","entry","RegExp","isSymbol","Date","PropTypes","emptyFunction","emptyFunctionWithReset","factoryWithThrowingShims","shim","getShim","propTypesModule","REACT_CONSUMER_TYPE","REACT_VIEW_TRANSITION_TYPE","REACT_CLIENT_REFERENCE","reactIs_production","SuspenseList","isSuspenseList","getModuleId","isPlainObject","getPrototypeOf","toStringTag","deepClone","output","deepmerge","clone","createBreakpoints","breakpoints","xs","sm","md","lg","xl","unit","other","sortedValues","breakpointsAsArray","sort","breakpoint1","breakpoint2","reduce","acc","obj","sortBreakpointsValues","up","down","between","start","end","endIndex","only","keyIndex","replace","borderRadius","responsivePropType","merge","defaultBreakpoints","defaultContainerQueries","containerQueries","containerName","handleBreakpoints","styleFromPropValue","themeBreakpoints","index","breakpointKeys","startsWith","some","match","containerKey","shorthand","matches","_formatErrorMessage","containerQuery","Number","isNaN","getContainerQuery","cssKey","capitalize","charAt","toUpperCase","slice","getPath","path","checkVars","vars","getStyleValue","themeMapping","propValueFinal","userValue","prop","cssProperty","themeKey","fn","propTypes","filterProps","properties","directions","aliases","marginX","marginY","paddingX","paddingY","getCssProperties","cache","memoize","property","dir","marginKeys","paddingKeys","spacingKeys","createUnaryUnit","defaultValue","themeSpacing","abs","Math","isInteger","transformed","createUnarySpacing","transformer","resolveCssProperty","cssProperties","getStyleFromPropValue","compose","styles","handlers","borderTransform","createBorderStyle","border","borderTop","borderRight","borderBottom","borderLeft","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outline","outlineColor","gap","columnGap","rowGap","paletteTransform","sizingTransform","maxWidth","breakpointsValues","defaultSxConfig","backgroundColor","pt","pr","pb","pl","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd","mt","mr","mb","ml","mx","marginTop","marginBottom","marginLeft","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd","displayPrint","textOverflow","visibility","whiteSpace","flexBasis","flexWrap","alignContent","order","flexShrink","alignSelf","justifyItems","justifySelf","gridColumn","gridRow","gridAutoFlow","gridAutoColumns","gridAutoRows","gridTemplateColumns","gridTemplateRows","gridTemplateAreas","gridArea","bottom","boxShadow","boxSizing","font","fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","textTransform","lineHeight","textAlign","typography","styleFunctionSx","getThemeValue","config","unstable_sxConfig","traverse","sxInput","sxObject","emptyBreakpoints","breakpointsInput","breakpointsInOrder","createEmptyBreakpointObject","breakpointsKeys","styleKey","maybeFn","objects","union","Set","objectsHaveSameKeys","sorted","regex","sortContainerQueries","breakpointOutput","removeUnusedBreakpoints","unstable_createStyleFunctionSx","applyStyles","colorSchemes","getColorSchemeSelector","selector","palette","useTheme","defaultTheme","contextTheme","useContext","ThemeContext","systemDefaultTheme","paletteInput","spacingInput","shapeInput","mui","argsInput","argument","createSpacing","muiTheme","components","themeInput","toContainerQuery","mediaQuery","attachCq","cssContainerQueries","unstable_sx","createTheme","extendSxProp","inSx","systemProps","otherProps","splitProps","finalSx","defaultGenerator","ClassNameGenerator","generate","configure","generator","reset","createClassNameGenerator","o","clsx","globalStateClasses","active","completed","expanded","focused","focusVisible","readOnly","selected","themeId","defaultClassName","generateClassName","BoxRoot","tag","stylesFactory","emStyled","styled","shouldForwardProp","forwardRef","inProps","useThemeWithoutDefault","className","as","createBox","globalStatePrefix","slot","globalStateClass","generateUtilityClass","generateUtilityClasses","root","isNumber","isNumeric","trim","capitalizeFirstLetter","str","isValidEmail","email","test","timeAgo","dateInput","date","now","diffInSeconds","floor","locale","rtf","Intl","RelativeTimeFormat","numeric","units","seconds","delta","FormElementField","fieldInfo","formManager","formActions","formValues","hiddenFields","formProps","fieldSize","muiTextFieldProps","disabledFields","setValue","onValueChangeCallBack","fieldHeight","formState","errors","toString","dateFormat","FormAction","setConfirmationWindowState","confirmationMessage","actionFn","formActionProps","actionButtonVariant","actionButtonColor","preActionValidation","isConfirmationRequired","FormElementGroup","AttachmentImageViewer","imgSrc","setImgSrc","imagePath","attachmentId","attachmentCode","refKey","category","handleImageSrc","showAsAvatar","Avatar","onError","onErrorImage","src","loading","alt","objectFit","AttachmentCard","allowDownload","downloadAuthorityKey","setAttachmentConfig","handleDelete","CardMedia","docType","CardContent","gutterBottom","fileName","attachmentSize","remark","CardActions","allowDelete","Tooltip","createObjectURL","link","href","setAttribute","click","remove","AttachmentPanel","setFiles","attachmentCategories","setAttachmentCategories","setRemark","selectedCategory","setSelectedCategory","allowedTypes","setAllowedTypes","attachmentConfig","getFileExtension","pop","loadAttachmentConfig","allowedFileTypes","cats","showAttachments","allowUpload","enableAttachment","uploadAuthorityKey","maxAllowedNumberOfFiles","refKeyAttachments","accept","multiple","fileExt","multiline","rows","existingAttachments","isCategoryRequired","MAX_SIZE_KB","maxSizeBytes","success","refKeyAttachment","WorkflowDocumentTimeLine","overflowY","actionHistory","actionHistoryRecord","actionTime","actionMethod","personId","documentActionEnName","documentActionArName","actionComment","employeeEnName","employeeArName","TemplateGridMultiRecordAction","rowAction","recordsToProcessActionOn","recordIdsToProcessActionOn","isActionAllowed","StyledQuickFilter","QuickFilter","StyledToolbarButton","ToolbarButton","ownerState","opacity","pointerEvents","transition","transitions","StyledTextField","overflowX","TemplateGridTopBar","isCreationAuthorized","templateProps","editAction","gridSelection","editMode","handleCreateNewRecord","rowActions","gridActionProps","multiRecord","_createElement","apiActions","gridLoadParametersValues","tBar","ColumnsPanelTrigger","render","GridViewColumnIcon","FilterPanelTrigger","Badge","badgeContent","filterCount","GridFilterListIcon","gridStateKey","clearGridState","orientation","flexItem","ExportExcel","MenuItem","QuickFilterTrigger","triggerProps","enterDelay","QuickFilterControl","controlProps","inputRef","placeholder","input","startAdornment","InputAdornment","endAdornment","QuickFilterClear","edge","TemplateGridRecordAction","iconStyle","getActionIconStyleForRecord","isActionVisibleForRecord","isActionDisabledForRecord","GridActionsCellItem","showInMenu","reloadGridAfterAction","currentNewRecordIndex","loadGridState","saved","parse","saveGridState","statePart","current","setItem","PIN_FIXED_COLUMNS","TemplateGrid","setSelectedRecord","attachmentPanelEnabledForRecord","setAttachmentPanelEnabledForRecord","getLookupOptions","generateLookupGridColumn","useLookupGridColumn","AttachmentWindow","setAttachmentWindowState","gridTitle","WorkFlowWindow","setWorkFlowWindowState","generatedColumns","setGeneratedColumns","formElements","savedState","useMemo","initialVisibilityState","columnVisibilityModel","existingFields","themeDirection","setColumnVisibilityModel","columnOrder","setColumnOrder","columnWidths","setColumnWidths","gridRowGroupingModel","setGridRowGroupingModel","columnGroupingModel","newLeft","pinnedColumns","newRight","setPinnedColumns","navigate","useNavigate","recordToDelete","setRecordToDelete","recordToEdit","setRecordToEdit","rowModesModel","setRowModesModel","adjustGridColumns","gridColumns","setRowSelectionModel","validationSchema","isEditAllowed","isDeleteAllowed","deleteAction","setConfirmationWindowOpened","isNew","postActionCallBack","oldData","formModalHeight","formModalWidth","formModalMinHeight","formModalMinWidth","formModalIcon","formModalTitle","specs","modalHeight","modalWidth","modalMinHeight","modalMinWidth","modalIcon","modalTitle","FormWindow","setFormWindowState","actionColumn","isEnabled","attachment","workFlowDocumentCode","getActions","disableDefaultAction","isInEditMode","GridRowModes","Edit","View","handleSaveRowClick","ignoreModifications","newData","handleCancelRowEditClick","isEditActionVisibleForRecord","isActionEditDisabledForRecord","formRoute","handleEditRecord","isDeleteActionVisibleForRecord","isDeleteActionDisabledForRecord","enableAttachFn","structuredColumns","autoLoad","adjustedColumns","baseCols","col","fieldToCol","Map","Boolean","formComponent","recordIdToEdit","formCloseCallBk","TemplateForm","formLoadCallBk","editAuthorityKey","formSavedSuccessfullyCallBk","preSaveValidation","hideInfoBar","hideBackButton","girdIcon","gridLoadParameters","setGridLoadParametersValues","Accordion","defaultExpanded","AccordionSummary","expandIcon","GridExpandMoreIcon","AccordionDetails","saveButtonSpecs","cancelButtonSpecs","WorkflowDocumentPanel","refDocumentId","postActionCallBk","cancelActionCallBk","DataGridPremium","toolbar","newRecord","oldRows","oldModel","removeItem","getRowId","showToolbar","checkboxSelection","onRowEditStop","reason","defaultMuiPrevented","onRowModesModelChange","newModel","rowGroupingColumnMode","processRowUpdate","log","ZodError","validateRecord","requestObject","reloadAfterSave","onRowSelectionModelChange","gridSelectionModel","onColumnVisibilityModelChange","model","onColumnOrderChange","targetIndex","prevOrder","currentOrder","fromIndex","onColumnWidthChange","updatedWidths","rowGroupingModel","onRowGroupingModelChange","handleRowGroupChange","getGridColumnsFromRecord","formElement","ExcelReportViewer","reportData","report_record_data_key","setReportData","reloadReport","ReportViewer","blobUrl","setBlobUrl","setErrorMessage","excelReportData","setExcelReportData","reportViewerState","setReportViewerState","reportInfo","setReportInfo","reportParametersValues","setReportParametersValues","reportParametersElements","setReportParametersElements","getFormElementsFromReportParameters","reportParameters","reportParameter","parameterLabel","parameterCode","parameterType","mandatory","runReport","reportInfoProp","reportType","reportCode","resultMode","jasperOutPutFileType","contentDisposition","filename","blob","download","removeChild","revokeObjectURL","byPassParameterEntry","loadReportData","reportName","setAction","authorizedActions","setAuthorizedActions","setActionComment","workflowDocumentInfo","setWorkflowDocumentInfo","referencedDocument","workflowDocumentReport","workflowDocument","workflowDocumentStatus","actionsHistory","nextActionTakers","nextActions","ReporTViewWindow","setReportViewWindowState","documentEnName","documentNumberField","documentArName","loadWorkFlowDocumentInfo","workflowDocumentCode","processWorkflowDocumentAction","workflowDocumentId","actionId","refDocumentStatus","documentStatusCode","post_action_endpoint","nextActionTakersAuthority","actionTaker","username","USERNAME","doc_id","documentStatusEnName","documentStatusArName","startIcon","require_comment","pre_action_endpoint","nextActionTaker","employee_en_name","employee_ar_name","mobile_number","WorkflowWindow","setWorkflowWindowState","initiallyHiddenFields","setHiddenFields","initialValues","setDisabledFields","formSchema","useForm","resolver","zodResolver","defaultValues","watch","pathParameters","useParams","formRouteRecordIdParamName","loadRecord","idToLoad","retrievedRecord","setFieldValue","fieldValue","hideField","oldValues","showField","disableField","enableField","enabled","handleSubmit","WorkflowRouteComponent","TemplateBarChart","BarChart","dataset","xAxis","dataKey","scaleType","valueLabel","series","labelField","TemplateDataCard","TemplateGauge","Gauge","valueMax","total","TemplateLineChart","LineChart","LinearProgressWithLabel","LinearProgress","round","TemplateLineProgress","TemplatePieChart","chartData","PieChart","WidgetViewer","isWidgetLoading","setWidgetLoading","queryId","dataQueryId","parameterValues","getWidgetData","widgetType","verticalAxisField","prefix","iconName","spin","widgetTitle","horizontalAxisField","horizontalAxisLabel","DashboardViewer","dashboardInfo","setDashboardInfo","dashboardCode","dashboardName","dashboardTitle","dashboardParameters","widgets","dashboardParameterValues","setDashboardParameterValues","loadDashboardInfo","widget","DashboardRouteView","ChangeOrgForm","newOrgId","setNewOrgId","userOrganizations","orgId","successChangeCallBackFn","SideBarSlice","toggleSideBarState","setSideBarState","SideBarReducer","useInterval","callback","delay","savedCallback","useRef","setInterval","clearInterval","beatFade","keyframes","NotificationItem","notification","notificationId","notificationAction","notificationActionPayload","isNotified","notificationQueueId","notificationTextColor","notificationIcon","notificationIconColor","notificationEnText","notificationArText","animation","createTime","showDivider","NotificationButton","anchorEl","setAnchorEl","notifications","setNotifications","info","closeOnClick","notificationsCheckIntervalSeconds","ClickAwayListener","onClickAway","currentTarget","anchorOrigin","vertical","horizontal","notificaiton","placement","TransitionProps","Fade","ChangePasswordPanel","currentPassword","setCurrentPassword","password1","setPassword1","password2","setPassword2","selectedPerson","isSelfService","newPassword","onSuccessCallBk","handleChangePasswordRequest","MuiAppBar","easing","sharp","duration","leavingScreen","variants","easeOut","enteringScreen","TopBar","ChangeOrgWindow","setChangeOrgWindowState","anchorElUser","setAnchorElUser","handleCloseUserMenu","handleOpenUserMenu","SideBarState","SideBar","ChangePasswordWindow","setChangePasswordWindow","Menu","keepMounted","transformOrigin","noWrap","appName","organizationEnName","organizationArName","i18n","language","nextLanguage","lng","changeLanguage","enableUINotifications","rotation","DrawerHeader","mixins","findNavigationItemById","nodes","found","NavigationItems","actionPayload","DotIcon","verticalAlign","StyledTreeItemRoot","TreeItem2Root","grey","treeItemClasses","groupTransition","CustomTreeItemContent","TreeItem2Content","dark","main","content","alpha","contrastText","AnimatedCollapse","animated","Collapse","TransitionComponent","useSpring","in","StyledTreeItemLabelText","CustomLabel","expandable","appLayoutState","TreeItem2Label","isExpandable","reactChildren","CustomTreeItem","itemId","getRootProps","getContentProps","getIconContainerProps","getCheckboxProps","getLabelProps","getGroupTransitionProps","getDragAndDropOverlayProps","publicAPI","useTreeItem2","rootRef","TreeItem2Provider","TreeItem2IconContainer","TreeItem2Icon","TreeItem2Checkbox","TreeItem2DragAndDropOverlay","NavigationTree","filterData","parentItems","parentItem","applicationModule","newParentItem","structuredClone","mergedNavigationItems","enableAdministrationModule","businessNavigationItems","authoriedNavigationItems","RichTreeView","onItemClick","navigationItem","Drawer","anchor","appVersion","cacheRtl","createCache","stylisPlugins","prefixer","rtlPlugin","cacheLtr","OrgMemberRoleForm","setSelectedOptions","availableOptions","setAvailableOptions","orgMemberId","organizationId","currentRoles","availableRoles","getOrgMemberRoles","closeModalFn","OrganizationMemberGrid","OrganizationMemberRolesWindow","setOrganizationMemberRolesWindowState","SystemOrganizations","SystemOrganizationRanks","SystemOrganizationUnits","OrganizationRankGrid","loadOrganizationRanks","OrganizationUnitGrid","SystemOrganizationUnitType","loadOrganizationUnits","OrganizationUnitTypeGrid","SystemApplicationAuthorityGrid","SystemApplicationModules","SystemApplicationModuleGrid","RoleAuthoritiesForm","availableAuthorities","setAvailableAuthorities","roleId","selectedAuthorities","getRoleAuthorities","SystemApplicationRoleGrid","selectedRole","setSelectedRole","RoleaAuthoritiesWindow","setRoleAuthoritiesWindowState","DataQueryParameterGrid","SystemEntityParameters","LookupGrid","ReportParameterGrid","reportId","storageTypes","validationObject","Blueprint","useSysDatasource","isMandatory","isVisible","datasourceConId","reportBluePrintId","reportExcelDataQueryId","reportJasperName","Jasper","Excel","adjustFormAccordingToReportType","validationObjects","MailRecipientGrid","mailTemplateId","recipientMail","MailBodyGrid","SystemDataQueries","MailAttachmentGrid","SystemReports","Gmail","mailHost","mailPort","mailUsername","mailPassword","mailProtocol","isMailSmtpAuthEnabled","isMailStarttlsEnabled","isSmtpSSlEnabled","azureGraphApiClientId","azureGraphApiClientSecret","azureGraphApiTenantId","azureGraphApiScope","azureGraphApiEmailId","Azure","adjustFormAccordingToEngineType","WorkflowDocumentStatusGrid","WorkflowDocumentActionMailGrid","SystemMailTemplates","documentActionId","WorkflowDocumentActionGrid","ActionMailsWindow","setActionMailWindowState","workflowStates","setWorkflowStates","loadWorkFlowDocumentStates","seriesKeys","verticalAxisLabel","ColumnChart","CircularProgress","adjustFormAccordingToWidgetType","DashboardWidgetGrid","SystemWidgets","dashboardId","SYSTEM_ROUTES","appLogo","setSelectedPerson","CurrentOrganizationRanks","CurrentOrganizationUnits","OrganizationMembersWindow","setOrganizationMemberWindowState","organizationMemberId","refSource","DataQueryParameterWindow","setDataQueryParameterWindow","SystemDataSources","SystemDataSourceType","SystemParameterTypes","ReporTrialWindow","setReportTrialWindowState","ReportParameterWindow","setReportParameterWindowState","SystemBluePrints","SystemTimeIntervals","MailRecipentsWindow","setMailRecipientsWindowState","MailBodiesWindow","setMailBodiesWindowState","MailAttachmentWindow","setMailAttachmentWindowState","callBkFn","periodical","periodType","periodValue","startSendingAt","mailEngine","WorkflowStatusWindow","setWorkflowStatusWindowState","WorkflowActionWindow","setWorkflowActionWindowState","useSystemCon","SystemWidgetTypes","WidgetsWindows","setWidgetsWindowState","mailNotificationQueueId","resendMail","loadUserNotifications","RouteWrapper","MainContent","businessRoutes","isAutoLoadLoaded","setAutoLoadLoaded","loadCommonStores","CacheProvider","Routes","route","Route","Puller","MobileDrawer","toggleDrawer","SwipeableDrawer","onOpen","swipeAreaWidth","disableSwipeToOpen","ModalProps","LoadingMask","loadingMask","Backdrop","Login","appInfo","setUsername","password","setPassword","isLoginInProcess","setIsLoginInProcess","UserSessionState","handleLogin","userSession","loginTheme","MuiCssBaseline","styleOverrides","appTheme","primaryColor","secondary","secondaryColor","checkUserSession","ThemeProvider","onKeyDown","Main","Layout","BrowserRouter","ToastContainer","rtl","draggable","CssBaseline","AppInfoSlice","documentTitle","muiPremiumKey","businessReduxReducers","businessCommonStoresMetaData","light","setAppInfo","AppInfoActions","AppInfoReducer","ADMINISTRATION_STORES","SystemReportTypes","SystemMailRecipientTypes","SystemApplicationAuthorities","SystemApplicationRoles","App","LicenseInfo","setLicenseKey","LightThemeOptions","background","default","paper","DarkThemeOptions","themeOptions","ENGLISH_TRANS","common","AdminLocalsEn","ARABIC_TRANS","adminLocalsAr","library","add","fab","far","fas","systemReducers","store","configureStore","resources","en","translation","businessLocals","ar","initReactI18next","init","fallbackLng","Provider"],"mappings":"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","x_google_ignoreList":[0,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67]}
|