procode-vs-template 1.0.0

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 (191) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +188 -0
  3. package/dist/actions.esm.js +53 -0
  4. package/dist/actions.esm.js.map +1 -0
  5. package/dist/actions.js +55 -0
  6. package/dist/actions.js.map +1 -0
  7. package/dist/assets/delete.png +0 -0
  8. package/dist/assets/info.svg +5 -0
  9. package/dist/assets/react.svg +1 -0
  10. package/dist/assets/styles/_tempalte-base.scss +5 -0
  11. package/dist/factories.esm.js +39149 -0
  12. package/dist/factories.esm.js.map +1 -0
  13. package/dist/factories.js +39169 -0
  14. package/dist/factories.js.map +1 -0
  15. package/dist/index.esm.js +39200 -0
  16. package/dist/index.esm.js.map +1 -0
  17. package/dist/index.js +39224 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/src/assets/styles/_tempalte-base.scss +5 -0
  20. package/dist/types/Action/TemplateActionFactory.d.ts +8 -0
  21. package/dist/types/Action/TemplateActionType.d.ts +8 -0
  22. package/dist/types/Action/TemplateActions/handleMenuNavigation.d.ts +1 -0
  23. package/dist/types/Factory/BaseType.d.ts +16 -0
  24. package/dist/types/Factory/TemplateWidgetFactory.d.ts +14 -0
  25. package/dist/types/Renderer/index.d.ts +2 -0
  26. package/dist/types/Widgets/Block/BlockView.d.ts +3 -0
  27. package/dist/types/Widgets/Block/index.d.ts +3 -0
  28. package/dist/types/Widgets/Block/types.d.ts +12 -0
  29. package/dist/types/Widgets/ConfirmationAlert/ConfirmationAlertView.d.ts +14 -0
  30. package/dist/types/Widgets/ConfirmationAlert/index.d.ts +11 -0
  31. package/dist/types/Widgets/GridToolBar/Components/AdvancedSearch/AdvancedSearch.d.ts +15 -0
  32. package/dist/types/Widgets/GridToolBar/Components/AdvancedSearch/AdvancedSearchView.d.ts +6 -0
  33. package/dist/types/Widgets/GridToolBar/Components/AdvancedSearch/Filter.d.ts +20 -0
  34. package/dist/types/Widgets/GridToolBar/Components/AdvancedSearch/FilterPopup.d.ts +13 -0
  35. package/dist/types/Widgets/GridToolBar/Components/AdvancedSearch/FilterPopupView.d.ts +25 -0
  36. package/dist/types/Widgets/GridToolBar/Components/AdvancedSearch/TypeBasedWidgetFactory.d.ts +8 -0
  37. package/dist/types/Widgets/GridToolBar/Components/AdvancedSearch/constant.d.ts +8 -0
  38. package/dist/types/Widgets/GridToolBar/Components/AdvancedSearch/helper/AdvancedSearchFunctions.d.ts +7 -0
  39. package/dist/types/Widgets/GridToolBar/Components/Export/Export.d.ts +14 -0
  40. package/dist/types/Widgets/GridToolBar/Components/Export/ExportPopup.d.ts +20 -0
  41. package/dist/types/Widgets/GridToolBar/Components/Export/ExportView.d.ts +6 -0
  42. package/dist/types/Widgets/GridToolBar/Components/Export/type.d.ts +4 -0
  43. package/dist/types/Widgets/GridToolBar/Components/GlobalSearch/GlobalSearch.d.ts +11 -0
  44. package/dist/types/Widgets/GridToolBar/Components/GlobalSearch/GlobalSearchView.d.ts +9 -0
  45. package/dist/types/Widgets/GridToolBar/Components/GroupBy/GroupByPopUp.d.ts +17 -0
  46. package/dist/types/Widgets/GridToolBar/Components/GroupBy/GroupByView.d.ts +6 -0
  47. package/dist/types/Widgets/GridToolBar/Components/GroupBy/index.d.ts +15 -0
  48. package/dist/types/Widgets/GridToolBar/Components/QuickFilter/FilterPopup.d.ts +10 -0
  49. package/dist/types/Widgets/GridToolBar/Components/QuickFilter/QuickFilterView.d.ts +6 -0
  50. package/dist/types/Widgets/GridToolBar/Components/QuickFilter/index.d.ts +12 -0
  51. package/dist/types/Widgets/GridToolBar/Components/Reset/ResetView.d.ts +6 -0
  52. package/dist/types/Widgets/GridToolBar/Components/Reset/index.d.ts +11 -0
  53. package/dist/types/Widgets/GridToolBar/Components/ScreenView/CreateScreenPopup.d.ts +6 -0
  54. package/dist/types/Widgets/GridToolBar/Components/ScreenView/UserView.d.ts +26 -0
  55. package/dist/types/Widgets/GridToolBar/Components/ScreenView/UserViewView.d.ts +13 -0
  56. package/dist/types/Widgets/GridToolBar/Components/ScreenView/ViewItem.d.ts +11 -0
  57. package/dist/types/Widgets/GridToolBar/Components/ScreenView/actions/index.d.ts +8 -0
  58. package/dist/types/Widgets/GridToolBar/Components/ScreenView/helpers/deserializedScreenView.d.ts +4 -0
  59. package/dist/types/Widgets/GridToolBar/Components/ScreenView/helpers/getSavedSystemDefault.d.ts +2 -0
  60. package/dist/types/Widgets/GridToolBar/Components/ScreenView/helpers/saveSystemDefaultInSession.d.ts +1 -0
  61. package/dist/types/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/advancedSearchHandler.d.ts +1 -0
  62. package/dist/types/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/globalSearchHandler.d.ts +1 -0
  63. package/dist/types/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/groupByHandler.d.ts +1 -0
  64. package/dist/types/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/localSearchHandler.d.ts +1 -0
  65. package/dist/types/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/paginationHandler.d.ts +1 -0
  66. package/dist/types/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/quickFilterHandler.d.ts +1 -0
  67. package/dist/types/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/settingHandler.d.ts +1 -0
  68. package/dist/types/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/sortHandler.d.ts +1 -0
  69. package/dist/types/Widgets/GridToolBar/Components/ScreenView/services/index.d.ts +6 -0
  70. package/dist/types/Widgets/GridToolBar/Components/Setting/ColumnChooser/ColumnChooser.d.ts +15 -0
  71. package/dist/types/Widgets/GridToolBar/Components/Setting/ColumnChooser/ColumnChooserView.d.ts +17 -0
  72. package/dist/types/Widgets/GridToolBar/Components/Setting/ColumnChooser/DragDropContext.d.ts +9 -0
  73. package/dist/types/Widgets/GridToolBar/Components/Setting/Setting.d.ts +19 -0
  74. package/dist/types/Widgets/GridToolBar/Components/Setting/SettingPopup.d.ts +9 -0
  75. package/dist/types/Widgets/GridToolBar/Components/Setting/SettingView.d.ts +6 -0
  76. package/dist/types/Widgets/GridToolBar/GridToolBar.d.ts +8 -0
  77. package/dist/types/Widgets/GridToolBar/GridToolBarView.d.ts +23 -0
  78. package/dist/types/Widgets/GridToolBar/data/advancedSearch/index.d.ts +46 -0
  79. package/dist/types/Widgets/GridToolBar/data/globalSearch/index.d.ts +4 -0
  80. package/dist/types/Widgets/GridToolBar/data/groupBy/index.d.ts +6 -0
  81. package/dist/types/Widgets/GridToolBar/data/index.d.ts +49 -0
  82. package/dist/types/Widgets/GridToolBar/data/quickFilter/index.d.ts +30 -0
  83. package/dist/types/Widgets/GridToolBar/data/setting/index.d.ts +21 -0
  84. package/dist/types/Widgets/GridToolBar/data/userView/index.d.ts +10 -0
  85. package/dist/types/Widgets/GridToolBar/enum/index.d.ts +27 -0
  86. package/dist/types/Widgets/GridToolBar/helper/getUniqueId.d.ts +1 -0
  87. package/dist/types/Widgets/GridToolBar/type.d.ts +58 -0
  88. package/dist/types/Widgets/InformationAlert/InformationAlert.d.ts +8 -0
  89. package/dist/types/Widgets/InformationAlert/InformationAlertView.d.ts +8 -0
  90. package/dist/types/Widgets/Menu/MenuMainHeader.d.ts +3 -0
  91. package/dist/types/Widgets/Menu/MenuSubHeader.d.ts +3 -0
  92. package/dist/types/Widgets/Menu/MenuSubItem.d.ts +3 -0
  93. package/dist/types/Widgets/Menu/MenuView.d.ts +6 -0
  94. package/dist/types/Widgets/Menu/index.d.ts +14 -0
  95. package/dist/types/actions.d.ts +2 -0
  96. package/dist/types/constant.d.ts +8 -0
  97. package/dist/types/factories.d.ts +2 -0
  98. package/dist/types/index.d.ts +4 -0
  99. package/dist/types/utils/getValueFromNestedObject.d.ts +1 -0
  100. package/package.json +98 -0
  101. package/src/Action/TemplateActionFactory.ts +27 -0
  102. package/src/Action/TemplateActionType.ts +8 -0
  103. package/src/Action/TemplateActions/handleMenuNavigation.ts +23 -0
  104. package/src/Factory/BaseType.ts +12 -0
  105. package/src/Factory/TemplateWidgetFactory.tsx +50 -0
  106. package/src/Renderer/index.tsx +14 -0
  107. package/src/Widgets/Block/BlockView.tsx +31 -0
  108. package/src/Widgets/Block/Styles/index.scss +41 -0
  109. package/src/Widgets/Block/index.tsx +8 -0
  110. package/src/Widgets/Block/types.ts +11 -0
  111. package/src/Widgets/ConfirmationAlert/ConfirmationAlertView.tsx +90 -0
  112. package/src/Widgets/ConfirmationAlert/index.tsx +16 -0
  113. package/src/Widgets/ConfirmationAlert/scss/index.scss +66 -0
  114. package/src/Widgets/GridToolBar/Components/AdvancedSearch/AdvancedSearch.tsx +83 -0
  115. package/src/Widgets/GridToolBar/Components/AdvancedSearch/AdvancedSearchView.tsx +25 -0
  116. package/src/Widgets/GridToolBar/Components/AdvancedSearch/Filter.tsx +162 -0
  117. package/src/Widgets/GridToolBar/Components/AdvancedSearch/FilterPopup.tsx +437 -0
  118. package/src/Widgets/GridToolBar/Components/AdvancedSearch/FilterPopupView.tsx +111 -0
  119. package/src/Widgets/GridToolBar/Components/AdvancedSearch/TypeBasedWidgetFactory.tsx +226 -0
  120. package/src/Widgets/GridToolBar/Components/AdvancedSearch/constant.ts +55 -0
  121. package/src/Widgets/GridToolBar/Components/AdvancedSearch/helper/AdvancedSearchFunctions.ts +36 -0
  122. package/src/Widgets/GridToolBar/Components/Export/Export.tsx +57 -0
  123. package/src/Widgets/GridToolBar/Components/Export/ExportPopup.tsx +388 -0
  124. package/src/Widgets/GridToolBar/Components/Export/ExportView.tsx +21 -0
  125. package/src/Widgets/GridToolBar/Components/Export/type.ts +4 -0
  126. package/src/Widgets/GridToolBar/Components/GlobalSearch/GlobalSearch.tsx +95 -0
  127. package/src/Widgets/GridToolBar/Components/GlobalSearch/GlobalSearchView.tsx +65 -0
  128. package/src/Widgets/GridToolBar/Components/GroupBy/GroupByPopUp.tsx +115 -0
  129. package/src/Widgets/GridToolBar/Components/GroupBy/GroupByView.tsx +21 -0
  130. package/src/Widgets/GridToolBar/Components/GroupBy/index.tsx +84 -0
  131. package/src/Widgets/GridToolBar/Components/QuickFilter/FilterPopup.tsx +41 -0
  132. package/src/Widgets/GridToolBar/Components/QuickFilter/QuickFilterView.tsx +23 -0
  133. package/src/Widgets/GridToolBar/Components/QuickFilter/index.tsx +199 -0
  134. package/src/Widgets/GridToolBar/Components/Reset/ResetView.tsx +22 -0
  135. package/src/Widgets/GridToolBar/Components/Reset/index.tsx +41 -0
  136. package/src/Widgets/GridToolBar/Components/ScreenView/CreateScreenPopup.tsx +88 -0
  137. package/src/Widgets/GridToolBar/Components/ScreenView/UserView.tsx +266 -0
  138. package/src/Widgets/GridToolBar/Components/ScreenView/UserViewView.tsx +67 -0
  139. package/src/Widgets/GridToolBar/Components/ScreenView/ViewItem.tsx +94 -0
  140. package/src/Widgets/GridToolBar/Components/ScreenView/actions/index.ts +20 -0
  141. package/src/Widgets/GridToolBar/Components/ScreenView/helpers/deserializedScreenView.ts +19 -0
  142. package/src/Widgets/GridToolBar/Components/ScreenView/helpers/getSavedSystemDefault.ts +18 -0
  143. package/src/Widgets/GridToolBar/Components/ScreenView/helpers/saveSystemDefaultInSession.ts +12 -0
  144. package/src/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/advancedSearchHandler.ts +32 -0
  145. package/src/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/globalSearchHandler.ts +13 -0
  146. package/src/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/groupByHandler.ts +8 -0
  147. package/src/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/localSearchHandler.ts +6 -0
  148. package/src/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/paginationHandler.ts +6 -0
  149. package/src/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/quickFilterHandler.ts +13 -0
  150. package/src/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/settingHandler.ts +19 -0
  151. package/src/Widgets/GridToolBar/Components/ScreenView/helpers/uiElementHandler/sortHandler.ts +6 -0
  152. package/src/Widgets/GridToolBar/Components/ScreenView/services/index.ts +63 -0
  153. package/src/Widgets/GridToolBar/Components/Setting/ColumnChooser/ColumnChooser.tsx +274 -0
  154. package/src/Widgets/GridToolBar/Components/Setting/ColumnChooser/ColumnChooserView.tsx +154 -0
  155. package/src/Widgets/GridToolBar/Components/Setting/ColumnChooser/DragDropContext.tsx +76 -0
  156. package/src/Widgets/GridToolBar/Components/Setting/Setting.tsx +116 -0
  157. package/src/Widgets/GridToolBar/Components/Setting/SettingPopup.tsx +23 -0
  158. package/src/Widgets/GridToolBar/Components/Setting/SettingView.tsx +23 -0
  159. package/src/Widgets/GridToolBar/GridToolBar.tsx +111 -0
  160. package/src/Widgets/GridToolBar/GridToolBarView.tsx +138 -0
  161. package/src/Widgets/GridToolBar/data/advancedSearch/index.ts +45 -0
  162. package/src/Widgets/GridToolBar/data/globalSearch/index.ts +4 -0
  163. package/src/Widgets/GridToolBar/data/groupBy/index.ts +3 -0
  164. package/src/Widgets/GridToolBar/data/index.ts +74 -0
  165. package/src/Widgets/GridToolBar/data/quickFilter/index.ts +37 -0
  166. package/src/Widgets/GridToolBar/data/setting/index.ts +23 -0
  167. package/src/Widgets/GridToolBar/data/userView/index.ts +11 -0
  168. package/src/Widgets/GridToolBar/enum/index.ts +29 -0
  169. package/src/Widgets/GridToolBar/helper/getUniqueId.ts +2 -0
  170. package/src/Widgets/GridToolBar/scss/index.scss +834 -0
  171. package/src/Widgets/GridToolBar/type.ts +63 -0
  172. package/src/Widgets/InformationAlert/InformationAlert.tsx +12 -0
  173. package/src/Widgets/InformationAlert/InformationAlertView.tsx +46 -0
  174. package/src/Widgets/InformationAlert/scss/index.scss +73 -0
  175. package/src/Widgets/Menu/MenuMainHeader.tsx +28 -0
  176. package/src/Widgets/Menu/MenuSubHeader.tsx +20 -0
  177. package/src/Widgets/Menu/MenuSubItem.tsx +10 -0
  178. package/src/Widgets/Menu/MenuView.tsx +19 -0
  179. package/src/Widgets/Menu/index.json +245 -0
  180. package/src/Widgets/Menu/index.tsx +32 -0
  181. package/src/Widgets/Menu/scss/index.scss +93 -0
  182. package/src/actions.ts +5 -0
  183. package/src/assets/delete.png +0 -0
  184. package/src/assets/info.svg +5 -0
  185. package/src/assets/react.svg +1 -0
  186. package/src/assets/styles/_tempalte-base.scss +5 -0
  187. package/src/constant.ts +8 -0
  188. package/src/factories.ts +5 -0
  189. package/src/index.ts +12 -0
  190. package/src/utils/getValueFromNestedObject.ts +14 -0
  191. package/src/vite-env.d.ts +1 -0
@@ -0,0 +1,388 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { ExportType } from "./type";
4
+ import { DropDownList } from "@progress/kendo-react-dropdowns";
5
+ import { Button } from "@progress/kendo-react-buttons";
6
+ import {
7
+ downloadIcon,
8
+ fileErrorIcon,
9
+ arrowRightIcon,
10
+ trashIcon,
11
+ } from "@progress/kendo-svg-icons";
12
+ import { getUniqueId } from "../../helper/getUniqueId";
13
+ import _ from "lodash";
14
+ import FactoryRenderer from "../../../../Renderer";
15
+
16
+ interface ExportPopupProps {
17
+ setTogglePopup: React.Dispatch<React.SetStateAction<boolean>>;
18
+ onExport: (callBack: () => void, type: ExportViewModel[]) => void;
19
+ onExportDelete: (callBack: ((args: any) => void) | null, id: string) => void;
20
+ onExportList: (callBack: ((args: any) => void) | null) => void;
21
+ onExportDownload: (
22
+ callBack: ((args: any) => void) | null,
23
+ id: string
24
+ ) => void;
25
+ }
26
+
27
+ export type ExportViewModel = {
28
+ id?: string;
29
+ exportType?: ExportType | null;
30
+ exportDataScope?: string | null;
31
+ validation: { exportType: string; exportDataScope: string };
32
+ };
33
+
34
+ enum Status {
35
+ IN_PROGRESS = "InProcess",
36
+ COMPLETED = "Success",
37
+ FAILED = "Error",
38
+ SCHEDULED = "Scheduled",
39
+ }
40
+
41
+ type ExportHistoryViewModel = {
42
+ id: string;
43
+ fileName: string;
44
+ exportType: ExportType;
45
+ exportDataScope: string;
46
+ date: string;
47
+ status: string;
48
+ src: string;
49
+ referenceId: string;
50
+ };
51
+
52
+ /* const sampleData = [
53
+ {
54
+ id: "1",
55
+ fileName: "Export1",
56
+ date: "2023-10-01",
57
+ status: Status.COMPLETED,
58
+ exportType: ExportType.XLS,
59
+ exportDataScope: "Header List",
60
+ src: "",
61
+ },
62
+ {
63
+ id: "2",
64
+ fileName: "Export2",
65
+ date: "2023-10-02",
66
+ status: Status.IN_PROGRESS,
67
+ exportType: ExportType.XLS,
68
+ exportDataScope: "Header List",
69
+ src: "",
70
+ },
71
+ {
72
+ id: "3",
73
+ fileName: "Export3",
74
+ date: "2023-10-03",
75
+ status: Status.FAILED,
76
+ exportType: ExportType.XLS,
77
+ exportDataScope: "Header List",
78
+ src: "",
79
+ },
80
+ {
81
+ id: "1",
82
+ fileName: "Export1",
83
+ date: "2023-10-01",
84
+ status: Status.COMPLETED,
85
+ exportType: ExportType.XLS,
86
+ exportDataScope: "Header List",
87
+ src: "",
88
+ },
89
+ {
90
+ id: "2",
91
+ fileName: "Export2",
92
+ date: "2023-10-02",
93
+ status: Status.IN_PROGRESS,
94
+ exportType: ExportType.XLS,
95
+ exportDataScope: "Header List",
96
+ src: "",
97
+ },
98
+ {
99
+ id: "3",
100
+ fileName: "Export3",
101
+ date: "2023-10-03",
102
+ status: Status.FAILED,
103
+ exportType: ExportType.XLS,
104
+ exportDataScope: "Header List",
105
+ src: "",
106
+ },
107
+ {
108
+ id: "1",
109
+ fileName: "Export1",
110
+ date: "2023-10-01",
111
+ status: Status.COMPLETED,
112
+ exportType: ExportType.XLS,
113
+ exportDataScope: "Header List",
114
+ src: "",
115
+ },
116
+ {
117
+ id: "2",
118
+ fileName: "Export2",
119
+ date: "2023-10-02",
120
+ status: Status.IN_PROGRESS,
121
+ exportType: ExportType.XLS,
122
+ exportDataScope: "Header List",
123
+ src: "",
124
+ },
125
+ {
126
+ id: "3",
127
+ fileName: "Export3",
128
+ date: "2023-10-03",
129
+ status: Status.FAILED,
130
+ exportType: ExportType.XLS,
131
+ exportDataScope: "Header List",
132
+ src: "",
133
+ },
134
+ ]; */
135
+
136
+ const defaultExport: ExportViewModel = {
137
+ id: undefined,
138
+ exportType: undefined,
139
+ exportDataScope: undefined,
140
+ validation: { exportType: "", exportDataScope: "" },
141
+ };
142
+
143
+ const ExportPopup = (props: ExportPopupProps) => {
144
+ const popupRef = useRef<HTMLDivElement>(null);
145
+
146
+ const [tempExport, setTempExport] = useState<ExportViewModel>(
147
+ _.cloneDeep(defaultExport)
148
+ );
149
+
150
+ const [exportViewModels, setExportViewModels] = useState<ExportViewModel[]>(
151
+ []
152
+ );
153
+ const [exporHistoryList, setExporHistoryList] = useState<
154
+ ExportHistoryViewModel[]
155
+ >([]);
156
+
157
+ useEffect(() => {
158
+ props.onExportList((list: ExportHistoryViewModel[]) => {
159
+ setExporHistoryList(list);
160
+ });
161
+ }, []);
162
+
163
+ useEffect(() => {
164
+ const handleClickOutside = (event: MouseEvent) => {
165
+ const target = event.target as HTMLElement;
166
+ const isInsideMyPopup = target.closest(
167
+ `.tmpl-prvent-outside-click-close`
168
+ );
169
+ if (
170
+ popupRef.current &&
171
+ !popupRef.current.contains(event.target as Node) &&
172
+ !isInsideMyPopup
173
+ ) {
174
+ popupRef.current.classList.add("tmpl-popup-animation-reverse");
175
+ setTimeout(() => {
176
+ props.setTogglePopup ? props.setTogglePopup(false) : null;
177
+ }, 200);
178
+ }
179
+ };
180
+
181
+ document.addEventListener("mousedown", handleClickOutside);
182
+
183
+ return () => {
184
+ document.removeEventListener("mousedown", handleClickOutside);
185
+ };
186
+ }, []);
187
+
188
+ const onAddExport = () => {
189
+ if (!tempExport?.exportType) {
190
+ tempExport.validation.exportType = "required";
191
+ setTempExport({ ...tempExport });
192
+ return;
193
+ }
194
+ if (!tempExport?.exportDataScope) {
195
+ tempExport.validation.exportDataScope = "required";
196
+ setTempExport({ ...tempExport });
197
+ return;
198
+ }
199
+
200
+ const currents = { ...tempExport, id: getUniqueId() };
201
+ setExportViewModels([...exportViewModels, _.cloneDeep(currents)]);
202
+ setTempExport(_.cloneDeep(defaultExport));
203
+ };
204
+
205
+ const onRemoveExport = (id: string) => {
206
+ setExportViewModels(exportViewModels.filter((item) => item.id !== id));
207
+ };
208
+
209
+ const downloadResultHandler = (response: any, fileName: string) => {
210
+ const blob = new Blob([response]);
211
+ const downloadUrl = window.URL.createObjectURL(blob);
212
+ const link = document.createElement("a");
213
+ link.href = downloadUrl;
214
+ link.download = fileName;
215
+ document.body.appendChild(link);
216
+ link.click();
217
+ window.URL.revokeObjectURL(downloadUrl);
218
+ document.body.removeChild(link);
219
+ };
220
+
221
+ const handleDownload = async (fileUrl: string, fileName: string) => {
222
+ try {
223
+ props.onExportDownload(
224
+ (res) => downloadResultHandler(res, fileName),
225
+ fileUrl
226
+ );
227
+ } catch (error) {
228
+ console.error("Download failed:", error);
229
+ }
230
+ };
231
+
232
+ return (
233
+ <div className="tmpl-export-popup" ref={popupRef}>
234
+ <div className="tmpl-export-popup-header">
235
+ <div style={{ width: "150px" }}>
236
+ <DropDownList
237
+ style={{ width: "100%" }}
238
+ data={Object.values(ExportType)}
239
+ defaultItem={"Select..."}
240
+ value={tempExport?.exportType ?? null}
241
+ popupSettings={{ className: `tmpl-prvent-outside-click-close` }}
242
+ onChange={(e) => {
243
+ setTempExport((prev) => ({
244
+ ...prev,
245
+ exportType: e.target.value,
246
+ validation: { ...prev.validation, exportType: "" },
247
+ }));
248
+ }}
249
+ />
250
+ <label className="qo-validation qo-font-xxs" htmlFor="">
251
+ {tempExport.validation.exportType}
252
+ </label>
253
+ </div>
254
+ <div style={{ width: "120px" }}>
255
+ <DropDownList
256
+ data={["Header List", "Line Items"]}
257
+ defaultItem={"Select..."}
258
+ value={tempExport?.exportDataScope ?? null}
259
+ popupSettings={{ className: `tmpl-prvent-outside-click-close` }}
260
+ onChange={(e) => {
261
+ setTempExport((prev) => ({
262
+ ...prev,
263
+ exportDataScope: e.target.value,
264
+ validation: { ...prev.validation, exportDataScope: "" },
265
+ }));
266
+ }}
267
+ />
268
+ <label className="qo-validation qo-font-xxs" htmlFor="">
269
+ {tempExport.validation.exportDataScope}
270
+ </label>
271
+ </div>
272
+
273
+ <FactoryRenderer
274
+ widgetStyle={{
275
+ className: "tmpl-button-sm",
276
+ }}
277
+ name="plus"
278
+ fillMode="clear"
279
+ onClick={onAddExport}
280
+ uiElementType="WIDGET"
281
+ widgetType="ICON"
282
+ title="Add"
283
+ />
284
+ </div>
285
+ <div className="tmpl-export-item-container">
286
+ {exportViewModels.map((exportViewModel, index) => {
287
+ return (
288
+ <div className="tmpl-export-item" key={exportViewModel.id}>
289
+ <div>
290
+ <span>{index + 1}.</span>
291
+ <span>{exportViewModel.exportType}</span>{" "}
292
+ <Button
293
+ svgIcon={arrowRightIcon}
294
+ type="button"
295
+ fillMode={"clear"}
296
+ />
297
+ <span>{exportViewModel.exportDataScope}</span>
298
+ </div>
299
+
300
+ <Button
301
+ svgIcon={trashIcon}
302
+ type="button"
303
+ fillMode={"clear"}
304
+ onClick={() => onRemoveExport(exportViewModel.id ?? "")}
305
+ />
306
+ </div>
307
+ );
308
+ })}
309
+ </div>
310
+ <div className="tmpl-export-divider">
311
+ <Button
312
+ disabled={!exportViewModels.length}
313
+ className="qo-btn qo-btn-xs qo-btn-primary"
314
+ onClick={() => {
315
+ props.onExport(() => {
316
+ props.onExportList((list: ExportHistoryViewModel[]) => {
317
+ setExporHistoryList(list);
318
+ });
319
+ }, exportViewModels);
320
+ }}
321
+ >
322
+ Export All
323
+ </Button>
324
+ </div>
325
+ <h4>Previous Exports</h4>
326
+ <div className="tmpl-export-history-items-container">
327
+ {exporHistoryList.map((exportHistoryViewModel) => {
328
+ return (
329
+ <div
330
+ className="tmpl-export-history-item"
331
+ key={exportHistoryViewModel.id}
332
+ >
333
+ <div className="tmpl-export-history-item-info">
334
+ <p>{exportHistoryViewModel.fileName}</p>
335
+ <p>{exportHistoryViewModel.date}</p>
336
+ </div>
337
+ <div className="tmpl-export-history-item-action">
338
+ {exportHistoryViewModel.status === Status.COMPLETED ? (
339
+ <Button
340
+ svgIcon={downloadIcon}
341
+ type="button"
342
+ fillMode={"clear"}
343
+ onClick={() =>
344
+ handleDownload(
345
+ exportHistoryViewModel.referenceId,
346
+ exportHistoryViewModel.fileName
347
+ )
348
+ }
349
+ />
350
+ ) : exportHistoryViewModel.status === Status.FAILED ? (
351
+ <Button
352
+ svgIcon={fileErrorIcon}
353
+ type="button"
354
+ fillMode={"clear"}
355
+ />
356
+ ) : (
357
+ <FactoryRenderer
358
+ name="load"
359
+ uiElementType="WIDGET"
360
+ widgetType="ICON"
361
+ fillMode="clear"
362
+ title=""
363
+ />
364
+ /* <span className={exportHistoryViewModel.status}>
365
+ {exportHistoryViewModel.status}
366
+ </span> */
367
+ )}
368
+ <Button
369
+ svgIcon={trashIcon}
370
+ type="button"
371
+ fillMode={"clear"}
372
+ onClick={() =>
373
+ props.onExportDelete(() => {
374
+ props.onExportList((list: ExportHistoryViewModel[]) => {
375
+ setExporHistoryList(list);
376
+ });
377
+ }, exportHistoryViewModel.id)
378
+ }
379
+ />
380
+ </div>
381
+ </div>
382
+ );
383
+ })}
384
+ </div>
385
+ </div>
386
+ );
387
+ };
388
+ export default ExportPopup;
@@ -0,0 +1,21 @@
1
+ import FactoryRenderer from "../../../../Renderer";
2
+
3
+ export type ExportViewProps = {
4
+ disabled: boolean;
5
+ onClick: () => void;
6
+ };
7
+ const ExportView = (props: ExportViewProps) => {
8
+ return (
9
+ <FactoryRenderer
10
+ onClick={props.onClick}
11
+ title="Export"
12
+ rootStyle={{ className: "tmpl-export" }}
13
+ widgetStyle={{ className: "tmpl-button", inline: { width: "100%" } }}
14
+ uiElementType="WIDGET"
15
+ widgetType="ICON"
16
+ name="download"
17
+ disabled={props.disabled}
18
+ />
19
+ );
20
+ };
21
+ export default ExportView;
@@ -0,0 +1,4 @@
1
+ export enum ExportType {
2
+ XLS = "XLS",
3
+ CSV = "CSV",
4
+ }
@@ -0,0 +1,95 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { useEffect, useState } from "react";
3
+ import GlobalSearchView from "./GlobalSearchView";
4
+
5
+ export type GlobalSearchProps = {
6
+ uiElementGroupData: Record<string, any>;
7
+ visible: boolean;
8
+ disabled: boolean;
9
+ config: { uiElementGroupId: string };
10
+ onModelUpdate: (
11
+ callBack: ((args: any) => void) | null,
12
+ fieldName: string,
13
+ value: any
14
+ ) => void;
15
+ };
16
+
17
+ const GlobalSearch = (props: GlobalSearchProps) => {
18
+ const [searchValue, setSearchValue] = useState("");
19
+
20
+ useEffect(() => {
21
+ if (props.uiElementGroupData?.globalSearch?.filterQuery !== searchValue) {
22
+ setSearchValue(props.uiElementGroupData?.globalSearch?.filterQuery);
23
+ }
24
+ setSearchValue(props.uiElementGroupData?.globalSearch?.filterQuery);
25
+ }, [props.uiElementGroupData?.globalSearch?.filterQuery]);
26
+
27
+ const onSearch = () => {
28
+ if (props.uiElementGroupData.globalSearch.filterQuery) {
29
+ const updatedUiElementGroupData = {
30
+ ...props.uiElementGroupData,
31
+ globalSearch: {
32
+ ...props.uiElementGroupData.globalSearch,
33
+ appliedQuery: props.uiElementGroupData.globalSearch.filterQuery,
34
+ },
35
+ pagination: { ...props.uiElementGroupData.pagination, skip: 0 },
36
+ };
37
+
38
+ props.onModelUpdate(
39
+ null,
40
+ props.config.uiElementGroupId,
41
+ updatedUiElementGroupData
42
+ );
43
+ }
44
+ };
45
+
46
+ const onClearSearch = () => {
47
+ const updatedUiElementGroupData = {
48
+ ...props.uiElementGroupData,
49
+ globalSearch: {
50
+ ...props.uiElementGroupData.globalSearch,
51
+ filterQuery: "",
52
+ appliedQuery: "",
53
+ },
54
+ pagination: { ...props.uiElementGroupData.pagination, skip: 0 },
55
+ };
56
+ props.onModelUpdate(
57
+ null,
58
+ props.config.uiElementGroupId,
59
+ updatedUiElementGroupData
60
+ );
61
+ };
62
+
63
+ const onSearchChange = (searchKey: string | undefined) => {
64
+ if (props.uiElementGroupData.globalSearch.filterQuery && !searchKey) {
65
+ onClearSearch();
66
+ } else if (searchKey) {
67
+ const updatedColumnChooser = {
68
+ ...props.uiElementGroupData,
69
+ globalSearch: {
70
+ ...props.uiElementGroupData.globalSearch,
71
+ filterQuery: searchKey,
72
+ },
73
+ };
74
+
75
+ props.onModelUpdate(
76
+ null,
77
+ props.config.uiElementGroupId,
78
+ updatedColumnChooser
79
+ );
80
+ }
81
+ };
82
+
83
+ return props.visible ? (
84
+ <GlobalSearchView
85
+ disabled={props.disabled}
86
+ value={searchValue}
87
+ onSearchChange={onSearchChange}
88
+ onClearSearch={onClearSearch}
89
+ onSearch={onSearch}
90
+ />
91
+ ) : (
92
+ <></>
93
+ );
94
+ };
95
+ export default GlobalSearch;
@@ -0,0 +1,65 @@
1
+ import {
2
+ InputClearValue,
3
+ InputSeparator,
4
+ TextBox,
5
+ } from "@progress/kendo-react-inputs";
6
+ import FactoryRenderer from "../../../../Renderer";
7
+ export type GlobalSearchViewProps = {
8
+ disabled: boolean;
9
+ value: string | undefined;
10
+ onSearchChange: (searchKey: string | undefined) => void;
11
+ onClearSearch: () => void;
12
+ onSearch: () => void;
13
+ };
14
+
15
+ const GlobalSearchView = (props: GlobalSearchViewProps) => {
16
+ return (
17
+ <TextBox
18
+ disabled={props.disabled}
19
+ value={props.value}
20
+ className="tmpl-global-search tmpl-input"
21
+ placeholder="Type here to search . . ."
22
+ onKeyUp={(e) => {
23
+ if (e.key === "Enter" || e.code === "Enter") {
24
+ props.onSearch();
25
+ }
26
+ }}
27
+ onChange={(e) => {
28
+ props.onSearchChange(e.target.value as string);
29
+ }}
30
+ suffix={() =>
31
+ props.value ? (
32
+ <>
33
+ <InputSeparator />
34
+ <InputClearValue onClick={props.onClearSearch}>
35
+ <FactoryRenderer
36
+ name="close"
37
+ uiElementType="WIDGET"
38
+ widgetType="ICON"
39
+ fillMode="clear"
40
+ title=""
41
+ />
42
+ </InputClearValue>
43
+ </>
44
+ ) : (
45
+ <></>
46
+ )
47
+ }
48
+ prefix={() => (
49
+ <>
50
+ <InputClearValue onClick={props.onSearch}>
51
+ <FactoryRenderer
52
+ name="search"
53
+ uiElementType="WIDGET"
54
+ widgetType="ICON"
55
+ fillMode="clear"
56
+ title=""
57
+ />
58
+ </InputClearValue>
59
+ <InputSeparator />
60
+ </>
61
+ )}
62
+ />
63
+ );
64
+ };
65
+ export default GlobalSearchView;
@@ -0,0 +1,115 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { cloneElement, useEffect, useState } from "react";
3
+ import { MultiSelect } from "@progress/kendo-react-dropdowns";
4
+ import _ from "lodash";
5
+ import FactoryRenderer from "../../../../Renderer";
6
+
7
+ const ItemRenderMultiSelect = ({ li, itemProps, selectedGroups }: any) => {
8
+ const itemChildren = (
9
+ <a className="drLink">
10
+ <input
11
+ className="drLink_check"
12
+ type="checkbox"
13
+ name={itemProps.dataItem.value}
14
+ checked={
15
+ selectedGroups.length > 0
16
+ ? selectedGroups.some(
17
+ (x: { label: string; value: string }) =>
18
+ x.value === itemProps.dataItem.value
19
+ )
20
+ : false
21
+ }
22
+ />
23
+ {li.props.children}
24
+ </a>
25
+ );
26
+ return cloneElement(li, li.props, itemChildren);
27
+ };
28
+
29
+ interface GroupByPopUpProps {
30
+ selectedGroups: { label: string; value: string }[];
31
+ groupableFields: { label: string; value: string }[];
32
+ onPopupToggle: () => void;
33
+ onGroupApply: (groupField: { label: string; value: string }[]) => void;
34
+ }
35
+
36
+ const GroupByPopUp = (props: GroupByPopUpProps) => {
37
+ const [groupFields, setGroupFields] = useState(props.selectedGroups);
38
+
39
+ useEffect(() => {
40
+ setGroupFields(props.selectedGroups);
41
+ }, [JSON.stringify(props.selectedGroups)]);
42
+
43
+ const onGroupChange = (e: any) => {
44
+ const grouped = _.groupBy(e.value, "value");
45
+ const duplicateValues = Object.values(grouped)
46
+ .filter((group) => group.length > 1)
47
+ .flat();
48
+ const groups = e.value.filter(
49
+ (f: any) => !duplicateValues.some((d) => d.value === f.value)
50
+ );
51
+ setGroupFields(groups);
52
+ };
53
+
54
+ return (
55
+ <div className="tmpl-group-filter-popup">
56
+ <div className="tmpl-group-filter-popup-header">
57
+ <div>
58
+ <h2>Select a new group</h2>
59
+ <p>
60
+ This option would allow you to select from existing set of pre-built
61
+ groups
62
+ </p>
63
+ </div>
64
+ <FactoryRenderer
65
+ onClick={props.onPopupToggle}
66
+ widgetStyle={{ className: "tmpl-button" }}
67
+ name="close"
68
+ uiElementType="WIDGET"
69
+ fillMode="clear"
70
+ widgetType="ICON"
71
+ title=""
72
+ />
73
+ </div>
74
+ <div className="tmpl-group-filter-popup-body">
75
+ <div className="tmpl-dropdown-container">
76
+ <span>Group By</span>
77
+ <MultiSelect
78
+ onChange={onGroupChange}
79
+ textField="label"
80
+ data={props.groupableFields}
81
+ itemRender={(li: any, itemProps: any) => (
82
+ <ItemRenderMultiSelect
83
+ li={li}
84
+ itemProps={itemProps}
85
+ selectedGroups={groupFields}
86
+ />
87
+ )}
88
+ className="tmpl-dropdown"
89
+ value={groupFields}
90
+ tags={
91
+ groupFields.length > 0
92
+ ? [
93
+ {
94
+ text: `${groupFields.length} selected`,
95
+ data: [...groupFields],
96
+ },
97
+ ]
98
+ : []
99
+ }
100
+ />
101
+ </div>
102
+ <div className="tmpl-group-filter-popup-footer">
103
+ <FactoryRenderer
104
+ onClick={() => props.onGroupApply(groupFields)}
105
+ widgetStyle={{ className: "tmpl-button" }}
106
+ uiElementType="WIDGET"
107
+ widgetType="BUTTON"
108
+ title="Save And Continue"
109
+ />
110
+ </div>
111
+ </div>
112
+ </div>
113
+ );
114
+ };
115
+ export default GroupByPopUp;