@asaleh37/ui-base 1.2.24 → 1.2.26
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/dist/index.d.ts +4 -0
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/rollup.config-1748377725725.cjs +16 -16
- package/src/components/administration/admin/PersonGrid.tsx +1 -1
- package/src/components/administration/dev/MailNotificationQueueGrid.tsx +27 -1
- package/src/components/administration/dev/MailTemplateGrid.tsx +4 -8
- package/src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid.tsx +22 -5
- package/src/components/templates/attachment/AttachmentCard.tsx +32 -17
- package/src/components/templates/attachment/AttachmentImageViewer.tsx +3 -2
- package/src/components/templates/attachment/AttachmentPanel.tsx +3 -1
- package/src/components/templates/report/ReportViewer.tsx +4 -3
- package/src/components/templates/workflow/WorkflowDocumentPanel.tsx +28 -3
- package/src/components/templates/workflow/WorkflowDocumentTimeLine.tsx +7 -1
- package/src/layout/NotificationButton.tsx +1 -1
- package/src/layout/TopBar.tsx +1 -1
- package/src/locals/book/arabic/bookLocalsAr.json +8 -0
- package/src/locals/book/english/bookLocalsEn.json +8 -0
- package/src/main.tsx +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","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/locales/english/index.ts","../src/locales/index.ts","../src/locales/arabic/index.ts","../src/locales/i18n.ts","../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/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/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","../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/FormFields/SystemLookupCombobox.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementField.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormAction.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementGroup.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/DataGridColumnsUtil.tsx","../src/components/templates/DataEntryTemplates/DataEntryUtil.ts","../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/common/ChangeOrgForm.tsx","../src/redux/features/common/SideBarSlice.ts","../src/hooks/useInterval.tsx","../src/components/common/NotificationItem.tsx","../src/layout/NotificationButton.tsx","../src/layout/TopBar.tsx","../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/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/components/templates/visuals/WidgetViewer.tsx","../src/components/templates/visuals/DashboardViewer.tsx","../src/components/administration/dev/AttachmentConfigGrid.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/templates/visuals/DashboardRouteView.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/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 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 { ARABIC_TRANS } from \"./arabic\";\r\nimport { ENGLISH_TRANS } from \"./english\";\r\n\r\nconst resources = {\r\n en: { translation: ENGLISH_TRANS },\r\n ar: { translation: ARABIC_TRANS },\r\n};\r\n\r\nexport default resources;\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 i18n from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport resources from \".\";\r\ni18n.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\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 {\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 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 { UserSession, isUserAuthorized, UserInfo };\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 interface 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 interface 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: \"loadingMask\",\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 \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: \"100%\",\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 { 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 { 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","/**\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 { 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 { 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 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: 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: 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: 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: 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: 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","import { useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { Avatar } 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};\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 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 const [imgSrc, setImgSrc] = useState(imagePath);\r\n return props?.showAsAvatar ? (\r\n <Avatar src={imgSrc} />\r\n ) : (\r\n <img\r\n src={imgSrc}\r\n alt=\"image\"\r\n onError={() => setImgSrc(\"/no_image.png\")}\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 } 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 remark: string;\r\n};\r\n\r\nconst AttachmentCard: React.FC<attachment> = (props) => {\r\n const { handleGetRequest, handleDeleteRequest } = useAxios();\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 <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 <div style={{ flex: 1 }}></div>\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 </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 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 />\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\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 <Avatar sx={{ m: 1, width: 70, height: 70 }} />\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: 400,\r\n });\r\n const { Window: WorkFlowWindow, setWindowState: setWorkFlowWindowState } =\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: 400,\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 (props?.rowActions) {\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 setWorkFlowWindowState(false);\r\n props.apiActions.reloadData(props.gridLoadParametersValues);\r\n }}\r\n cancelActionCallBk={() => {\r\n setWorkFlowWindowState(false);\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 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 console.log(\"formElements\", formElements);\r\n return formElements;\r\n};\r\n\r\nconst ExcelReportViewer: React.FC<ExcelReportViewerProps> = (props) => {\r\n console.log(\"reportdata\", props.reportData);\r\n return (\r\n <TemplateGrid\r\n data={props.reportData}\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 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/dev/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/dev/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/dev/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 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 console.log(response);\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 { Avatar, Box, Button, Divider, Grid2, Paper } 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\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};\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 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 },\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 <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 <Avatar\r\n sx={{\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 console.log(\"form values\", 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 { 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: false,\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 {\r\n Avatar,\r\n Box,\r\n IconButton,\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\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 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 { 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 console.log(\"logout error\", error);\r\n }\r\n dispatch(UserSessionActions.setUnAuthenticated());\r\n };\r\n const toggleSideBar = () => {\r\n dispatch(toggleSideBarState());\r\n };\r\n return (\r\n <>\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 <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\r\n <NotificationButton />\r\n <AttachmentImageViewer\r\n showAsAvatar={true}\r\n attachmentCode=\"PERSON_IMG\"\r\n refKey={UserSession.value?.id + \"\"}\r\n />\r\n <div style={{ marginLeft: 5, marginRight: 5 }}>\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 { 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 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: \"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.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.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 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: \"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 { RootState } from \"../redux/store\";\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: RootState) => 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: RootState) => state.AppLayout);\r\n const AppInfo = useSelector((state: RootState) => state.AppInfo.value);\r\n const dispatch = useDispatch();\r\n const isMobile = useIsMobile();\r\n const { isUserAuthorized } = useSession();\r\n const filterData = (data) => {\r\n return data\r\n .filter(\r\n (item: any) =>\r\n item.authority === undefined ||\r\n item.authority == null ||\r\n isUserAuthorized(item.authority)\r\n )\r\n .map((item: any) => {\r\n if (item.children) {\r\n item.children = filterData(item.children);\r\n }\r\n return item;\r\n });\r\n };\r\n\r\n const mergedNavigationItems = [];\r\n if (AppInfo.enableAdministrationModule) {\r\n mergedNavigationItems.push(...NavigationItems);\r\n }\r\n mergedNavigationItems.push(...AppInfo.businessNavigationItems);\r\n const authoriedNavigationItems = filterData(mergedNavigationItems);\r\n\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=\"appRoleDisplay\"\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 findAll: \"api/v1/public/organizationrank/all\",\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\n\r\nconst SystemApplicationAuthorityGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/admin/systemapplicationauthority/all\",\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 const [systemApplicationModules, setSystemApplicationModules] = useState([]);\r\n\r\n const { handleGetRequest } = useAxios();\r\n const getSystemApplicationModules = async () => {\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/admin/systemapplicationmodule/application/all\",\r\n showMask: true,\r\n successCallBkFn: (response: any) => {\r\n setSystemApplicationModules(response.data);\r\n },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n getSystemApplicationModules();\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\" }}\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 findAll: \"api/v1/admin/systemapplicationrole/all\",\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\" }}\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 { 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\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 reportJasperPath: 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 reportJasperPath: { 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 reportJasperPath: { 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 reportJasperPath: { 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 formActions.hideField(\"reportJasperPath\");\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 formManager.setValue(\"reportJasperPath\", 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: \"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: \"REPORT_REPORT_JASPER_PATH\",\r\n fieldName: \"reportJasperPath\",\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: \"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 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 if (record?.reportType === \"Jasper\" && !record?.reportJasperPath) {\r\n toast.error(\"You must enter the jasper report path\");\r\n return false;\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 { 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 { 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 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: \"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 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 console.log(\"AppInfo\", AppInfo);\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\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: \"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 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, 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\n\r\nconst PersonGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [selectedPerson, setSelectedPerson] = useState<any>(null);\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 {\r\n Window: OrganizationMembersWindow,\r\n setWindowState: setOrganizationMemberWindowState,\r\n } = useWindow({\r\n windowTitle: \"Organizations Membership\",\r\n windowIcon: \"globe\",\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: \"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 fieldLabel: \"\",\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=\"PERSON_IMG\"\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 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_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 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 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 <OrganizationMembersWindow>\r\n <OrganizationMemberGrid selectedPerson={selectedPerson} />\r\n </OrganizationMembersWindow>\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: \"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\tconst { t } = useTranslation();\r\n\tconst [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n \tfindAll: \"api/v1/admin/systemapplicationroleauthority/all\",\r\n \tdeleteById: \"api/v1/admin/systemapplicationroleauthority\",\r\n \tsave: \"api/v1/admin/systemapplicationroleauthority\",\r\n\t\tfindById: \"api/v1/admin/systemapplicationroleauthority\",\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: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_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\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: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_SYSTEM_APPLICATION_AUTHORITY_ID\",\r\n \t\t\t\tfieldName: \"systemApplicationAuthorityId\",\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{\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: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_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=\"SYSTEM_APPLICATION_ROLE_AUTHORITY_PLURAL\"\r\n \t\tgirdIcon=\"table-cells\"\r\n \t\teditAction={{ isEnabled: true, authority: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_EDIT\" }}\r\n \t\tdeleteAction={{ isEnabled: true, authority: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_DELETE\" }}\r\n \t/>\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 [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: [\r\n { value: \"Year\" },\r\n { value: \"Month\" },\r\n { value: \"Day\" },\r\n { value: \"Hour\" },\r\n { value: \"Minute\" },\r\n { value: \"Second\" },\r\n ],\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 { 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 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 } 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 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 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 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\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 console.log(response.data);\r\n },\r\n });\r\n }\r\n };\r\n useInterval(loadUserNotifications, notificationsCheckIntervalSeconds * 1000);\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 children?: React.ReactNode;\r\n};\r\nconst RouteWrapper: React.FC<RouteWrapperProps> = (props) => {\r\n const { isUserAuthorized } = useSession();\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 authority={route.authority}>\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 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 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 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 SystemOrganizationUnits: {\r\n autoLoad: true,\r\n url: \"api/v1/public/organization/units/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};\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 { 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\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\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","AppLayoutSlice","createSlice","name","themeMode","localStorage","getItem","appDirection","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","resources","en","translation","common","AdminLocalsEn","ar","adminLocalsAr","i18n","initReactI18next","init","lng","fallbackLng","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","useWindow","windowState","setWindowState","Window","windowProps","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","initialState","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","ListItemButton","cursor","ListItemIcon","tabIndex","disableRipple","ListItemText","id","primary","Grid2","container","spacing","margin","flex","direction","my","size","oldState","newState","concat","TemplateBarChart","BarChart","dataset","xAxis","dataKey","scaleType","valueLabel","series","labelField","split","TemplateDataCard","fontSize","fontWeight","TemplateGauge","Gauge","valueMax","total","TemplateLineChart","LineChart","LinearProgressWithLabel","mr","LinearProgress","Math","round","TemplateLineProgress","TemplatePieChart","chartData","index","PieChart","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","DatetimeField","DateTimePicker","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","x","y","z","u","$$typeof","A","reactIs_production_min","AsyncMode","ConcurrentMode","ContextConsumer","Element","ForwardRef","Fragment","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","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","number","string","symbol","any","createChainableTypeChecker","arrayOf","typeChecker","propName","propFullName","PropTypeError","propValue","Array","isArray","getPropType","element","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","item","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","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","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","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","fontStyle","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","mode","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","hasDigitsOnly","str","test","isNumber","isNumeric","trim","capitalizeFirstLetter","isValidEmail","email","timeAgo","dateInput","date","now","diffInSeconds","floor","locale","rtf","Intl","RelativeTimeFormat","numeric","units","seconds","delta","SystemLookupCombobox","setOptions","lookupType","loadLookupOptions","FormElementField","fieldInfo","formManager","formActions","formValues","fieldName","fieldType","hiddenFields","formProps","fieldSize","muiTextFieldProps","disabledFields","hidden","fieldLabel","setValue","onValueChangeCallBack","fieldHeight","formState","errors","toString","dateFormat","selectedRecord","optionDisplayField","optionValueField","FormAction","setConfirmationWindowState","confirmationMessage","actionFn","formActionProps","actionButtonVariant","actionButtonColor","preActionValidation","isConfirmationRequired","FormElementGroup","elements","generateDateTimeColumn","colDef","renderEditCell","api","setEditCellValue","field","valueParser","row","column","valueFormatter","generateComboColumn","valueGetter","renderCell","find","generateCheckBoxColumn","getElementFields","fields","childElement","getAllFields","constructValidationSchema","validationSchemaObj","required_error","invalid_type_error","optional","nullable","boolean","min","AttachmentImageViewer","imagePath","attachmentId","attachmentCode","refKey","category","imgSrc","setImgSrc","showAsAvatar","Avatar","src","alt","onError","objectFit","AttachmentCard","setAttachmentConfig","handleDelete","CardMedia","docType","CardContent","gutterBottom","fileName","attachmentSize","remark","CardActions","Tooltip","createObjectURL","link","href","setAttribute","click","remove","AttachmentPanel","setFiles","attachmentCategories","setAttachmentCategories","setRemark","selectedCategory","setSelectedCategory","allowedTypes","setAllowedTypes","attachmentConfig","getFileExtension","pop","toLowerCase","loadAttachmentConfig","allowedFileTypes","cats","showAttachments","downloadAuthorityKey","allowUpload","enableAttachment","uploadAuthorityKey","maxAllowedNumberOfFiles","refKeyAttachments","accept","multiple","fileExt","multiline","rows","existingAttachments","isCategoryRequired","success","refKeyAttachment","WorkflowDocumentTimeLine","overflowY","actionHistory","actionHistoryRecord","actionTime","actionMethod","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","rowSelectionModel","keyColumnName","sRecords","sRecordIds","ids","selectedId","selectedRecords","selectedRecordIds","getGridSelection","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","gridProps","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","isDefaultEditable","columns","tableField","muiProps","editable","headerName","headerAlign","align","searchable","constructGridColumnsFromFields","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","currentOrganization","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","onRowModesModelChange","newModel","rowGroupingColumnMode","processRowUpdate","log","ZodError","validateRecord","requestObject","reloadAfterSave","onRowSelectionModelChange","gridSelectionModel","onColumnVisibilityModelChange","model","onColumnOrderChange","targetIndex","prevOrder","currentOrder","fromIndex","onColumnWidthChange","updatedWidths","rowGroupingModel","onRowGroupingModelChange","handleRowGroupChange","onPinnedColumnsChange","newPinedColumns","getGridColumnsFromRecord","formElement","ExcelReportViewer","reportData","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","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","MuiAppBar","easing","sharp","duration","leavingScreen","variants","easeOut","enteringScreen","TopBar","ChangeOrgWindow","setChangeOrgWindowState","SideBarState","SideBar","appLogo","noWrap","appName","organizationEnName","organizationArName","prefix","iconName","language","nextLanguage","changeLanguage","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","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","personId","selectedPerson","OrganizationRankGrid","loadOrganizationRanks","OrganizationUnitGrid","organizationUnitTypes","SystemOrganizationUnitType","loadOrganizationUnits","OrganizationUnitTypeGrid","SystemApplicationAuthorityGrid","systemApplicationModules","setSystemApplicationModules","getSystemApplicationModules","SystemApplicationModuleGrid","RoleAuthoritiesForm","availableAuthorities","setAvailableAuthorities","roleId","selectedAuthorities","getRoleAuthorities","SystemApplicationRoleGrid","selectedRole","setSelectedRole","RoleaAuthoritiesWindow","setRoleAuthoritiesWindowState","DataQueryParameterGrid","SystemEntityParameters","dataQueryId","LookupGrid","ReportParameterGrid","reportId","validationObject","Blueprint","useSysDatasource","isMandatory","isVisible","datasourceConId","reportBluePrintId","reportExcelDataQueryId","reportJasperName","reportJasperPath","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","horizontalAxisField","horizontalAxisLabel","seriesKeys","verticalAxisField","verticalAxisLabel","ColumnChart","CircularProgress","adjustFormAccordingToWidgetType","DashboardWidgetGrid","SystemWidgets","dashboardId","WidgetViewer","isWidgetLoading","setWidgetLoading","queryId","parameterValues","getWidgetData","widgetType","spin","widgetTitle","DashboardViewer","dashboardInfo","setDashboardInfo","dashboardCode","dashboardName","dashboardTitle","dashboardParameters","widgets","dashboardParameterValues","setDashboardParameterValues","loadDashboardInfo","widget","storageTypes","SYSTEM_ROUTES","setSelectedPerson","OrganizationMembersWindow","setOrganizationMemberWindowState","refSource","SystemApplicationModules","DataQueryParameterWindow","setDataQueryParameterWindow","SystemDataSources","SystemDataSourceType","SystemParameterTypes","ReporTrialWindow","setReportTrialWindowState","ReportParameterWindow","setReportParameterWindowState","SystemBluePrints","MailRecipentsWindow","setMailRecipientsWindowState","MailBodiesWindow","setMailBodiesWindowState","MailAttachmentWindow","setMailAttachmentWindowState","callBkFn","periodical","periodType","periodValue","startSendingAt","mailEngine","WorkflowStatusWindow","setWorkflowStatusWindowState","WorkflowActionWindow","setWorkflowActionWindowState","useSystemCon","SystemWidgetTypes","WidgetsWindows","setWidgetsWindowState","SystemTimeIntervals","RouteWrapper","MainContent","businessRoutes","isAutoLoadLoaded","setAutoLoadLoaded","loadCommonStores","CacheProvider","Routes","route","Route","Puller","MobileDrawer","toggleDrawer","SwipeableDrawer","onOpen","swipeAreaWidth","disableSwipeToOpen","ModalProps","keepMounted","LoadingMask","loadingMask","Backdrop","Login","appInfo","setUsername","password","setPassword","isLoginInProcess","setIsLoginInProcess","UserSessionState","handleLogin","userSession","loginTheme","MuiCssBaseline","styleOverrides","appTheme","primaryColor","secondary","secondaryColor","checkUserSession","ThemeProvider","onKeyDown","loading","Main","Layout","BrowserRouter","ToastContainer","rtl","draggable","CssBaseline","AppInfoSlice","documentTitle","muiPremiumKey","businessReduxReducers","businessCommonStoresMetaData","light","setAppInfo","AppInfoActions","AppInfoReducer","ADMINISTRATION_STORES","SystemReportTypes","SystemMailRecipientTypes","App","LicenseInfo","setLicenseKey","LightThemeOptions","background","default","paper","DarkThemeOptions","themeOptions","library","add","fab","far","fas","BaseApp","systemReducers","store","configureStore","Provider"],"mappings":"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","x_google_ignoreList":[0,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,68,69,70,71,72,73,74]}
|
|
1
|
+
{"version":3,"file":"index.mjs","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/locales/english/index.ts","../src/locales/index.ts","../src/locales/arabic/index.ts","../src/locales/i18n.ts","../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/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/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","../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/FormFields/SystemLookupCombobox.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementField.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormAction.tsx","../src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementGroup.tsx","../src/components/templates/DataEntryTemplates/TemplateDataGrid/DataGridColumnsUtil.tsx","../src/components/templates/DataEntryTemplates/DataEntryUtil.ts","../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/common/ChangeOrgForm.tsx","../src/redux/features/common/SideBarSlice.ts","../src/hooks/useInterval.tsx","../src/components/common/NotificationItem.tsx","../src/layout/NotificationButton.tsx","../src/layout/TopBar.tsx","../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/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/components/templates/visuals/WidgetViewer.tsx","../src/components/templates/visuals/DashboardViewer.tsx","../src/components/administration/dev/AttachmentConfigGrid.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/templates/visuals/DashboardRouteView.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/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 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 { ARABIC_TRANS } from \"./arabic\";\r\nimport { ENGLISH_TRANS } from \"./english\";\r\n\r\nconst resources = {\r\n en: { translation: ENGLISH_TRANS },\r\n ar: { translation: ARABIC_TRANS },\r\n};\r\n\r\nexport default resources;\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 i18n from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport resources from \".\";\r\ni18n.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\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 {\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 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 { UserSession, isUserAuthorized, UserInfo };\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 interface 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 interface 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: \"loadingMask\",\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 \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: \"100%\",\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 { 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 { 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","/**\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 { 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 { 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 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: 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: 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: 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: 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: 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","import { 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 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 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 const [imgSrc, setImgSrc] = useState(imagePath);\r\n return props?.showAsAvatar ? (\r\n <Avatar src={imgSrc} sx={props.style} />\r\n ) : (\r\n <img\r\n src={imgSrc}\r\n alt=\"image\"\r\n onError={() => setImgSrc(\"/no_image.png\")}\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 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 console.log(\"formElements\", formElements);\r\n return formElements;\r\n};\r\n\r\nconst ExcelReportViewer: React.FC<ExcelReportViewerProps> = (props) => {\r\n console.log(\"reportdata\", props.reportData);\r\n return (\r\n <TemplateGrid\r\n data={props.reportData}\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 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 console.log(response);\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 console.log(\"form values\", 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 { 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 {\r\n Avatar,\r\n Box,\r\n IconButton,\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\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 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 { 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 console.log(\"logout error\", error);\r\n }\r\n dispatch(UserSessionActions.setUnAuthenticated());\r\n };\r\n const toggleSideBar = () => {\r\n dispatch(toggleSideBarState());\r\n };\r\n return (\r\n <>\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 <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\r\n <NotificationButton />\r\n <AttachmentImageViewer\r\n showAsAvatar={true}\r\n attachmentCode=\"EMPLOYEE_PHOTOS\"\r\n refKey={UserSession.value?.id + \"\"}\r\n />\r\n <div style={{ marginLeft: 5, marginRight: 5 }}>\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 { 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 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: \"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.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.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 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: \"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 { RootState } from \"../redux/store\";\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: RootState) => 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: RootState) => state.AppLayout);\r\n const AppInfo = useSelector((state: RootState) => state.AppInfo.value);\r\n const dispatch = useDispatch();\r\n const isMobile = useIsMobile();\r\n const { isUserAuthorized } = useSession();\r\n const filterData = (data) => {\r\n return data\r\n .filter(\r\n (item: any) =>\r\n item.authority === undefined ||\r\n item.authority == null ||\r\n isUserAuthorized(item.authority)\r\n )\r\n .map((item: any) => {\r\n if (item.children) {\r\n item.children = filterData(item.children);\r\n }\r\n return item;\r\n });\r\n };\r\n\r\n const mergedNavigationItems = [];\r\n if (AppInfo.enableAdministrationModule) {\r\n mergedNavigationItems.push(...NavigationItems);\r\n }\r\n mergedNavigationItems.push(...AppInfo.businessNavigationItems);\r\n const authoriedNavigationItems = filterData(mergedNavigationItems);\r\n\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=\"appRoleDisplay\"\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 findAll: \"api/v1/public/organizationrank/all\",\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\n\r\nconst SystemApplicationAuthorityGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n findAll: \"api/v1/admin/systemapplicationauthority/all\",\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 const [systemApplicationModules, setSystemApplicationModules] = useState([]);\r\n\r\n const { handleGetRequest } = useAxios();\r\n const getSystemApplicationModules = async () => {\r\n await handleGetRequest({\r\n endPointURI: \"api/v1/admin/systemapplicationmodule/application/all\",\r\n showMask: true,\r\n successCallBkFn: (response: any) => {\r\n setSystemApplicationModules(response.data);\r\n },\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n getSystemApplicationModules();\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\" }}\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 findAll: \"api/v1/admin/systemapplicationrole/all\",\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\" }}\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 { 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\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 reportJasperPath: 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 reportJasperPath: { 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 reportJasperPath: { 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 reportJasperPath: { 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 formActions.hideField(\"reportJasperPath\");\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 formManager.setValue(\"reportJasperPath\", 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: \"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: \"REPORT_REPORT_JASPER_PATH\",\r\n fieldName: \"reportJasperPath\",\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: \"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 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 if (record?.reportType === \"Jasper\" && !record?.reportJasperPath) {\r\n toast.error(\"You must enter the jasper report path\");\r\n return false;\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 { 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 { 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 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: \"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 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 console.log(\"AppInfo\", AppInfo);\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\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: \"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 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, 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\n\r\nconst PersonGrid: React.FC = () => {\r\n const { t } = useTranslation();\r\n const [selectedPerson, setSelectedPerson] = useState<any>(null);\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 {\r\n Window: OrganizationMembersWindow,\r\n setWindowState: setOrganizationMemberWindowState,\r\n } = useWindow({\r\n windowTitle: \"Organizations Membership\",\r\n windowIcon: \"globe\",\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: \"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 fieldLabel: \"\",\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 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_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 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 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 <OrganizationMembersWindow>\r\n <OrganizationMemberGrid selectedPerson={selectedPerson} />\r\n </OrganizationMembersWindow>\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: \"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\tconst { t } = useTranslation();\r\n\tconst [data, setData] = useState([]);\r\n const apiActions = useApiActions({\r\n \tfindAll: \"api/v1/admin/systemapplicationroleauthority/all\",\r\n \tdeleteById: \"api/v1/admin/systemapplicationroleauthority\",\r\n \tsave: \"api/v1/admin/systemapplicationroleauthority\",\r\n\t\tfindById: \"api/v1/admin/systemapplicationroleauthority\",\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: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_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\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: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_SYSTEM_APPLICATION_AUTHORITY_ID\",\r\n \t\t\t\tfieldName: \"systemApplicationAuthorityId\",\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{\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: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_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=\"SYSTEM_APPLICATION_ROLE_AUTHORITY_PLURAL\"\r\n \t\tgirdIcon=\"table-cells\"\r\n \t\teditAction={{ isEnabled: true, authority: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_EDIT\" }}\r\n \t\tdeleteAction={{ isEnabled: true, authority: \"SYSTEM_APPLICATION_ROLE_AUTHORITY_DELETE\" }}\r\n \t/>\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 { 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 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\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 console.log(response.data);\r\n },\r\n });\r\n }\r\n };\r\n useInterval(loadUserNotifications, notificationsCheckIntervalSeconds * 1000);\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 children?: React.ReactNode;\r\n};\r\nconst RouteWrapper: React.FC<RouteWrapperProps> = (props) => {\r\n const { isUserAuthorized } = useSession();\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 authority={route.authority}>\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 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 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 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 SystemOrganizationUnits: {\r\n autoLoad: true,\r\n url: \"api/v1/public/organization/units/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};\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 { 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\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\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","AppLayoutSlice","createSlice","name","themeMode","localStorage","getItem","appDirection","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","resources","en","translation","common","AdminLocalsEn","ar","adminLocalsAr","i18n","initReactI18next","init","lng","fallbackLng","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","useWindow","windowState","setWindowState","Window","windowProps","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","initialState","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","ListItemButton","cursor","ListItemIcon","tabIndex","disableRipple","ListItemText","id","primary","Grid2","container","spacing","margin","flex","direction","my","size","oldState","newState","concat","TemplateBarChart","BarChart","dataset","xAxis","dataKey","scaleType","valueLabel","series","labelField","split","TemplateDataCard","fontSize","fontWeight","TemplateGauge","Gauge","valueMax","total","TemplateLineChart","LineChart","LinearProgressWithLabel","mr","LinearProgress","Math","round","TemplateLineProgress","TemplatePieChart","chartData","index","PieChart","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","DatetimeField","DateTimePicker","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","x","y","z","u","$$typeof","A","reactIs_production_min","AsyncMode","ConcurrentMode","ContextConsumer","Element","ForwardRef","Fragment","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","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","number","string","symbol","any","createChainableTypeChecker","arrayOf","typeChecker","propName","propFullName","PropTypeError","propValue","Array","isArray","getPropType","element","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","item","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","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","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","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","fontStyle","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","mode","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","hasDigitsOnly","str","test","isNumber","isNumeric","trim","capitalizeFirstLetter","isValidEmail","email","timeAgo","dateInput","date","now","diffInSeconds","floor","locale","rtf","Intl","RelativeTimeFormat","numeric","units","seconds","delta","SystemLookupCombobox","setOptions","lookupType","loadLookupOptions","FormElementField","fieldInfo","formManager","formActions","formValues","fieldName","fieldType","hiddenFields","formProps","fieldSize","muiTextFieldProps","disabledFields","hidden","fieldLabel","setValue","onValueChangeCallBack","fieldHeight","formState","errors","toString","dateFormat","selectedRecord","optionDisplayField","optionValueField","FormAction","setConfirmationWindowState","confirmationMessage","actionFn","formActionProps","actionButtonVariant","actionButtonColor","preActionValidation","isConfirmationRequired","FormElementGroup","elements","generateDateTimeColumn","colDef","renderEditCell","api","setEditCellValue","field","valueParser","row","column","valueFormatter","generateComboColumn","valueGetter","renderCell","find","generateCheckBoxColumn","getElementFields","fields","childElement","getAllFields","constructValidationSchema","validationSchemaObj","required_error","invalid_type_error","optional","nullable","boolean","min","AttachmentImageViewer","imagePath","attachmentId","attachmentCode","refKey","category","imgSrc","setImgSrc","showAsAvatar","Avatar","src","alt","onError","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","toLowerCase","loadAttachmentConfig","allowedFileTypes","cats","showAttachments","allowUpload","enableAttachment","uploadAuthorityKey","maxAllowedNumberOfFiles","refKeyAttachments","accept","multiple","fileExt","multiline","rows","existingAttachments","isCategoryRequired","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","rowSelectionModel","keyColumnName","sRecords","sRecordIds","ids","selectedId","selectedRecords","selectedRecordIds","getGridSelection","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","gridProps","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","isDefaultEditable","columns","tableField","muiProps","editable","headerName","headerAlign","align","searchable","constructGridColumnsFromFields","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","currentOrganization","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","onPinnedColumnsChange","newPinedColumns","getGridColumnsFromRecord","formElement","ExcelReportViewer","reportData","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","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","MuiAppBar","easing","sharp","duration","leavingScreen","variants","easeOut","enteringScreen","TopBar","ChangeOrgWindow","setChangeOrgWindowState","SideBarState","SideBar","appLogo","noWrap","appName","organizationEnName","organizationArName","prefix","iconName","language","nextLanguage","changeLanguage","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","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","selectedPerson","OrganizationRankGrid","loadOrganizationRanks","OrganizationUnitGrid","organizationUnitTypes","SystemOrganizationUnitType","loadOrganizationUnits","OrganizationUnitTypeGrid","SystemApplicationAuthorityGrid","systemApplicationModules","setSystemApplicationModules","getSystemApplicationModules","SystemApplicationModuleGrid","RoleAuthoritiesForm","availableAuthorities","setAvailableAuthorities","roleId","selectedAuthorities","getRoleAuthorities","SystemApplicationRoleGrid","selectedRole","setSelectedRole","RoleaAuthoritiesWindow","setRoleAuthoritiesWindowState","DataQueryParameterGrid","SystemEntityParameters","dataQueryId","LookupGrid","ReportParameterGrid","reportId","validationObject","Blueprint","useSysDatasource","isMandatory","isVisible","datasourceConId","reportBluePrintId","reportExcelDataQueryId","reportJasperName","reportJasperPath","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","horizontalAxisField","horizontalAxisLabel","seriesKeys","verticalAxisField","verticalAxisLabel","ColumnChart","CircularProgress","adjustFormAccordingToWidgetType","DashboardWidgetGrid","SystemWidgets","dashboardId","WidgetViewer","isWidgetLoading","setWidgetLoading","queryId","parameterValues","getWidgetData","widgetType","spin","widgetTitle","DashboardViewer","dashboardInfo","setDashboardInfo","dashboardCode","dashboardName","dashboardTitle","dashboardParameters","widgets","dashboardParameterValues","setDashboardParameterValues","loadDashboardInfo","widget","storageTypes","SYSTEM_ROUTES","setSelectedPerson","OrganizationMembersWindow","setOrganizationMemberWindowState","refSource","SystemApplicationModules","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","RouteWrapper","MainContent","businessRoutes","isAutoLoadLoaded","setAutoLoadLoaded","loadCommonStores","CacheProvider","Routes","route","Route","Puller","MobileDrawer","toggleDrawer","SwipeableDrawer","onOpen","swipeAreaWidth","disableSwipeToOpen","ModalProps","keepMounted","LoadingMask","loadingMask","Backdrop","Login","appInfo","setUsername","password","setPassword","isLoginInProcess","setIsLoginInProcess","UserSessionState","handleLogin","userSession","loginTheme","MuiCssBaseline","styleOverrides","appTheme","primaryColor","secondary","secondaryColor","checkUserSession","ThemeProvider","onKeyDown","loading","Main","Layout","BrowserRouter","ToastContainer","rtl","draggable","CssBaseline","AppInfoSlice","documentTitle","muiPremiumKey","businessReduxReducers","businessCommonStoresMetaData","light","setAppInfo","AppInfoActions","AppInfoReducer","ADMINISTRATION_STORES","SystemReportTypes","SystemMailRecipientTypes","App","LicenseInfo","setLicenseKey","LightThemeOptions","background","default","paper","DarkThemeOptions","themeOptions","library","add","fab","far","fas","BaseApp","systemReducers","store","configureStore","Provider"],"mappings":"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","x_google_ignoreList":[0,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,68,69,70,71,72,73,74]}
|