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,266 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ import UserViewView from "./UserViewView";
4
+ import { useEffect, useState } from "react";
5
+ import { SYSTEM_DEFAULT } from "../../../../constant";
6
+ import _ from "lodash";
7
+ import CreateScreenPopup from "./CreateScreenPopup";
8
+ import { View } from "../../data/userView";
9
+ import { loadScreensAction } from "./actions";
10
+ import { saveSystemDefaultInSession } from "./helpers/saveSystemDefaultInSession";
11
+ import getSavedSystemDefault from "./helpers/getSavedSystemDefault";
12
+ import { getInitialData } from "../../data";
13
+ import { FilterTarget } from "../../data/advancedSearch";
14
+ import {
15
+ FilterExpression,
16
+ FilterTarget as FilterTargetQuick,
17
+ } from "../../data/quickFilter";
18
+ import { DataWidgetType } from "../Setting/Setting";
19
+ import { ChooserColumn } from "../../data/setting";
20
+ import { getUniqueId } from "../../helper/getUniqueId";
21
+ import { globalSearchHandler } from "./helpers/uiElementHandler/globalSearchHandler";
22
+ import { advancedSearchHandler } from "./helpers/uiElementHandler/advancedSearchHandler";
23
+ import { groupByHandler } from "./helpers/uiElementHandler/groupByHandler";
24
+ import { quickFilterHandler } from "./helpers/uiElementHandler/quickFilterHandler";
25
+ import { settingHandler } from "./helpers/uiElementHandler/settingHandler";
26
+ import { sortHandler } from "./helpers/uiElementHandler/sortHandler";
27
+ import { paginationHandler } from "./helpers/uiElementHandler/paginationHandler";
28
+ import { localSearch } from "./helpers/uiElementHandler/localSearchHandler";
29
+
30
+ export const _defaultView = {
31
+ id: SYSTEM_DEFAULT,
32
+ isDefault: false,
33
+ name: "System Default",
34
+ isSelected: false,
35
+ };
36
+
37
+ export type UserViewProps = {
38
+ visible: boolean;
39
+ disabled: boolean;
40
+ enableDefaultSaveInSession: boolean;
41
+ advancedFilterableFields: FilterTarget[];
42
+ quickFilterRows: FilterTargetQuick[];
43
+ activeDataWidgetType: DataWidgetType;
44
+ columns: ChooserColumn[];
45
+ config: { uiElementGroupId: string };
46
+ uiElementGroupData: Record<string, any>;
47
+ onModelUpdate: (
48
+ callBack: ((args: any) => void) | null,
49
+ fieldName: string,
50
+ value: any
51
+ ) => void;
52
+ };
53
+
54
+ const UserView = (props: UserViewProps) => {
55
+ const [togglePopup, setTogglePopup] = useState(false);
56
+
57
+ useEffect(() => {
58
+ if (props.uiElementGroupData?.processing === false) {
59
+ loadUserViews();
60
+ }
61
+ }, [props.uiElementGroupData?.processing]);
62
+
63
+ useEffect(() => {
64
+ //call custom view service and get saved data related to default custom view
65
+ if (props.uiElementGroupData?.reset > 0) {
66
+ const selectedView: View =
67
+ props.uiElementGroupData?.userView?.selectedView;
68
+
69
+ initScreenData(
70
+ props.uiElementGroupData?.userView?.allViews ?? [],
71
+ selectedView,
72
+ true
73
+ );
74
+ }
75
+ }, [props.uiElementGroupData?.reset]);
76
+
77
+ const initScreenData = async (
78
+ allScreens: View[],
79
+ selectedScreen: View,
80
+ isReset?: boolean
81
+ ) => {
82
+ const initialData = getInitialData();
83
+ initialData.advancedSearch.filterRows[0].allPropertieseToFilter =
84
+ _.cloneDeep(props.advancedFilterableFields);
85
+ initialData.enableDataLoading = true;
86
+ initialData.quickFilter.filterRows = props.quickFilterRows.map(
87
+ (filterRow) => {
88
+ const filterExpression: FilterExpression = {
89
+ id: "QUFS__" + getUniqueId(),
90
+ propertyToFilter: _.cloneDeep(filterRow),
91
+ allValues: [],
92
+ value: undefined,
93
+ };
94
+ return filterExpression;
95
+ }
96
+ );
97
+ initialData.setting.activeDataWidgetType =
98
+ props.uiElementGroupData?.setting?.activeDataWidgetType ??
99
+ props.activeDataWidgetType;
100
+ initialData.setting.columnChooser.allColumns = _.cloneDeep(props.columns);
101
+ initialData.setting.columnChooser.appliedColumns = _.cloneDeep(
102
+ props.columns.filter((c) => c.selected)
103
+ );
104
+ initialData.setting.columnChooser.selectedColumns = _.cloneDeep(
105
+ props.columns.filter((c) => c.selected)?.sort((a, b) => a.order - b.order)
106
+ );
107
+ initialData.userView.allViews = allScreens;
108
+ initialData.userView.selectedView = selectedScreen;
109
+
110
+ const mergedInitialData = {
111
+ ...props.uiElementGroupData,
112
+ ...initialData,
113
+ };
114
+ if (isReset) {
115
+ mergedInitialData.localSearch = [];
116
+ mergedInitialData.sort = mergedInitialData.defaultSort;
117
+ mergedInitialData.pagination = mergedInitialData.defaultPagination;
118
+ }
119
+
120
+ if (selectedScreen)
121
+ await loadSelectedViewData(selectedScreen, mergedInitialData);
122
+
123
+ props.onModelUpdate(null, props.config.uiElementGroupId, mergedInitialData);
124
+ };
125
+
126
+ const loadUserViews = async () => {
127
+ const screens = await loadScreensAction(props.config.uiElementGroupId);
128
+
129
+ const defaultPosition = screens.findIndex((s) => s.isDefault === true);
130
+ const defaultView = _.cloneDeep(_defaultView);
131
+
132
+ if (defaultPosition < 0) {
133
+ defaultView.isDefault = true;
134
+ defaultView.isSelected = true;
135
+ }
136
+
137
+ const deserializedScreens: View[] = [defaultView, ...screens];
138
+ const selectedScreen = deserializedScreens.find(
139
+ (view: View) => view.isSelected === true
140
+ );
141
+ if (selectedScreen) initScreenData(deserializedScreens, selectedScreen);
142
+ };
143
+
144
+ const loadSelectedViewData = async (selectedView: View, initialData: any) => {
145
+ let savedFilters;
146
+ if (
147
+ selectedView.id === SYSTEM_DEFAULT &&
148
+ props.enableDefaultSaveInSession
149
+ ) {
150
+ const elementId = `${props.config.uiElementGroupId}_${SYSTEM_DEFAULT}`;
151
+ savedFilters = getSavedSystemDefault(elementId);
152
+ } else {
153
+ //TODO: Load data from server
154
+ }
155
+ if (savedFilters) {
156
+ globalSearchHandler(savedFilters.globalSearch, initialData);
157
+ advancedSearchHandler(savedFilters.advancedSearch, initialData);
158
+ groupByHandler(savedFilters?.groupedBy, initialData);
159
+ quickFilterHandler(savedFilters?.quickFilter, initialData);
160
+ settingHandler(savedFilters?.setting, initialData);
161
+ sortHandler(savedFilters?.sort, initialData);
162
+ paginationHandler(savedFilters?.pagination, initialData);
163
+ localSearch(savedFilters, initialData);
164
+ }
165
+ };
166
+
167
+ const createUserView = async (screenName: string) => {
168
+ const deserializedScreens: View[] = [
169
+ ...props.uiElementGroupData.userView.allViews,
170
+ { id: screenName, isDefault: false, name: screenName, isSelected: false },
171
+ ];
172
+ //TODO: CALL THE SERVICE AND SAVE THE NEW CUSTOM VIEW
173
+ props.uiElementGroupData.userView.allViews = deserializedScreens;
174
+ props.onModelUpdate(
175
+ null,
176
+ props.config.uiElementGroupId,
177
+ props.uiElementGroupData
178
+ );
179
+ onViewToggle();
180
+ };
181
+
182
+ const saveUserView = () => {};
183
+
184
+ const deleteUserView = (id: string) => {};
185
+
186
+ const setViewAsDefault = (id: string) => {
187
+ props.uiElementGroupData.userView.allViews =
188
+ props.uiElementGroupData.userView.allViews.map((view: View) => {
189
+ if (view.id === id) {
190
+ view.isDefault = true;
191
+ } else {
192
+ view.isDefault = false;
193
+ }
194
+ return view;
195
+ });
196
+ props.onModelUpdate(
197
+ null,
198
+ props.config.uiElementGroupId,
199
+ props.uiElementGroupData
200
+ );
201
+ };
202
+
203
+ const markAsSelected = (view: View) => {
204
+ props.uiElementGroupData.userView.allViews =
205
+ props.uiElementGroupData.userView.allViews.map((v: View) => {
206
+ v.isSelected = v.id === view.id;
207
+ return v;
208
+ });
209
+ props.uiElementGroupData.userView.selectedView = view;
210
+ if (
211
+ props.uiElementGroupData.userView.selectedView?.id === SYSTEM_DEFAULT &&
212
+ props.enableDefaultSaveInSession
213
+ ) {
214
+ saveSystemDefaultInSession(
215
+ props.config.uiElementGroupId,
216
+ props.uiElementGroupData
217
+ );
218
+ }
219
+
220
+ let savedFilters = null;
221
+
222
+ if (view.id === SYSTEM_DEFAULT && props.enableDefaultSaveInSession) {
223
+ const elementId = `${props.config.uiElementGroupId}_${SYSTEM_DEFAULT}`;
224
+ savedFilters = getSavedSystemDefault(elementId);
225
+ } else if (view.id !== SYSTEM_DEFAULT) {
226
+ // savedFilters = customViewFilters ::setup custom view filters
227
+ }
228
+
229
+ if (savedFilters) {
230
+ //TODO: handleUpdateStateWithSavedViewFilters
231
+ }
232
+ props.onModelUpdate(
233
+ null,
234
+ props.config.uiElementGroupId,
235
+ props.uiElementGroupData
236
+ );
237
+ };
238
+
239
+ const onViewToggle = () => {
240
+ setTogglePopup((prevToggle) => !prevToggle);
241
+ };
242
+
243
+ return props.visible ? (
244
+ <div className="tmpl-screen-view-container">
245
+ <UserViewView
246
+ selectedView={props.uiElementGroupData?.userView?.selectedView}
247
+ allViews={props.uiElementGroupData?.userView?.allViews ?? []}
248
+ disabled={props.disabled}
249
+ onViewToggle={onViewToggle}
250
+ onDelete={deleteUserView}
251
+ setDefault={setViewAsDefault}
252
+ onSave={saveUserView}
253
+ markAsSelected={markAsSelected}
254
+ />
255
+ {togglePopup && !props.disabled && (
256
+ <CreateScreenPopup
257
+ create={createUserView}
258
+ onViewToggle={onViewToggle}
259
+ />
260
+ )}
261
+ </div>
262
+ ) : (
263
+ <></>
264
+ );
265
+ };
266
+ export default UserView;
@@ -0,0 +1,67 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { cloneElement } from "react";
3
+ import ViewItem from "./ViewItem";
4
+ import { DropDownList } from "@progress/kendo-react-dropdowns";
5
+ import { Button } from "@progress/kendo-react-buttons";
6
+ import { View } from "../../data/userView";
7
+
8
+ export type UserViewViewProps = {
9
+ selectedView?: View;
10
+ allViews: View[];
11
+ disabled: boolean;
12
+ onViewToggle: () => void;
13
+ setDefault: (id: string) => void;
14
+ onDelete: (id: string) => void;
15
+ onSave: () => void;
16
+ markAsSelected: (view: View) => void;
17
+ };
18
+
19
+ const UserViewView = ({
20
+ selectedView,
21
+ allViews,
22
+ disabled,
23
+ onViewToggle,
24
+ setDefault,
25
+ onDelete,
26
+ onSave,
27
+ markAsSelected,
28
+ }: UserViewViewProps) => {
29
+ return (
30
+ <DropDownList
31
+ disabled={disabled}
32
+ data={allViews}
33
+ textField="name"
34
+ dataItemKey="id"
35
+ value={selectedView}
36
+ title="Screen View"
37
+ className="tmpl-screen-view tmpl-dropdown"
38
+ footer={
39
+ <div className="tmpl-screen-view-footer" onClick={onViewToggle}>
40
+ <Button size="small" themeColor="primary" title="Create View">
41
+ + Create View
42
+ </Button>
43
+ </div>
44
+ }
45
+ itemRender={(li, itemProp: any) =>
46
+ cloneElement(
47
+ li,
48
+ li.props,
49
+ <ViewItem
50
+ view={itemProp.dataItem as View}
51
+ selectedView={selectedView}
52
+ markAsSelected={markAsSelected}
53
+ onDelete={onDelete}
54
+ setDefault={setDefault}
55
+ onSave={onSave}
56
+ />
57
+ )
58
+ }
59
+ fillMode={"flat"}
60
+ popupSettings={{
61
+ popupClass: "tmpl-button-popup",
62
+ }}
63
+ />
64
+ );
65
+ };
66
+
67
+ export default UserViewView;
@@ -0,0 +1,94 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { SYSTEM_DEFAULT } from "../../../../constant";
3
+ import { View } from "../../data/userView";
4
+ import FactoryRenderer from "../../../../Renderer";
5
+
6
+ type ViewItem = {
7
+ view: View;
8
+ selectedView?: View;
9
+ onDelete: (id: string) => void;
10
+ onSave: () => void;
11
+ markAsSelected: (view: View) => void;
12
+ setDefault: (id: string) => void;
13
+ };
14
+
15
+ const ViewItem = ({
16
+ view,
17
+ selectedView,
18
+ onDelete,
19
+ onSave,
20
+ markAsSelected,
21
+ setDefault,
22
+ }: ViewItem) => {
23
+ const isSelected = view.id === selectedView?.id;
24
+ const isDefault = view.id === SYSTEM_DEFAULT;
25
+
26
+ const handleDelete = (e: React.MouseEvent) => {
27
+ onDelete(view.id);
28
+ e.stopPropagation();
29
+ };
30
+
31
+ const handleSave = (e: React.MouseEvent) => {
32
+ onSave();
33
+ e.stopPropagation();
34
+ };
35
+
36
+ const handleSetDefault = (e: React.MouseEvent) => {
37
+ setDefault(view.id);
38
+ e.stopPropagation();
39
+ };
40
+
41
+ return (
42
+ <div
43
+ className={`tmpl-screen-view-item ${
44
+ isSelected ? "tmpl-view-item-heighlight" : ""
45
+ }`}
46
+ onClick={() => markAsSelected(view)}
47
+ >
48
+ <p className="tmpl-screen-view-name">{view.name}</p>
49
+ {!isDefault && (
50
+ <FactoryRenderer
51
+ widgetStyle={{
52
+ className: "tmpl-button-sm tmpl-delete-icon",
53
+ }}
54
+ name="delete"
55
+ fillMode="clear"
56
+ onClick={handleDelete}
57
+ uiElementType="WIDGET"
58
+ widgetType="ICON"
59
+ title="Delete"
60
+ />
61
+ )}
62
+ {!isDefault && isSelected && (
63
+ <FactoryRenderer
64
+ widgetStyle={{
65
+ className: "tmpl-button-sm tmpl-delete-icon",
66
+ }}
67
+ name="save"
68
+ fillMode="clear"
69
+ onClick={handleSave}
70
+ uiElementType="WIDGET"
71
+ widgetType="ICON"
72
+ title="Save"
73
+ />
74
+ )}
75
+ {view.isDefault ? (
76
+ <label>Default</label>
77
+ ) : (
78
+ <FactoryRenderer
79
+ widgetStyle={{
80
+ className: "tmpl-button-sm tmpl-set-default",
81
+ }}
82
+ name="star"
83
+ fillMode="clear"
84
+ onClick={handleSetDefault}
85
+ uiElementType="WIDGET"
86
+ widgetType="ICON"
87
+ title="Set Default"
88
+ />
89
+ )}
90
+ </div>
91
+ );
92
+ };
93
+
94
+ export default ViewItem;
@@ -0,0 +1,20 @@
1
+ import { getDeserializedScreenViewList } from "../helpers/deserializedScreenView";
2
+ import { loadScreenService } from "../services";
3
+
4
+ export type ScreenViewProps = {
5
+ id: string;
6
+ viewName: string;
7
+ selected: boolean;
8
+ };
9
+ export const loadScreensAction = async (targetEntity: string) => {
10
+ //TODO: CALL THE SERVICE AND GET ALL CUSTOM VIEWS
11
+ loadScreenService(targetEntity);
12
+
13
+ const screens: ScreenViewProps[] = [
14
+ { id: "Test_01", selected: false, viewName: "Test 1" },
15
+ { id: "Test_02", selected: false, viewName: "Test 2" },
16
+ ];
17
+ return getDeserializedScreenViewList(screens);
18
+ };
19
+ export const createScreenAction = () => {};
20
+ export const deleteScreenAction = () => {};
@@ -0,0 +1,19 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ import { View } from "../../../data/userView";
4
+ import { ScreenViewProps } from "../actions";
5
+
6
+ export const deserializedScreenView = (screenData: ScreenViewProps): View => {
7
+ return {
8
+ id: screenData.id,
9
+ name: screenData.viewName,
10
+ isDefault: screenData.selected,
11
+ isSelected: screenData.selected,
12
+ };
13
+ };
14
+
15
+ export const getDeserializedScreenViewList = (
16
+ screenData: ScreenViewProps[]
17
+ ): View[] => {
18
+ return screenData.map((s) => deserializedScreenView(s));
19
+ };
@@ -0,0 +1,18 @@
1
+ import { SYSTEM_DEFAULT } from "../../../../../constant";
2
+
3
+ const getSavedSystemDefault = (uiElementGroupId: string) => {
4
+ try {
5
+ const session = sessionStorage.getItem(
6
+ `${uiElementGroupId}_${SYSTEM_DEFAULT}`
7
+ );
8
+ if (session) {
9
+ return JSON.parse(session);
10
+ }
11
+ return null;
12
+ } catch (error) {
13
+ console.error("Error parsing session data:", error);
14
+ }
15
+ return null;
16
+ };
17
+
18
+ export default getSavedSystemDefault;
@@ -0,0 +1,12 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { SYSTEM_DEFAULT } from "../../../../../constant";
3
+
4
+ export const saveSystemDefaultInSession = (
5
+ uiElementGroupId: string,
6
+ uiElementGroupData?: Record<string, any>
7
+ ) => {
8
+ sessionStorage.setItem(
9
+ `${uiElementGroupId}_${SYSTEM_DEFAULT}`,
10
+ JSON.stringify(uiElementGroupData)
11
+ );
12
+ };
@@ -0,0 +1,32 @@
1
+ import _ from "lodash";
2
+ import {
3
+ FilterExpression,
4
+ FilterExpressionViewModel,
5
+ } from "../../../../data/advancedSearch";
6
+
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ export const advancedSearchHandler = (
9
+ advancedSearch: any,
10
+ initialData: any
11
+ ) => {
12
+ if (advancedSearch?.appliedQuery.criteria) {
13
+ initialData.advancedSearch.appliedQuery = _.cloneDeep(
14
+ advancedSearch?.appliedQuery
15
+ );
16
+ initialData.advancedSearch.criteria = advancedSearch?.appliedQuery.criteria;
17
+
18
+ const filterExpressionViewModel: FilterExpressionViewModel =
19
+ initialData.advancedSearch.filterRows[0];
20
+
21
+ initialData.advancedSearch.filterRows = _.cloneDeep(
22
+ advancedSearch?.appliedQuery?.filters.map(
23
+ (filter: FilterExpression, index: number) => {
24
+ const filterRow = _.cloneDeep(filterExpressionViewModel);
25
+ filterRow.id = filter.id;
26
+ filterRow.idLabel = index.toString();
27
+ filterRow.selectedFilter = filter;
28
+ }
29
+ )
30
+ );
31
+ }
32
+ };
@@ -0,0 +1,13 @@
1
+ import _ from "lodash";
2
+
3
+ /* eslint-disable @typescript-eslint/no-explicit-any */
4
+ export const globalSearchHandler = (globalSearch: any, initialData: any) => {
5
+ if (globalSearch?.appliedQuery) {
6
+ initialData.globalSearch.appliedQuery = _.cloneDeep(
7
+ globalSearch?.appliedQuery
8
+ );
9
+ initialData.globalSearch.filterQuery = _.cloneDeep(
10
+ globalSearch?.appliedQuery
11
+ );
12
+ }
13
+ };
@@ -0,0 +1,8 @@
1
+ import _ from "lodash";
2
+
3
+ /* eslint-disable @typescript-eslint/no-explicit-any */
4
+ export const groupByHandler = (groupedBy: any, initialData: any) => {
5
+ if (groupedBy?.appliedGroups) {
6
+ initialData.groupedBy.appliedGroups = _.cloneDeep(groupedBy?.appliedGroups);
7
+ }
8
+ };
@@ -0,0 +1,6 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ export const localSearch = (localSearch: any, initialData: any) => {
3
+ if (localSearch) {
4
+ initialData.localSearch = localSearch;
5
+ }
6
+ };
@@ -0,0 +1,6 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ export const paginationHandler = (pagination: any, initialData: any) => {
3
+ if (pagination) {
4
+ initialData.pagination = pagination;
5
+ }
6
+ };
@@ -0,0 +1,13 @@
1
+ import _ from "lodash";
2
+
3
+ /* eslint-disable @typescript-eslint/no-explicit-any */
4
+ export const quickFilterHandler = (quickFilter: any, initialData: any) => {
5
+ if (quickFilter?.filterRows) {
6
+ initialData.quickFilter.filterRows = _.cloneDeep(quickFilter?.filterRows);
7
+ }
8
+ if (quickFilter?.appliedQuery) {
9
+ initialData.quickFilter.appliedQuery = _.cloneDeep(
10
+ quickFilter?.appliedQuery
11
+ );
12
+ }
13
+ };
@@ -0,0 +1,19 @@
1
+ import _ from "lodash";
2
+
3
+ /* eslint-disable @typescript-eslint/no-explicit-any */
4
+ export const settingHandler = (setting: any, initialData: any) => {
5
+ if (setting?.activeDataWidgetType) {
6
+ initialData.setting.activeDataWidgetType = setting?.activeDataWidgetType;
7
+ }
8
+ if (setting?.columnChooser?.appliedColumns) {
9
+ initialData.setting.columnChooser.allColumns = _.cloneDeep(
10
+ setting?.columnChooser?.allColumns
11
+ );
12
+ initialData.setting.columnChooser.appliedColumns = _.cloneDeep(
13
+ setting?.columnChooser?.appliedColumns
14
+ );
15
+ initialData.setting.columnChooser.selectedColumns = _.cloneDeep(
16
+ setting?.columnChooser?.selectedColumns
17
+ );
18
+ }
19
+ };
@@ -0,0 +1,6 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ export const sortHandler = (sort: any, initialData: any) => {
3
+ if (sort) {
4
+ initialData.sort = sort;
5
+ }
6
+ };
@@ -0,0 +1,63 @@
1
+ import axios from "axios";
2
+
3
+ /* eslint-disable no-empty */
4
+ const getHeader = (): HeadersInit => {
5
+ return {
6
+ Accept: "application/json",
7
+ "Content-Type": "application/json",
8
+ };
9
+ };
10
+
11
+ const createService = async ({
12
+ screenName,
13
+ targetEntity,
14
+ }: {
15
+ screenName: string;
16
+ targetEntity: string;
17
+ }) => {
18
+ try {
19
+ const response = await fetch(
20
+ "https://gwtsession-1226.appspot.com/userScreenService/saveView",
21
+ {
22
+ method: "POST",
23
+ headers: getHeader(),
24
+ body: JSON.stringify({
25
+ userId: "13494",
26
+ organizationId: "5958",
27
+ screenId: targetEntity,
28
+ viewName: screenName,
29
+ columnChooser: null,
30
+ advanceFilter: null,
31
+ groupBy: null,
32
+ gridMetaData: null,
33
+ }),
34
+ }
35
+ );
36
+ return response;
37
+ } catch (error) {
38
+ console.error("Error creating service:", error);
39
+ throw error;
40
+ }
41
+ };
42
+
43
+ const loadScreenService = async (targetEntity: string) => {
44
+ if (!targetEntity) {
45
+ console.error("Target entity is required to load screen service.");
46
+ return;
47
+ }
48
+ try {
49
+ await axios.post(
50
+ "https://gwtsession-1226.appspot.com/userScreenService/getViewList",
51
+ {
52
+ organizationId: "5958",
53
+ screenId: targetEntity,
54
+ userId: "13494",
55
+ applicationCode: "ECOMERP",
56
+ }
57
+ );
58
+ } catch (error) {
59
+ console.error("Error loading service:", error);
60
+ }
61
+ };
62
+
63
+ export { loadScreenService, createService };