@provoly/dashboard 0.14.11 → 0.14.13

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 (108) hide show
  1. package/admin/admin.module.d.ts +2 -1
  2. package/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.d.ts +1 -0
  3. package/admin/components/admin-classes/store/admin-class.actions.d.ts +11 -0
  4. package/admin/components/admin-classes/store/admin-class.effects.d.ts +5 -0
  5. package/admin/components/admin-classes/store/admin-class.reducer.d.ts +1 -0
  6. package/admin/components/admin-classes/store/admin-class.selectors.d.ts +1 -0
  7. package/admin/i18n/en.translations.d.ts +11 -0
  8. package/admin/i18n/fr.translations.d.ts +11 -0
  9. package/admin/store/admin.service.d.ts +1 -0
  10. package/esm2022/admin/admin.module.mjs +8 -4
  11. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +8 -4
  12. package/esm2022/admin/components/admin-classes/store/admin-class.actions.mjs +5 -2
  13. package/esm2022/admin/components/admin-classes/store/admin-class.effects.mjs +4 -1
  14. package/esm2022/admin/components/admin-classes/store/admin-class.reducer.mjs +6 -2
  15. package/esm2022/admin/components/admin-classes/store/admin-class.selectors.mjs +4 -2
  16. package/esm2022/admin/i18n/en.translations.mjs +12 -1
  17. package/esm2022/admin/i18n/fr.translations.mjs +12 -1
  18. package/esm2022/admin/store/admin.service.mjs +6 -1
  19. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +2 -1
  20. package/esm2022/dataset/i18n/fr.translations.mjs +2 -2
  21. package/esm2022/lib/core/components/about/about.component.mjs +14 -9
  22. package/esm2022/lib/core/i18n/en.translations.mjs +3 -2
  23. package/esm2022/lib/core/i18n/fr.translations.mjs +3 -2
  24. package/esm2022/lib/core/model/widget-aggregated-chart-manifest.interface.mjs +2 -1
  25. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +2 -1
  26. package/esm2022/lib/core/public-api.mjs +4 -1
  27. package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +101 -0
  28. package/esm2022/lib/core/store/aggregation/base-aggregation.service.mjs +16 -0
  29. package/esm2022/lib/core/store/aggregation/frontend-aggregation.service.mjs +210 -0
  30. package/esm2022/lib/core/store/class/class.interface.mjs +1 -1
  31. package/esm2022/lib/core/store/config/config.service.mjs +13 -13
  32. package/esm2022/lib/core/store/config/versions.interface.mjs +1 -1
  33. package/esm2022/lib/core/store/context-menu/context-menu.actions.mjs +1 -1
  34. package/esm2022/lib/core/store/context-menu/context-menu.reducer.mjs +5 -3
  35. package/esm2022/lib/core/store/context-menu/context-menu.selectors.mjs +4 -2
  36. package/esm2022/lib/core/store/field/field.interface.mjs +1 -1
  37. package/esm2022/lib/dashboard/components/context-menu/context-menu.component.mjs +23 -17
  38. package/esm2022/lib/dashboard/components/context-menu/object-edition/object-edition.component.mjs +1 -1
  39. package/esm2022/lib/dashboard/components/widgets/data-widget.component.mjs +1 -1
  40. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +4 -3
  41. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +5 -3
  42. package/esm2022/toolbox/components/save-view/save-view.component.mjs +5 -4
  43. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +8 -9
  44. package/esm2022/widgets/widget-aggregated-chart/public-api.mjs +1 -4
  45. package/esm2022/widgets/widget-aggregated-chart/widget-aggregated-chart.module.mjs +2 -3
  46. package/esm2022/widgets/widget-detail/component/widget-detail.component.mjs +2 -2
  47. package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +3 -2
  48. package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +2 -1
  49. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +94 -34
  50. package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +3 -2
  51. package/esm2022/widgets/widget-map/utils/xml-utils.class.mjs +3 -2
  52. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +47 -52
  53. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +3 -2
  54. package/esm2022/widgets/widget-vega/i18n/en.translations.mjs +4 -2
  55. package/esm2022/widgets/widget-vega/i18n/fr.translations.mjs +4 -2
  56. package/fesm2022/provoly-dashboard-admin.mjs +55 -9
  57. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  58. package/fesm2022/provoly-dashboard-dataset.mjs +2 -1
  59. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  60. package/fesm2022/provoly-dashboard-toolbox.mjs +4 -3
  61. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  62. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +10 -313
  63. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  64. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs +1 -1
  65. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs.map +1 -1
  66. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +2 -1
  67. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
  68. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +98 -36
  69. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  70. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +47 -52
  71. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  72. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +2 -1
  73. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  74. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +6 -2
  75. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -1
  76. package/fesm2022/provoly-dashboard.mjs +420 -99
  77. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  78. package/lib/core/components/about/about.component.d.ts +3 -1
  79. package/lib/core/i18n/en.translations.d.ts +1 -0
  80. package/lib/core/i18n/fr.translations.d.ts +1 -0
  81. package/lib/core/model/widget-aggregated-chart-manifest.interface.d.ts +2 -1
  82. package/lib/core/model/widget-map-manifest.interface.d.ts +1 -0
  83. package/lib/core/public-api.d.ts +3 -0
  84. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/backend-aggregation.service.d.ts +4 -1
  85. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/base-aggregation.service.d.ts +14 -1
  86. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/frontend-aggregation.service.d.ts +3 -2
  87. package/lib/core/store/class/class.interface.d.ts +1 -0
  88. package/lib/core/store/config/config.service.d.ts +2 -1
  89. package/lib/core/store/config/versions.interface.d.ts +3 -3
  90. package/lib/core/store/context-menu/context-menu.actions.d.ts +2 -0
  91. package/lib/core/store/context-menu/context-menu.reducer.d.ts +1 -0
  92. package/lib/core/store/context-menu/context-menu.selectors.d.ts +1 -0
  93. package/lib/core/store/field/field.interface.d.ts +1 -0
  94. package/lib/dashboard/components/context-menu/context-menu.component.d.ts +1 -0
  95. package/lib/dashboard/store/dashboard.selectors.d.ts +6 -1
  96. package/package.json +1 -1
  97. package/styles/base/_utils.scss +4 -0
  98. package/styles/components/_o-pry-admin-classes-customize.scss +6 -4
  99. package/toolbox/components/save-view/save-view.component.d.ts +2 -1
  100. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +1 -7
  101. package/widgets/widget-aggregated-chart/public-api.d.ts +0 -3
  102. package/widgets/widget-map/component/widget-map.component.d.ts +14 -3
  103. package/widgets/widget-table/component/widget-table.component.d.ts +6 -1
  104. package/widgets/widget-vega/i18n/en.translations.d.ts +2 -0
  105. package/widgets/widget-vega/i18n/fr.translations.d.ts +2 -0
  106. package/esm2022/widgets/widget-aggregated-chart/service/backend-aggregation.service.mjs +0 -96
  107. package/esm2022/widgets/widget-aggregated-chart/service/base-aggregation.service.mjs +0 -16
  108. package/esm2022/widgets/widget-aggregated-chart/service/frontend-aggregation.service.mjs +0 -206
@@ -191,7 +191,8 @@ const enTranslations$1 = {
191
191
  replay: 'Version replay : {{value}}',
192
192
  exec: 'Version Execution : {{value}}',
193
193
  transfo: 'Version Transformation : {{value}}',
194
- monitor: 'Version Supervision : {{value}}'
194
+ monitor: 'Version Supervision : {{value}}',
195
+ noVersion: 'Version not found'
195
196
  },
196
197
  header: {
197
198
  noCurrentPresentation: 'Presentation not saved'
@@ -534,7 +535,8 @@ const frTranslations$1 = {
534
535
  replay: 'Rejeu version : ',
535
536
  exec: 'Exécution version : ',
536
537
  transfo: 'Transformation version : ',
537
- monitor: 'Supervision version : '
538
+ monitor: 'Supervision version : ',
539
+ noVersion: 'Version non trouvée'
538
540
  },
539
541
  header: {
540
542
  noCurrentPresentation: 'Présentation non sauvegardée'
@@ -2268,7 +2270,7 @@ const frTranslations = {
2268
2270
  ELASTIC_SEARCH: "Erreur d'insertion pour l'élément {{recordId}}",
2269
2271
  NO_VALUES: 'Pas de valeur pour la ligne {{recordId}}',
2270
2272
  FORMAT_FILE_ERROR: "Le format du fichier transmis n'est pas géré",
2271
- NO_ATTRIBUTES: "Les données importées ne correspondent pas au modèle de données indiquer en cible de l'import"
2273
+ NO_ATTRIBUTES: "Les données importées ne correspondent pas au modèle de données indiqué en cible de l'import"
2272
2274
  }
2273
2275
  },
2274
2276
  tooltip: {
@@ -3611,7 +3613,7 @@ class ConfigService {
3611
3613
  * Get a list of all widgets from catalog
3612
3614
  */
3613
3615
  getAllWidgets() {
3614
- return this.store.select(ConfigSelectors.refUrl).pipe(mergeMap((url) => this.httpClient.get(encodeURI(`${url}/widget/catalog`))), catchError((error) => {
3616
+ return this.store.select(ConfigSelectors.refUrl).pipe(mergeMap((url) => this.httpClient.get(encodeURI(`${url}/widget/catalog`))), catchError$1((error) => {
3615
3617
  if (error.error instanceof Error) {
3616
3618
  // A client-side or network error occurred
3617
3619
  if (ConfigService.warn) {
@@ -3639,6 +3641,9 @@ class ConfigService {
3639
3641
  return of([]);
3640
3642
  }));
3641
3643
  }
3644
+ handleBackendVersionError(obs) {
3645
+ return obs.pipe(catchError$1(() => of({})));
3646
+ }
3642
3647
  getAllVersions() {
3643
3648
  return combineLatest([
3644
3649
  this.store.select(ConfigSelectors.refUrl),
@@ -3649,17 +3654,15 @@ class ConfigService {
3649
3654
  this.store.select(ConfigSelectors.monitorUrl)
3650
3655
  ]).pipe(mergeMap(([ref, data, replay, exec, transfo, monitor]) => {
3651
3656
  const allVersions = [
3652
- this.httpClient.get(encodeURI(`${ref}/about/version`)),
3653
- this.httpClient.get(encodeURI(`${data}/about/version`)),
3654
- this.httpClient.get(encodeURI(`${replay}/about/version`)),
3655
- this.httpClient.get(encodeURI(`${exec}/about/version`)),
3656
- this.httpClient.get(encodeURI(`${transfo}/about/version`)),
3657
- this.httpClient.get(encodeURI(`${monitor}/about/version`)),
3658
- this.httpClient
3659
- .get(encodeURI(`/assets/pry.version`))
3660
- .pipe(map((version) => ({ libVersion: version })))
3657
+ this.handleBackendVersionError(this.httpClient.get(encodeURI(`${ref}/about/version`))),
3658
+ this.handleBackendVersionError(this.httpClient.get(encodeURI(`${data}/about/version`))),
3659
+ this.handleBackendVersionError(this.httpClient.get(encodeURI(`${replay}/about/version`))),
3660
+ this.handleBackendVersionError(this.httpClient.get(encodeURI(`${exec}/about/version`))),
3661
+ this.handleBackendVersionError(this.httpClient.get(encodeURI(`${transfo}/about/version`))),
3662
+ this.handleBackendVersionError(this.httpClient.get(encodeURI(`${monitor}/about/version`))),
3663
+ this.httpClient.get(encodeURI(`/assets/pry.version`)).pipe(map((version) => (version ? { libVersion: version } : {})), catchError$1(() => of({})))
3661
3664
  ];
3662
- return forkJoin(allVersions).pipe(map(([refVersion, dataVersion, replayVersion, execVersion, tranfoVersion, monitorVersion, frontend]) => {
3665
+ return combineLatest(allVersions).pipe(map(([refVersion, dataVersion, replayVersion, execVersion, tranfoVersion, monitorVersion, frontend]) => {
3663
3666
  const versions = {
3664
3667
  ref: refVersion,
3665
3668
  data: dataVersion,
@@ -3841,7 +3844,8 @@ const initialContextMenuState = {
3841
3844
  itemId: '',
3842
3845
  from: '',
3843
3846
  resultSet: undefined,
3844
- coordinates: undefined
3847
+ coordinates: undefined,
3848
+ allowObjectCreation: false
3845
3849
  };
3846
3850
  const contextMenuReducer = createReducer(initialContextMenuState, on(ContextMenuActions.open, (state, action) => ({
3847
3851
  ...state,
@@ -3851,7 +3855,8 @@ const contextMenuReducer = createReducer(initialContextMenuState, on(ContextMenu
3851
3855
  itemId: action.itemId,
3852
3856
  resultSet: action.resultSet,
3853
3857
  from: action.from,
3854
- coordinates: action.coordinates
3858
+ coordinates: action.coordinates,
3859
+ allowObjectCreation: action.allowObjectCreation
3855
3860
  })), on(ContextMenuActions.hide, (state, action) => ({
3856
3861
  ...state,
3857
3862
  opened: false,
@@ -3950,7 +3955,8 @@ const namedQueriesUses = createSelector(globalManifest, (manifest) => manifest.w
3950
3955
  .reduce((p, c) => [...p, ...c], [])
3951
3956
  .reduce((p, c) => ({ ...p, [c.rsName ?? '']: [...(p[c.rsName ?? ''] || []), { ...c }] }), {}));
3952
3957
  const presentation = createSelector(feature$4, (state) => state?.presentation);
3953
- const savePresentationActive = createSelector(presentation, globalManifest, (state, global) => !!state.current && state.current.owner && !equal(global, state.initial));
3958
+ const isCurrentPresentationModified = createSelector(presentation, globalManifest, (state, global) => !equal(global, state.initial));
3959
+ const isCurrentPresentationOwner = createSelector(presentation, (state) => !!state.current && state.current.owner);
3954
3960
  const filters = createSelector(feature$4, (state) => state?.manifests.manifest.filters ?? {});
3955
3961
  const datasourceFilters = createSelector(feature$4, (state) => state?.manifests.manifest.filters
3956
3962
  ? state?.manifests.manifest.filters.reduce((obj, filter) => (filter.attributes.forEach((attribute) => (obj[attribute.datasource] || (obj[attribute.datasource] = [])).push({
@@ -3995,7 +4001,8 @@ const DashboardSelectors = {
3995
4001
  quickOrder,
3996
4002
  presentation,
3997
4003
  filters,
3998
- savePresentationActive,
4004
+ isCurrentPresentationModified,
4005
+ isCurrentPresentationOwner,
3999
4006
  datasourceFilters,
4000
4007
  wmsFeatures,
4001
4008
  displayOptions,
@@ -4415,6 +4422,7 @@ const itemId = createSelector(feature$3, (state) => state.itemId);
4415
4422
  const from = createSelector(feature$3, (state) => state.from);
4416
4423
  const coordinates = createSelector(feature$3, (state) => state.coordinates);
4417
4424
  const resultSet = createSelector(feature$3, (state) => state.resultSet);
4425
+ const allowObjectCreation = createSelector(feature$3, (state) => state.allowObjectCreation);
4418
4426
  const ContextMenuSelectors = {
4419
4427
  feature: feature$3,
4420
4428
  opened,
@@ -4422,7 +4430,8 @@ const ContextMenuSelectors = {
4422
4430
  itemId,
4423
4431
  resultSet,
4424
4432
  from,
4425
- coordinates
4433
+ coordinates,
4434
+ allowObjectCreation
4426
4435
  };
4427
4436
 
4428
4437
  const ItemActions = {
@@ -5170,6 +5179,362 @@ const RelationTypesSelectors = {
5170
5179
  openDeleteModale
5171
5180
  };
5172
5181
 
5182
+ class PryAggregationService {
5183
+ aggregate(datasource, options) {
5184
+ throw new Error('You must declare the use of an aggregation service. Add PryBackendAggregationService, PryFrontendAggregationService or a custom service');
5185
+ }
5186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAggregationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
5187
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAggregationService, providedIn: 'root' }); }
5188
+ }
5189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAggregationService, decorators: [{
5190
+ type: Injectable,
5191
+ args: [{
5192
+ providedIn: 'root'
5193
+ }]
5194
+ }] });
5195
+
5196
+ var Operation;
5197
+ (function (Operation) {
5198
+ Operation["NONE"] = "none";
5199
+ Operation["COUNT"] = "count";
5200
+ Operation["SUM"] = "sum";
5201
+ Operation["DISTINCT"] = "cardinality";
5202
+ Operation["AVERAGE"] = "avg";
5203
+ Operation["MEDIAN"] = "median";
5204
+ Operation["Q1"] = "q1";
5205
+ Operation["Q3"] = "q3";
5206
+ Operation["MIN"] = "min";
5207
+ Operation["MAX"] = "max";
5208
+ Operation["EXTENT"] = "extent";
5209
+ })(Operation || (Operation = {}));
5210
+ var GraphType;
5211
+ (function (GraphType) {
5212
+ GraphType["AREA"] = "area-default";
5213
+ GraphType["AREA_WITH_LINES_AND_POINTS"] = "area-with-lines-and-points";
5214
+ GraphType["BAR"] = "bar-default";
5215
+ GraphType["CIRCULAR"] = "arc-default";
5216
+ GraphType["CURVE"] = "line-default";
5217
+ GraphType["CURVE_WITH_POINTS"] = "line-with-points";
5218
+ GraphType["DONUT"] = "arc-donut";
5219
+ GraphType["HISTOGRAM"] = "bar-histogram";
5220
+ GraphType["POINTS"] = "point-default";
5221
+ })(GraphType || (GraphType = {}));
5222
+
5223
+ class PryBackendAggregationService extends PryAggregationService {
5224
+ constructor(store, snackBar, translateService, httpClient, searchService) {
5225
+ super();
5226
+ this.store = store;
5227
+ this.snackBar = snackBar;
5228
+ this.translateService = translateService;
5229
+ this.httpClient = httpClient;
5230
+ this.searchService = searchService;
5231
+ this.rs = {};
5232
+ this.classes = [];
5233
+ this.fields = [];
5234
+ this.filters = {};
5235
+ this.store.select(DashboardSelectors.resultSets).subscribe((rs) => (this.rs = rs));
5236
+ this.store.select(ClassSelectors.classes).subscribe((classes) => (this.classes = classes));
5237
+ this.store.select(FieldSelectors.fields).subscribe((fields) => (this.fields = fields));
5238
+ this.store.select(DashboardSelectors.datasourceFilters).subscribe((filters) => (this.filters = filters));
5239
+ }
5240
+ aggregate(datasources, options) {
5241
+ const targetDatasource = datasources.find((ds) => ![DEFAULT_NAMED_QUERY_ID, EXPLORE_NAMED_QUERY_ID].includes(ds));
5242
+ if (datasources.length > 1) {
5243
+ this.snackBar.open({
5244
+ type: 'warning',
5245
+ message: this.translateService.instant('@pry.message.backend-only-1-datasource'),
5246
+ timeout: 4000
5247
+ });
5248
+ }
5249
+ if (datasources.includes(DEFAULT_NAMED_QUERY_ID) || datasources.includes(EXPLORE_NAMED_QUERY_ID)) {
5250
+ this.snackBar.open({
5251
+ type: 'warning',
5252
+ message: this.translateService.instant('@pry.message.cannot-aggregate-virtual-ds'),
5253
+ timeout: 4000
5254
+ });
5255
+ }
5256
+ if (!targetDatasource) {
5257
+ console.warn('Aggregation needs a target datasource.');
5258
+ return of({ operation: options.ordinate?.operation ?? 'none', values: [] });
5259
+ }
5260
+ let params = new HttpParams();
5261
+ if (options.abscissa && options.abscissa.attribute) {
5262
+ params = params.set('aggregatedBy', options.abscissa.attribute);
5263
+ }
5264
+ else {
5265
+ console.warn('Aggregation needs an aggregatedBy member.');
5266
+ if (options.ordinate.operation !== Operation.EXTENT) {
5267
+ return of({ operation: options.ordinate.operation, values: [] });
5268
+ }
5269
+ }
5270
+ if (options.abscissa && options.abscissa.limit) {
5271
+ if (options.abscissa.limit.isTimeLimit) {
5272
+ params = params.set('dateInterval', options.abscissa.limit.interval);
5273
+ }
5274
+ else {
5275
+ params = params.set('interval', options.abscissa.limit.at);
5276
+ params = params.set('limitOrder', options.abscissa.limit.order);
5277
+ params = params.set('limitOthers', options.abscissa.limit.others);
5278
+ }
5279
+ }
5280
+ const operation = options.ordinate.operation?.replace(/^none$/, Operation.SUM);
5281
+ params = params.set('operation', operation);
5282
+ if (!!options.ordinate.attribute) {
5283
+ params = params.set('valueField', options.ordinate.attribute);
5284
+ }
5285
+ if (options.groupBy) {
5286
+ params = params.set('groupBy', options.groupBy.attribute);
5287
+ }
5288
+ params = this.searchService.getItemsFilter(targetDatasource, params);
5289
+ return this.store.select(ConfigSelectors.dataUrl).pipe(switchMap((url) => this.httpClient
5290
+ .get(`${url}/data-sources/id/${targetDatasource}/items/aggregate`, {
5291
+ params
5292
+ })
5293
+ .pipe(map((result) => ({
5294
+ ...result,
5295
+ operation: options.ordinate.operation === Operation.NONE ? Operation.NONE : result.operation
5296
+ })))));
5297
+ }
5298
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryBackendAggregationService, deps: [{ token: i1.Store }, { token: PrySnackbarService }, { token: PryI18nService }, { token: i1$2.HttpClient }, { token: SearchService }], target: i0.ɵɵFactoryTarget.Injectable }); }
5299
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryBackendAggregationService, providedIn: 'root' }); }
5300
+ }
5301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryBackendAggregationService, decorators: [{
5302
+ type: Injectable,
5303
+ args: [{
5304
+ providedIn: 'root'
5305
+ }]
5306
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: PrySnackbarService }, { type: PryI18nService }, { type: i1$2.HttpClient }, { type: SearchService }]; } });
5307
+
5308
+ class ResultsetUtils {
5309
+ static mergeResultSets(rs1, rs2) {
5310
+ if (!rs1)
5311
+ return rs2;
5312
+ if (!rs2)
5313
+ return rs1;
5314
+ const rs1Copy = JSON.parse(JSON.stringify(rs1));
5315
+ Object.keys(rs2.items ?? {}).forEach((key) => {
5316
+ if (!rs1Copy.items[key]) {
5317
+ rs1Copy.items[key] = [];
5318
+ }
5319
+ rs1Copy.items[key].push(...rs2.items[key]);
5320
+ });
5321
+ rs1Copy.relations = [...(rs1Copy.relations ?? []), ...(rs2.relations ?? [])];
5322
+ /* Make items and relations unique in resulted dataset */
5323
+ Object.keys(rs1Copy.items).forEach((key) => {
5324
+ const uniqueList = [...new Set(rs1Copy.items[key].map((it) => it.id))];
5325
+ rs1Copy.items[key] = uniqueList.map((id) => rs1Copy.items[key].find((it) => it.id === id));
5326
+ });
5327
+ const uniqueRelations = [
5328
+ ...new Set(rs1Copy.relations.map((rel) => `${rel.relationType}|${rel.source}|${rel.destination}`))
5329
+ ];
5330
+ rs1Copy.relations = uniqueRelations.map((key) => {
5331
+ const splittedKey = key.split('|');
5332
+ return rs1Copy.relations.find((rel) => rel.relationType === splittedKey[0] && rel.source === splittedKey[1] && rel.destination === splittedKey[2]);
5333
+ });
5334
+ return rs1Copy;
5335
+ }
5336
+ }
5337
+
5338
+ class PryFrontendAggregationService extends PryAggregationService {
5339
+ constructor(store) {
5340
+ super();
5341
+ this.store = store;
5342
+ }
5343
+ // @ts-ignore
5344
+ aggregate(datasource, options) {
5345
+ return combineLatest([
5346
+ this.store.select(DashboardSelectors.resultSets),
5347
+ this.store.select(ClassSelectors.classes)
5348
+ ]).pipe(map(([resultSets, classes]) => {
5349
+ const abscissa = classes
5350
+ .map((clazz) => clazz.attributes.find((attr) => attr.id === options.abscissa.attribute))
5351
+ .find((attr) => !!attr)?.name;
5352
+ const ordinate = classes
5353
+ .map((clazz) => clazz.attributes.find((attr) => attr.id === options.ordinate.attribute))
5354
+ .find((attr) => !!attr)?.name;
5355
+ if (!abscissa || !ordinate) {
5356
+ throw new Error('abscissaorodinateinvalid');
5357
+ }
5358
+ let data = datasource.map((rsName) => resultSets[rsName ?? '']).filter((rsName) => !!rsName);
5359
+ const resultSet = data.reduce((rs1, rs2) => ResultsetUtils.mergeResultSets(rs1, rs2), {
5360
+ items: {},
5361
+ relations: [],
5362
+ merged: data.length
5363
+ });
5364
+ let items = Object.keys(resultSet.items)
5365
+ .map((classId) => resultSet.items[classId])
5366
+ .reduce((prev, curr) => [...prev, ...curr], []);
5367
+ if (!!options.groupBy) {
5368
+ const groupBy = classes
5369
+ .map((clazz) => clazz.attributes.find((attr) => attr.id === options.groupBy?.attribute))
5370
+ .find((attr) => !!attr)?.name;
5371
+ if (!groupBy) {
5372
+ throw new Error('groupByAttributeisinvalid');
5373
+ }
5374
+ const itemsGrouped = this.groupBy(items, groupBy);
5375
+ const values = [];
5376
+ Object.keys(itemsGrouped).forEach((key) => {
5377
+ values.push({
5378
+ key,
5379
+ groupBy: this.getValueFromOperation(itemsGrouped[key], options.ordinate.operation, abscissa, ordinate, options.abscissa.limit)
5380
+ });
5381
+ });
5382
+ return { operation: options.ordinate.operation, values: values };
5383
+ }
5384
+ const values = this.getValueFromOperation(items, options.ordinate.operation, abscissa, ordinate, options.abscissa.limit);
5385
+ return { operation: options.ordinate.operation, values: values };
5386
+ }));
5387
+ }
5388
+ getValueFromOperation(items, operation, abscissa, ordinate, limit) {
5389
+ let result = [];
5390
+ const groupByAbscissa = this.groupBy(items, abscissa);
5391
+ groupByAbscissa.map((test) => console.log(groupByAbscissa[test]));
5392
+ switch (operation) {
5393
+ case Operation.COUNT:
5394
+ result.push(...Object.keys(groupByAbscissa).map((key) => ({
5395
+ key: key,
5396
+ value: groupByAbscissa[key].length
5397
+ })));
5398
+ break;
5399
+ case Operation.SUM:
5400
+ result.push(...Object.keys(groupByAbscissa).map((key) => ({
5401
+ key: key,
5402
+ value: this.getSum(groupByAbscissa[key], ordinate)
5403
+ })));
5404
+ break;
5405
+ case Operation.DISTINCT:
5406
+ result.push(...Object.keys(groupByAbscissa).map((key) => ({
5407
+ key: key,
5408
+ value: this.getDistinct(groupByAbscissa[key], ordinate)
5409
+ })));
5410
+ break;
5411
+ case Operation.AVERAGE:
5412
+ result.push(...Object.keys(groupByAbscissa).map((key) => ({
5413
+ key: key,
5414
+ value: this.getAverage(groupByAbscissa[key], ordinate)
5415
+ })));
5416
+ break;
5417
+ case Operation.MEDIAN:
5418
+ result.push(...Object.keys(groupByAbscissa).map((key) => ({
5419
+ key: key,
5420
+ value: this.getQuartile(groupByAbscissa[key], ordinate, 0.5)
5421
+ })));
5422
+ break;
5423
+ case Operation.Q1:
5424
+ result.push(...Object.keys(groupByAbscissa).map((key) => ({
5425
+ key: key,
5426
+ value: this.getQuartile(groupByAbscissa[key], ordinate, 0.25)
5427
+ })));
5428
+ break;
5429
+ case Operation.Q3:
5430
+ result.push(...Object.keys(groupByAbscissa).map((key) => ({
5431
+ key: key,
5432
+ value: this.getQuartile(groupByAbscissa[key], ordinate, 0.75)
5433
+ })));
5434
+ break;
5435
+ case Operation.MIN:
5436
+ result.push(...Object.keys(groupByAbscissa).map((key) => ({
5437
+ key: key,
5438
+ value: this.getMin(groupByAbscissa[key], ordinate)
5439
+ })));
5440
+ break;
5441
+ default:
5442
+ result.push(...Object.keys(groupByAbscissa).map((key) => ({
5443
+ key: key,
5444
+ value: this.getMax(groupByAbscissa[key], ordinate)
5445
+ })));
5446
+ break;
5447
+ }
5448
+ if (limit) {
5449
+ result = this.formatByLimit(result, limit);
5450
+ }
5451
+ return result;
5452
+ }
5453
+ groupBy(items, attribute) {
5454
+ let distincts = [];
5455
+ items.forEach((item) => {
5456
+ let value = this.getValueFromAttribute(item, attribute);
5457
+ if (distincts[value.value]) {
5458
+ distincts[value.value].push(item);
5459
+ }
5460
+ else {
5461
+ distincts[value.value] = [item];
5462
+ }
5463
+ });
5464
+ return distincts;
5465
+ }
5466
+ getValueFromAttribute(item, attribute) {
5467
+ let value = ItemUtils.getAttributeValue(item, attribute);
5468
+ return Array.isArray(value) ? value[0] : value;
5469
+ }
5470
+ getSum(items, attribute) {
5471
+ let sum = 0;
5472
+ items.forEach((item) => {
5473
+ sum += this.getValueFromAttribute(item, attribute).value;
5474
+ });
5475
+ return sum;
5476
+ }
5477
+ getMin(items, attribute) {
5478
+ const result = items.reduce((prev, curr) => {
5479
+ const prevValue = this.getValueFromAttribute(prev, attribute).value;
5480
+ const currValue = this.getValueFromAttribute(curr, attribute).value;
5481
+ return prevValue < currValue ? prev : curr;
5482
+ });
5483
+ return this.getValueFromAttribute(result, attribute).value;
5484
+ }
5485
+ getMax(items, attribute) {
5486
+ const result = items.reduce((prev, curr) => {
5487
+ const prevValue = this.getValueFromAttribute(prev, attribute).value;
5488
+ const currValue = this.getValueFromAttribute(curr, attribute).value;
5489
+ return prevValue > currValue ? prev : curr;
5490
+ });
5491
+ return this.getValueFromAttribute(result, attribute).value;
5492
+ }
5493
+ getAverage(items, attribute) {
5494
+ const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value);
5495
+ return allValues.reduce((acc, val) => acc + val, 0) / allValues.length;
5496
+ }
5497
+ getDistinct(items, attribute) {
5498
+ return [...new Set(items.map((item) => this.getValueFromAttribute(item, attribute).value))].length;
5499
+ }
5500
+ getQuartile(items, attribute, q) {
5501
+ const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value);
5502
+ const allValuesSorted = allValues.sort((a, b) => a - b);
5503
+ let pos = (allValuesSorted.length - 1) * q;
5504
+ if (pos % 1 === 0) {
5505
+ return allValuesSorted[pos];
5506
+ }
5507
+ pos = Math.floor(pos);
5508
+ if (allValuesSorted[pos + 1] !== undefined) {
5509
+ return (allValuesSorted[pos] + allValuesSorted[pos + 1]) / 2;
5510
+ }
5511
+ return allValuesSorted[pos];
5512
+ }
5513
+ getPercentile(items, attribute, q) {
5514
+ const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value);
5515
+ const allValuesSorted = allValues.sort((a, b) => a - b);
5516
+ return ((100 * allValuesSorted.reduce((acc, v) => acc + (v < q ? 1 : 0) + (v === q ? 0.5 : 0), 0)) /
5517
+ allValuesSorted.length);
5518
+ }
5519
+ formatByLimit(data, limit) {
5520
+ if (!limit.isTimeLimit) {
5521
+ data
5522
+ .sort((a, b) => (limit.order === 'asc' ? (a.value > b.value ? 1 : -1) : a.value < b.value ? 1 : -1))
5523
+ .splice(limit.at);
5524
+ return data;
5525
+ }
5526
+ return data;
5527
+ }
5528
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryFrontendAggregationService, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
5529
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryFrontendAggregationService, providedIn: 'root' }); }
5530
+ }
5531
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryFrontendAggregationService, decorators: [{
5532
+ type: Injectable,
5533
+ args: [{
5534
+ providedIn: 'root'
5535
+ }]
5536
+ }], ctorParameters: function () { return [{ type: i1.Store }]; } });
5537
+
5173
5538
  class LoopScrollColumnComponent {
5174
5539
  constructor() {
5175
5540
  this.LOOP_COUNTER = [0, 1];
@@ -7374,6 +7739,7 @@ class ContextMenuComponent extends SubscriptionnerDirective {
7374
7739
  options: { itemIds: [] }
7375
7740
  };
7376
7741
  this.isModuleLoaded = {};
7742
+ this.allowObjectCreation$ = this.store.select(ContextMenuSelectors.allowObjectCreation);
7377
7743
  this.opened$ = this.store.select(ContextMenuSelectors.opened);
7378
7744
  this.position$ = this.store.select(ContextMenuSelectors.position);
7379
7745
  this.itemId$ = this.store.select(ContextMenuSelectors.itemId);
@@ -7396,20 +7762,25 @@ class ContextMenuComponent extends SubscriptionnerDirective {
7396
7762
  this.widgetFactoryService.isModuleLoaded('graph').subscribe((loaded) => (this.isModuleLoaded['graph'] = loaded));
7397
7763
  }
7398
7764
  openWithTemplate(position) {
7399
- this.overlayRef = this.overlay.create(new OverlayConfig({
7400
- hasBackdrop: true,
7401
- panelClass: ['m-context-menu'],
7402
- backdropClass: 'backdrop'
7403
- }));
7404
- this.overlayRef.attach(new TemplatePortal(this.template, this.viewContainerRef));
7405
- this.store.dispatch(ConfigActions.addingOverlay({ id: this.constructor.name }));
7406
- this.overlayRef.backdropClick().subscribe(() => this.hide());
7407
- const contextMenu = document.querySelector('div.m-context-menu');
7408
- if (!!contextMenu) {
7409
- contextMenu.style.left =
7410
- Math.max(0, Math.min(window.innerWidth - contextMenu.clientWidth, position.clientX - 10)) + 'px';
7411
- contextMenu.style.top =
7412
- Math.max(0, Math.min(window.innerHeight - contextMenu.clientHeight, position.clientY - 10)) + 'px';
7765
+ if (this.from !== 'map') {
7766
+ this.overlayRef = this.overlay.create(new OverlayConfig({
7767
+ hasBackdrop: true,
7768
+ panelClass: ['m-context-menu'],
7769
+ backdropClass: 'backdrop'
7770
+ }));
7771
+ this.overlayRef.attach(new TemplatePortal(this.template, this.viewContainerRef));
7772
+ this.store.dispatch(ConfigActions.addingOverlay({ id: this.constructor.name }));
7773
+ this.overlayRef.backdropClick().subscribe(() => this.hide());
7774
+ const contextMenu = document.querySelector('div.m-context-menu');
7775
+ if (!!contextMenu) {
7776
+ contextMenu.style.left =
7777
+ Math.max(0, Math.min(window.innerWidth - contextMenu.clientWidth, position.clientX - 10)) + 'px';
7778
+ contextMenu.style.top =
7779
+ Math.max(0, Math.min(window.innerHeight - contextMenu.clientHeight, position.clientY - 10)) + 'px';
7780
+ }
7781
+ }
7782
+ else {
7783
+ this.hide();
7413
7784
  }
7414
7785
  }
7415
7786
  hide() {
@@ -7453,11 +7824,11 @@ class ContextMenuComponent extends SubscriptionnerDirective {
7453
7824
  this.store.dispatch(ConfigActions.closeOverlay({ id: this.constructor.name + '-detail' }));
7454
7825
  }
7455
7826
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: ContextMenuComponent, deps: [{ token: i1.Store }, { token: i2$1.Overlay }, { token: i0.ViewContainerRef }, { token: WidgetFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
7456
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: ContextMenuComponent, selector: "pry-context-menu", viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }, { propertyName: "detailTemplate", first: true, predicate: ["detailTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <ul class=\"m-context-menu__list\">\n <ng-container *ngIf=\"!!itemId\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionAddOrRemove()\">\n {{ ((isSelected$ | async) ? '@pry.context.remove' : '@pry.context.add') | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionInvert()\">\n {{ '@pry.context.invert' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" *ngIf=\"!!resultSet\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"proximity()\" *ngIf=\"!!resultSet\">\n {{ '@pry.context.proximity' | i18n }}\n </button>\n </li>\n <ng-container *ngIf=\"isModuleLoaded['graph']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"explore()\">\n {{ '@pry.context.explore' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *ngIf=\"isModuleLoaded['detail']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"detail()\">\n {{ '@pry.context.detail' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"flyingDetail()\">\n {{ '@pry.context.flyingDetail' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li class=\"m-context-menu__list__item\">\n <pry-object-creation\n (closed)=\"hide()\"\n [link]=\"true\"\n [object]=\"false\"\n [menu]=\"true\"\n *ngIf=\"(selectedItemsIds?.length ?? 0) > 0\"\n ></pry-object-creation>\n <pry-object-creation (closed)=\"hide()\" [link]=\"true\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li class=\"m-context-menu__list__item\">\n <pry-object-creation (closed)=\"hide()\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n<ng-template #detailTemplate>\n <div class=\"o-settings__popup__header\">\n <h2 class=\"a-h2\">{{ '@pry.context.flyingDetail' | i18n }}</h2>\n <button type=\"button\" (click)=\"hideDetail()\" class=\"a-btn a-btn--icon-only -close\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.close' | i18n }}</span>\n </button>\n </div>\n <div class=\"o-settings__popup__content\">\n <pry-widget-instanciator [staticManifest]=\"detailManifest\"></pry-widget-instanciator>\n </div>\n <div class=\"o-settings__popup__footer\">\n <button (click)=\"hideDetail()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.action.close' | i18n }}\n </button>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: WidgetInstanciatorComponent, selector: "pry-widget-instanciator", inputs: ["widgetIndex", "staticManifest", "standalone", "open$"], outputs: ["manifestModified"] }, { kind: "component", type: PryObjectEditionComponent, selector: "pry-object-creation", inputs: ["link", "object", "menu"], outputs: ["closed"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
7827
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: ContextMenuComponent, selector: "pry-context-menu", viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }, { propertyName: "detailTemplate", first: true, predicate: ["detailTemplate"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<ng-template #template>\n <ul class=\"m-context-menu__list\">\n <ng-container *ngIf=\"!!itemId\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionAddOrRemove()\">\n {{ ((isSelected$ | async) ? '@pry.context.remove' : '@pry.context.add') | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionInvert()\">\n {{ '@pry.context.invert' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" *ngIf=\"!!resultSet\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"proximity()\" *ngIf=\"!!resultSet\">\n {{ '@pry.context.proximity' | i18n }}\n </button>\n </li>\n <ng-container *ngIf=\"isModuleLoaded['graph']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"explore()\">\n {{ '@pry.context.explore' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *ngIf=\"isModuleLoaded['detail']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"detail()\">\n {{ '@pry.context.detail' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"flyingDetail()\">\n {{ '@pry.context.flyingDetail' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li class=\"m-context-menu__list__item\">\n <pry-object-creation\n (closed)=\"hide()\"\n [link]=\"true\"\n [object]=\"false\"\n [menu]=\"true\"\n *ngIf=\"(selectedItemsIds?.length ?? 0) > 0\"\n ></pry-object-creation>\n <ng-container *ngIf=\"allowObjectCreation$ | async\">\n <pry-object-creation (closed)=\"hide()\" [link]=\"true\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </ng-container>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li *ngIf=\"allowObjectCreation$| async\" class=\"m-context-menu__list__item\">\n <pry-object-creation (closed)=\"hide()\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n<ng-template #detailTemplate>\n <div class=\"o-settings__popup__header\">\n <h2 class=\"a-h2\">{{ '@pry.context.flyingDetail' | i18n }}</h2>\n <button type=\"button\" (click)=\"hideDetail()\" class=\"a-btn a-btn--icon-only -close\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.close' | i18n }}</span>\n </button>\n </div>\n <div class=\"o-settings__popup__content\">\n <pry-widget-instanciator [staticManifest]=\"detailManifest\"></pry-widget-instanciator>\n </div>\n <div class=\"o-settings__popup__footer\">\n <button (click)=\"hideDetail()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.action.close' | i18n }}\n </button>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: WidgetInstanciatorComponent, selector: "pry-widget-instanciator", inputs: ["widgetIndex", "staticManifest", "standalone", "open$"], outputs: ["manifestModified"] }, { kind: "component", type: PryObjectEditionComponent, selector: "pry-object-creation", inputs: ["link", "object", "menu"], outputs: ["closed"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
7457
7828
  }
7458
7829
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: ContextMenuComponent, decorators: [{
7459
7830
  type: Component,
7460
- args: [{ selector: 'pry-context-menu', template: "<ng-template #template>\n <ul class=\"m-context-menu__list\">\n <ng-container *ngIf=\"!!itemId\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionAddOrRemove()\">\n {{ ((isSelected$ | async) ? '@pry.context.remove' : '@pry.context.add') | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionInvert()\">\n {{ '@pry.context.invert' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" *ngIf=\"!!resultSet\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"proximity()\" *ngIf=\"!!resultSet\">\n {{ '@pry.context.proximity' | i18n }}\n </button>\n </li>\n <ng-container *ngIf=\"isModuleLoaded['graph']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"explore()\">\n {{ '@pry.context.explore' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *ngIf=\"isModuleLoaded['detail']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"detail()\">\n {{ '@pry.context.detail' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"flyingDetail()\">\n {{ '@pry.context.flyingDetail' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li class=\"m-context-menu__list__item\">\n <pry-object-creation\n (closed)=\"hide()\"\n [link]=\"true\"\n [object]=\"false\"\n [menu]=\"true\"\n *ngIf=\"(selectedItemsIds?.length ?? 0) > 0\"\n ></pry-object-creation>\n <pry-object-creation (closed)=\"hide()\" [link]=\"true\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li class=\"m-context-menu__list__item\">\n <pry-object-creation (closed)=\"hide()\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n<ng-template #detailTemplate>\n <div class=\"o-settings__popup__header\">\n <h2 class=\"a-h2\">{{ '@pry.context.flyingDetail' | i18n }}</h2>\n <button type=\"button\" (click)=\"hideDetail()\" class=\"a-btn a-btn--icon-only -close\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.close' | i18n }}</span>\n </button>\n </div>\n <div class=\"o-settings__popup__content\">\n <pry-widget-instanciator [staticManifest]=\"detailManifest\"></pry-widget-instanciator>\n </div>\n <div class=\"o-settings__popup__footer\">\n <button (click)=\"hideDetail()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.action.close' | i18n }}\n </button>\n </div>\n</ng-template>\n" }]
7831
+ args: [{ selector: 'pry-context-menu', template: "<ng-template #template>\n <ul class=\"m-context-menu__list\">\n <ng-container *ngIf=\"!!itemId\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionAddOrRemove()\">\n {{ ((isSelected$ | async) ? '@pry.context.remove' : '@pry.context.add') | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"selectionInvert()\">\n {{ '@pry.context.invert' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" *ngIf=\"!!resultSet\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"proximity()\" *ngIf=\"!!resultSet\">\n {{ '@pry.context.proximity' | i18n }}\n </button>\n </li>\n <ng-container *ngIf=\"isModuleLoaded['graph']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"explore()\">\n {{ '@pry.context.explore' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *ngIf=\"isModuleLoaded['detail']\">\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"detail()\">\n {{ '@pry.context.detail' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\">\n <button type=\"button\" class=\"a-btn -link-like\" (click)=\"flyingDetail()\">\n {{ '@pry.context.flyingDetail' | i18n }}\n </button>\n </li>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li class=\"m-context-menu__list__item\">\n <pry-object-creation\n (closed)=\"hide()\"\n [link]=\"true\"\n [object]=\"false\"\n [menu]=\"true\"\n *ngIf=\"(selectedItemsIds?.length ?? 0) > 0\"\n ></pry-object-creation>\n <ng-container *ngIf=\"allowObjectCreation$ | async\">\n <pry-object-creation (closed)=\"hide()\" [link]=\"true\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </ng-container>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *pryAccess=\"{ module: 'dashboard', page: 'dashboard', action: 'edit_object' }\">\n <li *ngIf=\"allowObjectCreation$| async\" class=\"m-context-menu__list__item\">\n <pry-object-creation (closed)=\"hide()\" [object]=\"true\" [menu]=\"true\"></pry-object-creation>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n<ng-template #detailTemplate>\n <div class=\"o-settings__popup__header\">\n <h2 class=\"a-h2\">{{ '@pry.context.flyingDetail' | i18n }}</h2>\n <button type=\"button\" (click)=\"hideDetail()\" class=\"a-btn a-btn--icon-only -close\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.close' | i18n }}</span>\n </button>\n </div>\n <div class=\"o-settings__popup__content\">\n <pry-widget-instanciator [staticManifest]=\"detailManifest\"></pry-widget-instanciator>\n </div>\n <div class=\"o-settings__popup__footer\">\n <button (click)=\"hideDetail()\" class=\"a-btn a-btn--primary\">\n {{ '@pry.action.close' | i18n }}\n </button>\n </div>\n</ng-template>\n" }]
7461
7832
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2$1.Overlay }, { type: i0.ViewContainerRef }, { type: WidgetFactoryService }]; }, propDecorators: { template: [{
7462
7833
  type: ViewChild,
7463
7834
  args: ['template', { read: TemplateRef }]
@@ -8004,32 +8375,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
8004
8375
  type: Output
8005
8376
  }] } });
8006
8377
 
8007
- var Operation;
8008
- (function (Operation) {
8009
- Operation["NONE"] = "none";
8010
- Operation["COUNT"] = "count";
8011
- Operation["SUM"] = "sum";
8012
- Operation["DISTINCT"] = "cardinality";
8013
- Operation["AVERAGE"] = "avg";
8014
- Operation["MEDIAN"] = "median";
8015
- Operation["Q1"] = "q1";
8016
- Operation["Q3"] = "q3";
8017
- Operation["MIN"] = "min";
8018
- Operation["MAX"] = "max";
8019
- })(Operation || (Operation = {}));
8020
- var GraphType;
8021
- (function (GraphType) {
8022
- GraphType["AREA"] = "area-default";
8023
- GraphType["AREA_WITH_LINES_AND_POINTS"] = "area-with-lines-and-points";
8024
- GraphType["BAR"] = "bar-default";
8025
- GraphType["CIRCULAR"] = "arc-default";
8026
- GraphType["CURVE"] = "line-default";
8027
- GraphType["CURVE_WITH_POINTS"] = "line-with-points";
8028
- GraphType["DONUT"] = "arc-donut";
8029
- GraphType["HISTOGRAM"] = "bar-histogram";
8030
- GraphType["POINTS"] = "point-default";
8031
- })(GraphType || (GraphType = {}));
8032
-
8033
8378
  var TooltipMode;
8034
8379
  (function (TooltipMode) {
8035
8380
  TooltipMode["CLICK"] = "click";
@@ -8046,6 +8391,7 @@ const widgetMapConfig = {
8046
8391
  'upload'
8047
8392
  ])
8048
8393
  };
8394
+ const DEFAULT_PROJECTION = 'EPSG:4326';
8049
8395
 
8050
8396
  const USE_CURRENT_RESULTSET = 'use-current-resultset';
8051
8397
  class ToolboxManifestService extends SubscriptionnerDirective {
@@ -8718,26 +9064,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
8718
9064
  }], ctorParameters: function () { return [{ type: PrySnackbarService }, { type: PryI18nService }]; } });
8719
9065
 
8720
9066
  class PryAboutComponent {
8721
- constructor(store) {
9067
+ constructor(store, i18nService) {
8722
9068
  this.store = store;
9069
+ this.i18nService = i18nService;
8723
9070
  this.store.dispatch(ConfigActions.loadVersions());
8724
9071
  this.version$ = this.store.select(ConfigSelectors.selectVersions);
8725
9072
  }
8726
9073
  displayVersion(value) {
8727
9074
  const backVersion = value;
8728
- if (backVersion.chartVersion) {
9075
+ if (!!backVersion.chartVersion) {
8729
9076
  return `${backVersion.chartVersion}[${backVersion.applicationVersion}]`;
8730
9077
  }
8731
9078
  const frontVersion = value;
8732
- return frontVersion.libVersion;
9079
+ if (!!frontVersion.libVersion) {
9080
+ return frontVersion.libVersion;
9081
+ }
9082
+ return this.i18nService.instant('@pry.about.noVersion');
8733
9083
  }
8734
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAboutComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
9084
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAboutComponent, deps: [{ token: i1.Store }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
8735
9085
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryAboutComponent, selector: "pry-about", ngImport: i0, template: "<div class=\"info-icon description-container description\">\n <span class=\"info-text\">i</span>\n</div>\n<div class=\"description-tooltip title-tooltip\">\n <ul *ngFor=\"let version of (version$ | async) ?? {} | keyvalue\">\n <li>{{ '@pry.about.' + version.key | i18n }} {{ displayVersion(version.value) }}</li>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
8736
9086
  }
8737
9087
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAboutComponent, decorators: [{
8738
9088
  type: Component,
8739
9089
  args: [{ selector: 'pry-about', template: "<div class=\"info-icon description-container description\">\n <span class=\"info-text\">i</span>\n</div>\n<div class=\"description-tooltip title-tooltip\">\n <ul *ngFor=\"let version of (version$ | async) ?? {} | keyvalue\">\n <li>{{ '@pry.about.' + version.key | i18n }} {{ displayVersion(version.value) }}</li>\n </ul>\n</div>\n" }]
8740
- }], ctorParameters: function () { return [{ type: i1.Store }]; } });
9090
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: PryI18nService }]; } });
8741
9091
 
8742
9092
  const PRY_ABOUT_COMPONENTS = [PryAboutComponent];
8743
9093
  class PryAboutModule {
@@ -8971,36 +9321,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
8971
9321
  type: Input
8972
9322
  }] } });
8973
9323
 
8974
- class ResultsetUtils {
8975
- static mergeResultSets(rs1, rs2) {
8976
- if (!rs1)
8977
- return rs2;
8978
- if (!rs2)
8979
- return rs1;
8980
- const rs1Copy = JSON.parse(JSON.stringify(rs1));
8981
- Object.keys(rs2.items ?? {}).forEach((key) => {
8982
- if (!rs1Copy.items[key]) {
8983
- rs1Copy.items[key] = [];
8984
- }
8985
- rs1Copy.items[key].push(...rs2.items[key]);
8986
- });
8987
- rs1Copy.relations = [...(rs1Copy.relations ?? []), ...(rs2.relations ?? [])];
8988
- /* Make items and relations unique in resulted dataset */
8989
- Object.keys(rs1Copy.items).forEach((key) => {
8990
- const uniqueList = [...new Set(rs1Copy.items[key].map((it) => it.id))];
8991
- rs1Copy.items[key] = uniqueList.map((id) => rs1Copy.items[key].find((it) => it.id === id));
8992
- });
8993
- const uniqueRelations = [
8994
- ...new Set(rs1Copy.relations.map((rel) => `${rel.relationType}|${rel.source}|${rel.destination}`))
8995
- ];
8996
- rs1Copy.relations = uniqueRelations.map((key) => {
8997
- const splittedKey = key.split('|');
8998
- return rs1Copy.relations.find((rel) => rel.relationType === splittedKey[0] && rel.source === splittedKey[1] && rel.destination === splittedKey[2]);
8999
- });
9000
- return rs1Copy;
9001
- }
9002
- }
9003
-
9004
9324
  class DataWidgetComponent extends BaseWidgetComponent {
9005
9325
  set staticResultSet(resultSet) {
9006
9326
  this.staticResultSet$.next(resultSet);
@@ -10709,8 +11029,9 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
10709
11029
  },
10710
11030
  presentation: {
10711
11031
  ...state.presentation,
10712
- current: state.presentation.current
10713
- ? action.manifests.find((manifest) => manifest.id === state.presentation.current?.id)
11032
+ current: !!state.presentation.current
11033
+ ? action.manifests.find((manifest) => manifest.id === state.presentation.current?.id) ??
11034
+ state.presentation.current
10714
11035
  : undefined
10715
11036
  }
10716
11037
  })), on(DashboardActions.updateStaticManifest, (state, action) => ({
@@ -11382,5 +11703,5 @@ function filterLoader(module, prop) {
11382
11703
  * Generated bundle index. Do not edit.
11383
11704
  */
11384
11705
 
11385
- export { AccordionComponent, AccordionItemComponent, Aggregation, BaseFilterComponent, BaseFilterModule, BaseLayoutComponent, BaseMenuComponent, BaseToolboxComponent, BaseTooltipComponent, BaseTooltipModule, BaseWidgetComponent, BaseWidgetModule, BusService, CategoryActions, CategorySelectors, CategoryService, ChartOptionDefault, ClassActions, ClassSelectors, ClassService, ConfigActions, ConfigSelectors, ConfigService, ContextMenuActions, ContextMenuComponent, ContextMenuSelectors, DEFAULT_CATEGORY_UUID, DEFAULT_COLUMNS_NUMBER, DEFAULT_GAP_PX, DEFAULT_ICON_URL, DEFAULT_MSG_TIMEOUT, DEFAULT_NAMED_QUERY_ID, DEFAULT_RESTITUTION_ICON_URL, DEFAULT_ROWS_NUMBER, DEFAULT_ROW_HEIGHT_PX, DELAY_FOR_HIDE, DashboardActions, DashboardComponent, DashboardGridLayout, DashboardSelectors, DataSourceActions, DataSourceSelectors, DataSourceService, DataWidgetComponent, DatasourceSelectorComponent, DateRangeHighlightPipe, DateUtils, DefaultTooltipComponent, DefaultViewGuard, DisplayMode, ENV_OPTIONS, EXPLORE_NAMED_QUERY_ID, FIELD_OPTIONS, FIELD_UUID, FILTERS_DOMAIN, FILTER_DEFINITION, FieldActions, FieldSelectors, FieldService, FieldType, FilterFactoryService, FilterInstanciatorComponent, GeoMetadata, GeometricFieldTypes, GetSecuredImagePipe, GraphType, HTTP_ORIGIN_METADATA, I18nPipe, INTERNALLY_STORED_IMAGE_PREFIX, IconPosition, ImageActions, ImageService, ImagesSelectors, ItemUtils, LibraryTypes, LoopScrollColumnComponent, METADATA_TYPE, META_OPTIONS, MIME_TYPE_RESULTSET, MIME_TYPE_WIDGET_MANIFEST, MIME_TYPE_WIDGET_SIZE, MIME_TYPE_WIDGET_TYPE, ManifestService, ManifestUtils, ManifestsComponent, MarkSubType, MarkType, MetadataComponent, NamedQueryTypes, NamedQueryUtils, OPERATOR_OPTIONS, Operation, PRY_ACCESS_GUARD, PRY_ACCESS_TOKEN, PRY_CUSTOMEVENT_TYPE, PRY_DIALOG_DATA, PryAboutComponent, PryAboutModule, PryAccessDirective, PryAccessUtils, PryBaseAccess, PryBaseAccessGuard, PryCoreModule, PryDashboardModule, PryDatasetType, PryDatePickerComponent, PryDatePickerModule, PryDefaultAccessGuard, PryDefaultAccessService, PryDialogConfirmComponent, PryDialogRef, PryDialogService, PryEditInputComponent, PryEditInputModule, PryHiddenWhenOverlay, PryHiddenWhenOverlayDirective, PryHttpErrorInterceptorService, PryI18nModule, PryI18nService, PryIconComponent, PryIconModule, PryModalComponent, PryModalModule, PryModalStatusComponent, PryModalStatusModule, PryNqColorSelectorComponent, PryObjectEditionComponent, PryOverlayDirective, PryOverlayModule, PryRangeComponent, PryRangeModule, PrySelectComponent, PrySelectImageComponent, PrySelectModule, PryShareComponent, PryShareModule, PrySnackbarComponent, PrySnackbarModule, PrySnackbarService, PrySortDataPipe, PrySortHeaderComponent, PrySortHeaderDirective, PrySortModule, PrySortTableDirective, PryTimePickerComponent, PryTitleService, PryToggleComponent, PryToggleModule, PryTooltipDirective, PryUploadComponent, PryVisibilityType, PryWidgetHeaderComponent, RawService, RelationTypesActions, RelationTypesSelectors, RelationTypesService, ResultSetSizePipe, ResultsetUtils, SYMBOL_DOMAIN, SearchActions, SearchSelectors, SearchService, SettingsComponent, SubscriptionnerDirective, SymbolService, TABLE_ATTR_DOMAIN, TILE_ATTR_DOMAIN, TOOLTIPS_DOMAIN, TOOLTIP_DEFINITION, TabComponent, TabGroupComponent, ToolboxManifestService, ToolboxMenuService, TooltipFactoryService, TooltipMode, TranslateIdPipe, TranslateItemToSymbolPipe, UNKNOWN_DATASOURCE, USE_CURRENT_RESULTSET, VARIABLE_TYPE, VegaColorType, VegaType, ViewMode, VizualizeRawComponent, WIDGET_DEFINITION, WIDGET_HEADER_HEIGHT, WebsocketService, WidgetFactoryService, WidgetInstanciatorComponent, WidgetPlaceholderComponent, WidgetPlacementUtils, WmsService, adapter$2 as adapter, aggregationDefault, baseItemProperties, classReducer, classesFeatureKey, compareOperationFunctions, contextMenuFeatureKey, contextMenuReducer, createPlacedWidgetCopy, dashboardFeatureKey, dashboardInitialState, dashboardReducer, dataSourceFeatureKey, dataSourceReducer, deepMerge, defaultColors, defaultMenuStructure, enTranslations$1 as enTranslations, filterLoader, frTranslations$1 as frTranslations, getDisplayOptions, httpErrorOptions, imageFeatureKey, imageReducer, initialClassState, initialContextMenuState, initialDataSourceState, initialImageState, initialSearchState, latLonToGeographicFieldTransformation, markTypesDefault, notificationFeatureKey, orderWidgetsAccordingToPlacement, searchFeatureKey, searchReducer, selectAll$2 as selectAll, selectEntities$2 as selectEntities, selectIds$2 as selectIds, selectTotal$2 as selectTotal, solveCollisions, solvingCollisionOptions, sortByName$2 as sortByName, subTypesDefault, tooltipLoader, vegaColorSchemesDefault, widgetLoader, widgetMapConfig };
11706
+ export { AccordionComponent, AccordionItemComponent, Aggregation, BaseFilterComponent, BaseFilterModule, BaseLayoutComponent, BaseMenuComponent, BaseToolboxComponent, BaseTooltipComponent, BaseTooltipModule, BaseWidgetComponent, BaseWidgetModule, BusService, CategoryActions, CategorySelectors, CategoryService, ChartOptionDefault, ClassActions, ClassSelectors, ClassService, ConfigActions, ConfigSelectors, ConfigService, ContextMenuActions, ContextMenuComponent, ContextMenuSelectors, DEFAULT_CATEGORY_UUID, DEFAULT_COLUMNS_NUMBER, DEFAULT_GAP_PX, DEFAULT_ICON_URL, DEFAULT_MSG_TIMEOUT, DEFAULT_NAMED_QUERY_ID, DEFAULT_PROJECTION, DEFAULT_RESTITUTION_ICON_URL, DEFAULT_ROWS_NUMBER, DEFAULT_ROW_HEIGHT_PX, DELAY_FOR_HIDE, DashboardActions, DashboardComponent, DashboardGridLayout, DashboardSelectors, DataSourceActions, DataSourceSelectors, DataSourceService, DataWidgetComponent, DatasourceSelectorComponent, DateRangeHighlightPipe, DateUtils, DefaultTooltipComponent, DefaultViewGuard, DisplayMode, ENV_OPTIONS, EXPLORE_NAMED_QUERY_ID, FIELD_OPTIONS, FIELD_UUID, FILTERS_DOMAIN, FILTER_DEFINITION, FieldActions, FieldSelectors, FieldService, FieldType, FilterFactoryService, FilterInstanciatorComponent, GeoMetadata, GeometricFieldTypes, GetSecuredImagePipe, GraphType, HTTP_ORIGIN_METADATA, I18nPipe, INTERNALLY_STORED_IMAGE_PREFIX, IconPosition, ImageActions, ImageService, ImagesSelectors, ItemUtils, LibraryTypes, LoopScrollColumnComponent, METADATA_TYPE, META_OPTIONS, MIME_TYPE_RESULTSET, MIME_TYPE_WIDGET_MANIFEST, MIME_TYPE_WIDGET_SIZE, MIME_TYPE_WIDGET_TYPE, ManifestService, ManifestUtils, ManifestsComponent, MarkSubType, MarkType, MetadataComponent, NamedQueryTypes, NamedQueryUtils, OPERATOR_OPTIONS, Operation, PRY_ACCESS_GUARD, PRY_ACCESS_TOKEN, PRY_CUSTOMEVENT_TYPE, PRY_DIALOG_DATA, PryAboutComponent, PryAboutModule, PryAccessDirective, PryAccessUtils, PryAggregationService, PryBackendAggregationService, PryBaseAccess, PryBaseAccessGuard, PryCoreModule, PryDashboardModule, PryDatasetType, PryDatePickerComponent, PryDatePickerModule, PryDefaultAccessGuard, PryDefaultAccessService, PryDialogConfirmComponent, PryDialogRef, PryDialogService, PryEditInputComponent, PryEditInputModule, PryFrontendAggregationService, PryHiddenWhenOverlay, PryHiddenWhenOverlayDirective, PryHttpErrorInterceptorService, PryI18nModule, PryI18nService, PryIconComponent, PryIconModule, PryModalComponent, PryModalModule, PryModalStatusComponent, PryModalStatusModule, PryNqColorSelectorComponent, PryObjectEditionComponent, PryOverlayDirective, PryOverlayModule, PryRangeComponent, PryRangeModule, PrySelectComponent, PrySelectImageComponent, PrySelectModule, PryShareComponent, PryShareModule, PrySnackbarComponent, PrySnackbarModule, PrySnackbarService, PrySortDataPipe, PrySortHeaderComponent, PrySortHeaderDirective, PrySortModule, PrySortTableDirective, PryTimePickerComponent, PryTitleService, PryToggleComponent, PryToggleModule, PryTooltipDirective, PryUploadComponent, PryVisibilityType, PryWidgetHeaderComponent, RawService, RelationTypesActions, RelationTypesSelectors, RelationTypesService, ResultSetSizePipe, ResultsetUtils, SYMBOL_DOMAIN, SearchActions, SearchSelectors, SearchService, SettingsComponent, SubscriptionnerDirective, SymbolService, TABLE_ATTR_DOMAIN, TILE_ATTR_DOMAIN, TOOLTIPS_DOMAIN, TOOLTIP_DEFINITION, TabComponent, TabGroupComponent, ToolboxManifestService, ToolboxMenuService, TooltipFactoryService, TooltipMode, TranslateIdPipe, TranslateItemToSymbolPipe, UNKNOWN_DATASOURCE, USE_CURRENT_RESULTSET, VARIABLE_TYPE, VegaColorType, VegaType, ViewMode, VizualizeRawComponent, WIDGET_DEFINITION, WIDGET_HEADER_HEIGHT, WebsocketService, WidgetFactoryService, WidgetInstanciatorComponent, WidgetPlaceholderComponent, WidgetPlacementUtils, WmsService, adapter$2 as adapter, aggregationDefault, baseItemProperties, classReducer, classesFeatureKey, compareOperationFunctions, contextMenuFeatureKey, contextMenuReducer, createPlacedWidgetCopy, dashboardFeatureKey, dashboardInitialState, dashboardReducer, dataSourceFeatureKey, dataSourceReducer, deepMerge, defaultColors, defaultMenuStructure, enTranslations$1 as enTranslations, filterLoader, frTranslations$1 as frTranslations, getDisplayOptions, httpErrorOptions, imageFeatureKey, imageReducer, initialClassState, initialContextMenuState, initialDataSourceState, initialImageState, initialSearchState, latLonToGeographicFieldTransformation, markTypesDefault, notificationFeatureKey, orderWidgetsAccordingToPlacement, searchFeatureKey, searchReducer, selectAll$2 as selectAll, selectEntities$2 as selectEntities, selectIds$2 as selectIds, selectTotal$2 as selectTotal, solveCollisions, solvingCollisionOptions, sortByName$2 as sortByName, subTypesDefault, tooltipLoader, vegaColorSchemesDefault, widgetLoader, widgetMapConfig };
11386
11707
  //# sourceMappingURL=provoly-dashboard.mjs.map