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,274 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ import _ from "lodash";
4
+ import { ChooserColumn } from "../../../data/setting";
5
+ import ColumnChooserView from "./ColumnChooserView";
6
+ import { useEffect, useMemo, useRef, useState } from "react";
7
+
8
+ export type ColumnChooserProps = {
9
+ uiElementGroupData: Record<string, any>;
10
+ toggleColumnChooser: boolean;
11
+ columns: ChooserColumn[];
12
+ config: { uiElementGroupId: string };
13
+ onChooserClick: () => void;
14
+ onModelUpdate: (
15
+ callBack: ((args: any) => void) | null,
16
+ fieldName: string,
17
+ value: any
18
+ ) => void;
19
+ setToggleColumnChooser: (status: boolean) => void;
20
+ setTogglePopup: (status: boolean) => void;
21
+ };
22
+
23
+ const ColumnChooser = (props: ColumnChooserProps) => {
24
+ const [searchInput, setSearchInput] = useState("");
25
+
26
+ const popupChooserRef = useRef<HTMLDivElement>(null);
27
+
28
+ const searchedColumns = useMemo(
29
+ () =>
30
+ props.uiElementGroupData?.setting?.columnChooser?.allColumns?.filter(
31
+ (c: ChooserColumn) =>
32
+ c.label.toLowerCase().includes(searchInput?.toLowerCase())
33
+ ),
34
+ [
35
+ searchInput,
36
+ JSON.stringify(
37
+ props.uiElementGroupData?.setting?.columnChooser?.allColumns
38
+ ),
39
+ ]
40
+ );
41
+
42
+ const selectedColumns = useMemo(() => {
43
+ const sColumns = _.cloneDeep(
44
+ props.uiElementGroupData?.setting?.columnChooser?.selectedColumns
45
+ );
46
+
47
+ return sColumns?.sort((a: ChooserColumn, b: ChooserColumn) => {
48
+ return (a.order ?? 0) - (b.order ?? 0);
49
+ });
50
+ }, [
51
+ JSON.stringify(
52
+ props.uiElementGroupData?.setting?.columnChooser?.selectedColumns
53
+ ),
54
+ ]);
55
+
56
+ useEffect(() => {
57
+ if (props.toggleColumnChooser) {
58
+ document.addEventListener("mousedown", handleClickOutside);
59
+ } else {
60
+ document.removeEventListener("mousedown", handleClickOutside);
61
+ }
62
+ return () => {
63
+ document.removeEventListener("mousedown", handleClickOutside);
64
+ };
65
+ }, [props.toggleColumnChooser]);
66
+
67
+ const handleClickOutside = (event: MouseEvent) => {
68
+ if (
69
+ popupChooserRef.current &&
70
+ !popupChooserRef.current.contains(event.target as Node) &&
71
+ (event.target as Node).textContent !== "Column Chooser"
72
+ ) {
73
+ props.onChooserClick();
74
+ }
75
+ };
76
+
77
+ const onFieldAddOrRemove = (id: number) => {
78
+ const allColumns = _.cloneDeep(
79
+ props.uiElementGroupData.setting.columnChooser.allColumns
80
+ );
81
+ const sColumns = _.cloneDeep(
82
+ props.uiElementGroupData.setting.columnChooser.selectedColumns
83
+ );
84
+ const sColumn = allColumns.find((a: ChooserColumn) => a.id === id);
85
+
86
+ let selectedColumns: ChooserColumn[] = [];
87
+ if (sColumn.selected) {
88
+ selectedColumns = sColumns?.filter((a: ChooserColumn) => a.id !== id);
89
+ selectedColumns = selectedColumns.map((s, index: number) => {
90
+ s.order = index + 1;
91
+ return s;
92
+ });
93
+ } else {
94
+ selectedColumns = [
95
+ ...sColumns,
96
+ { ...sColumn, selected: true, order: sColumns.length },
97
+ ];
98
+ }
99
+
100
+ allColumns.forEach((column: ChooserColumn) => {
101
+ if (column.id === id) {
102
+ column.selected = !column.selected;
103
+ }
104
+ });
105
+
106
+ const updatedUiElementGroupData = {
107
+ ...props.uiElementGroupData,
108
+ setting: {
109
+ ...props.uiElementGroupData.setting,
110
+ columnChooser: {
111
+ ...props.uiElementGroupData.setting.columnChooser,
112
+ allColumns: allColumns,
113
+ selectedColumns,
114
+ },
115
+ },
116
+ };
117
+
118
+ props.onModelUpdate(
119
+ null,
120
+ props.config.uiElementGroupId,
121
+ updatedUiElementGroupData
122
+ );
123
+ };
124
+
125
+ const excludeIncludeToCard = (id: number) => {
126
+ const selectedColumns = _.cloneDeep(
127
+ props.uiElementGroupData.setting.columnChooser.selectedColumns
128
+ );
129
+ selectedColumns.forEach((column: ChooserColumn) => {
130
+ if (column.id === id) {
131
+ column.includeInCard = !column.includeInCard;
132
+ }
133
+ });
134
+ const updatedUiElementGroupData = {
135
+ ...props.uiElementGroupData,
136
+ setting: {
137
+ ...props.uiElementGroupData.setting,
138
+ columnChooser: {
139
+ ...props.uiElementGroupData.setting.columnChooser,
140
+ selectedColumns: selectedColumns,
141
+ },
142
+ },
143
+ };
144
+ props.onModelUpdate(
145
+ null,
146
+ props.config.uiElementGroupId,
147
+ updatedUiElementGroupData
148
+ );
149
+ };
150
+
151
+ const toggleFreeze = (id: number) => {
152
+ const selectedColumns = _.cloneDeep(
153
+ props.uiElementGroupData.setting.columnChooser.selectedColumns
154
+ );
155
+ const freezeIndex = selectedColumns.findIndex(
156
+ (column: ChooserColumn) => column.id === id
157
+ );
158
+ selectedColumns.forEach((column: ChooserColumn, index: number) => {
159
+ if (index <= freezeIndex) {
160
+ column.isFreezed = true;
161
+ } else {
162
+ column.isFreezed = column.primary || false;
163
+ }
164
+ });
165
+ const updatedUiElementGroupData = {
166
+ ...props.uiElementGroupData,
167
+ setting: {
168
+ ...props.uiElementGroupData.setting,
169
+ columnChooser: {
170
+ ...props.uiElementGroupData.setting.columnChooser,
171
+ selectedColumns: selectedColumns,
172
+ },
173
+ },
174
+ };
175
+ props.onModelUpdate(
176
+ null,
177
+ props.config.uiElementGroupId,
178
+ updatedUiElementGroupData
179
+ );
180
+ };
181
+
182
+ const onChooserApply = () => {
183
+ const updatedColumnChooser = {
184
+ ...props.uiElementGroupData.setting.columnChooser,
185
+ appliedColumns: _.cloneDeep(selectedColumns),
186
+ };
187
+
188
+ const updatedSetting = {
189
+ ...props.uiElementGroupData.setting,
190
+ columnChooser: updatedColumnChooser,
191
+ };
192
+
193
+ const updatedUiElementGroupData = {
194
+ ...props.uiElementGroupData,
195
+ setting: updatedSetting,
196
+ };
197
+ props.setToggleColumnChooser(false);
198
+ props.setTogglePopup(false);
199
+ props.onModelUpdate(
200
+ null,
201
+ props.config.uiElementGroupId,
202
+ updatedUiElementGroupData
203
+ );
204
+ };
205
+
206
+ const onChooserRestore = () => {
207
+ const updatedColumnChooser = {
208
+ ...props.uiElementGroupData.setting.columnChooser,
209
+ allColumns: _.cloneDeep(props.columns),
210
+ selectedColumns: _.cloneDeep(props.columns).filter((c) => c.selected),
211
+ };
212
+
213
+ const updatedSetting = {
214
+ ...props.uiElementGroupData.setting,
215
+ columnChooser: updatedColumnChooser,
216
+ };
217
+
218
+ const updatedUiElementGroupData = {
219
+ ...props.uiElementGroupData,
220
+ setting: updatedSetting,
221
+ };
222
+
223
+ props.onModelUpdate(
224
+ null,
225
+ props.config.uiElementGroupId,
226
+ updatedUiElementGroupData
227
+ );
228
+ };
229
+
230
+ const onFieldDragEnd = (result: any) => {
231
+ if (!result.destination) return;
232
+ if (result.destination.index === result.source.index) return;
233
+
234
+ const clonedSelectedColumns = _.cloneDeep(selectedColumns);
235
+ const movedItem = clonedSelectedColumns.splice(result.source.index, 1)[0];
236
+ clonedSelectedColumns.splice(result.destination.index, 0, movedItem);
237
+ clonedSelectedColumns.forEach((column: ChooserColumn, index: number) => {
238
+ column.order = index + 1;
239
+ });
240
+
241
+ const updatedUiElementGroupData = {
242
+ ...props.uiElementGroupData,
243
+ setting: {
244
+ ...props.uiElementGroupData.setting,
245
+ columnChooser: {
246
+ ...props.uiElementGroupData.setting.columnChooser,
247
+ selectedColumns: clonedSelectedColumns,
248
+ },
249
+ },
250
+ };
251
+ props.onModelUpdate(
252
+ null,
253
+ props.config.uiElementGroupId,
254
+ updatedUiElementGroupData
255
+ );
256
+ };
257
+
258
+ return (
259
+ <ColumnChooserView
260
+ popupChooserRef={popupChooserRef}
261
+ allColumns={searchedColumns ?? []}
262
+ selectedColumns={selectedColumns ?? []}
263
+ onFieldAddOrRemove={onFieldAddOrRemove}
264
+ excludeIncludeToCard={excludeIncludeToCard}
265
+ toggleFreeze={toggleFreeze}
266
+ onChooserApply={onChooserApply}
267
+ onChooserRestore={onChooserRestore}
268
+ onFieldDragEnd={onFieldDragEnd}
269
+ searchInput={searchInput}
270
+ setSearchInput={setSearchInput}
271
+ />
272
+ );
273
+ };
274
+ export default ColumnChooser;
@@ -0,0 +1,154 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { Button } from "@progress/kendo-react-buttons";
3
+ import {
4
+ Checkbox,
5
+ TextBox,
6
+ InputClearValue,
7
+ InputSeparator,
8
+ } from "@progress/kendo-react-inputs";
9
+ import DragDropContainer from "./DragDropContext";
10
+ import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd";
11
+
12
+ import React from "react";
13
+ import { ChooserColumn } from "../../../data/setting";
14
+ import FactoryRenderer from "../../../../../Renderer";
15
+
16
+ export type ColumnChooserViewProps = {
17
+ popupChooserRef: any;
18
+ allColumns: ChooserColumn[];
19
+ selectedColumns: ChooserColumn[];
20
+ searchInput: string;
21
+ onFieldAddOrRemove: (id: number) => void;
22
+ excludeIncludeToCard: (id: number) => void;
23
+ toggleFreeze: (id: number) => void;
24
+ onChooserApply: () => void;
25
+ onChooserRestore: () => void;
26
+ onFieldDragEnd: (result: any) => void;
27
+ setSearchInput: (searchKey: string) => void;
28
+ };
29
+
30
+ const ColumnChooserView: React.FC<ColumnChooserViewProps> = (props) => {
31
+ return (
32
+ <div className="tmpl-columnchooser-popup" ref={props.popupChooserRef}>
33
+ <div className="tmpl-chooser-header">
34
+ <h2>Column Chooser</h2>
35
+ <div>
36
+ <Button
37
+ className="tmpl-button"
38
+ title="Clear Filter"
39
+ onClick={props.onChooserRestore}
40
+ >
41
+ Restore
42
+ </Button>
43
+ <Button
44
+ className="tmpl-button"
45
+ title="Clear Filter"
46
+ onClick={props.onChooserApply}
47
+ >
48
+ Apply
49
+ </Button>
50
+ </div>
51
+ </div>
52
+ <div className="tmpl-chooser-body">
53
+ <div>
54
+ <div className="tmpl-search-container">
55
+ <TextBox
56
+ className="tmpl-search tmpl-input"
57
+ value={props.searchInput}
58
+ placeholder="Type here to search . . ."
59
+ onChange={(e) => props.setSearchInput(e.target.value as string)}
60
+ suffix={() =>
61
+ props.searchInput ? (
62
+ <>
63
+ <InputSeparator />
64
+ <InputClearValue onClick={() => props.setSearchInput("")}>
65
+ <FactoryRenderer
66
+ name="close"
67
+ uiElementType="WIDGET"
68
+ widgetType="ICON"
69
+ fillMode="clear"
70
+ title=""
71
+ />
72
+ </InputClearValue>
73
+ </>
74
+ ) : (
75
+ <></>
76
+ )
77
+ }
78
+ />
79
+ </div>
80
+ {props.allColumns.map((column) => (
81
+ <Checkbox
82
+ key={column.id}
83
+ className="tmpl-column tmpl-checkbox"
84
+ label={column.label}
85
+ disabled={column.primary}
86
+ checked={column.primary ? true : column.selected}
87
+ onChange={() => {
88
+ if (column.primary !== true) {
89
+ props.onFieldAddOrRemove(column.id);
90
+ }
91
+ }}
92
+ />
93
+ ))}
94
+ </div>
95
+ <div>
96
+ <div className="tmpl-title">
97
+ <p>
98
+ {props.selectedColumns.length > 0
99
+ ? `${props.selectedColumns.length} Column(s) Selected`
100
+ : `No fields selected`}
101
+ </p>
102
+ </div>
103
+ <DragDropContext onDragEnd={props.onFieldDragEnd}>
104
+ <Droppable droppableId="droppable">
105
+ {(provided: any) => (
106
+ <div {...provided.droppableProps} ref={provided.innerRef}>
107
+ {props.selectedColumns.map((column, index) =>
108
+ column.primary ? (
109
+ <DragDropContainer
110
+ key={column.id}
111
+ column={column}
112
+ excludeIncludeToCard={props.excludeIncludeToCard}
113
+ toggleFreeze={props.toggleFreeze}
114
+ onFieldAddOrRemove={props.onFieldAddOrRemove}
115
+ />
116
+ ) : (
117
+ <Draggable
118
+ key={column.id}
119
+ draggableId={column.id.toString()}
120
+ index={index}
121
+ >
122
+ {(provided: any) => (
123
+ <div
124
+ ref={provided.innerRef}
125
+ {...provided.draggableProps}
126
+ {...provided.dragHandleProps}
127
+ style={{
128
+ userSelect: "none",
129
+ ...provided.draggableProps.style,
130
+ }}
131
+ >
132
+ <DragDropContainer
133
+ column={column}
134
+ excludeIncludeToCard={props.excludeIncludeToCard}
135
+ toggleFreeze={props.toggleFreeze}
136
+ onFieldAddOrRemove={props.onFieldAddOrRemove}
137
+ />
138
+ </div>
139
+ )}
140
+ </Draggable>
141
+ )
142
+ )}
143
+ {provided.placeholder}
144
+ </div>
145
+ )}
146
+ </Droppable>
147
+ </DragDropContext>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ );
152
+ };
153
+
154
+ export default ColumnChooserView;
@@ -0,0 +1,76 @@
1
+ import { Checkbox, RadioButton } from "@progress/kendo-react-inputs";
2
+ import { Icon } from "@progress/kendo-react-common";
3
+ import { ChooserColumn } from "../../../data/setting";
4
+ import FactoryRenderer from "../../../../../Renderer";
5
+
6
+ type DragDropContainer = {
7
+ column: ChooserColumn;
8
+ excludeIncludeToCard: (id: number) => void;
9
+ toggleFreeze: (id: number) => void;
10
+ onFieldAddOrRemove: (id: number) => void;
11
+ };
12
+
13
+ const DragDropContainer = ({
14
+ column,
15
+ excludeIncludeToCard,
16
+ toggleFreeze,
17
+ onFieldAddOrRemove,
18
+ }: DragDropContainer) => {
19
+ return (
20
+ <div className="tmpl-chooser-setting-container" key={column.id}>
21
+ <div className="tmpl-chooser-setting-label">
22
+ <Icon name="drag" />
23
+ <p>{column.label}</p>
24
+ </div>
25
+
26
+ <div>
27
+ <Checkbox
28
+ className="tmpl-include-card tmpl-checkbox"
29
+ label="Include in card"
30
+ checked={column.includeInCard}
31
+ onChange={() => {
32
+ excludeIncludeToCard(column.id);
33
+ }}
34
+ />
35
+ <div>
36
+ <RadioButton
37
+ label="Freeze"
38
+ className="tmpl-radio"
39
+ disabled={column.primary}
40
+ checked={column.primary === true ? true : column.isFreezed}
41
+ onClick={() => {
42
+ if (column.primary !== true) {
43
+ toggleFreeze(column.id);
44
+ }
45
+ }}
46
+ />
47
+ </div>
48
+
49
+ {column.primary !== true ? (
50
+ <FactoryRenderer
51
+ name="close"
52
+ uiElementType="WIDGET"
53
+ widgetType="ICON"
54
+ fillMode="clear"
55
+ title=""
56
+ onClick={() => {
57
+ if (column.primary !== true) {
58
+ onFieldAddOrRemove(column.id);
59
+ }
60
+ }}
61
+ />
62
+ ) : (
63
+ <FactoryRenderer
64
+ name="close"
65
+ uiElementType="WIDGET"
66
+ widgetType="ICON"
67
+ fillMode="clear"
68
+ title=""
69
+ widgetStyle={{ inline: { visibility: "hidden" } }}
70
+ />
71
+ )}
72
+ </div>
73
+ </div>
74
+ );
75
+ };
76
+ export default DragDropContainer;
@@ -0,0 +1,116 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { useEffect, useRef, useState } from "react";
3
+ import SettingView from "./SettingView";
4
+ import ColumnChooser from "./ColumnChooser/ColumnChooser";
5
+
6
+ import SettingPopup from "./SettingPopup";
7
+ import { ChooserColumn } from "../../data/setting";
8
+
9
+ export enum DataWidgetType {
10
+ CARD = "CARD",
11
+ GRID = "GRID",
12
+ }
13
+
14
+ export type SettingProps = {
15
+ visible: boolean;
16
+ disabled: boolean;
17
+ disableColumnChooser: boolean;
18
+ disabledDisplayWidgetType: boolean;
19
+ columns: ChooserColumn[];
20
+ uiElementGroupData: Record<string, any>;
21
+ config: { uiElementGroupId: string };
22
+ onModelUpdate: (
23
+ callBack: ((args: any) => void) | null,
24
+ fieldName: string,
25
+ value: any
26
+ ) => void;
27
+ };
28
+
29
+ const Setting = (props: SettingProps) => {
30
+ const [togglePopup, setTogglePopup] = useState(false);
31
+ const [toggleColumnChooser, setToggleColumnChooser] = useState(false);
32
+
33
+ const popupRef = useRef<HTMLDivElement>(null);
34
+
35
+ useEffect(() => {
36
+ if (togglePopup) {
37
+ document.addEventListener("mousedown", handleClickOutside);
38
+ } else {
39
+ document.removeEventListener("mousedown", handleClickOutside);
40
+ }
41
+ return () => {
42
+ document.removeEventListener("mousedown", handleClickOutside);
43
+ };
44
+ }, [togglePopup]);
45
+
46
+ const handleClickOutside = (event: MouseEvent) => {
47
+ if (popupRef.current && !popupRef.current.contains(event.target as Node)) {
48
+ setTogglePopup(false);
49
+ }
50
+ };
51
+
52
+ const onSettingClick = () => {
53
+ setTogglePopup((prevToggle) => !prevToggle);
54
+ };
55
+
56
+ const onChooserClick = () => {
57
+ setToggleColumnChooser(
58
+ (prevToggleColumnChooser) => !prevToggleColumnChooser
59
+ );
60
+ };
61
+
62
+ const onWidgetTypeClick = () => {
63
+ const updatedSetting = {
64
+ ...props.uiElementGroupData?.setting,
65
+ activeDataWidgetType:
66
+ props.uiElementGroupData?.setting?.activeDataWidgetType ===
67
+ DataWidgetType.GRID
68
+ ? DataWidgetType.CARD
69
+ : DataWidgetType.GRID,
70
+ };
71
+
72
+ const updatedUiElementGroupData = {
73
+ ...props.uiElementGroupData,
74
+ setting: updatedSetting,
75
+ processing: true,
76
+ };
77
+
78
+ props.onModelUpdate(
79
+ null,
80
+ props.config.uiElementGroupId,
81
+ updatedUiElementGroupData
82
+ );
83
+ setTogglePopup(false);
84
+ };
85
+
86
+ return props.visible ? (
87
+ <div className="tmpl-setting-container" ref={popupRef}>
88
+ <SettingView disabled={props.disabled} onSettingClick={onSettingClick} />
89
+ {togglePopup && !props.disabled && (
90
+ <SettingPopup
91
+ activeDataWidgetType={
92
+ props.uiElementGroupData?.setting?.activeDataWidgetType
93
+ }
94
+ onSettingClick={onSettingClick}
95
+ onChooserClick={onChooserClick}
96
+ onWidgetTypeClick={onWidgetTypeClick}
97
+ />
98
+ )}
99
+ {toggleColumnChooser && !props.disabled && (
100
+ <ColumnChooser
101
+ uiElementGroupData={props.uiElementGroupData}
102
+ toggleColumnChooser={toggleColumnChooser}
103
+ columns={props.columns}
104
+ config={props.config}
105
+ onChooserClick={onChooserClick}
106
+ onModelUpdate={props.onModelUpdate}
107
+ setToggleColumnChooser={setToggleColumnChooser}
108
+ setTogglePopup={setTogglePopup}
109
+ />
110
+ )}
111
+ </div>
112
+ ) : (
113
+ <></>
114
+ );
115
+ };
116
+ export default Setting;
@@ -0,0 +1,23 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { DataWidgetType } from "./Setting";
3
+
4
+ type SettingPopupProps = {
5
+ activeDataWidgetType: DataWidgetType;
6
+ onSettingClick: () => void;
7
+ onChooserClick: () => void;
8
+ onWidgetTypeClick: () => void;
9
+ };
10
+
11
+ const SettingPopup = (props: SettingPopupProps) => {
12
+ return (
13
+ <div className="tmpl-setting-popup">
14
+ <div onClick={props.onChooserClick}>Column Chooser</div>
15
+ <div onClick={props.onWidgetTypeClick}>
16
+ {props.activeDataWidgetType === DataWidgetType.CARD
17
+ ? "Change To Grid View"
18
+ : "Change To Card View"}
19
+ </div>
20
+ </div>
21
+ );
22
+ };
23
+ export default SettingPopup;
@@ -0,0 +1,23 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import FactoryRenderer from "../../../../Renderer";
3
+
4
+ export type SettingViewProps = {
5
+ disabled: boolean;
6
+ onSettingClick: () => void;
7
+ };
8
+
9
+ const SettingView = (props: SettingViewProps) => {
10
+ return (
11
+ <FactoryRenderer
12
+ disabled={props.disabled}
13
+ rootStyle={{ className: "tmpl-setting" }}
14
+ widgetStyle={{ className: "tmpl-button", inline: { width: "100%" } }}
15
+ onClick={props.onSettingClick}
16
+ title="Setting"
17
+ name="setting"
18
+ uiElementType="WIDGET"
19
+ widgetType="ICON"
20
+ />
21
+ );
22
+ };
23
+ export default SettingView;