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,437 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import FilterPopupView from "./FilterPopupView";
3
+ import { Operator, OperatorCreiteria } from "../../enum";
4
+ import {
5
+ FilterExpression,
6
+ FilterExpressionViewModel,
7
+ FilterTarget,
8
+ } from "../../data/advancedSearch";
9
+ import { getAdvancedSearchIntitialFilterRow } from "./helper/AdvancedSearchFunctions";
10
+ import _ from "lodash";
11
+
12
+ interface FilterPopupProps {
13
+ uiElementGroupData: Record<string, any>;
14
+ filterableFields: FilterTarget[];
15
+ config: { uiElementGroupId: string };
16
+ handlePopupShow: () => void;
17
+ onModelUpdate: (
18
+ callBack: ((args: any) => void) | null,
19
+ fieldName: string,
20
+ value: any
21
+ ) => void;
22
+ loadTemplateSupportiveData?: (
23
+ callBack: (args: any) => void,
24
+ supportiveKeys: any
25
+ ) => Promise<any>;
26
+ }
27
+
28
+ const FilterPopup = (props: FilterPopupProps) => {
29
+ const onAdvancedSearchFilterTargetChange = (
30
+ value: FilterTarget,
31
+ id: string
32
+ ) => {
33
+ const filterRows = _.cloneDeep(
34
+ props.uiElementGroupData.advancedSearch.filterRows
35
+ );
36
+
37
+ const filterRow = filterRows.find(
38
+ (filterRow: FilterExpressionViewModel) => filterRow.id === id
39
+ );
40
+
41
+ if (filterRow) {
42
+ filterRow.selectedFilter.propertyToFilter = value;
43
+ filterRow.selectedFilter.value = undefined;
44
+ filterRow.selectedFilter.operator = {
45
+ label: "Select Operator...",
46
+ value: null,
47
+ };
48
+ }
49
+ const updatedUiElementGroupData = {
50
+ ...props.uiElementGroupData,
51
+ advancedSearch: {
52
+ ...props.uiElementGroupData.advancedSearch,
53
+ filterRows: filterRows,
54
+ },
55
+ };
56
+ props.onModelUpdate(
57
+ null,
58
+ props.config.uiElementGroupId,
59
+ updatedUiElementGroupData
60
+ );
61
+ };
62
+
63
+ const onAdvancedSearchOperatorChange = (
64
+ value: {
65
+ label: string;
66
+ value: Operator | null;
67
+ },
68
+ id: string
69
+ ) => {
70
+ const filterRows = _.cloneDeep(
71
+ props.uiElementGroupData.advancedSearch.filterRows
72
+ );
73
+ const filterRow = filterRows.find(
74
+ (filterRow: FilterExpressionViewModel) => filterRow.id === id
75
+ );
76
+ if (filterRow) {
77
+ filterRow.selectedFilter.operator = value;
78
+ filterRow.selectedFilter.value = undefined;
79
+ }
80
+ const updatedUiElementGroupData = {
81
+ ...props.uiElementGroupData,
82
+ advancedSearch: {
83
+ ...props.uiElementGroupData.advancedSearch,
84
+ filterRows: filterRows,
85
+ },
86
+ };
87
+ props.onModelUpdate(
88
+ null,
89
+ props.config.uiElementGroupId,
90
+ updatedUiElementGroupData
91
+ );
92
+ };
93
+
94
+ const onAdvancedSearchFilterValueChange = (value: any, id: string) => {
95
+ const filterRows = _.cloneDeep(
96
+ props.uiElementGroupData.advancedSearch.filterRows
97
+ );
98
+ const filterRow = filterRows.find(
99
+ (filterRow: FilterExpressionViewModel) => filterRow.id === id
100
+ );
101
+ if (filterRow) {
102
+ filterRow.selectedFilter.value = value;
103
+ }
104
+ const updatedUiElementGroupData = {
105
+ ...props.uiElementGroupData,
106
+ advancedSearch: {
107
+ ...props.uiElementGroupData.advancedSearch,
108
+ filterRows: filterRows,
109
+ },
110
+ };
111
+ props.onModelUpdate(
112
+ null,
113
+ props.config.uiElementGroupId,
114
+ updatedUiElementGroupData
115
+ );
116
+ };
117
+
118
+ const onAdvancedSearchCriteriaToggle = (id: string) => {
119
+ const filterRows = _.cloneDeep(
120
+ props.uiElementGroupData.advancedSearch.filterRows
121
+ );
122
+ const filterRow = filterRows.find(
123
+ (filterRow: FilterExpressionViewModel) => filterRow.id === id
124
+ );
125
+ if (filterRow) {
126
+ filterRow.selectedFilter.selectedCriteria =
127
+ filterRow.selectedFilter.selectedCriteria === OperatorCreiteria.AND
128
+ ? OperatorCreiteria.OR
129
+ : OperatorCreiteria.AND;
130
+ }
131
+ let criteria = "";
132
+ filterRows.map((filterRow: any, index: number) => {
133
+ criteria += `${filterRow.idLabel}`;
134
+ if (filterRows?.length - 1 !== index) {
135
+ criteria += ` ${filterRow?.selectedFilter?.selectedCriteria} `;
136
+ }
137
+ });
138
+ const updatedUiElementGroupData = {
139
+ ...props.uiElementGroupData,
140
+ advancedSearch: {
141
+ ...props.uiElementGroupData.advancedSearch,
142
+ filterRows: filterRows,
143
+ criteria,
144
+ },
145
+ };
146
+ props.onModelUpdate(
147
+ null,
148
+ props.config.uiElementGroupId,
149
+ updatedUiElementGroupData
150
+ );
151
+ };
152
+
153
+ const onAdvancedSearchFilterAdd = (id: string) => {
154
+ const idPosition =
155
+ props.uiElementGroupData.advancedSearch.filterRows.findIndex(
156
+ (filterRow: FilterExpressionViewModel) => filterRow.id === id
157
+ );
158
+
159
+ const initialFilterRow = _.cloneDeep(getAdvancedSearchIntitialFilterRow());
160
+ initialFilterRow.allPropertieseToFilter = props.filterableFields;
161
+
162
+ let updatedFilterRows = [
163
+ ...props.uiElementGroupData.advancedSearch.filterRows.slice(
164
+ 0,
165
+ idPosition + 1
166
+ ),
167
+ initialFilterRow,
168
+ ...props.uiElementGroupData.advancedSearch.filterRows.slice(
169
+ idPosition + 1
170
+ ),
171
+ ];
172
+ let criteria = "";
173
+ updatedFilterRows = _.cloneDeep(updatedFilterRows).map((row, index) => {
174
+ row.idLabel = `(${index + 1})`;
175
+ criteria += `${row.idLabel}`;
176
+ if (updatedFilterRows?.length - 1 !== index) {
177
+ criteria += ` ${row?.selectedFilter?.selectedCriteria} `;
178
+ }
179
+
180
+ return row;
181
+ });
182
+
183
+ const updatedUiElementGroupData = {
184
+ ...props.uiElementGroupData,
185
+ advancedSearch: {
186
+ ...props.uiElementGroupData.advancedSearch,
187
+ filterRows: updatedFilterRows,
188
+ criteria: criteria?.trim(),
189
+ },
190
+ };
191
+
192
+ props.onModelUpdate(
193
+ null,
194
+ props.config.uiElementGroupId,
195
+ updatedUiElementGroupData
196
+ );
197
+ };
198
+
199
+ const onAdvancedSearchFilterDelete = (id: string) => {
200
+ let filterRows = props.uiElementGroupData.advancedSearch.filterRows.filter(
201
+ (filterRow: FilterExpressionViewModel) => filterRow.id !== id
202
+ );
203
+
204
+ let criteriaExpression = "";
205
+
206
+ filterRows = _.cloneDeep(filterRows)?.map(
207
+ (filterRow: FilterExpressionViewModel, index: number) => {
208
+ filterRow.idLabel = `(${index + 1})`;
209
+ criteriaExpression += filterRow.idLabel;
210
+ if (filterRows?.length - 1 !== index) {
211
+ criteriaExpression += ` ${filterRow.selectedFilter.selectedCriteria} `;
212
+ }
213
+ return filterRow;
214
+ }
215
+ );
216
+
217
+ const updatedUiElementGroupData = {
218
+ ...props.uiElementGroupData,
219
+ advancedSearch: {
220
+ ...props.uiElementGroupData.advancedSearch,
221
+ filterRows: filterRows,
222
+ criteria: criteriaExpression,
223
+ },
224
+ pagination: { ...props.uiElementGroupData.pagination, skip: 0 },
225
+ };
226
+
227
+ props.onModelUpdate(
228
+ null,
229
+ props.config.uiElementGroupId,
230
+ updatedUiElementGroupData
231
+ );
232
+ };
233
+
234
+ const onAdvancedSearchClear = () => {
235
+ const initialFilterRow = _.cloneDeep(getAdvancedSearchIntitialFilterRow());
236
+ initialFilterRow.allPropertieseToFilter = props.filterableFields;
237
+
238
+ const updatedUiElementGroupData = {
239
+ ...props.uiElementGroupData,
240
+ advancedSearch: {
241
+ ...props.uiElementGroupData.advancedSearch,
242
+ filterRows: [initialFilterRow],
243
+ criteria: "01",
244
+ appliedQuery: {
245
+ criteria: "",
246
+ filters: [],
247
+ },
248
+ },
249
+ };
250
+ props.handlePopupShow();
251
+ props.onModelUpdate(
252
+ null,
253
+ props.config.uiElementGroupId,
254
+ updatedUiElementGroupData
255
+ );
256
+ };
257
+
258
+ const onCriteriaApplied = () => {
259
+ const criteriaExpression = document.getElementById(
260
+ "tmpl-criteria-input-" + (props.config.uiElementGroupId ?? "")
261
+ )?.innerText;
262
+ const operators = [...(criteriaExpression?.matchAll(/AND|OR/gi) ?? [])].map(
263
+ (match) => match[0]
264
+ );
265
+
266
+ let filterRows = _.cloneDeep(
267
+ props.uiElementGroupData.advancedSearch.filterRows
268
+ );
269
+
270
+ filterRows = filterRows.map((filterRow: any, index: number) => {
271
+ if (filterRows?.length - 1 !== index) {
272
+ filterRow.selectedFilter.selectedCriteria = operators[index];
273
+ }
274
+
275
+ return filterRow;
276
+ });
277
+
278
+ const updatedAdvancedSearch = {
279
+ ...props.uiElementGroupData.advancedSearch,
280
+ filterRows: filterRows,
281
+ criteria: criteriaExpression ?? "",
282
+ };
283
+
284
+ const updatedUiElementGroupData = {
285
+ ...props.uiElementGroupData,
286
+ advancedSearch: updatedAdvancedSearch,
287
+ };
288
+
289
+ props.onModelUpdate(
290
+ null,
291
+ props.config.uiElementGroupId,
292
+ updatedUiElementGroupData
293
+ );
294
+ };
295
+
296
+ const onCopyToClipboard = async () => {
297
+ const criteria = document.getElementById(
298
+ "tmpl-criteria-input-" + (props.config.uiElementGroupId ?? "")
299
+ )?.innerText;
300
+ try {
301
+ await navigator.clipboard.writeText(criteria || "");
302
+ } catch (err) {
303
+ console.error("Unable to copy to clipboard", err);
304
+ }
305
+ };
306
+
307
+ const onAdvancedSearchCancel = () => {
308
+ const clonedFilterRows = _.cloneDeep(
309
+ props.uiElementGroupData.advancedSearch.filterRows
310
+ );
311
+ const filterRows: FilterExpressionViewModel[] = [];
312
+ let criteria =
313
+ props.uiElementGroupData.advancedSearch.appliedQuery.criteria;
314
+
315
+ props.uiElementGroupData.advancedSearch.appliedQuery?.filters?.map(
316
+ (filter: any, index: number) => {
317
+ const clonedFilterRow = clonedFilterRows?.find(
318
+ (row: any) => row.id === filter.id
319
+ );
320
+
321
+ const filterRow: FilterExpressionViewModel = {
322
+ id: filter.id,
323
+ idLabel: `(${(index + 1).toString()})`,
324
+ selectedFilter: _.cloneDeep(filter),
325
+ allPropertieseToFilter: props.filterableFields,
326
+ alloperators: clonedFilterRow?.alloperators ?? [],
327
+ allValues: clonedFilterRow ? clonedFilterRow?.allValues : undefined,
328
+ };
329
+ criteria = criteria.replace(filter.id, filterRow.idLabel);
330
+ filterRows.push(filterRow);
331
+ }
332
+ );
333
+
334
+ const updatedAdvancedSearch = {
335
+ ...props.uiElementGroupData.advancedSearch,
336
+ filterRows: _.cloneDeep(filterRows),
337
+ criteria,
338
+ };
339
+
340
+ const updatedUiElementGroupData = {
341
+ ...props.uiElementGroupData,
342
+ advancedSearch: updatedAdvancedSearch,
343
+ };
344
+
345
+ props.onModelUpdate(
346
+ null,
347
+ props.config.uiElementGroupId,
348
+ updatedUiElementGroupData
349
+ );
350
+ };
351
+
352
+ const onAdvancedSearchApply = () => {
353
+ const filterRows = _.cloneDeep(
354
+ props.uiElementGroupData.advancedSearch.filterRows
355
+ );
356
+
357
+ const selectedFilters: FilterExpression[] = [];
358
+ let criteria = props.uiElementGroupData?.advancedSearch?.criteria ?? "";
359
+
360
+ filterRows?.map((filterRow: FilterExpressionViewModel) => {
361
+ selectedFilters.push(filterRow.selectedFilter);
362
+ criteria = criteria.replace(filterRow.idLabel, filterRow.id);
363
+ });
364
+
365
+ const appliedQuery = {
366
+ criteria,
367
+ filters: selectedFilters,
368
+ };
369
+
370
+ const updatedAdvancedSearch = {
371
+ ...props.uiElementGroupData.advancedSearch,
372
+ appliedQuery: _.cloneDeep(appliedQuery),
373
+ };
374
+
375
+ const updatedUiElementGroupData = {
376
+ ...props.uiElementGroupData,
377
+ advancedSearch: updatedAdvancedSearch,
378
+ pagination: { ...props.uiElementGroupData.pagination, skip: 0 },
379
+ };
380
+ props.handlePopupShow();
381
+ props.onModelUpdate(
382
+ null,
383
+ props.config.uiElementGroupId,
384
+ updatedUiElementGroupData
385
+ );
386
+ };
387
+
388
+ const handleFilterAllValues = (result: any, id: string) => {
389
+ const filterRows = _.cloneDeep(
390
+ props.uiElementGroupData.advancedSearch.filterRows
391
+ );
392
+
393
+ const filterRow: FilterExpressionViewModel = filterRows.find(
394
+ (filterRow: FilterExpressionViewModel) => filterRow.id === id
395
+ );
396
+ if (filterRow) {
397
+ filterRow.allValues = result;
398
+ }
399
+
400
+ const updatedUiElementGroupData = {
401
+ ...props.uiElementGroupData,
402
+ advancedSearch: {
403
+ ...props.uiElementGroupData.advancedSearch,
404
+ filterRows: filterRows,
405
+ },
406
+ };
407
+
408
+ props.onModelUpdate(
409
+ null,
410
+ props.config.uiElementGroupId,
411
+ updatedUiElementGroupData
412
+ );
413
+ };
414
+
415
+ return (
416
+ <FilterPopupView
417
+ uiElementGroupId={props.config.uiElementGroupId}
418
+ filterRows={props.uiElementGroupData?.advancedSearch?.filterRows ?? []}
419
+ criteria={props.uiElementGroupData?.advancedSearch?.criteria ?? ""}
420
+ loadTemplateSupportiveData={props.loadTemplateSupportiveData}
421
+ onFilterTargetChange={onAdvancedSearchFilterTargetChange}
422
+ onOperatorChange={onAdvancedSearchOperatorChange}
423
+ onFilterValueChange={onAdvancedSearchFilterValueChange}
424
+ onCriteriaToggle={onAdvancedSearchCriteriaToggle}
425
+ onAddFilter={onAdvancedSearchFilterAdd}
426
+ onDeleteFilter={onAdvancedSearchFilterDelete}
427
+ onClear={onAdvancedSearchClear}
428
+ onCriteriaApplied={onCriteriaApplied}
429
+ onCopyToClipboard={onCopyToClipboard}
430
+ onCancel={onAdvancedSearchCancel}
431
+ onApply={onAdvancedSearchApply}
432
+ handleFilterAllValues={handleFilterAllValues}
433
+ />
434
+ );
435
+ };
436
+
437
+ export default FilterPopup;
@@ -0,0 +1,111 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import FactoryRenderer from "../../../../Renderer";
3
+ import {
4
+ FilterExpressionViewModel,
5
+ FilterTarget,
6
+ } from "../../data/advancedSearch";
7
+ import { Operator } from "../../enum";
8
+ import Filter from "./Filter";
9
+
10
+ interface FilterPopupViewProps {
11
+ uiElementGroupId: string;
12
+ filterRows: FilterExpressionViewModel[];
13
+ criteria: string;
14
+ loadTemplateSupportiveData?: (
15
+ callBack: (args: any) => void,
16
+ supportiveKeys: any
17
+ ) => Promise<any>;
18
+ onFilterTargetChange: (value: FilterTarget, id: string) => void;
19
+ onOperatorChange: (
20
+ value: { label: string; value: Operator | null },
21
+ id: string
22
+ ) => void;
23
+ onFilterValueChange: (value: any, id: string) => void;
24
+ onCriteriaToggle: (id: string) => void;
25
+ onAddFilter: (id: string) => void;
26
+ onDeleteFilter: (id: string) => void;
27
+ onClear: () => void;
28
+ onCriteriaApplied: () => void;
29
+ onCopyToClipboard: () => void;
30
+ onCancel: () => void;
31
+ onApply: () => void;
32
+ handleFilterAllValues: (result: any, id: string) => void;
33
+ }
34
+
35
+ const FilterPopupView = (props: FilterPopupViewProps) => {
36
+ return (
37
+ <>
38
+ <div className="tmpl-filter-container">
39
+ <div className="tmpl-filter">
40
+ <div className="tmpl-header-title">Filter</div>
41
+ <div className="tmpl-header-title">Operator</div>
42
+ <div className="tmpl-header-title">Value</div>
43
+ <div className="tmpl-header-title"></div>
44
+ <div className="tmpl-header-title"></div>
45
+ </div>
46
+ {props.filterRows?.map((filterRow: FilterExpressionViewModel) => (
47
+ <Filter
48
+ key={filterRow.id}
49
+ uiElementGroupId={props.uiElementGroupId}
50
+ filterRow={filterRow}
51
+ appliedfilterCount={props.filterRows.length}
52
+ loadTemplateSupportiveData={props.loadTemplateSupportiveData}
53
+ onFilterTargetChange={props.onFilterTargetChange}
54
+ onOperatorChange={props.onOperatorChange}
55
+ onFilterValueChange={props.onFilterValueChange}
56
+ onCriteriaToggle={props.onCriteriaToggle}
57
+ onAddFilter={props.onAddFilter}
58
+ onDeleteFilter={props.onDeleteFilter}
59
+ handleFilterAllValues={props.handleFilterAllValues}
60
+ />
61
+ ))}
62
+ </div>
63
+ <div className="tmpl-action-container">
64
+ <FactoryRenderer
65
+ title="Clear Filter"
66
+ onClick={props.onClear}
67
+ uiElementType="WIDGET"
68
+ widgetType="BUTTON"
69
+ widgetStyle={{ className: "tmpl-button" }}
70
+ />
71
+ <div className="tmpl-criteria-input-container" title={props.criteria}>
72
+ <p
73
+ id={`tmpl-criteria-input-${props.uiElementGroupId ?? ""}`}
74
+ className="tmpl-criteria-input"
75
+ contentEditable={true}
76
+ >
77
+ {props.criteria}
78
+ </p>
79
+ <FactoryRenderer
80
+ name="right"
81
+ widgetStyle={{ className: "tmpl-criteria-input-icon" }}
82
+ onClick={props.onCriteriaApplied}
83
+ uiElementType="WIDGET"
84
+ widgetType="ICON"
85
+ />
86
+ <FactoryRenderer
87
+ onClick={props.onCopyToClipboard}
88
+ widgetStyle={{ className: "tmpl-criteria-input-icon" }}
89
+ name="copy"
90
+ uiElementType="WIDGET"
91
+ widgetType="ICON"
92
+ />
93
+ </div>
94
+ <div>
95
+ <span className="tmpl-cancel-action" onClick={props.onCancel}>
96
+ Cancel
97
+ </span>
98
+ <FactoryRenderer
99
+ widgetStyle={{ className: "tmpl-button" }}
100
+ onClick={props.onApply}
101
+ uiElementType="WIDGET"
102
+ widgetType="BUTTON"
103
+ title="Apply Filter"
104
+ />
105
+ </div>
106
+ </div>
107
+ </>
108
+ );
109
+ };
110
+
111
+ export default FilterPopupView;