@asaleh37/ui-base 1.2.29 → 25.1.9

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.
Files changed (179) hide show
  1. package/.github/workflows/publish-npm.yml +49 -0
  2. package/README.md +51 -51
  3. package/__ODockerfile +14 -0
  4. package/dist/index.d.ts +101 -10
  5. package/dist/index.js +135 -7
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +135 -7
  8. package/dist/index.mjs.map +1 -1
  9. package/eslint.config.js +29 -29
  10. package/index.html +20 -13
  11. package/package-lock.json/342/200/216 +9040 -0
  12. package/package.json +122 -119
  13. package/public/bg.jpg +0 -0
  14. package/public/ezzsteel.png +0 -0
  15. package/public/logo.png +0 -0
  16. package/public/manifest.json +21 -0
  17. package/public/no_user.png +0 -0
  18. package/rollup.config-1748377725725.cjs +34 -34
  19. package/rollup.config.js +45 -45
  20. package/src/components/App.tsx +155 -123
  21. package/src/components/BaseApp.tsx +75 -53
  22. package/src/components/ExampleTrial.tsx +24 -0
  23. package/src/components/administration/admin/ChangePasswordPanel.tsx +128 -0
  24. package/src/components/administration/admin/CustomPersonGrid.tsx +361 -0
  25. package/src/components/administration/admin/OrgMemberRoleForm.tsx +83 -83
  26. package/src/components/administration/admin/OrgProvidedPersonGrid.tsx +347 -0
  27. package/src/components/administration/admin/OrganizationApplicationModuleGrid.tsx +107 -107
  28. package/src/components/administration/admin/OrganizationGrid.tsx +118 -82
  29. package/src/components/administration/admin/OrganizationMemberGrid.tsx +190 -176
  30. package/src/components/administration/admin/OrganizationMemberRoleGrid.tsx +87 -87
  31. package/src/components/administration/admin/OrganizationRankGrid.tsx +133 -133
  32. package/src/components/administration/admin/OrganizationUnitGrid.tsx +143 -143
  33. package/src/components/administration/admin/OrganizationUnitTypeGrid.tsx +108 -108
  34. package/src/components/administration/admin/PersonGrid.tsx +27 -231
  35. package/src/components/administration/admin/RoleAuthoritiesForm.tsx +82 -82
  36. package/src/components/administration/admin/SystemApplicationAuthorityGrid.tsx +117 -126
  37. package/src/components/administration/admin/SystemApplicationGrid.tsx +83 -83
  38. package/src/components/administration/admin/SystemApplicationModuleGrid.tsx +96 -96
  39. package/src/components/administration/admin/SystemApplicationRoleAuthorityGrid.tsx +75 -67
  40. package/src/components/administration/admin/SystemApplicationRoleGrid.tsx +116 -116
  41. package/src/components/administration/dev/AttachmentConfigGrid.tsx +224 -213
  42. package/src/components/administration/dev/AttachmentGrid.tsx +172 -172
  43. package/src/components/administration/dev/BluePrintGrid.tsx +129 -129
  44. package/src/components/administration/dev/DashboardGrid.tsx +173 -173
  45. package/src/components/administration/dev/DashboardWidgetGrid.tsx +164 -164
  46. package/src/components/administration/dev/DataQueryGrid.tsx +216 -206
  47. package/src/components/administration/dev/DataQueryParameterGrid.tsx +191 -191
  48. package/src/components/administration/dev/DataQueryParametersForm.tsx +84 -84
  49. package/src/components/administration/dev/DatasourceConnectionGrid.tsx +151 -150
  50. package/src/components/administration/dev/EntityParameterGrid.tsx +307 -279
  51. package/src/components/administration/dev/LookupGrid.tsx +120 -120
  52. package/src/components/administration/dev/MailAttachmentGrid.tsx +155 -155
  53. package/src/components/administration/dev/MailBodyGrid.tsx +216 -216
  54. package/src/components/administration/dev/MailNotificationQueueGrid.tsx +245 -245
  55. package/src/components/administration/dev/MailRecipientGrid.tsx +170 -169
  56. package/src/components/administration/dev/MailSenderConfigGrid.tsx +480 -478
  57. package/src/components/administration/dev/MailTemplateGrid.tsx +385 -384
  58. package/src/components/administration/dev/NotificationGrid.tsx +435 -432
  59. package/src/components/administration/dev/NotificationQueueGrid.tsx +222 -222
  60. package/src/components/administration/dev/ReportGrid.tsx +503 -504
  61. package/src/components/administration/dev/ReportParameterGrid.tsx +186 -186
  62. package/src/components/administration/dev/ReportParametersForm.tsx +84 -84
  63. package/src/components/administration/dev/WidgetGrid.tsx +380 -431
  64. package/src/components/administration/dev/WorkflowDocumentActionGrid.tsx +264 -264
  65. package/src/components/administration/dev/WorkflowDocumentActionHistoryGrid.tsx +172 -172
  66. package/src/components/administration/dev/WorkflowDocumentActionMailGrid.tsx +161 -161
  67. package/src/components/administration/dev/WorkflowDocumentGrid.tsx +357 -377
  68. package/src/components/administration/dev/WorkflowDocumentMailLogGrid.tsx +218 -218
  69. package/src/components/administration/dev/WorkflowDocumentStatusGrid.tsx +243 -243
  70. package/src/components/common/AzureLogin.tsx +222 -0
  71. package/src/components/common/ChangeOrgForm.tsx +85 -81
  72. package/src/components/common/Home.tsx +43 -44
  73. package/src/components/common/LanguageSwitcher.tsx +25 -25
  74. package/src/components/common/LayoutHandlers.tsx +11 -11
  75. package/src/components/common/LoadingMask.tsx +24 -24
  76. package/src/components/common/Login.tsx +268 -214
  77. package/src/components/common/MobileLogin.tsx +229 -0
  78. package/src/components/common/MyNotificationsPanel.tsx +109 -104
  79. package/src/components/common/NoLicenseComponent.tsx +79 -0
  80. package/src/components/common/NotificationItem.tsx +138 -138
  81. package/src/components/index.ts +10 -9
  82. package/src/components/msalConfig.ts +11 -0
  83. package/src/components/templates/DataEntryTemplates/DataEntryTypes.ts +361 -324
  84. package/src/components/templates/DataEntryTemplates/DataEntryUtil.ts +297 -248
  85. package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormAction.tsx +60 -60
  86. package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementField.tsx +238 -231
  87. package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormElementGroup.tsx +108 -106
  88. package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/CheckBox.tsx +66 -64
  89. package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/ComboBox.tsx +164 -93
  90. package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/Datefield.tsx +70 -65
  91. package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/DatetimeField.tsx +71 -64
  92. package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/FiltersPanel.tsx +237 -237
  93. package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/SystemLookupCombobox.tsx +56 -55
  94. package/src/components/templates/DataEntryTemplates/TemplateDataForm/FormFields/TemplateTextField.tsx +20 -17
  95. package/src/components/templates/DataEntryTemplates/TemplateDataForm/TemplateForm.tsx +431 -388
  96. package/src/components/templates/DataEntryTemplates/TemplateDataGrid/DataGridColumnsUtil.tsx +197 -189
  97. package/src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGrid.tsx +1044 -998
  98. package/src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridMultiRecordAction.tsx +89 -89
  99. package/src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridRecordAction.tsx +95 -95
  100. package/src/components/templates/DataEntryTemplates/TemplateDataGrid/TemplateGridTopBar.tsx +234 -227
  101. package/src/components/templates/TransferList.tsx +256 -257
  102. package/src/components/templates/Window/ConfirmationWindow.tsx +55 -55
  103. package/src/components/templates/attachment/AttachmentCard.tsx +141 -141
  104. package/src/components/templates/attachment/AttachmentImageViewer.tsx +85 -45
  105. package/src/components/templates/attachment/AttachmentPanel.tsx +285 -271
  106. package/src/components/templates/index.ts +35 -33
  107. package/src/components/templates/report/ExcelReportViewer.tsx +71 -72
  108. package/src/components/templates/report/ReportViewer.tsx +272 -383
  109. package/src/components/templates/visuals/DashboardRouteView.tsx +9 -9
  110. package/src/components/templates/visuals/DashboardViewer.tsx +192 -148
  111. package/src/components/templates/visuals/WidgetViewer.tsx +208 -198
  112. package/src/components/templates/visuals/charts/TemplateBarChart.tsx +23 -23
  113. package/src/components/templates/visuals/charts/TemplateDataCard.tsx +35 -35
  114. package/src/components/templates/visuals/charts/TemplateGauge.tsx +21 -21
  115. package/src/components/templates/visuals/charts/TemplateLineChart.tsx +22 -22
  116. package/src/components/templates/visuals/charts/TemplateLineProgress.tsx +42 -42
  117. package/src/components/templates/visuals/charts/TemplatePieChart.tsx +24 -24
  118. package/src/components/templates/workflow/WorkflowDocumentPanel.tsx +611 -606
  119. package/src/components/templates/workflow/WorkflowDocumentTimeLine.tsx +145 -140
  120. package/src/components/templates/workflow/WorkflowRouteComponent.tsx +14 -14
  121. package/src/examples/ExampleGrid.tsx +134 -0
  122. package/src/hooks/UseConfirmationWindow.tsx +56 -54
  123. package/src/hooks/UseMobile.tsx +13 -13
  124. package/src/hooks/UseSession.tsx +59 -40
  125. package/src/hooks/UseWindow.tsx +111 -107
  126. package/src/hooks/index.ts +22 -7
  127. package/src/hooks/useApiActions.ts +124 -124
  128. package/src/hooks/useAxios.tsx +340 -316
  129. package/src/hooks/useCommonStore.tsx +29 -0
  130. package/src/hooks/useInterval.tsx +23 -23
  131. package/src/hooks/useLoadingMask.tsx +16 -16
  132. package/src/hooks/useLookupGridColumn.tsx +35 -35
  133. package/src/hooks/useParameterPanel.tsx +159 -0
  134. package/src/index.ts +4 -4
  135. package/src/layout/DrawerHeader.tsx +10 -10
  136. package/src/layout/Layout.tsx +102 -90
  137. package/src/layout/MainContent.tsx +115 -114
  138. package/src/layout/MobileDrawer.tsx +103 -103
  139. package/src/layout/NavigationTree.tsx +309 -291
  140. package/src/layout/NotificationButton.tsx +207 -207
  141. package/src/layout/RouteWrapper.tsx +63 -36
  142. package/src/layout/SideBar.tsx +85 -85
  143. package/src/layout/TopBar.tsx +317 -217
  144. package/src/locales/arabic/adminLocalsAr.json +94 -93
  145. package/src/locales/arabic/common.json +44 -44
  146. package/src/locales/arabic/devLocalsAr.json +317 -317
  147. package/src/locales/arabic/index.ts +9 -9
  148. package/src/locales/english/adminLocalsEn.json +97 -96
  149. package/src/locales/english/common.json +43 -43
  150. package/src/locales/english/devLocalsEn.json +318 -318
  151. package/src/locales/english/index.ts +9 -9
  152. package/src/locales/i18n.ts +8 -8
  153. package/src/locales/index.ts +9 -9
  154. package/src/main.tsx +41 -23
  155. package/src/navigationItems/Administration/adminNavigationItems.tsx +231 -222
  156. package/src/navigationItems/Administration/index.tsx +16 -16
  157. package/src/navigationItems/common/CommonNavigationItems.tsx +12 -12
  158. package/src/navigationItems/common/index.tsx +7 -7
  159. package/src/navigationItems/index.tsx +35 -34
  160. package/src/redux/features/administration/AdministrationStoresMetaData.ts +164 -126
  161. package/src/redux/features/common/AppInfoSlice.ts +93 -63
  162. package/src/redux/features/common/AppLayoutSlice.ts +29 -29
  163. package/src/redux/features/common/CommonStoreSlice.ts +44 -44
  164. package/src/redux/features/common/LoadingMaskSlice.ts +30 -30
  165. package/src/redux/features/common/SideBarSlice.ts +27 -27
  166. package/src/redux/features/common/UserSessionSlice.ts +54 -54
  167. package/src/redux/store.ts +29 -29
  168. package/src/routes/administration/adminRoutes.tsx +99 -99
  169. package/src/routes/administration/devRoutes.tsx +129 -129
  170. package/src/routes/administration/index.ts +8 -8
  171. package/src/routes/index.ts +5 -11
  172. package/src/routes/types/index.ts +6 -5
  173. package/src/styles/index.css +19 -19
  174. package/src/types/index.ts +8 -2
  175. package/src/util/AppUtils.ts +73 -53
  176. package/src/util/constants.ts +6 -6
  177. package/src/util/index.ts +5 -2
  178. package/tsconfig.json +135 -135
  179. package/vite.config.ts +24 -23
@@ -1,248 +1,297 @@
1
- import { GridRowSelectionModel } from "@mui/x-data-grid-premium";
2
- import {
3
- FormElementProps,
4
- RecordFieldProps,
5
- TemplateGridColDef,
6
- } from "./DataEntryTypes";
7
- import {
8
- generateCheckBoxColumn,
9
- generateComboColumn,
10
- generateDateColumn,
11
- generateDateTimeColumn,
12
- } from "./TemplateDataGrid/DataGridColumnsUtil";
13
- import * as z from "zod";
14
- import { TFunction } from "i18next";
15
-
16
- export const getElementFields: (
17
- element: FormElementProps
18
- ) => Array<RecordFieldProps> = (element: FormElementProps) => {
19
- const fields: Array<RecordFieldProps> = [];
20
- if (element.type === "field" && element.mode === "props" && element?.props) {
21
- fields.push(element.props);
22
- } else if (
23
- element.type === "group" &&
24
- element?.props &&
25
- element?.props?.elements
26
- ) {
27
- for (const childElement of element.props.elements) {
28
- fields.push(...getElementFields(childElement));
29
- }
30
- }
31
- return fields;
32
- };
33
-
34
- export const getAllFields: (
35
- elements: Array<FormElementProps>
36
- ) => Array<RecordFieldProps> = (elements: Array<FormElementProps>) => {
37
- const fields: Array<RecordFieldProps> = [];
38
- for (const element of elements) {
39
- fields.push(...getElementFields(element));
40
- }
41
- return fields;
42
- };
43
-
44
- export const constructGridColumnsFromFields: (
45
- fields: Array<RecordFieldProps>,
46
- isDefaultEditable: boolean,
47
- t: TFunction<"translation", undefined>
48
- ) => Array<TemplateGridColDef> = (fields, isDefaultEditable, t) => {
49
- const columns: Array<TemplateGridColDef> = [];
50
-
51
- for (const tableField of fields) {
52
- if (
53
- tableField?.fieldType === "text" ||
54
- tableField?.fieldType === "number"
55
- ) {
56
- const column: TemplateGridColDef = {
57
- ...tableField?.gridProps?.muiProps,
58
- editable:
59
- tableField?.gridProps?.muiProps?.editable != undefined
60
- ? tableField?.gridProps?.muiProps?.editable
61
- : isDefaultEditable,
62
- type: tableField?.fieldType == "number" ? "number" : "string",
63
- field: tableField?.fieldName,
64
- headerName: t(tableField?.fieldLabel || tableField?.fieldName),
65
- headerAlign: "center",
66
- align: "center",
67
- hidden: tableField?.hidden,
68
- searchable: tableField?.gridProps?.searchable,
69
- flex: 1,
70
- minWidth: 200,
71
- };
72
-
73
- columns.push(column);
74
- } else if (tableField?.fieldType === "date") {
75
- const column: TemplateGridColDef = generateDateColumn({
76
- ...tableField?.gridProps?.muiProps,
77
- editable:
78
- tableField?.gridProps?.muiProps?.editable != undefined
79
- ? tableField?.gridProps?.muiProps?.editable
80
- : isDefaultEditable,
81
- field: tableField?.fieldName,
82
- headerName: t(tableField?.fieldLabel || tableField?.fieldName),
83
- headerAlign: "center",
84
- align: "center",
85
- hidden: tableField?.hidden,
86
- searchable: tableField?.gridProps?.searchable,
87
- flex: 1,
88
- minWidth: 200,
89
- });
90
- columns.push(column);
91
- } else if (tableField?.fieldType === "datetime") {
92
- const column: TemplateGridColDef = generateDateTimeColumn({
93
- ...tableField?.gridProps?.muiProps,
94
- editable:
95
- tableField?.gridProps?.muiProps?.editable != undefined
96
- ? tableField?.gridProps?.muiProps?.editable
97
- : isDefaultEditable,
98
- field: tableField?.fieldName,
99
- headerName: t(tableField?.fieldLabel || tableField?.fieldName),
100
- headerAlign: "center",
101
- align: "center",
102
- hidden: tableField?.hidden,
103
- searchable: tableField?.gridProps?.searchable,
104
- flex: 1,
105
- minWidth: 200,
106
- });
107
- columns.push(column);
108
- } else if (tableField?.fieldType === "checkbox") {
109
- const column = generateCheckBoxColumn({
110
- ...tableField?.gridProps?.muiProps,
111
- editable:
112
- tableField?.gridProps?.muiProps?.editable != undefined
113
- ? tableField?.gridProps?.muiProps?.editable
114
- : isDefaultEditable,
115
- field: tableField?.fieldName,
116
- headerName: t(tableField?.fieldLabel || tableField?.fieldName),
117
- headerAlign: "center",
118
- align: "center",
119
- hidden: tableField?.hidden,
120
- searchable: tableField?.gridProps?.searchable,
121
- checkedValue: tableField?.checkedValue,
122
- unCheckedValue: tableField?.unCheckedValue,
123
- width: 150,
124
- });
125
- columns.push(column);
126
- } else if (tableField?.fieldType === "combobox") {
127
- const column: TemplateGridColDef = generateComboColumn({
128
- ...tableField?.gridProps?.muiProps,
129
- editable:
130
- tableField?.gridProps?.muiProps?.editable != undefined
131
- ? tableField?.gridProps?.muiProps?.editable
132
- : isDefaultEditable,
133
- field: tableField?.fieldName,
134
- headerName: t(tableField?.fieldLabel || tableField?.fieldName),
135
- headerAlign: "center",
136
- align: "center",
137
- hidden: tableField?.hidden,
138
- searchable: tableField?.gridProps?.searchable,
139
- valueField: tableField?.optionValueField || "value",
140
- displayField: tableField?.optionDisplayField || "display",
141
- options: tableField?.options || [],
142
- flex: 1,
143
- minWidth: 200,
144
- });
145
- columns.push(column);
146
- } else if (tableField?.fieldType === "lookup") {
147
- const column: TemplateGridColDef = generateComboColumn({
148
- ...tableField?.gridProps?.muiProps,
149
- editable:
150
- tableField?.gridProps?.muiProps?.editable != undefined
151
- ? tableField?.gridProps?.muiProps?.editable
152
- : isDefaultEditable,
153
- lookupType: tableField?.lookupType,
154
- field: tableField?.fieldName,
155
- headerName: t(tableField?.fieldLabel || tableField?.fieldName),
156
- headerAlign: "center",
157
- align: "center",
158
- hidden: tableField?.hidden,
159
- searchable: tableField?.gridProps?.searchable,
160
- valueField: tableField?.optionValueField || "value",
161
- displayField: tableField?.optionDisplayField || "display",
162
- options: tableField?.options || [],
163
- flex: 1,
164
- minWidth: 200,
165
- });
166
- columns.push(column);
167
- } else {
168
- const column: TemplateGridColDef = {
169
- field: tableField.fieldName,
170
- ...tableField?.gridProps?.muiProps,
171
- };
172
- columns.push(column);
173
- }
174
- }
175
- return columns;
176
- };
177
-
178
- export const constructValidationSchema = (fields: Array<RecordFieldProps>) => {
179
- const validationSchemaObj: any = {};
180
- for (const field of fields) {
181
- if (field?.fieldName) {
182
- const fieldName = field.fieldName;
183
- if (field.fieldType === "number") {
184
- if (field?.required === true) {
185
- validationSchemaObj[fieldName] = z.number({
186
- required_error: "This field is required",
187
- invalid_type_error: "This field must be a number",
188
- });
189
- } else {
190
- validationSchemaObj[fieldName] = z.number().optional().nullable();
191
- }
192
- } else if (field.fieldType === "checkbox") {
193
- if (field?.required === true) {
194
- validationSchemaObj[fieldName] = z.boolean({
195
- required_error: "This field is required",
196
- });
197
- } else {
198
- validationSchemaObj[fieldName] = z.boolean().optional().nullable();
199
- }
200
- } else {
201
- if (field?.required === true) {
202
- validationSchemaObj[fieldName] = z
203
- .string({ message: "This field is required" })
204
- .min(1, "This field is required");
205
- } else {
206
- validationSchemaObj[fieldName] = z.string().optional().nullable();
207
- }
208
- }
209
- }
210
- }
211
- return validationSchemaObj;
212
- };
213
-
214
- export type GridSelection = {
215
- selectedRecords: Array<any>;
216
- selectedRecordIds: Array<any>;
217
- };
218
-
219
- export const getGridSelection: (
220
- rowSelectionModel: GridRowSelectionModel,
221
- data: Array<any>,
222
- keyColumnName: string
223
- ) => GridSelection = (
224
- rowSelectionModel: GridRowSelectionModel,
225
- data: Array<any>,
226
- keyColumnName: string
227
- ) => {
228
- const sRecords = [];
229
- const sRecordIds = [];
230
- if (
231
- rowSelectionModel.type === "exclude" &&
232
- rowSelectionModel.ids.size === 0
233
- ) {
234
- for (const record of data) {
235
- sRecords.push(record);
236
- sRecordIds.push(record[keyColumnName]);
237
- }
238
- } else {
239
- if (rowSelectionModel?.ids) {
240
- for (const selectedId of rowSelectionModel.ids) {
241
- const record = data.find((x) => x[keyColumnName] === selectedId);
242
- sRecords.push(record);
243
- sRecordIds.push(selectedId);
244
- }
245
- }
246
- }
247
- return { selectedRecords: sRecords, selectedRecordIds: sRecordIds };
248
- };
1
+ import { GridRowSelectionModel } from "@mui/x-data-grid-premium";
2
+ import {
3
+ FormElementProps,
4
+ RecordFieldProps,
5
+ TemplateGridColDef,
6
+ } from "./DataEntryTypes";
7
+ import {
8
+ generateCheckBoxColumn,
9
+ generateComboColumn,
10
+ generateDateColumn,
11
+ generateDateTimeColumn,
12
+ } from "./TemplateDataGrid/DataGridColumnsUtil";
13
+ import * as z from "zod";
14
+ import { TFunction } from "i18next";
15
+
16
+ export const getElementFields: (
17
+ element: FormElementProps
18
+ ) => Array<RecordFieldProps> = (element: FormElementProps) => {
19
+ const fields: Array<RecordFieldProps> = [];
20
+ if (element.type === "field" && element.mode === "props" && element?.props) {
21
+ fields.push(element.props);
22
+ } else if (
23
+ element.type === "group" &&
24
+ element?.props &&
25
+ element?.props?.elements
26
+ ) {
27
+ for (const childElement of element.props.elements) {
28
+ fields.push(...getElementFields(childElement));
29
+ }
30
+ }
31
+ return fields;
32
+ };
33
+
34
+ export const getAllFields: (
35
+ elements: Array<FormElementProps>
36
+ ) => Array<RecordFieldProps> = (elements: Array<FormElementProps>) => {
37
+ const fields: Array<RecordFieldProps> = [];
38
+ for (const element of elements) {
39
+ fields.push(...getElementFields(element));
40
+ }
41
+ return fields;
42
+ };
43
+
44
+ export const constructGridColumnsFromFields: (
45
+ fields: Array<RecordFieldProps>,
46
+ isDefaultEditable: boolean,
47
+ t: TFunction<"translation", undefined>
48
+ ) => Array<TemplateGridColDef> = (fields, isDefaultEditable, t) => {
49
+ const columns: Array<TemplateGridColDef> = [];
50
+
51
+ for (const tableField of fields) {
52
+ if (
53
+ tableField?.fieldType === "text" ||
54
+ tableField?.fieldType === "number"
55
+ ) {
56
+ const column: TemplateGridColDef = {
57
+ ...tableField?.gridProps?.muiProps,
58
+ editable:
59
+ tableField?.gridProps?.muiProps?.editable != undefined
60
+ ? tableField?.gridProps?.muiProps?.editable
61
+ : isDefaultEditable,
62
+ type: tableField?.fieldType == "number" ? "number" : "string",
63
+ field: tableField?.fieldName,
64
+ headerName: t(tableField?.fieldLabel || tableField?.fieldName),
65
+ headerAlign: "center",
66
+ align: "center",
67
+ hidden: tableField?.hidden,
68
+ searchable: tableField?.gridProps?.searchable,
69
+ flex: tableField?.gridProps?.muiProps?.flex || 1,
70
+ minWidth: tableField?.gridProps?.muiProps?.width
71
+ ? tableField?.gridProps?.muiProps?.width
72
+ : 200,
73
+ };
74
+
75
+ columns.push(column);
76
+ } else if (tableField?.fieldType === "date") {
77
+ const column: TemplateGridColDef = generateDateColumn({
78
+ ...tableField?.gridProps?.muiProps,
79
+ editable:
80
+ tableField?.gridProps?.muiProps?.editable != undefined
81
+ ? tableField?.gridProps?.muiProps?.editable
82
+ : isDefaultEditable,
83
+ field: tableField?.fieldName,
84
+ headerName: t(tableField?.fieldLabel || tableField?.fieldName),
85
+ headerAlign: "center",
86
+ align: "center",
87
+ hidden: tableField?.hidden,
88
+ searchable: tableField?.gridProps?.searchable,
89
+ flex: tableField?.gridProps?.muiProps?.flex || 1,
90
+ minWidth: tableField?.gridProps?.muiProps?.width
91
+ ? tableField?.gridProps?.muiProps?.width
92
+ : 200,
93
+ });
94
+ columns.push(column);
95
+ } else if (tableField?.fieldType === "datetime") {
96
+ const column: TemplateGridColDef = generateDateTimeColumn({
97
+ ...tableField?.gridProps?.muiProps,
98
+ editable:
99
+ tableField?.gridProps?.muiProps?.editable != undefined
100
+ ? tableField?.gridProps?.muiProps?.editable
101
+ : isDefaultEditable,
102
+ field: tableField?.fieldName,
103
+ headerName: t(tableField?.fieldLabel || tableField?.fieldName),
104
+ headerAlign: "center",
105
+ align: "center",
106
+ hidden: tableField?.hidden,
107
+ searchable: tableField?.gridProps?.searchable,
108
+ flex: tableField?.gridProps?.muiProps?.flex || 1,
109
+ minWidth: tableField?.gridProps?.muiProps?.width
110
+ ? tableField?.gridProps?.muiProps?.width
111
+ : 200,
112
+ });
113
+ columns.push(column);
114
+ } else if (tableField?.fieldType === "checkbox") {
115
+ const column = generateCheckBoxColumn({
116
+ ...tableField?.gridProps?.muiProps,
117
+ editable:
118
+ tableField?.gridProps?.muiProps?.editable != undefined
119
+ ? tableField?.gridProps?.muiProps?.editable
120
+ : isDefaultEditable,
121
+ field: tableField?.fieldName,
122
+ headerName: t(tableField?.fieldLabel || tableField?.fieldName),
123
+ headerAlign: "center",
124
+ align: "center",
125
+ hidden: tableField?.hidden,
126
+ searchable: tableField?.gridProps?.searchable,
127
+ checkedValue: tableField?.checkedValue,
128
+ unCheckedValue: tableField?.unCheckedValue,
129
+ width: 150,
130
+ });
131
+ columns.push(column);
132
+ } else if (tableField?.fieldType === "combobox") {
133
+ const column: TemplateGridColDef = generateComboColumn({
134
+ ...tableField?.gridProps?.muiProps,
135
+ comboboxGroupField: tableField?.comboboxGroupField,
136
+ editable:
137
+ tableField?.gridProps?.muiProps?.editable != undefined
138
+ ? tableField?.gridProps?.muiProps?.editable
139
+ : isDefaultEditable,
140
+ field: tableField?.fieldName,
141
+ headerName: t(tableField?.fieldLabel || tableField?.fieldName),
142
+ headerAlign: "center",
143
+ align: "center",
144
+ hidden: tableField?.hidden,
145
+ searchable: tableField?.gridProps?.searchable,
146
+ valueField: tableField?.optionValueField || "value",
147
+ displayField: tableField?.optionDisplayField || "display",
148
+ options: tableField?.options,
149
+ commonStoreKey: tableField?.commonStoreKey,
150
+ dataQueryId: tableField?.dataQueryId,
151
+ storeUrl: tableField?.storeUrl,
152
+ storeLoadParam: tableField?.storeLoadParam,
153
+ flex: tableField?.gridProps?.muiProps?.flex || 1,
154
+ minWidth: tableField?.gridProps?.muiProps?.width
155
+ ? tableField?.gridProps?.muiProps?.width
156
+ : 200,
157
+ });
158
+ columns.push(column);
159
+ } else if (tableField?.fieldType === "lookup") {
160
+ const column: TemplateGridColDef = generateComboColumn({
161
+ ...tableField?.gridProps?.muiProps,
162
+ editable:
163
+ tableField?.gridProps?.muiProps?.editable != undefined
164
+ ? tableField?.gridProps?.muiProps?.editable
165
+ : isDefaultEditable,
166
+ lookupType: tableField?.lookupType,
167
+ field: tableField?.fieldName,
168
+ headerName: t(tableField?.fieldLabel || tableField?.fieldName),
169
+ headerAlign: "center",
170
+ align: "center",
171
+ commonStoreKey: tableField?.commonStoreKey,
172
+ dataQueryId: tableField?.dataQueryId,
173
+ storeUrl: tableField?.storeUrl,
174
+ storeLoadParam: tableField?.storeLoadParam,
175
+ hidden: tableField?.hidden,
176
+ searchable: tableField?.gridProps?.searchable,
177
+ valueField: tableField?.optionValueField || "value",
178
+ displayField: tableField?.optionDisplayField || "display",
179
+ options: tableField?.options || [],
180
+ flex: tableField?.gridProps?.muiProps?.flex || 1,
181
+ minWidth: tableField?.gridProps?.muiProps?.width
182
+ ? tableField?.gridProps?.muiProps?.width
183
+ : 200,
184
+ });
185
+ columns.push(column);
186
+ } else {
187
+ const column: TemplateGridColDef = {
188
+ field: tableField.fieldName,
189
+ ...tableField?.gridProps?.muiProps,
190
+ };
191
+ columns.push(column);
192
+ }
193
+ }
194
+ return columns;
195
+ };
196
+
197
+ export const constructValidationSchema = (fields: Array<RecordFieldProps>) => {
198
+ const validationSchemaObj: any = {};
199
+ for (const field of fields) {
200
+ if (field?.fieldName) {
201
+ const fieldName = field.fieldName;
202
+ if (field.fieldType === "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.fieldType === "checkbox") {
212
+ if (field?.required === true) {
213
+ validationSchemaObj[fieldName] = z.boolean({
214
+ required_error: "This field is required",
215
+ });
216
+ } else {
217
+ validationSchemaObj[fieldName] = z.boolean().optional().nullable();
218
+ }
219
+ } else if (field.fieldType === "combobox") {
220
+ if (field?.comboboxValueDataType) {
221
+ if (field?.comboboxValueDataType === "number") {
222
+ if (field?.required === true) {
223
+ validationSchemaObj[fieldName] = z.number({
224
+ required_error: "This field is required",
225
+ invalid_type_error: "This field must be a number",
226
+ });
227
+ } else {
228
+ validationSchemaObj[fieldName] = z.number().optional().nullable();
229
+ }
230
+ } else if (field?.comboboxValueDataType === "string") {
231
+ if (field?.required === true) {
232
+ validationSchemaObj[fieldName] = z
233
+ .string({ message: "This field is required" })
234
+ .min(1, "This field is required");
235
+ } else {
236
+ validationSchemaObj[fieldName] = z.string().optional().nullable();
237
+ }
238
+ }
239
+ } else {
240
+ if (field?.required === true) {
241
+ validationSchemaObj[fieldName] = z.number({
242
+ required_error: "This field is required",
243
+ invalid_type_error: "This field must be a number",
244
+ });
245
+ } else {
246
+ validationSchemaObj[fieldName] = z.number().optional().nullable();
247
+ }
248
+ }
249
+ } else {
250
+ if (field?.required === true) {
251
+ validationSchemaObj[fieldName] = z
252
+ .string({ message: "This field is required" })
253
+ .min(1, "This field is required");
254
+ } else {
255
+ validationSchemaObj[fieldName] = z.string().optional().nullable();
256
+ }
257
+ }
258
+ }
259
+ }
260
+ return validationSchemaObj;
261
+ };
262
+
263
+ export type GridSelection = {
264
+ selectedRecords: Array<any>;
265
+ selectedRecordIds: Array<any>;
266
+ };
267
+
268
+ export const getGridSelection: (
269
+ rowSelectionModel: GridRowSelectionModel,
270
+ data: Array<any>,
271
+ keyColumnName: string
272
+ ) => GridSelection = (
273
+ rowSelectionModel: GridRowSelectionModel,
274
+ data: Array<any>,
275
+ keyColumnName: string
276
+ ) => {
277
+ const sRecords = [];
278
+ const sRecordIds = [];
279
+ if (
280
+ rowSelectionModel.type === "exclude" &&
281
+ rowSelectionModel.ids.size === 0
282
+ ) {
283
+ for (const record of data) {
284
+ sRecords.push(record);
285
+ sRecordIds.push(record[keyColumnName]);
286
+ }
287
+ } else {
288
+ if (rowSelectionModel?.ids) {
289
+ for (const selectedId of rowSelectionModel.ids) {
290
+ const record = data.find((x) => x[keyColumnName] === selectedId);
291
+ sRecords.push(record);
292
+ sRecordIds.push(selectedId);
293
+ }
294
+ }
295
+ }
296
+ return { selectedRecords: sRecords, selectedRecordIds: sRecordIds };
297
+ };