@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.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/classes/FilterAdapter.d.ts +2 -1
- package/dist/cjs/classes/FilterAdapter.d.ts.map +1 -1
- package/dist/cjs/classes/FilterAdapter.js +8 -6
- package/dist/cjs/classes/FilterManager.d.ts +8 -3
- package/dist/cjs/classes/FilterManager.d.ts.map +1 -1
- package/dist/cjs/classes/FilterManager.js +14 -6
- package/dist/cjs/classes/FilterSettings.d.ts +1 -0
- package/dist/cjs/classes/FilterSettings.d.ts.map +1 -0
- package/dist/cjs/classes/FilterSettings.js +1 -0
- package/dist/cjs/helpers/filter-adapt.helpers.d.ts +7 -13
- package/dist/cjs/helpers/filter-adapt.helpers.d.ts.map +1 -1
- package/dist/cjs/helpers/filter-adapt.helpers.js +31 -183
- package/dist/cjs/helpers/filter-adapt.legacy.helpers.d.ts +26 -0
- package/dist/cjs/helpers/filter-adapt.legacy.helpers.d.ts.map +1 -0
- package/dist/cjs/helpers/filter-adapt.legacy.helpers.js +229 -0
- package/dist/cjs/helpers/filter-adapt.logic.helpers.js +1 -1
- package/dist/cjs/resources/filter-logic.resources.d.ts +0 -4
- package/dist/cjs/resources/filter-logic.resources.d.ts.map +1 -1
- package/dist/cjs/resources/filter-panel.interfaces.d.ts +57 -4
- package/dist/cjs/resources/filter-panel.interfaces.d.ts.map +1 -1
- package/dist/cjs/resources/filter-settings.resources.d.ts +357 -0
- package/dist/cjs/resources/filter-settings.resources.d.ts.map +1 -0
- package/dist/cjs/resources/filter-settings.resources.js +2 -0
- package/dist/cjs/resources/filter-visual.resources.d.ts +0 -8
- package/dist/cjs/resources/filter-visual.resources.d.ts.map +1 -1
- package/dist/cjs/resources/filters.resources.d.ts +2 -0
- package/dist/cjs/resources/filters.resources.d.ts.map +1 -1
- package/dist/classes/FilterAdapter.d.ts +2 -1
- package/dist/classes/FilterAdapter.d.ts.map +1 -1
- package/dist/classes/FilterAdapter.js +7 -5
- package/dist/classes/FilterManager.d.ts +8 -3
- package/dist/classes/FilterManager.d.ts.map +1 -1
- package/dist/classes/FilterManager.js +14 -6
- package/dist/classes/FilterSettings.d.ts +1 -0
- package/dist/classes/FilterSettings.d.ts.map +1 -0
- package/dist/classes/FilterSettings.js +1 -0
- package/dist/helpers/filter-adapt.helpers.d.ts +7 -13
- package/dist/helpers/filter-adapt.helpers.d.ts.map +1 -1
- package/dist/helpers/filter-adapt.helpers.js +30 -181
- package/dist/helpers/filter-adapt.legacy.helpers.d.ts +26 -0
- package/dist/helpers/filter-adapt.legacy.helpers.d.ts.map +1 -0
- package/dist/helpers/filter-adapt.legacy.helpers.js +223 -0
- package/dist/helpers/filter-adapt.logic.helpers.js +1 -1
- package/dist/resources/filter-logic.resources.d.ts +0 -4
- package/dist/resources/filter-logic.resources.d.ts.map +1 -1
- package/dist/resources/filter-panel.interfaces.d.ts +57 -4
- package/dist/resources/filter-panel.interfaces.d.ts.map +1 -1
- package/dist/resources/filter-settings.resources.d.ts +357 -0
- package/dist/resources/filter-settings.resources.d.ts.map +1 -0
- package/dist/resources/filter-settings.resources.js +1 -0
- package/dist/resources/filter-visual.resources.d.ts +0 -8
- package/dist/resources/filter-visual.resources.d.ts.map +1 -1
- package/dist/resources/filters.resources.d.ts +2 -0
- package/dist/resources/filters.resources.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/classes/FilterAdapter.ts +13 -7
- package/src/classes/FilterManager.ts +13 -4
- package/src/helpers/filter-adapt.helpers.ts +36 -242
- package/src/helpers/filter-adapt.legacy.helpers.ts +296 -0
- package/src/helpers/filter-adapt.logic.helpers.ts +1 -1
- package/src/resources/filter-logic.resources.ts +0 -4
- package/src/resources/filter-panel.interfaces.ts +58 -4
- package/src/resources/filter-visual.resources.ts +0 -8
- package/src/resources/filters.resources.ts +2 -0
- package/tests/mock/filters-adapter.mock.ts +0 -7
- 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
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* @param
|
|
53
|
-
* @param interactiveTable
|
|
54
|
-
* @returns
|
|
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
|
|
57
|
-
|
|
58
|
-
datasets: IDataset[] = [],
|
|
41
|
+
export function legacyVisualToInteractiveTable(
|
|
42
|
+
visual: IFilterVisual,
|
|
59
43
|
interactiveTable?: IFilterPanelInteractiveTable,
|
|
60
|
-
):
|
|
61
|
-
if (isEmpty(
|
|
44
|
+
): IFilterPanelInteractiveTable | undefined {
|
|
45
|
+
if (isEmpty(visual) || isEmpty(visual?.scopes)) return;
|
|
62
46
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
scopes: buildLegacyScopes(filters, datasets, interactiveTable),
|
|
47
|
+
const newInteractiveTable: IFilterPanelInteractiveTable = {
|
|
48
|
+
interactScopes: [],
|
|
49
|
+
interactDatasets: [],
|
|
50
|
+
...interactiveTable,
|
|
68
51
|
};
|
|
69
|
-
}
|
|
70
52
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
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
|
|
183
|
-
interactiveTable?.
|
|
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
|
|
213
|
-
interactiveTable?.
|
|
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[],
|