@qrvey/filters 0.0.13 → 0.0.15

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 (67) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/classes/FilterAdapter.d.ts +2 -1
  3. package/dist/cjs/classes/FilterAdapter.d.ts.map +1 -1
  4. package/dist/cjs/classes/FilterAdapter.js +8 -6
  5. package/dist/cjs/classes/FilterManager.d.ts +8 -3
  6. package/dist/cjs/classes/FilterManager.d.ts.map +1 -1
  7. package/dist/cjs/classes/FilterManager.js +14 -6
  8. package/dist/cjs/classes/FilterSettings.d.ts +1 -0
  9. package/dist/cjs/classes/FilterSettings.d.ts.map +1 -0
  10. package/dist/cjs/classes/FilterSettings.js +1 -0
  11. package/dist/cjs/helpers/filter-adapt.helpers.d.ts +7 -13
  12. package/dist/cjs/helpers/filter-adapt.helpers.d.ts.map +1 -1
  13. package/dist/cjs/helpers/filter-adapt.helpers.js +31 -183
  14. package/dist/cjs/helpers/filter-adapt.legacy.helpers.d.ts +26 -0
  15. package/dist/cjs/helpers/filter-adapt.legacy.helpers.d.ts.map +1 -0
  16. package/dist/cjs/helpers/filter-adapt.legacy.helpers.js +229 -0
  17. package/dist/cjs/helpers/filter-adapt.logic.helpers.js +1 -1
  18. package/dist/cjs/resources/filter-logic.resources.d.ts +0 -4
  19. package/dist/cjs/resources/filter-logic.resources.d.ts.map +1 -1
  20. package/dist/cjs/resources/filter-panel.interfaces.d.ts +57 -4
  21. package/dist/cjs/resources/filter-panel.interfaces.d.ts.map +1 -1
  22. package/dist/cjs/resources/filter-settings.resources.d.ts +357 -0
  23. package/dist/cjs/resources/filter-settings.resources.d.ts.map +1 -0
  24. package/dist/cjs/resources/filter-settings.resources.js +2 -0
  25. package/dist/cjs/resources/filter-visual.resources.d.ts +0 -8
  26. package/dist/cjs/resources/filter-visual.resources.d.ts.map +1 -1
  27. package/dist/cjs/resources/filters.resources.d.ts +2 -0
  28. package/dist/cjs/resources/filters.resources.d.ts.map +1 -1
  29. package/dist/classes/FilterAdapter.d.ts +2 -1
  30. package/dist/classes/FilterAdapter.d.ts.map +1 -1
  31. package/dist/classes/FilterAdapter.js +7 -5
  32. package/dist/classes/FilterManager.d.ts +8 -3
  33. package/dist/classes/FilterManager.d.ts.map +1 -1
  34. package/dist/classes/FilterManager.js +14 -6
  35. package/dist/classes/FilterSettings.d.ts +1 -0
  36. package/dist/classes/FilterSettings.d.ts.map +1 -0
  37. package/dist/classes/FilterSettings.js +1 -0
  38. package/dist/helpers/filter-adapt.helpers.d.ts +7 -13
  39. package/dist/helpers/filter-adapt.helpers.d.ts.map +1 -1
  40. package/dist/helpers/filter-adapt.helpers.js +30 -181
  41. package/dist/helpers/filter-adapt.legacy.helpers.d.ts +26 -0
  42. package/dist/helpers/filter-adapt.legacy.helpers.d.ts.map +1 -0
  43. package/dist/helpers/filter-adapt.legacy.helpers.js +223 -0
  44. package/dist/helpers/filter-adapt.logic.helpers.js +1 -1
  45. package/dist/resources/filter-logic.resources.d.ts +0 -4
  46. package/dist/resources/filter-logic.resources.d.ts.map +1 -1
  47. package/dist/resources/filter-panel.interfaces.d.ts +57 -4
  48. package/dist/resources/filter-panel.interfaces.d.ts.map +1 -1
  49. package/dist/resources/filter-settings.resources.d.ts +357 -0
  50. package/dist/resources/filter-settings.resources.d.ts.map +1 -0
  51. package/dist/resources/filter-settings.resources.js +1 -0
  52. package/dist/resources/filter-visual.resources.d.ts +0 -8
  53. package/dist/resources/filter-visual.resources.d.ts.map +1 -1
  54. package/dist/resources/filters.resources.d.ts +2 -0
  55. package/dist/resources/filters.resources.d.ts.map +1 -1
  56. package/package.json +1 -1
  57. package/src/classes/FilterAdapter.ts +13 -7
  58. package/src/classes/FilterManager.ts +13 -4
  59. package/src/helpers/filter-adapt.helpers.ts +36 -242
  60. package/src/helpers/filter-adapt.legacy.helpers.ts +296 -0
  61. package/src/helpers/filter-adapt.logic.helpers.ts +1 -1
  62. package/src/resources/filter-logic.resources.ts +0 -4
  63. package/src/resources/filter-panel.interfaces.ts +58 -4
  64. package/src/resources/filter-visual.resources.ts +0 -8
  65. package/src/resources/filters.resources.ts +2 -0
  66. package/tests/mock/filters-adapter.mock.ts +0 -7
  67. package/tests/mock/filters-interactive-table.mock.ts +14 -18
@@ -1,23 +1,8 @@
1
- import {
2
- IColumn,
3
- IColumnPropertyType,
4
- IDataset,
5
- IFUData,
6
- IFUDataset,
7
- IFUFilter,
8
- IFUScope,
9
- IFValue,
10
- isEmpty,
11
- } from "@qrvey/utils";
1
+ import { IColumn, IDataset, isEmpty } from "@qrvey/utils";
12
2
 
13
3
  import { getColumnInfo, getDatasetInfo } from "./utils.helpers";
14
4
 
15
- import { FilterBuilder } from "../classes/FilterBuilder";
16
- import { IFilterGrouping } from "../resources/filter-grouping.resources";
17
5
  import { IFilterPanelInteractiveTable } from "../resources/filter-panel.interfaces";
18
- import { FILTER_SCOPE } from "../resources/filter-scopes.resources";
19
- import { FILTER_SECTION } from "../resources/filter-sections.resources";
20
- import { IFilterValue } from "../resources/filter-values.resources";
21
6
  import {
22
7
  DEFAULT_UI_FILTER,
23
8
  IFilterUI,
@@ -47,73 +32,47 @@ export function filterToVisual(
47
32
  }
48
33
 
49
34
  /**
50
- * Generates a legacy visual filter structure from the filter collection.
51
- * @param filters Array of filters
52
- * @param datasets Array of the dataset info
53
- * @param interactiveTable table of interaction properties for each section
54
- * @returns a Filter Data structure
35
+ * Gets the Interactive Table object from the visual filters
36
+ * If an interactive table object is given, it will be merged with the new one
37
+ * @param visual the visual filters
38
+ * @param interactiveTable the interactive table object
39
+ * @returns the interactive table object
55
40
  */
56
- export function filterToLegacyVisual(
57
- filters: IFilter[],
58
- datasets: IDataset[] = [],
41
+ export function legacyVisualToInteractiveTable(
42
+ visual: IFilterVisual,
59
43
  interactiveTable?: IFilterPanelInteractiveTable,
60
- ): IFUData | undefined {
61
- if (isEmpty(filters)) return;
44
+ ): IFilterPanelInteractiveTable | undefined {
45
+ if (isEmpty(visual) || isEmpty(visual?.scopes)) return;
62
46
 
63
- return {
64
- enabled: true,
65
- section: FILTER_SECTION.DX,
66
- version: "2.1",
67
- scopes: buildLegacyScopes(filters, datasets, interactiveTable),
47
+ const newInteractiveTable: IFilterPanelInteractiveTable = {
48
+ interactScopes: [],
49
+ interactDatasets: [],
50
+ ...interactiveTable,
68
51
  };
69
- }
70
52
 
71
- /**
72
- * Generates a legacy visual filter structure from the filter collection.
73
- * @param filterData the legacy filter
74
- * @returns a Filter collection
75
- */
76
- export function legacyVisualToFilter(filterData: IFUData): IFilter[] {
77
- if (isEmpty(filterData) || isEmpty(filterData?.scopes)) return [];
78
-
79
- const filters: IFilter[] = [];
80
-
81
- filterData.scopes.forEach((scope: IFUScope) => {
53
+ visual.scopes.forEach((scope: IFilterVisualScope) => {
54
+ newInteractiveTable.interactScopes!.push({
55
+ collapsed: scope.collapsed,
56
+ scope: scope.scope,
57
+ scopeId: scope.id,
58
+ });
82
59
  if (scope.datasets.length === 0) return;
83
- scope.datasets.forEach((dataset: IFUDataset) => {
84
- if (dataset.filters.length === 0) return;
85
- dataset.filters.forEach((filter) => {
86
- const fFilter = FilterBuilder.createFilter({
87
- aggregateType: filter.column.aggregate,
88
- collapsed: filter.collapsed,
89
- columnId: filter.column.id,
90
- columnType: filter.column.type,
91
- customLabel: filter.extras.filterLabel,
92
- datasetId: dataset.qrveyid,
93
- deletable: filter.deletable,
94
- displayed: filter.displayed,
95
- editable: filter.editable,
96
- enableable: filter.enableable,
97
- enabled: filter.enabled,
98
- extras: filter.extras,
99
- grouping: filter.property as unknown as IFilterGrouping,
100
- id: "",
101
- lookupDisplayIndex: filter.lookupDisplayIndex,
102
- operator: filter.operator,
103
- scope: scope.scope,
104
- scopeId: scope.scopeid,
105
- section: filterData.section,
106
- selectAll: filter.selectAll,
107
- validator: filter.validator,
108
- values: filter.values as unknown as IFilterValue[],
109
- });
110
-
111
- filters.push(fFilter);
60
+ scope.datasets.forEach((dataset: IFilterVisualDataset) => {
61
+ newInteractiveTable.interactDatasets!.push({
62
+ collapsed: scope.collapsed,
63
+ scope: scope.scope,
64
+ scopeId: scope.id,
65
+ datasetId: dataset.id,
112
66
  });
113
67
  });
114
68
  });
115
69
 
116
- return filters;
70
+ if (isEmpty(newInteractiveTable.interactScopes))
71
+ delete newInteractiveTable.interactScopes;
72
+ if (isEmpty(newInteractiveTable.interactDatasets))
73
+ delete newInteractiveTable.interactDatasets;
74
+
75
+ return newInteractiveTable;
117
76
  }
118
77
 
119
78
  /**
@@ -179,8 +138,8 @@ function buildScope(
179
138
  filter: IFilter,
180
139
  interactiveTable?: IFilterPanelInteractiveTable,
181
140
  ): IFilterVisualScope {
182
- const { collapsed, displayed, enabled } =
183
- interactiveTable?.scopes.find(
141
+ const { collapsed } =
142
+ interactiveTable?.interactScopes?.find(
184
143
  (interactive) =>
185
144
  interactive.scope === filter.scope &&
186
145
  interactive.scopeId === filter.scopeId,
@@ -189,8 +148,6 @@ function buildScope(
189
148
  return {
190
149
  collapsed: collapsed ?? false,
191
150
  datasets: [],
192
- displayed: displayed ?? true,
193
- enabled: enabled ?? true,
194
151
  scope: filter.scope,
195
152
  id: filter.scopeId,
196
153
  section: filter.section,
@@ -209,16 +166,14 @@ function buildDataset(
209
166
  dataset?: IDataset,
210
167
  interactiveTable?: IFilterPanelInteractiveTable,
211
168
  ): IFilterVisualDataset {
212
- const { collapsed, displayed, enabled } =
213
- interactiveTable?.datasets.find(
169
+ const { collapsed } =
170
+ interactiveTable?.interactDatasets?.find(
214
171
  (interactive) => interactive.datasetId === filter.datasetId,
215
172
  ) ?? {};
216
173
  return {
217
174
  collapsed: collapsed ?? false,
218
175
  id: filter.datasetId,
219
176
  label: dataset?.label || "",
220
- displayed: displayed ?? true,
221
- enabled: enabled ?? true,
222
177
  filters: [],
223
178
  };
224
179
  }
@@ -247,164 +202,3 @@ function buildFilter(filter: IFilter, dataset?: IDataset): IFilterUI {
247
202
  iconTooltip: filter.iconTooltip ?? DEFAULT_UI_FILTER.iconTooltip,
248
203
  };
249
204
  }
250
-
251
- /**
252
- * Gets a collection of legacy scopes for the legacy visual filters.
253
- * The scopes are organized by scope types and IDs
254
- * Also, adds and organizes filters by datasets
255
- * @param filters Collection of filters
256
- * @param datasets Array of the dataset info
257
- * @param interactiveTable table of interaction properties for each section
258
- * @returns an array of visual scopes.
259
- */
260
- function buildLegacyScopes(
261
- filters: IFilter[] = [],
262
- datasets: IDataset[] = [],
263
- interactiveTable?: IFilterPanelInteractiveTable,
264
- ): IFUScope[] {
265
- return filters.reduce((scopes: IFUScope[], filter: IFilter) => {
266
- const datasetInfo = getDatasetInfo(
267
- { columnId: filter.columnId, datasetId: filter.datasetId },
268
- datasets,
269
- );
270
-
271
- const uiFilter: IFUFilter = buildLegacyFilter(filter, datasetInfo);
272
- const uiDataset: IFUDataset = buildLegacyDataset(
273
- filter,
274
- datasetInfo,
275
- interactiveTable,
276
- );
277
- const uiScope: IFUScope = buildLegacyScope(filter, interactiveTable);
278
-
279
- const scopeIndex = scopes.findIndex(
280
- (sc) => sc.scope === filter.scope && sc.scopeid === filter.scopeId,
281
- );
282
- const datasetIndex =
283
- scopeIndex > -1
284
- ? scopes[scopeIndex].datasets.findIndex(
285
- (dt) => dt.qrveyid === filter.datasetId,
286
- )
287
- : -1;
288
-
289
- if (scopeIndex === -1) {
290
- scopes.push({
291
- ...uiScope,
292
- datasets: [{ ...uiDataset, filters: [uiFilter] }],
293
- });
294
- } else if (datasetIndex === -1) {
295
- scopes[scopeIndex].datasets.push({ ...uiDataset, filters: [uiFilter] });
296
- } else {
297
- scopes[scopeIndex].datasets[datasetIndex].filters.push(uiFilter);
298
- }
299
-
300
- return scopes;
301
- }, []);
302
- }
303
-
304
- /**
305
- * Gets an legacy scope structure for the legacy filter data
306
- * @param filter the filter
307
- * @param interactiveTable table of interaction properties for each section
308
- * @returns the legacy visual scope structure
309
- */
310
- function buildLegacyScope(
311
- filter: IFilter,
312
- interactiveTable?: IFilterPanelInteractiveTable,
313
- ): IFUScope {
314
- const { collapsed, displayed, enabled } =
315
- interactiveTable?.scopes.find(
316
- (interactive) =>
317
- interactive.scope === filter.scope &&
318
- interactive.scopeId === filter.scopeId,
319
- ) ?? {};
320
-
321
- return {
322
- collapsed: collapsed ?? false,
323
- datasets: [],
324
- displayed: displayed ?? true,
325
- enabled: enabled ?? true,
326
- scope: filter.scope,
327
- scopeid: filter.scopeId,
328
- };
329
- }
330
-
331
- /**
332
- * Gets an legacy dataset structure for the legacy visual filter
333
- * @param filter the filter
334
- * @param dataset the dataset info
335
- * @param interactiveTable table of interaction properties for each section
336
- * @returns an legacy dataset structure
337
- */
338
- function buildLegacyDataset(
339
- filter: IFilter,
340
- dataset?: IDataset,
341
- interactiveTable?: IFilterPanelInteractiveTable,
342
- ): IFUDataset {
343
- const { collapsed, displayed, enabled } =
344
- interactiveTable?.datasets.find(
345
- (interactive) => interactive.datasetId === filter.datasetId,
346
- ) ?? {};
347
- return {
348
- collapsed: collapsed ?? false,
349
- qrveyid: filter.datasetId,
350
- label: dataset?.label || "",
351
- displayed: displayed ?? true,
352
- enabled: enabled ?? true,
353
- filters: [],
354
- };
355
- }
356
-
357
- /**
358
- * Gets an legacy filter structure for the legacy visual filter
359
- * @param filter a UI structure filter
360
- * @param dataset the dataset info
361
- * @returns an legacy filter structure
362
- */
363
- function buildLegacyFilter(filter: IFilter, dataset?: IDataset): IFUFilter {
364
- const columnInfo: IColumn | undefined =
365
- dataset == null
366
- ? undefined
367
- : getColumnInfo(
368
- { columnId: filter.columnId, datasetId: filter.datasetId },
369
- [dataset],
370
- );
371
-
372
- return {
373
- collapsed: filter.collapsed ?? false,
374
- column: {
375
- id: filter.columnId,
376
- formulaType: columnInfo?.formulaType,
377
- label: columnInfo?.label || "",
378
- qrveyid: filter.datasetId,
379
- aggregate: filter.aggregateType,
380
- type: filter.columnType,
381
- },
382
- deletable: filter.deletable,
383
- displayed: filter.displayed,
384
- editable: filter.editable,
385
- enableable: filter.enableable,
386
- enabled: filter.enabled,
387
- filterid: filter.id,
388
- extras: {
389
- ...filter.extras,
390
- filterLabel: filter.customLabel,
391
- panelid: FILTER_SCOPE.CHART === filter.scope ? filter.scopeId : undefined,
392
- info: !isEmpty(filter.extras?.info)
393
- ? {
394
- icon: filter.icon || "",
395
- label: filter.iconTooltip || "",
396
- }
397
- : undefined,
398
- scope: filter.scope,
399
- scopeid: filter.scopeId,
400
- section: filter.section,
401
- },
402
- lookupDisplayIndex: filter.lookupDisplayIndex,
403
- nullValues: false,
404
- operator: filter.operator,
405
- property: filter.grouping as unknown as IColumnPropertyType,
406
- selectAll: filter.selectAll,
407
- validator: filter.validator,
408
- values: filter.values as unknown as IFValue[],
409
- };
410
- }
@@ -0,0 +1,296 @@
1
+ import {
2
+ FILTER_SCOPE,
3
+ FILTER_SECTION,
4
+ IColumn,
5
+ IColumnPropertyType,
6
+ IDataset,
7
+ IFUData,
8
+ IFUDataset,
9
+ IFUFilter,
10
+ IFUScope,
11
+ IFValue,
12
+ isEmpty,
13
+ } from "@qrvey/utils";
14
+
15
+ import { getColumnInfo, getDatasetInfo } from "./utils.helpers";
16
+
17
+ import { FilterBuilder } from "../classes/FilterBuilder";
18
+ import { IFilterGrouping } from "../resources/filter-grouping.resources";
19
+ import { IFilterPanelInteractiveTable } from "../resources/filter-panel.interfaces";
20
+ import { IFilterValue } from "../resources/filter-values.resources";
21
+ import { IFilter } from "../resources/filters.resources";
22
+
23
+ /**
24
+ * Generates a legacy visual filter structure from the filter collection.
25
+ * @param filters Array of filters
26
+ * @param datasets Array of the dataset info
27
+ * @param interactiveTable table of interaction properties for each section
28
+ * @returns a Filter Data structure
29
+ */
30
+ export function filterToLegacyVisual(
31
+ filters: IFilter[],
32
+ datasets: IDataset[] = [],
33
+ interactiveTable?: IFilterPanelInteractiveTable,
34
+ ): IFUData | undefined {
35
+ if (isEmpty(filters)) return;
36
+
37
+ return {
38
+ enabled: true,
39
+ section: FILTER_SECTION.DX,
40
+ version: "2.1",
41
+ scopes: buildLegacyScopes(filters, datasets, interactiveTable),
42
+ };
43
+ }
44
+
45
+ /**
46
+ * Generates a legacy visual filter structure from the filter collection.
47
+ * @param filterData the legacy filter
48
+ * @returns a Filter collection
49
+ */
50
+ export function legacyVisualToFilter(filterData: IFUData): IFilter[] {
51
+ if (isEmpty(filterData) || isEmpty(filterData?.scopes)) return [];
52
+
53
+ const filters: IFilter[] = [];
54
+
55
+ filterData.scopes.forEach((scope: IFUScope) => {
56
+ if (scope.datasets.length === 0) return;
57
+ scope.datasets.forEach((dataset: IFUDataset) => {
58
+ if (dataset.filters.length === 0) return;
59
+ dataset.filters.forEach((filter) => {
60
+ const fFilter = FilterBuilder.createFilter({
61
+ aggregateType: filter.column.aggregate,
62
+ collapsed: filter.collapsed,
63
+ columnId: filter.column.id,
64
+ columnType: filter.column.type,
65
+ customLabel: filter.extras.filterLabel,
66
+ datasetId: dataset.qrveyid,
67
+ deletable: filter.deletable,
68
+ displayed: filter.displayed,
69
+ editable: filter.editable,
70
+ enableable: filter.enableable,
71
+ enabled: filter.enabled,
72
+ extras: filter.extras,
73
+ grouping: filter.property as unknown as IFilterGrouping,
74
+ id: "",
75
+ lookupDisplayIndex: filter.lookupDisplayIndex,
76
+ operator: filter.operator,
77
+ scope: scope.scope,
78
+ scopeId: scope.scopeid,
79
+ section: filterData.section,
80
+ selectAll: filter.selectAll,
81
+ validator: filter.validator,
82
+ values: filter.values as unknown as IFilterValue[],
83
+ });
84
+
85
+ filters.push(fFilter);
86
+ });
87
+ });
88
+ });
89
+
90
+ return filters;
91
+ }
92
+
93
+ /**
94
+ * Gets the Interactive Table object from the legacy visual filters
95
+ * If an interactive table object is given, it will be merged with the new one
96
+ * @param legacyVisual the legacy visual filters
97
+ * @param interactiveTable the interactive table object
98
+ * @returns the interactive table object
99
+ */
100
+ export function legacyVisualToInteractiveTable(
101
+ legacyVisual: IFUData,
102
+ interactiveTable?: IFilterPanelInteractiveTable,
103
+ ): IFilterPanelInteractiveTable | undefined {
104
+ if (isEmpty(legacyVisual) || isEmpty(legacyVisual?.scopes)) return;
105
+
106
+ const newInteractiveTable: IFilterPanelInteractiveTable = {
107
+ ...interactiveTable,
108
+ interactScopes: [],
109
+ interactDatasets: [],
110
+ };
111
+
112
+ legacyVisual.scopes.forEach((scope: IFUScope) => {
113
+ newInteractiveTable.interactScopes!.push({
114
+ collapsed: scope.collapsed,
115
+ scope: scope.scope,
116
+ scopeId: scope.scopeid,
117
+ });
118
+ if (scope.datasets.length === 0) return;
119
+ scope.datasets.forEach((dataset: IFUDataset) => {
120
+ newInteractiveTable.interactDatasets!.push({
121
+ collapsed: dataset.collapsed,
122
+ scope: scope.scope,
123
+ scopeId: scope.scopeid,
124
+ datasetId: dataset.qrveyid,
125
+ });
126
+ });
127
+ });
128
+
129
+ if (isEmpty(newInteractiveTable.interactScopes))
130
+ delete newInteractiveTable.interactScopes;
131
+ if (isEmpty(newInteractiveTable.interactDatasets))
132
+ delete newInteractiveTable.interactDatasets;
133
+
134
+ return newInteractiveTable;
135
+ }
136
+
137
+ /**
138
+ * Gets a collection of legacy scopes for the legacy visual filters.
139
+ * The scopes are organized by scope types and IDs
140
+ * Also, adds and organizes filters by datasets
141
+ * @param filters Collection of filters
142
+ * @param datasets Array of the dataset info
143
+ * @param interactiveTable table of interaction properties for each section
144
+ * @returns an array of visual scopes.
145
+ */
146
+ function buildLegacyScopes(
147
+ filters: IFilter[] = [],
148
+ datasets: IDataset[] = [],
149
+ interactiveTable?: IFilterPanelInteractiveTable,
150
+ ): IFUScope[] {
151
+ return filters.reduce((scopes: IFUScope[], filter: IFilter) => {
152
+ const datasetInfo = getDatasetInfo(
153
+ { columnId: filter.columnId, datasetId: filter.datasetId },
154
+ datasets,
155
+ );
156
+
157
+ const uiFilter: IFUFilter = buildLegacyFilter(filter, datasetInfo);
158
+ const uiDataset: IFUDataset = buildLegacyDataset(
159
+ filter,
160
+ datasetInfo,
161
+ interactiveTable,
162
+ );
163
+ const uiScope: IFUScope = buildLegacyScope(filter, interactiveTable);
164
+
165
+ const scopeIndex = scopes.findIndex(
166
+ (sc) => sc.scope === filter.scope && sc.scopeid === filter.scopeId,
167
+ );
168
+ const datasetIndex =
169
+ scopeIndex > -1
170
+ ? scopes[scopeIndex].datasets.findIndex(
171
+ (dt) => dt.qrveyid === filter.datasetId,
172
+ )
173
+ : -1;
174
+
175
+ if (scopeIndex === -1) {
176
+ scopes.push({
177
+ ...uiScope,
178
+ datasets: [{ ...uiDataset, filters: [uiFilter] }],
179
+ });
180
+ } else if (datasetIndex === -1) {
181
+ scopes[scopeIndex].datasets.push({ ...uiDataset, filters: [uiFilter] });
182
+ } else {
183
+ scopes[scopeIndex].datasets[datasetIndex].filters.push(uiFilter);
184
+ }
185
+
186
+ return scopes;
187
+ }, []);
188
+ }
189
+
190
+ /**
191
+ * Gets an legacy scope structure for the legacy filter data
192
+ * @param filter the filter
193
+ * @param interactiveTable table of interaction properties for each section
194
+ * @returns the legacy visual scope structure
195
+ */
196
+ function buildLegacyScope(
197
+ filter: IFilter,
198
+ interactiveTable?: IFilterPanelInteractiveTable,
199
+ ): IFUScope {
200
+ const { collapsed } =
201
+ interactiveTable?.interactScopes?.find(
202
+ (interactive) =>
203
+ interactive.scope === filter.scope &&
204
+ interactive.scopeId === filter.scopeId,
205
+ ) ?? {};
206
+
207
+ return {
208
+ collapsed: collapsed ?? false,
209
+ datasets: [],
210
+ displayed: true,
211
+ enabled: true,
212
+ scope: filter.scope,
213
+ scopeid: filter.scopeId,
214
+ };
215
+ }
216
+
217
+ /**
218
+ * Gets an legacy dataset structure for the legacy visual filter
219
+ * @param filter the filter
220
+ * @param dataset the dataset info
221
+ * @param interactiveTable table of interaction properties for each section
222
+ * @returns an legacy dataset structure
223
+ */
224
+ function buildLegacyDataset(
225
+ filter: IFilter,
226
+ dataset?: IDataset,
227
+ interactiveTable?: IFilterPanelInteractiveTable,
228
+ ): IFUDataset {
229
+ const { collapsed } =
230
+ interactiveTable?.interactDatasets?.find(
231
+ (interactive) => interactive.datasetId === filter.datasetId,
232
+ ) ?? {};
233
+ return {
234
+ collapsed: collapsed ?? false,
235
+ qrveyid: filter.datasetId,
236
+ label: dataset?.label || "",
237
+ displayed: true,
238
+ enabled: true,
239
+ filters: [],
240
+ };
241
+ }
242
+
243
+ /**
244
+ * Gets an legacy filter structure for the legacy visual filter
245
+ * @param filter a UI structure filter
246
+ * @param dataset the dataset info
247
+ * @returns an legacy filter structure
248
+ */
249
+ function buildLegacyFilter(filter: IFilter, dataset?: IDataset): IFUFilter {
250
+ const columnInfo: IColumn | undefined =
251
+ dataset == null
252
+ ? undefined
253
+ : getColumnInfo(
254
+ { columnId: filter.columnId, datasetId: filter.datasetId },
255
+ [dataset],
256
+ );
257
+
258
+ return {
259
+ collapsed: filter.collapsed ?? false,
260
+ column: {
261
+ id: filter.columnId,
262
+ formulaType: columnInfo?.formulaType,
263
+ label: columnInfo?.label || "",
264
+ qrveyid: filter.datasetId,
265
+ aggregate: filter.aggregateType,
266
+ type: filter.columnType,
267
+ },
268
+ deletable: filter.deletable,
269
+ displayed: filter.displayed,
270
+ editable: filter.editable,
271
+ enableable: filter.enableable,
272
+ enabled: filter.enabled,
273
+ filterid: filter.id,
274
+ extras: {
275
+ ...filter.extras,
276
+ filterLabel: filter.customLabel,
277
+ panelid: FILTER_SCOPE.CHART === filter.scope ? filter.scopeId : undefined,
278
+ info: !isEmpty(filter.extras?.info)
279
+ ? {
280
+ icon: filter.icon || "",
281
+ label: filter.iconTooltip || "",
282
+ }
283
+ : undefined,
284
+ scope: filter.scope,
285
+ scopeid: filter.scopeId,
286
+ section: filter.section,
287
+ },
288
+ lookupDisplayIndex: filter.lookupDisplayIndex,
289
+ nullValues: false,
290
+ operator: filter.operator,
291
+ property: filter.grouping as unknown as IColumnPropertyType,
292
+ selectAll: filter.selectAll,
293
+ validator: filter.validator,
294
+ values: filter.values as unknown as IFValue[],
295
+ };
296
+ }
@@ -91,7 +91,6 @@ export function visualToLogic(visual: IFilterVisual): IFilterLogic[] {
91
91
  */
92
92
  function buildLogic(scope: IFilterVisualScope): IFilterLogic {
93
93
  return {
94
- enabled: scope.enabled,
95
94
  filters: [],
96
95
  scope: scope.scope,
97
96
  scopeid: scope.id,
@@ -102,6 +101,7 @@ function buildLogic(scope: IFilterVisualScope): IFilterLogic {
102
101
  * Gets the Logic Filters collection based on filters
103
102
  * @param filters the filter collection
104
103
  * @param groupColumns a flag to know if the
104
+ * @returns the logic filter collection
105
105
  */
106
106
  function buildLogicFilters(
107
107
  filters: IFilterUI[],
@@ -9,10 +9,6 @@ export type IFilterLogicValidator = FILTER_LOGIC_VALIDATOR;
9
9
  * The structure of the logic
10
10
  */
11
11
  export interface IFilterLogic {
12
- /**
13
- * Flag to apply the logic.
14
- */
15
- enabled: boolean;
16
12
  /**
17
13
  * The filter structure
18
14
  */