@provoly/dashboard 1.4.22 → 1.4.24

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 (27) hide show
  1. package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
  2. package/esm2022/lib/core/store/search/search.actions.mjs +1 -1
  3. package/esm2022/lib/core/store/search/search.effects.mjs +10 -5
  4. package/esm2022/lib/core/store/search/search.service.mjs +14 -5
  5. package/esm2022/lib/dashboard/components/dashboard.component.mjs +7 -10
  6. package/esm2022/lib/dashboard/components/widgets/data-widget.component.mjs +4 -2
  7. package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widget-factory.service.mjs +32 -23
  8. package/esm2022/lib/dashboard/resultset-utils.mjs +18 -11
  9. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +1 -1
  10. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +11 -19
  11. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +5 -2
  12. package/esm2022/lib/dashboard/store/manifest-utils.class.mjs +17 -1
  13. package/fesm2022/provoly-dashboard.mjs +144 -105
  14. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  15. package/lib/core/model/manifest.interface.d.ts +7 -0
  16. package/lib/core/store/search/search.actions.d.ts +5 -4
  17. package/lib/core/store/search/search.effects.d.ts +2 -1
  18. package/lib/core/store/search/search.service.d.ts +4 -3
  19. package/lib/dashboard/components/widgets/widget-instanciator/widget-factory.service.d.ts +3 -9
  20. package/lib/dashboard/resultset-utils.d.ts +1 -0
  21. package/lib/dashboard/store/dashboard.actions.d.ts +5 -3
  22. package/lib/dashboard/store/dashboard.effects.d.ts +3 -3
  23. package/lib/dashboard/store/manifest-utils.class.d.ts +2 -1
  24. package/package.json +43 -43
  25. package/search/search-fulltext/store/search-fulltext.effects.d.ts +1 -1
  26. package/search/search-mono-class/store/search-mono-class.effects.d.ts +1 -1
  27. package/search/search-multi-class/store/search-multi-class.effects.d.ts +1 -1
@@ -5021,17 +5021,26 @@ class SearchService {
5021
5021
  }
5022
5022
  return this.store.select(ConfigSelectors.dataUrl).pipe(mergeMap((url) => {
5023
5023
  const ds = this.datasources.find((d) => d.id === id);
5024
+ const otherParams = {};
5025
+ if (linkedItems.length > 0) {
5026
+ if (linkedItems.includes('destination')) {
5027
+ otherParams['withDestinationItems'] = 'true';
5028
+ }
5029
+ if (linkedItems.includes('source')) {
5030
+ otherParams['withSourceItems'] = 'true';
5031
+ }
5032
+ }
5024
5033
  return this.httpClient.post(encodeURI(`${url}/data-sources/id/${id}/items`), {
5025
5034
  type: ds?.sourceType === 'namedQuery' ? ds.request.type : NamedQueryTypes.MONO_CLASS,
5026
5035
  excludeGeo: excludeGeo ?? false,
5027
5036
  searchAfter: searchAfter ?? undefined,
5028
- linkedItems,
5029
- limit: this.limits[id] || this.limits['default']
5037
+ limit: this.limits[id] || this.limits['default'],
5038
+ ...otherParams
5030
5039
  }, { params });
5031
5040
  }), map((rs) => this.applyTransformations(id, rs)));
5032
5041
  }
5033
- getItemsSerializedParams(id, quickOrder = {}) {
5034
- return '|' + this.getItemsFilter(id, this.getOrder(quickOrder[id])).toString() + '|';
5042
+ getItemsSerializedParams(id, quickOrder = {}, excludeGeo, linkedItems) {
5043
+ return `|${this.getItemsFilter(id, this.getOrder(quickOrder[id])).toString()}|${excludeGeo ? 'excludeGeo' : ''}|${linkedItems?.join(',')}|`;
5035
5044
  }
5036
5045
  getItemsFilter(id, cumulative) {
5037
5046
  let params = cumulative ?? new HttpParams({ encoder: new FilterParamEncoder() });
@@ -5243,6 +5252,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
5243
5252
  args: [{ selector: 'pry-widget-placeholder', template: "<p>{{ '@pry.widget.unrecognized' | i18n: { type: manifest ? manifest.type : 'placeholder' } }}</p>\n" }]
5244
5253
  }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ElementRef }] });
5245
5254
 
5255
+ const DEFAULT_GAP_PX = 15;
5256
+ const DEFAULT_COLUMNS_NUMBER = 12;
5257
+ const DEFAULT_ROWS_NUMBER = 12;
5258
+ const DEFAULT_ROW_HEIGHT_PX = 50;
5259
+
5260
+ class ManifestUtils {
5261
+ static getDatasourcesUsedByManifest(manifest) {
5262
+ const mapOfDatasources = manifest.windows
5263
+ .map((window) => (window.widgets ?? []).map((widget) => ({ datasetId: widget.datasource, excludeGeo: widget?.type !== 'map' })))
5264
+ .flat(3)
5265
+ .filter((dataset) => !!dataset.datasetId)
5266
+ .map((res) => Array.isArray(res.datasetId)
5267
+ ? res.datasetId.map((r) => ({ datasetId: r, excludeGeo: res.excludeGeo }))
5268
+ : [res])
5269
+ .flat().reduce((p, c) => ({ ...p, [c.datasetId]: { ...p[c.datasetId], ...c } }), {});
5270
+ return Object.values(mapOfDatasources);
5271
+ }
5272
+ static cleanupManifest(manifest) {
5273
+ return {
5274
+ ...manifest,
5275
+ windows: manifest.windows.map((window) => ManifestUtils.cleanupDashboardManifest(window))
5276
+ };
5277
+ }
5278
+ static cleanupDashboardManifest(window) {
5279
+ return {
5280
+ ...window,
5281
+ grid: {
5282
+ columns: DEFAULT_COLUMNS_NUMBER,
5283
+ rows: DEFAULT_ROWS_NUMBER,
5284
+ layout: DashboardGridLayout.MANUAL,
5285
+ gap: DEFAULT_GAP_PX,
5286
+ ...window.grid
5287
+ },
5288
+ widgets: window.widgets ?? []
5289
+ };
5290
+ }
5291
+ static mergeDatasourceRequests(datasourceRequests) {
5292
+ const uniqueDatasourceRequestIds = [...new Set((datasourceRequests ?? []).map((ds) => ds.datasetId))];
5293
+ // We keep the most inclusive request for multiple requests for the same dataset
5294
+ return uniqueDatasourceRequestIds.map((id) => ({
5295
+ datasetId: id,
5296
+ // If at least one request must include geo data, then keep request with geo data
5297
+ excludeGeo: !datasourceRequests.some((ds) => ds.datasetId === id && !ds.excludeGeo),
5298
+ // If at least one request must include source or destination items, then create request with everything needed
5299
+ linkedItems: [
5300
+ ...new Set(datasourceRequests
5301
+ .filter((ds) => ds.datasetId === id)
5302
+ .map((ds) => ds.linkedItems ?? [])
5303
+ .flat())
5304
+ ]
5305
+ }));
5306
+ }
5307
+ }
5308
+
5246
5309
  const WIDGET_DEFINITION = new InjectionToken('Widgets definition');
5247
5310
  const NON_EXCLUDE_GEO_WIDGET_TYPES = {
5248
5311
  values: ['map', 'tile']
@@ -5292,23 +5355,31 @@ class WidgetFactoryService {
5292
5355
  return this.reference$.pipe(map((componentDefs) => !!componentDefs[type]));
5293
5356
  }
5294
5357
  datasourcesToAutoLoad(manifest) {
5295
- const widgetDefinition = this.reference$.getValue()[manifest.type];
5296
- const datasourcesArray = Array.isArray(manifest.datasource ?? [])
5297
- ? (manifest.datasource ?? [])
5298
- : [manifest.datasource];
5299
- return datasourcesArray
5300
- .filter((datasource) => {
5301
- const matching = this.datasources.find((ds) => ds.id === datasource);
5302
- return (!!matching &&
5303
- (widgetDefinition.autoLoadDatasource === undefined ||
5304
- widgetDefinition.autoLoadDatasource === 'all' ||
5305
- (widgetDefinition.autoLoadDatasource === 'geo' && DatasourceUtils.isGeo(matching)) ||
5306
- (widgetDefinition.autoLoadDatasource === 'not-geo' && !DatasourceUtils.isGeo(matching))));
5358
+ return ManifestUtils.mergeDatasourceRequests(manifest.widgets
5359
+ .map((widgetManifest) => {
5360
+ const widgetDefinition = this.reference$.getValue()[widgetManifest.type];
5361
+ const datasourcesArray = Array.isArray(widgetManifest.datasource ?? [])
5362
+ ? (widgetManifest.datasource ?? [])
5363
+ : [widgetManifest.datasource];
5364
+ return datasourcesArray
5365
+ .filter((datasource) => {
5366
+ const matching = this.datasources.find((ds) => ds.id === datasource);
5367
+ return (!!matching &&
5368
+ (widgetDefinition.autoLoadDatasource === undefined ||
5369
+ widgetDefinition.autoLoadDatasource === 'all' ||
5370
+ (widgetDefinition.autoLoadDatasource === 'geo' && DatasourceUtils.isGeo(matching)) ||
5371
+ (widgetDefinition.autoLoadDatasource === 'not-geo' && !DatasourceUtils.isGeo(matching))));
5372
+ })
5373
+ .map((datasetId) => {
5374
+ const matching = this.datasources.find((ds) => ds.id === datasetId);
5375
+ return {
5376
+ datasetId: datasetId,
5377
+ excludeGeo: this.calculateExcludeGeo(widgetManifest, matching),
5378
+ linkedItems: manifest.linkedItems
5379
+ };
5380
+ });
5307
5381
  })
5308
- .map((datasetId) => {
5309
- const matching = this.datasources.find((ds) => ds.id === datasetId);
5310
- return { datasetId: datasetId, excludeGeo: this.calculateExcludeGeo(manifest, matching) };
5311
- });
5382
+ .flat());
5312
5383
  }
5313
5384
  calculateExcludeGeo(manifest, matching) {
5314
5385
  if (manifest.excludeGeo === undefined || manifest.excludeGeo === 'widget-type-based') {
@@ -5336,16 +5407,16 @@ class WidgetFactoryService {
5336
5407
  const datasources = [];
5337
5408
  const aggregates = [];
5338
5409
  manifest.windows.forEach((windowManifest) => {
5410
+ this.datasourcesToAutoLoad(windowManifest).forEach((res) => {
5411
+ if (res.datasetId) {
5412
+ datasources.push(res);
5413
+ }
5414
+ });
5339
5415
  (windowManifest.widgets ?? []).forEach((widgetManifest) => {
5340
- this.datasourcesToAutoLoad(widgetManifest).forEach((res) => {
5341
- if (res.datasetId) {
5342
- datasources.push(res);
5343
- }
5344
- });
5345
5416
  this.aggregatesToAutoLoad(widgetManifest).forEach((ds) => aggregates.push(ds));
5346
5417
  });
5347
5418
  });
5348
- return { datasources, aggregates };
5419
+ return { datasources: ManifestUtils.mergeDatasourceRequests(datasources), aggregates };
5349
5420
  }
5350
5421
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: WidgetFactoryService, deps: [{ token: i0.Injector }, { token: WIDGET_DEFINITION }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
5351
5422
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: WidgetFactoryService, providedIn: 'root' }); }
@@ -5371,20 +5442,25 @@ class SearchEffects {
5371
5442
  .pipe(map((resultSet) => SearchActions.searchSuccess({
5372
5443
  resultSet,
5373
5444
  id: props.id,
5374
- params: this.searchService.getItemsSerializedParams(props.id, quickOrder),
5445
+ params: this.searchService.getItemsSerializedParams(props.id, quickOrder, props.excludeGeo, props.linkedItems),
5375
5446
  next: props.next
5376
5447
  })), catchError((error) => [SearchActions.searchFailure({ error, id: props.id })])))))));
5377
5448
  this.fetchMore$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.fetchMoreItems), withLatestFrom(this.store.select(DashboardSelectors.rank), this.store.select(DashboardSelectors.resultSets)), filter(([props, rank, rs]) => rank === 0 && !!rs[props.id].searchAfter), debounceTime(300), mergeMap(([props]) => {
5378
5449
  const ds = this.widgetFactoryService.datasourcesToAutoLoad({
5379
- type: props.widgetType,
5380
- datasource: [props.id]
5450
+ widgets: [
5451
+ {
5452
+ type: props.widgetType,
5453
+ datasource: [props.id]
5454
+ }
5455
+ ]
5381
5456
  })[0];
5382
5457
  if (!!ds) {
5383
5458
  return of(SearchActions.getDatasourceItems({
5384
5459
  id: ds.datasetId,
5385
5460
  excludeGeo: ds.excludeGeo,
5386
5461
  from: 'fetchMore',
5387
- next: true
5462
+ next: true,
5463
+ linkedItems: ds.linkedItems
5388
5464
  }));
5389
5465
  }
5390
5466
  else {
@@ -6025,17 +6101,10 @@ class ResultsetUtils {
6025
6101
  if (!rs2)
6026
6102
  return rs1;
6027
6103
  const rs1Copy = structuredClone(rs1);
6028
- Object.keys(rs2.items ?? {}).forEach((key) => {
6029
- if (!rs1Copy.items[key]) {
6030
- rs1Copy.items[key] = [];
6031
- }
6032
- rs1Copy.items[key].push(...rs2.items[key]);
6033
- });
6104
+ this.mergeItems(rs1Copy, rs2, (rs) => rs.items);
6105
+ this.mergeItems(rs1Copy, rs2, (rs) => rs.sourceItems ?? {});
6106
+ this.mergeItems(rs1Copy, rs2, (rs) => rs.destinationItems ?? {});
6034
6107
  /* Make items and relations unique in resulted dataset */
6035
- Object.keys(rs1Copy.items).forEach((key) => {
6036
- const uniqueList = [...new Set(rs1Copy.items[key].map((it) => it.id))];
6037
- rs1Copy.items[key] = uniqueList.map((id) => rs1Copy.items[key].find((it) => it.id === id));
6038
- });
6039
6108
  rs1Copy.relations = [
6040
6109
  ...new Set([
6041
6110
  ...([...(rs1Copy.relations ?? []), ...(rs2.relations ?? [])] ?? []).map((rel) => `${rel.relationType}|${rel.source}|${rel.destination}`),
@@ -6060,6 +6129,20 @@ class ResultsetUtils {
6060
6129
  rs1Copy.searchAfter = rs2.searchAfter ?? rs1Copy.searchAfter;
6061
6130
  return rs1Copy;
6062
6131
  }
6132
+ static mergeItems(rs1, rs2, getItemsToMerge) {
6133
+ const rs1Items = getItemsToMerge(rs1);
6134
+ const rs2Items = getItemsToMerge(rs2);
6135
+ Object.keys(rs2Items).forEach((key) => {
6136
+ if (!rs1Items[key]) {
6137
+ rs1Items[key] = [];
6138
+ }
6139
+ rs1Items[key].push(...rs2Items[key]);
6140
+ });
6141
+ Object.keys(rs1Items).forEach((key) => {
6142
+ const uniqueList = [...new Set(rs1Items[key].map((it) => it.id))];
6143
+ rs1Items[key] = uniqueList.map((id) => (rs1Items ? rs1Items[key].find((it) => it.id === id) : []));
6144
+ });
6145
+ }
6063
6146
  }
6064
6147
 
6065
6148
  class AggregationUtils {
@@ -8821,11 +8904,6 @@ const WidgetPlacementUtils = {
8821
8904
  }
8822
8905
  };
8823
8906
 
8824
- const DEFAULT_GAP_PX = 15;
8825
- const DEFAULT_COLUMNS_NUMBER = 12;
8826
- const DEFAULT_ROWS_NUMBER = 12;
8827
- const DEFAULT_ROW_HEIGHT_PX = 50;
8828
-
8829
8907
  function orderWidgetsAccordingToPlacement(a, b) {
8830
8908
  return ((b.layout.weight ?? 0) * 1000000 -
8831
8909
  (a.layout.weight ?? 0) * 1000000 +
@@ -9432,16 +9510,13 @@ class DashboardComponent extends SubscriptionnerDirective {
9432
9510
  return wManifest;
9433
9511
  }), distinctUntilChanged((p, c) => equal(p, c)));
9434
9512
  this.nonFillerWidgets$ = this.windowManifest$.pipe(map((wManifest) => (wManifest.widgets ?? []).filter((w) => w.type !== 'filler').length));
9435
- this.subscriptions.add(this.staticDashboard$.subscribe((manifest) => {
9436
- if (!!manifest) {
9437
- this.store.dispatch(DashboardActions.assertResultSets({
9438
- staticManifest: manifest
9439
- }));
9440
- }
9441
- }));
9442
- this.subscriptions.add(combineLatest([this.windowManifest$, this.store.select(DataSourceSelectors.getDataSources)]).subscribe(([manifest, datasets]) => {
9513
+ this.subscriptions.add(combineLatest([
9514
+ this.windowManifest$,
9515
+ this.store.select(DataSourceSelectors.getDataSources),
9516
+ this.staticDashboard$
9517
+ ]).subscribe(([manifest, datasets, staticManifest]) => {
9443
9518
  if (datasets.length > 0) {
9444
- this.store.dispatch(DashboardActions.assertResultSets({}));
9519
+ this.store.dispatch(DashboardActions.assertResultSets({ staticManifest }));
9445
9520
  }
9446
9521
  }));
9447
9522
  this.store.dispatch(FieldActions.load({}));
@@ -10784,7 +10859,9 @@ class DataWidgetComponent extends BaseWidgetComponent {
10784
10859
  return resultSetArray.reduce((rs1, rs2) => ResultsetUtils.mergeResultSets(rs1, rs2), {
10785
10860
  items: {},
10786
10861
  relations: [],
10787
- merged: resultSetArray.length
10862
+ merged: resultSetArray.length,
10863
+ sourceItems: {},
10864
+ destinationItems: {}
10788
10865
  });
10789
10866
  }), distinctUntilChanged((p, v) => equal(p, v)));
10790
10867
  }
@@ -11832,39 +11909,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
11832
11909
  args: [BASE_CONFIG]
11833
11910
  }] }] });
11834
11911
 
11835
- class ManifestUtils {
11836
- static getDatasourcesUsedByManifest(manifest) {
11837
- const mapOfDatasources = manifest.windows
11838
- .map((window) => (window.widgets ?? []).map((widget) => ({ datasetId: widget.datasource, excludeGeo: widget?.type !== 'map' })))
11839
- .flat(3)
11840
- .filter((dataset) => !!dataset.datasetId)
11841
- .map((res) => Array.isArray(res.datasetId)
11842
- ? res.datasetId.map((r) => ({ datasetId: r, excludeGeo: res.excludeGeo }))
11843
- : [res])
11844
- .flat().reduce((p, c) => ({ ...p, [c.datasetId]: { ...p[c.datasetId], ...c } }), {});
11845
- return Object.values(mapOfDatasources);
11846
- }
11847
- static cleanupManifest(manifest) {
11848
- return {
11849
- ...manifest,
11850
- windows: manifest.windows.map((window) => ManifestUtils.cleanupDashboardManifest(window))
11851
- };
11852
- }
11853
- static cleanupDashboardManifest(window) {
11854
- return {
11855
- ...window,
11856
- grid: {
11857
- columns: DEFAULT_COLUMNS_NUMBER,
11858
- rows: DEFAULT_ROWS_NUMBER,
11859
- layout: DashboardGridLayout.MANUAL,
11860
- gap: DEFAULT_GAP_PX,
11861
- ...window.grid
11862
- },
11863
- widgets: window.widgets ?? []
11864
- };
11865
- }
11866
- }
11867
-
11868
11912
  class ManifestService {
11869
11913
  constructor(httpClient, store, snackBar, translateService) {
11870
11914
  this.httpClient = httpClient;
@@ -12205,28 +12249,19 @@ class DashboardEffects {
12205
12249
  .map((widManifest) => this.widgetFactoryService.aggregatesToAutoLoad(widManifest))
12206
12250
  .reduce((p, c) => [...p, ...c], []))
12207
12251
  ].map((ds) => DashboardActions.triggerAggregate({ id: ds }));
12208
- const toItemsActions = Object.values(manifestToCheck.windows
12209
- .map((winManifest) => (winManifest ?? {}).widgets ?? [])
12210
- .reduce((p, c) => [...p, ...c], [])
12211
- .map((widManifest) => this.widgetFactoryService.datasourcesToAutoLoad(widManifest))
12212
- .flat()
12213
- .reduce((p, c) => ({
12214
- ...p,
12215
- [c.datasetId]: {
12216
- ...p[c.datasetId],
12217
- ...c,
12218
- excludeGeo: p[c.datasetId]?.excludeGeo === false ? p[c.datasetId].excludeGeo : c.excludeGeo
12219
- }
12220
- }), {}))
12252
+ const toItemsActions = ManifestUtils.mergeDatasourceRequests(manifestToCheck.windows
12253
+ .map((winManifest) => this.widgetFactoryService.datasourcesToAutoLoad(winManifest))
12254
+ .flat())
12221
12255
  .filter((resultSet) => !!resultSet.datasetId &&
12222
12256
  resultSet.datasetId !== '' &&
12223
12257
  (!resultSets[resultSet.datasetId] ||
12224
12258
  resultSetsParams[resultSet.datasetId] !==
12225
- this.searchService.getItemsSerializedParams(resultSet.datasetId, quickOrder)))
12259
+ this.searchService.getItemsSerializedParams(resultSet.datasetId, quickOrder, resultSet.excludeGeo, resultSet.linkedItems)))
12226
12260
  .map((resultSet) => SearchActions.getDatasourceItems({
12227
12261
  id: resultSet.datasetId,
12228
12262
  excludeGeo: resultSet.excludeGeo,
12229
- from: 'DashboardEffects.assertResultSets$-1'
12263
+ from: 'DashboardEffects.assertResultSets$-1',
12264
+ linkedItems: resultSet.linkedItems
12230
12265
  }));
12231
12266
  return [...toItemsActions, ...toAggregateActions];
12232
12267
  })));
@@ -12499,7 +12534,8 @@ class DashboardEffects {
12499
12534
  this.relaunchAfterOrder$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.quickOrder), map((action) => SearchActions.getDatasourceItems({
12500
12535
  id: action.datasourceId,
12501
12536
  excludeGeo: true,
12502
- from: 'DashboardEffects.relaunchAfterOrder$'
12537
+ from: 'DashboardEffects.relaunchAfterOrder$',
12538
+ linkedItems: action.linkedItems
12503
12539
  }))));
12504
12540
  this.propagateGridLayout$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.setGridLayout), withLatestFrom(this.store.select(DashboardSelectors.rank), this.store.select(DashboardSelectors.windowManifest)), map(([action, rank, windowManifest]) => DashboardActions.propagateGridLayout({ manifest: windowManifest, rank }))));
12505
12541
  this.toggleEditionModeIfNotManual$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.setGridLayout), filter((action) => action.layout !== DashboardGridLayout.MANUAL), map(() => DashboardActions.toggleEditionMode({ force: false }))));
@@ -13168,7 +13204,10 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
13168
13204
  ...state.manifests,
13169
13205
  manifest: {
13170
13206
  ...state.manifests.manifest,
13171
- filters: state.manifests.manifest.filters?.map((filter) => ({ ...filter, value: undefined }))
13207
+ filters: state.manifests.manifest.filters?.map((filter) => ({
13208
+ ...filter,
13209
+ value: filter.type === 'invisible' ? filter.value : undefined
13210
+ }))
13172
13211
  }
13173
13212
  }
13174
13213
  };