@asaleh37/ui-base 25.8.10 → 25.8.23-1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asaleh37/ui-base",
3
- "version": "25.8.10",
3
+ "version": "25.8.23-1",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "author": "Ahmed Saleh Mohamed",
@@ -113,7 +113,7 @@
113
113
  "stylis-plugin-rtl": "^2.1.1",
114
114
  "zod": "^3.24.2"
115
115
  },
116
- "dependencies": {
116
+ "dependencies": {
117
117
  "@rollup/plugin-json": "^6.1.0",
118
118
  "rollup-plugin-terser": "^7.0.2"
119
119
  }
@@ -89,17 +89,6 @@ const App: React.FC<AppInfo> = (props: AppInfo) => {
89
89
  },
90
90
  };
91
91
 
92
- let commonStores = {};
93
- if (props.enableAdministrationModule) {
94
- commonStores = { ...ADMINISTRATION_STORES };
95
- }
96
- if (props.businessCommonStoresMetaData) {
97
- commonStores = {
98
- ...commonStores,
99
- ...props.businessCommonStoresMetaData,
100
- };
101
- }
102
- dispatch(setStoresMetaData(commonStores));
103
92
  const AppLayoutState = useSelector((state: any) => state.AppLayout);
104
93
  let themeOptions = { ...LightThemeOptions };
105
94
  if (AppLayoutState.themeMode === "dark") {
@@ -112,7 +101,18 @@ const App: React.FC<AppInfo> = (props: AppInfo) => {
112
101
  useEffect(() => {
113
102
  document.title = props.documentTitle;
114
103
  dispatch(AppInfoActions.setAppInfo(props));
115
- }, []);
104
+ let commonStores = {};
105
+ if (props.enableAdministrationModule) {
106
+ commonStores = { ...ADMINISTRATION_STORES };
107
+ }
108
+ if (props.businessCommonStoresMetaData) {
109
+ commonStores = {
110
+ ...commonStores,
111
+ ...props.businessCommonStoresMetaData,
112
+ };
113
+ }
114
+ dispatch(setStoresMetaData(commonStores));
115
+ }, [props]);
116
116
  return (
117
117
  <ThemeProvider theme={theme}>
118
118
  <Layout />
@@ -18,36 +18,58 @@ import i18n from "../locales/i18n";
18
18
  import { initReactI18next } from "react-i18next";
19
19
  import { ENGLISH_TRANS } from "../locales/english";
20
20
  import { ARABIC_TRANS } from "../locales/arabic";
21
+ import { useEffect, useState } from "react";
21
22
 
22
23
  library.add(fab);
23
24
  library.add(far);
24
25
  library.add(fas);
25
26
 
26
27
  export const BaseApp: React.FC<AppInfo> = (props) => {
27
- const systemReducers = {
28
+ // let store = null;
29
+ const [systemReducers, setSystemReducers] = useState<any>({
28
30
  AppLayout: AppLayoutReducer,
29
31
  UserSession: UserSessionReducer,
30
32
  loadingMask: LoadingMaskReducer,
31
33
  commonStores: CommonStoreReducer,
32
34
  SideBar: SideBarReducer,
33
35
  AppInfo: AppInfoReducer,
34
- ...props?.businessReduxReducers,
35
- };
36
+ });
36
37
  const store = configureStore({
37
38
  reducer: systemReducers,
38
39
  });
39
- const resources = {
40
- en: { translation: { ...ENGLISH_TRANS, ...props?.businessLocals?.en } },
41
- ar: { translation: { ...ARABIC_TRANS, ...props?.businessLocals?.ar } },
40
+ const [isAppInitialized, setIsAppInitialized] = useState<boolean>(false);
41
+ const initializeApp = () => {
42
+ const reducers = {
43
+ AppLayout: AppLayoutReducer,
44
+ UserSession: UserSessionReducer,
45
+ loadingMask: LoadingMaskReducer,
46
+ commonStores: CommonStoreReducer,
47
+ SideBar: SideBarReducer,
48
+ AppInfo: AppInfoReducer,
49
+ ...props?.businessReduxReducers,
50
+ };
51
+ setSystemReducers((state) => {
52
+ return { ...reducers };
53
+ });
54
+ const resources = {
55
+ en: { translation: { ...ENGLISH_TRANS, ...props?.businessLocals?.en } },
56
+ ar: { translation: { ...ARABIC_TRANS, ...props?.businessLocals?.ar } },
57
+ };
58
+ i18n.use(initReactI18next).init({
59
+ resources: resources, // Where we're gonna put translations' files
60
+ lng: localStorage.getItem("language") || "en", // Set the initial language of the App
61
+ fallbackLng: "en",
62
+ });
63
+ setIsAppInitialized(true);
42
64
  };
43
- i18n.use(initReactI18next).init({
44
- resources: resources, // Where we're gonna put translations' files
45
- lng: localStorage.getItem("language") || "en", // Set the initial language of the App
46
- fallbackLng: "en",
47
- });
48
- return (
65
+ useEffect(() => {
66
+ initializeApp();
67
+ }, [props]);
68
+ return isAppInitialized ? (
49
69
  <Provider store={store}>
50
70
  <App {...props} />
51
71
  </Provider>
72
+ ) : (
73
+ <></>
52
74
  );
53
75
  };
@@ -124,8 +124,11 @@ const Login: React.FC = () => {
124
124
  }
125
125
  };
126
126
  useEffect(() => {
127
+ console.log("checking usersession on reload", userSession);
128
+ console.log("checking usersession app info", appInfo);
127
129
  checkUserSession();
128
- }, [appInfo]);
130
+ }, [appInfo, userSession.isAuthenticated]);
131
+
129
132
  return (
130
133
  <ThemeProvider theme={loginTheme}>
131
134
  <Paper
@@ -0,0 +1,79 @@
1
+ import { Box, Typography } from "@mui/material";
2
+ import {
3
+ AppInfo,
4
+ LicenseCheckObject,
5
+ } from "../../redux/features/common/AppInfoSlice";
6
+ import { useSelector } from "react-redux";
7
+ import { useEffect, useState } from "react";
8
+ import { useAxios } from "../../hooks";
9
+
10
+ const NoLicenseComponent: React.FC = () => {
11
+ const [licenseCheckObj, setLicenseCheckObject] = useState<LicenseCheckObject>(
12
+ { isLicensed: true, lastLicenseCheckMessage: "", lastLicenseCheckTime: "" }
13
+ );
14
+ const { handleGetRequest } = useAxios();
15
+ const appInfo: AppInfo = useSelector((state: any) => state.AppInfo.value);
16
+ const checkSystemLicense = async () => {
17
+ if (appInfo?.checkLicense?.endpoint) {
18
+ await handleGetRequest({
19
+ endPointURI: appInfo.checkLicense?.endpoint,
20
+ successCallBkFn: (response) => {
21
+ setLicenseCheckObject(response.data);
22
+ },
23
+ });
24
+ }
25
+ };
26
+
27
+ useEffect(() => {
28
+ if (appInfo?.checkLicense?.endpoint) {
29
+ const interval = appInfo?.checkLicense?.interval || 60000;
30
+ const intervalId = setInterval(() => {
31
+ checkSystemLicense();
32
+ }, interval);
33
+ return () => {
34
+ clearInterval(intervalId);
35
+ console.log("Interval cleared");
36
+ };
37
+ }
38
+ }, [appInfo]);
39
+ return !licenseCheckObj.isLicensed ? (
40
+ <Box
41
+ sx={{
42
+ flex: 1,
43
+ width: "100%",
44
+ height: "100%",
45
+ display: "flex",
46
+ flexDirection: "column",
47
+ alignItems: "center",
48
+ justifyContent: "center",
49
+ position: "fixed",
50
+ top: 0,
51
+ background: "rgba(235, 235, 235, 0.8)",
52
+ left: 0,
53
+ zIndex: 9999,
54
+ }}
55
+ >
56
+ <img src={appInfo.appLogo} style={{ height: 200, width: 200 }} />
57
+ <Typography variant="h5">
58
+ {appInfo.appName} - {appInfo.appVersion}
59
+ </Typography>
60
+ <Typography variant="h6" color="error">
61
+ Your license is missing or has expired.
62
+ </Typography>
63
+ <Typography variant="h6" color="error">
64
+ Please reach out to your vendor for assistance.
65
+ </Typography>
66
+ <Typography>
67
+ License Check @{licenseCheckObj?.lastLicenseCheckTime || "--------"}
68
+ </Typography>
69
+ <Typography>
70
+ License Check Result :{" "}
71
+ {licenseCheckObj?.lastLicenseCheckMessage || "--------"}
72
+ </Typography>
73
+ </Box>
74
+ ) : (
75
+ <></>
76
+ );
77
+ };
78
+
79
+ export default NoLicenseComponent;
@@ -189,6 +189,7 @@ export type RecordFieldProps = {
189
189
  | "lookup"
190
190
  | "custom";
191
191
  lookupType?: string;
192
+ comboboxValueDataType?: "number" | "string";
192
193
  required?: boolean;
193
194
  disabled?: boolean;
194
195
  hidden?: boolean;
@@ -197,6 +197,36 @@ export const constructValidationSchema = (fields: Array<RecordFieldProps>) => {
197
197
  } else {
198
198
  validationSchemaObj[fieldName] = z.boolean().optional().nullable();
199
199
  }
200
+ } else if (field.fieldType === "combobox") {
201
+ if (field?.comboboxValueDataType) {
202
+ if (field?.comboboxValueDataType === "number") {
203
+ if (field?.required === true) {
204
+ validationSchemaObj[fieldName] = z.number({
205
+ required_error: "This field is required",
206
+ invalid_type_error: "This field must be a number",
207
+ });
208
+ } else {
209
+ validationSchemaObj[fieldName] = z.number().optional().nullable();
210
+ }
211
+ } else if (field?.comboboxValueDataType === "string") {
212
+ if (field?.required === true) {
213
+ validationSchemaObj[fieldName] = z
214
+ .string({ message: "This field is required" })
215
+ .min(1, "This field is required");
216
+ } else {
217
+ validationSchemaObj[fieldName] = z.string().optional().nullable();
218
+ }
219
+ }
220
+ } else {
221
+ if (field?.required === true) {
222
+ validationSchemaObj[fieldName] = z.number({
223
+ required_error: "This field is required",
224
+ invalid_type_error: "This field must be a number",
225
+ });
226
+ } else {
227
+ validationSchemaObj[fieldName] = z.number().optional().nullable();
228
+ }
229
+ }
200
230
  } else {
201
231
  if (field?.required === true) {
202
232
  validationSchemaObj[fieldName] = z
@@ -57,6 +57,19 @@ const useAxios = () => {
57
57
  toast.error("your session is now expired, you need to login again", {
58
58
  autoClose: false,
59
59
  });
60
+ } else if (
61
+ error
62
+ ? error.response
63
+ ? error.response.status
64
+ ? error.response.status === 402
65
+ : false
66
+ : false
67
+ : false
68
+ ) {
69
+ dispatch(UserSessionActions.setUnAuthenticated());
70
+ toast.error(
71
+ "Your license is missing or has expired,Please reach out to your vendor for assistance."
72
+ );
60
73
  } else if (
61
74
  error
62
75
  ? error.response
@@ -8,16 +8,12 @@ import MainContent from "./MainContent";
8
8
  import { BrowserRouter } from "react-router-dom";
9
9
  import MobileDrawer from "./MobileDrawer";
10
10
  import { ToastContainer } from "react-toastify";
11
- import { useEffect, useState } from "react";
12
- import useLoadingMask from "../hooks/useLoadingMask";
13
11
  import { useIsMobile } from "../hooks/UseMobile";
14
- import useSession from "../hooks/UseSession";
15
- import useAxios from "../hooks/useAxios";
16
12
  import { DRAWER_WIDTH } from "../redux/features/common/AppLayoutSlice";
17
13
  import { UserSessionProps } from "../redux/features/common/UserSessionSlice";
18
14
  import LoadingMask from "../components/common/LoadingMask";
19
15
  import Login from "../components/common/Login";
20
- import { setStoreData } from "../redux/features/common/CommonStoreSlice";
16
+ import NoLicenseComponent from "../components/common/NoLicenseComponent";
21
17
 
22
18
  const Main = styled("main", {
23
19
  shouldForwardProp: (prop) => prop !== "open",
@@ -59,12 +55,12 @@ const Main = styled("main", {
59
55
 
60
56
  export default function Layout() {
61
57
  const SideBarState = useSelector((state: any) => state.SideBar);
58
+
62
59
  const isMobile = useIsMobile();
63
60
  const UserSession: UserSessionProps = useSelector(
64
61
  (state: any) => state.UserSession
65
62
  );
66
63
  const AppLayout = useSelector((state: any) => state.AppLayout);
67
-
68
64
  return (
69
65
  <BrowserRouter>
70
66
  <ToastContainer
@@ -74,6 +70,7 @@ export default function Layout() {
74
70
  />
75
71
  <LoadingMask />
76
72
  {UserSession.value.isAuthenticated === true ? (
73
+ // licenseCheckObj?.isLicensed ? (
77
74
  <Main open={SideBarState.isOpened}>
78
75
  <CssBaseline />
79
76
  <TopBar />
@@ -81,6 +78,7 @@ export default function Layout() {
81
78
  {isMobile ? <MobileDrawer /> : null}
82
79
  <DrawerHeader />
83
80
  <MainContent />
81
+ <NoLicenseComponent />
84
82
  </Main>
85
83
  ) : (
86
84
  <Login />
@@ -14,8 +14,8 @@
14
14
  "ORGANIZATION_MEMBER_ORGANIZATION_RANK_ID": "Organization rank id",
15
15
  "ORGANIZATION_MEMBER_ORGANIZATION_UNIT_ID": "Organization unit id",
16
16
  "ORGANIZATION_MEMBER_PERSON_ID": "Person id",
17
- "ORGANIZATION_MEMBER_ROLE_SINGULAR": "organizationmemberrole",
18
- "ORGANIZATION_MEMBER_ROLE_PLURAL": "organizationmemberroles",
17
+ "ORGANIZATION_MEMBER_ROLE_SINGULAR": "Member Role",
18
+ "ORGANIZATION_MEMBER_ROLE_PLURAL": "Member Roles",
19
19
  "ORGANIZATION_MEMBER_ROLE_IS_ACTIVE": "Is active",
20
20
  "ORGANIZATION_MEMBER_ROLE_END_DATE": "End date",
21
21
  "ORGANIZATION_MEMBER_ROLE_ORGANIZATION_MEMBER_ID": "Organization member id",
@@ -81,13 +81,13 @@
81
81
  "SYSTEM_APPLICATION_ROLE_SYSTEM_APPLICATION_ID": "System application id",
82
82
  "SYSTEM_APPLICATION_ROLE_ROLE_DESCRIPTION": "Role description",
83
83
  "SYSTEM_APPLICATION_ROLE_ROLE_NAME": "Role name",
84
- "SYSTEM_APPLICATION_ROLE_AUTHORITY_SINGULAR": "systemapplicationroleauthority",
85
- "SYSTEM_APPLICATION_ROLE_AUTHORITY_PLURAL": "systemapplicationroleauthorities",
84
+ "SYSTEM_APPLICATION_ROLE_AUTHORITY_SINGULAR": "Application Authority",
85
+ "SYSTEM_APPLICATION_ROLE_AUTHORITY_PLURAL": "Application Authorities",
86
86
  "SYSTEM_APPLICATION_ROLE_AUTHORITY_IS_ACTIVE": "Is active",
87
87
  "SYSTEM_APPLICATION_ROLE_AUTHORITY_SYSTEM_APPLICATION_AUTHORITY_ID": "System application authority id",
88
88
  "SYSTEM_APPLICATION_ROLE_AUTHORITY_SYSTEM_APPLICATION_ROLE_ID": "System application role id",
89
- "ORGANIZATION_APPLICATION_MODULE_SINGULAR": "organizationapplicationmodule",
90
- "ORGANIZATION_APPLICATION_MODULE_PLURAL": "organizationapplicationmodules",
89
+ "ORGANIZATION_APPLICATION_MODULE_SINGULAR": "Application Module",
90
+ "ORGANIZATION_APPLICATION_MODULE_PLURAL": "Application Modules",
91
91
  "ORGANIZATION_APPLICATION_MODULE_EXPIRATION_DATE": "Expiration date",
92
92
  "ORGANIZATION_APPLICATION_MODULE_IS_ACTIVE": "Is active",
93
93
  "ORGANIZATION_APPLICATION_MODULE_ORGANIZATION_ID": "Organization id",
@@ -38,8 +38,8 @@
38
38
  "DASHBOARD_ENABLED": "Enabled",
39
39
  "DASHBOARD_LOAD_WIDGETS_INDIVIDUALLY": "Load widgets individually",
40
40
  "DASHBOARD_NUMBER_OF_COLUMNS": "Number of columns",
41
- "DASHBOARD_WIDGET_SINGULAR": "dashboardwidget",
42
- "DASHBOARD_WIDGET_PLURAL": "dashboardwidgets",
41
+ "DASHBOARD_WIDGET_SINGULAR": "Dashboard Widget",
42
+ "DASHBOARD_WIDGET_PLURAL": "Dashboard Widgets",
43
43
  "DASHBOARD_WIDGET_DASHBOARD_ID": "Dashboard id",
44
44
  "DASHBOARD_WIDGET_ENABLED": "Enabled",
45
45
  "DASHBOARD_WIDGET_WIDGET_ID": "Widget id",
@@ -50,8 +50,8 @@
50
50
  "DATA_QUERY_QUERY_NAME": "Query name",
51
51
  "DATA_QUERY_QUERY_STR": "Query str",
52
52
  "DATA_QUERY_USE_SYS_CON": "Use sys con",
53
- "DATA_QUERY_PARAMETER_SINGULAR": "dataqueryparameter",
54
- "DATA_QUERY_PARAMETER_PLURAL": "dataqueryparameters",
53
+ "DATA_QUERY_PARAMETER_SINGULAR": "Query Parameter",
54
+ "DATA_QUERY_PARAMETER_PLURAL": "Query Parameters",
55
55
  "DATA_QUERY_PARAMETER_DATA_QUERY_ID": "Data query id",
56
56
  "DATA_QUERY_PARAMETER_DEFAULT_VALUE": "Default value",
57
57
  "DATA_QUERY_PARAMETER_ENABLED": "Enabled",
@@ -77,33 +77,33 @@
77
77
  "ENTITY_PARAMETER_PARAMETER_TYPE": "Parameter type",
78
78
  "ENTITY_PARAMETER_PARAMETER_VALUE_FIELD": "Parameter value field",
79
79
  "ENTITY_PARAMETER_PARAMETER_VALUE_FORMAT": "Parameter value format",
80
- "EXCEL_UPLOADER_DETAIL_SINGULAR": "exceluploaderdetail",
81
- "EXCEL_UPLOADER_DETAIL_PLURAL": "exceluploaderdetails",
80
+ "EXCEL_UPLOADER_DETAIL_SINGULAR": "Excel Uploader Detail",
81
+ "EXCEL_UPLOADER_DETAIL_PLURAL": "Excel Uploader Details",
82
82
  "EXCEL_UPLOADER_DETAIL_COLUMN_INDEX": "Column index",
83
83
  "EXCEL_UPLOADER_DETAIL_EXCEL_UPLOADER_HEADER_ID": "Excel uploader header id",
84
84
  "EXCEL_UPLOADER_DETAIL_LOOKUP_QUERY_ID": "Lookup query id",
85
85
  "EXCEL_UPLOADER_DETAIL_TABLE_FIELD": "Table field",
86
- "EXCEL_UPLOADER_HEADER_SINGULAR": "exceluploaderheader",
87
- "EXCEL_UPLOADER_HEADER_PLURAL": "exceluploaderheaders",
86
+ "EXCEL_UPLOADER_HEADER_SINGULAR": "Excel Uploader Header",
87
+ "EXCEL_UPLOADER_HEADER_PLURAL": "Excel Uploader Headers",
88
88
  "EXCEL_UPLOADER_HEADER_UPLOADER_CONNECTION_ID": "Uploader connection id",
89
89
  "EXCEL_UPLOADER_HEADER_UPLOADER_DATABASE_NAME": "Uploader database name",
90
90
  "EXCEL_UPLOADER_HEADER_UPLOADER_NAME": "Uploader name",
91
91
  "EXCEL_UPLOADER_HEADER_UPLOADER_TABLE_NAME": "Uploader table name",
92
- "LOOKUP_SINGULAR": "lookup",
93
- "LOOKUP_PLURAL": "lookups",
92
+ "LOOKUP_SINGULAR": "Lookup",
93
+ "LOOKUP_PLURAL": "Lookups",
94
94
  "LOOKUP_ENABLED": "Enabled",
95
95
  "LOOKUP_LOOKUP_AR_DISPLAY": "Lookup ar display",
96
96
  "LOOKUP_LOOKUP_EN_DISPLAY": "Lookup en display",
97
97
  "LOOKUP_LOOKUP_TYPE": "Lookup type",
98
98
  "LOOKUP_LOOKUP_VALUE": "Lookup value",
99
99
  "LOOKUP_ORG_CODE": "Org code",
100
- "MAIL_ATTACHMENT_SINGULAR": "mailattachment",
101
- "MAIL_ATTACHMENT_PLURAL": "mailattachments",
100
+ "MAIL_ATTACHMENT_SINGULAR": "Mail Attachment",
101
+ "MAIL_ATTACHMENT_PLURAL": "Mail Attachments",
102
102
  "MAIL_ATTACHMENT_ENABLED": "Enabled",
103
103
  "MAIL_ATTACHMENT_MAIL_TEMPLATE_ID": "Mail template id",
104
104
  "MAIL_ATTACHMENT_REPORT_ID": "Report id",
105
- "MAIL_BODY_SINGULAR": "mailbody",
106
- "MAIL_BODY_PLURAL": "mailbodies",
105
+ "MAIL_BODY_SINGULAR": "Mail Body",
106
+ "MAIL_BODY_PLURAL": "Mail Bodies",
107
107
  "MAIL_BODY_BODY_NAME": "Body Name",
108
108
  "MAIL_BODY_BODY_CONTENT": "Body content",
109
109
  "MAIL_BODY_BODY_CONTENT_DATA_QUERY_ID": "Body content data query id",
@@ -112,8 +112,8 @@
112
112
  "MAIL_BODY_IS_MAIN": "Is main",
113
113
  "MAIL_BODY_MAIL_TEMPLATE_ID": "Mail template id",
114
114
  "MAIL_BODY_PRINT_FOR_EACH_RECORD": "Print for each record",
115
- "MAIL_NOTIFICATION_QUEUE_SINGULAR": "mailnotificationqueue",
116
- "MAIL_NOTIFICATION_QUEUE_PLURAL": "mailnotificationqueues",
115
+ "MAIL_NOTIFICATION_QUEUE_SINGULAR": "Mail Notification Queue",
116
+ "MAIL_NOTIFICATION_QUEUE_PLURAL": "Mail Notification Queue",
117
117
  "MAIL_NOTIFICATION_QUEUE_CUSTOM_MAIL_ATTACHED_REPORT_ID": "Custom mail attached report id",
118
118
  "MAIL_NOTIFICATION_QUEUE_CUSTOM_MAIL_BODY": "Custom mail body",
119
119
  "MAIL_NOTIFICATION_QUEUE_CUSTOM_MAIL_SUBJECT": "Custom mail subject",
@@ -123,8 +123,8 @@
123
123
  "MAIL_NOTIFICATION_QUEUE_MAIL_TEMPLATE_ID": "Mail template id",
124
124
  "MAIL_NOTIFICATION_QUEUE_NOTIFICATION_MESSAGE": "Notification message",
125
125
  "MAIL_NOTIFICATION_QUEUE_NOTIFICATION_TIME": "Notification time",
126
- "MAIL_RECIPIENT_SINGULAR": "mailrecipient",
127
- "MAIL_RECIPIENT_PLURAL": "mailrecipients",
126
+ "MAIL_RECIPIENT_SINGULAR": "Mail Recipient",
127
+ "MAIL_RECIPIENT_PLURAL": "Mail Recipients",
128
128
  "MAIL_RECIPIENT_ENABLED": "Enabled",
129
129
  "MAIL_RECIPIENT_MAIL_TEMPLATE_ID": "Mail template id",
130
130
  "MAIL_RECIPIENT_RECIPIENT_MAIL": "Recipient mail",
@@ -142,8 +142,8 @@
142
142
  "MAIL_TEMPLATE_PERIODICAL": "Periodical",
143
143
  "MAIL_TEMPLATE_START_SENDING_AT": "Start sending at",
144
144
  "MAIL_TEMPLATE_SUBJECT_DATA_QUERY_ID": "Subject data query id",
145
- "NOTIFICATION_SINGULAR": "notification",
146
- "NOTIFICATION_PLURAL": "notifications",
145
+ "NOTIFICATION_SINGULAR": "Notification",
146
+ "NOTIFICATION_PLURAL": "Notifications",
147
147
  "NOTIFICATION_ENABLED": "Enabled",
148
148
  "NOTIFICATION_NOTIFICATION_ACTION_KEY": "Notification action key",
149
149
  "NOTIFICATION_NOTIFICATION_ACTION_PAYLOAD": "Notification action payload",
@@ -152,8 +152,8 @@
152
152
  "NOTIFICATION_NOTIFICATION_QUERY_ID": "Notification query id",
153
153
  "NOTIFICATION_NOTIFICATION_TEXT": "Notification text",
154
154
  "NOTIFICATION_USERS_TO_NOTIFY_QUERY_ID": "Users to notify query id",
155
- "NOTIFICATION_QUEUE_SINGULAR": "notificationqueue",
156
- "NOTIFICATION_QUEUE_PLURAL": "notificationqueues",
155
+ "NOTIFICATION_QUEUE_SINGULAR": "Notification Queue",
156
+ "NOTIFICATION_QUEUE_PLURAL": "Notification Queue",
157
157
  "NOTIFICATION_QUEUE_CUSTOM_NOTIFICATION_ACTION_KEY": "Custom notification action key",
158
158
  "NOTIFICATION_QUEUE_CUSTOM_NOTIFICATION_ACTION_PAYLOAD": "Custom notification action payload",
159
159
  "NOTIFICATION_QUEUE_CUSTOM_NOTIFICATION_ICON": "Custom notification icon",
@@ -178,8 +178,8 @@
178
178
  "REPORT_REPORT_NAME": "Report name",
179
179
  "REPORT_REPORT_TYPE": "Report type",
180
180
  "REPORT_USE_SYS_DATASOURCE": "Use sys datasource",
181
- "REPORT_PARAMETER_SINGULAR": "reportparameter",
182
- "REPORT_PARAMETER_PLURAL": "reportparameters",
181
+ "REPORT_PARAMETER_SINGULAR": "Report Parameter",
182
+ "REPORT_PARAMETER_PLURAL": "Report Parameters",
183
183
  "REPORT_PARAMETER_DEFAULT_VALUE": "Default value",
184
184
  "REPORT_PARAMETER_ENABLED": "Enabled",
185
185
  "REPORT_PARAMETER_ENTITY_PARAMETER_ID": "Entity parameter id",
@@ -187,8 +187,8 @@
187
187
  "REPORT_PARAMETER_MANDATORY": "Mandatory",
188
188
  "REPORT_PARAMETER_REPORT_ID": "Report id",
189
189
 
190
- "USER_REQUEST_SINGULAR": "userrequest",
191
- "USER_REQUEST_PLURAL": "userrequests",
190
+ "USER_REQUEST_SINGULAR": "User Request",
191
+ "USER_REQUEST_PLURAL": "User Requests",
192
192
  "USER_REQUEST_IS_NOTIFIED": "Is notified",
193
193
  "USER_REQUEST_MAILS_TO_NOTIFY": "Mails to notify",
194
194
  "USER_REQUEST_NOTIFICATION_MESSAGE": "Notification message",
@@ -233,8 +233,8 @@
233
233
  "WORKFLOW_DOCUMENT_MAIL_APPROVAL_ALLOWED": "Mail approval allowed",
234
234
  "WORKFLOW_DOCUMENT_ORG_CODE": "Org code",
235
235
  "WORKFLOW_DOCUMENT_USE_SYSTEM_CON": "Use system con",
236
- "WORKFLOW_DOCUMENT_ACTION_SINGULAR": "workflowdocumentaction",
237
- "WORKFLOW_DOCUMENT_ACTION_PLURAL": "workflowdocumentactions",
236
+ "WORKFLOW_DOCUMENT_ACTION_SINGULAR": "Workflow Document Action",
237
+ "WORKFLOW_DOCUMENT_ACTION_PLURAL": "Workflow Document Actions",
238
238
  "WORKFLOW_DOCUMENT_ACTION_DOCUMENT_ACTION_CODE": "Document action code",
239
239
  "WORKFLOW_DOCUMENT_ACTION_DOCUMENT_ACTION_NAME": "Document action name",
240
240
  "WORKFLOW_DOCUMENT_ACTION_NEXT_DOCUMENT_STATUS_ID": "Next document status id",
@@ -242,8 +242,8 @@
242
242
  "WORKFLOW_DOCUMENT_ACTION_PRE_ACTION_ENDPOINT": "Pre action endpoint",
243
243
  "WORKFLOW_DOCUMENT_ACTION_REQUIRE_COMMENT": "Require comment",
244
244
  "WORKFLOW_DOCUMENT_ACTION_WORKFLOW_DOCUMENT_ID": "Workflow document id",
245
- "WORKFLOW_DOCUMENT_ACTION_HISTORY_SINGULAR": "workflowdocumentactionhistory",
246
- "WORKFLOW_DOCUMENT_ACTION_HISTORY_PLURAL": "workflowdocumentactionhistories",
245
+ "WORKFLOW_DOCUMENT_ACTION_HISTORY_SINGULAR": "Workflow Document Action History",
246
+ "WORKFLOW_DOCUMENT_ACTION_HISTORY_PLURAL": "Workflow Document Action History",
247
247
  "WORKFLOW_DOCUMENT_ACTION_HISTORY_ACTION_BY": "Action by",
248
248
  "WORKFLOW_DOCUMENT_ACTION_HISTORY_ACTION_COMMENT": "Action comment",
249
249
  "WORKFLOW_DOCUMENT_ACTION_HISTORY_ACTION_METHOD": "Action method",
@@ -251,13 +251,13 @@
251
251
  "WORKFLOW_DOCUMENT_ACTION_HISTORY_DOCUMENT_ACTION_ID": "Document action id",
252
252
  "WORKFLOW_DOCUMENT_ACTION_HISTORY_DOCUMENT_REF_ID": "Document ref id",
253
253
  "WORKFLOW_DOCUMENT_ACTION_HISTORY_WORKFLOW_DOCUMENT_ID": "Workflow document id",
254
- "WORKFLOW_DOCUMENT_ACTION_MAIL_SINGULAR": "workflowdocumentactionmail",
255
- "WORKFLOW_DOCUMENT_ACTION_MAIL_PLURAL": "workflowdocumentactionmails",
254
+ "WORKFLOW_DOCUMENT_ACTION_MAIL_SINGULAR": "Workflow Document Action Mail",
255
+ "WORKFLOW_DOCUMENT_ACTION_MAIL_PLURAL": "Workflow Document Action Mails",
256
256
  "WORKFLOW_DOCUMENT_ACTION_MAIL_DOCUMENT_ACTION_ID": "Document action id",
257
257
  "WORKFLOW_DOCUMENT_ACTION_MAIL_ENABLED": "Enabled",
258
258
  "WORKFLOW_DOCUMENT_ACTION_MAIL_MAIL_TEMPLATE_ID": "Mail template id",
259
- "WORKFLOW_DOCUMENT_MAIL_LOG_SINGULAR": "workflowdocumentmaillog",
260
- "WORKFLOW_DOCUMENT_MAIL_LOG_PLURAL": "workflowdocumentmaillogs",
259
+ "WORKFLOW_DOCUMENT_MAIL_LOG_SINGULAR": "Workflow Document Mail Log",
260
+ "WORKFLOW_DOCUMENT_MAIL_LOG_PLURAL": "Workflow Document Mail Logs",
261
261
  "WORKFLOW_DOCUMENT_MAIL_LOG_GRAPH_API_MSG_ID": "Graph api msg id",
262
262
  "WORKFLOW_DOCUMENT_MAIL_LOG_IS_PROCESSED": "Is processed",
263
263
  "WORKFLOW_DOCUMENT_MAIL_LOG_MAIL_ACTION_CODE": "Mail action code",
@@ -268,8 +268,8 @@
268
268
  "WORKFLOW_DOCUMENT_MAIL_LOG_PROCESS_TIME": "Process time",
269
269
  "WORKFLOW_DOCUMENT_MAIL_LOG_REF_DOC_ID": "Ref doc id",
270
270
  "WORKFLOW_DOCUMENT_MAIL_LOG_WORKFLOW_DOCUMENT_ID": "Workflow document id",
271
- "WORKFLOW_DOCUMENT_STATUS_SINGULAR": "workflowdocumentstatus",
272
- "WORKFLOW_DOCUMENT_STATUS_PLURAL": "workflowdocumentstatuses",
271
+ "WORKFLOW_DOCUMENT_STATUS_SINGULAR": "Workflow Document Status",
272
+ "WORKFLOW_DOCUMENT_STATUS_PLURAL": "Workflow Document Statuses",
273
273
  "WORKFLOW_DOCUMENT_STATUS_DOCUMENT_STATUS_CODE": "Document status code",
274
274
  "WORKFLOW_DOCUMENT_STATUS_DOCUMENT_STATUS_NAME": "Document status name",
275
275
  "WORKFLOW_DOCUMENT_STATUS_DOCUMENT_STATUS_ORDER": "Document status order",
@@ -290,8 +290,8 @@
290
290
  "ATTACHMENT_CONFIG_STORAGE_TYPE": "Storage type",
291
291
  "ATTACHMENT_CONFIG_UPLOAD_AUTHORITY_KEY": "Upload authority key",
292
292
  "ATTACHMENT_CONFIG_UPLOAD_DIRECTORY": "Upload directory",
293
- "NOTIFICATION_SINGULAR": "notification",
294
- "NOTIFICATION_PLURAL": "notifications",
293
+ "NOTIFICATION_SINGULAR": "Notification",
294
+ "NOTIFICATION_PLURAL": "Notifications",
295
295
  "NOTIFICATION_IS_ACTIVE": "Is active",
296
296
  "NOTIFICATION_NOTIFICATION_ACTION_PAYLOAD": "Notification action payload",
297
297
  "NOTIFICATION_NOTIFICATION_CODE": "Notification code",
package/src/main.tsx CHANGED
@@ -1,10 +1,10 @@
1
1
  import { createRoot } from "react-dom/client";
2
2
  import { BaseApp } from "./components";
3
3
 
4
-
5
4
  createRoot(document.getElementById("root")!).render(
6
5
  <BaseApp
7
6
  apiBaseUrl="http://localhost:8080/api-base"
7
+ enableUINotifications={false}
8
8
  appLogo={"/logo.png"}
9
9
  appName="UI Base Library"
10
10
  appVersion="0.0"
@@ -17,7 +17,7 @@ export const adminNavigationItems: TreeViewBaseItem<ExtendedTreeItemProps>[] = [
17
17
  actionPayload: { path: "admin/persons" },
18
18
  },
19
19
  {
20
- id: "system_admin.devtools.roles",
20
+ id: "system_admin.devtools.rolesx",
21
21
  label: "ROLES",
22
22
  icon: "tag",
23
23
  action: "NAVIGATION",
@@ -200,7 +200,7 @@ export const adminNavigationItems: TreeViewBaseItem<ExtendedTreeItemProps>[] = [
200
200
  {
201
201
  id: "system_admin.followup",
202
202
  label: "SYSTEM_MONITORING",
203
- authority: "SYSTEM_ADMIN",
203
+ authority: "DEVELOPMENT_ADMIN",
204
204
  icon: "tv",
205
205
  children: [
206
206
  {
@@ -130,19 +130,19 @@ export const ADMINISTRATION_STORES: CommonStores = {
130
130
  SystemApplicationModules: {
131
131
  autoLoad: true,
132
132
  data: [],
133
- authority: "DEVELOPMENT_ADMIN",
133
+ authority: "SYSTEM_ADMIN",
134
134
  url: "api/v1/admin/systemapplicationmodule/application/all",
135
135
  },
136
136
  SystemApplicationAuthorities: {
137
137
  autoLoad: true,
138
138
  data: [],
139
- authority: "DEVELOPMENT_ADMIN",
139
+ authority: "SYSTEM_ADMIN",
140
140
  url: "api/v1/admin/systemapplicationauthority/all",
141
141
  },
142
142
  SystemApplicationRoles: {
143
143
  autoLoad: true,
144
144
  data: [],
145
- authority: "DEVELOPMENT_ADMIN",
145
+ authority: "SYSTEM_ADMIN",
146
146
  url: "api/v1/admin/systemapplicationrole/all",
147
147
  },
148
148
  };
@@ -3,6 +3,12 @@ import { SystemRoute } from "../../../routes/types";
3
3
  import { ExtendedTreeItemProps } from "../../../navigationItems";
4
4
  import { StoreMetaData } from "./CommonStoreSlice";
5
5
 
6
+ export type LicenseCheckObject = {
7
+ isLicensed: boolean;
8
+ lastLicenseCheckMessage: string;
9
+ lastLicenseCheckTime: string;
10
+ };
11
+
6
12
  export type AppInfo = {
7
13
  documentTitle: string | null;
8
14
  apiBaseUrl: string | null;
@@ -24,6 +30,7 @@ export type AppInfo = {
24
30
  light: { primaryColor: string; secondaryColor: string };
25
31
  dark: { primaryColor: string; secondaryColor: string };
26
32
  };
33
+ checkLicense?: { endpoint: string; interval: number };
27
34
  };
28
35
 
29
36
  export type AppInfoProp = {
package/tsconfig.json CHANGED
@@ -131,5 +131,5 @@
131
131
  "noEmit": true,
132
132
  "jsx": "react-jsx"
133
133
  },
134
- "include": ["src"]
134
+ "include": ["src"]
135
135
  }