@provoly/dashboard 0.14.9 → 0.14.10

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 (96) hide show
  1. package/admin/components/admin-layout/admin-layout.component.d.ts +5 -3
  2. package/assets/svgs/map.svg +1 -1
  3. package/components/metadata-editor/metadata-editor.component.d.ts +1 -3
  4. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +1 -1
  5. package/esm2022/admin/components/admin-layout/admin-layout.component.mjs +10 -7
  6. package/esm2022/admin/components/admin-user/admin-user-select/admin-user-select.component.mjs +1 -1
  7. package/esm2022/admin/i18n/en.translations.mjs +2 -2
  8. package/esm2022/admin/i18n/fr.translations.mjs +4 -4
  9. package/esm2022/components/metadata-editor/metadata-editor.component.mjs +8 -29
  10. package/esm2022/lib/core/components/about/about.component.mjs +29 -0
  11. package/esm2022/lib/core/components/about/pry-about.module.mjs +21 -0
  12. package/esm2022/lib/core/components/icon/icon.component.mjs +5 -1
  13. package/esm2022/lib/core/i18n/en.translations.mjs +12 -2
  14. package/esm2022/lib/core/i18n/fr.translations.mjs +12 -2
  15. package/esm2022/lib/core/i18n/i18n.pipe.mjs +4 -3
  16. package/esm2022/lib/core/i18n/i18n.service.mjs +5 -5
  17. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -1
  18. package/esm2022/lib/core/public-api.mjs +3 -1
  19. package/esm2022/lib/core/store/class/class.effects.mjs +1 -1
  20. package/esm2022/lib/core/store/config/config.actions.mjs +5 -2
  21. package/esm2022/lib/core/store/config/config.effects.mjs +4 -1
  22. package/esm2022/lib/core/store/config/config.reducer.mjs +9 -2
  23. package/esm2022/lib/core/store/config/config.selectors.mjs +6 -4
  24. package/esm2022/lib/core/store/config/config.service.mjs +36 -2
  25. package/esm2022/lib/core/store/config/versions.interface.mjs +2 -0
  26. package/esm2022/lib/core/toolbox/toolbox-menu.service.mjs +1 -16
  27. package/esm2022/lib/dashboard/components/manifests/manifests.component.mjs +3 -1
  28. package/esm2022/lib/dashboard/components/widgets/base-widget.component.mjs +3 -2
  29. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +2 -2
  30. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +12 -4
  31. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +7 -1
  32. package/esm2022/lib/dashboard/store/manifest.service.mjs +2 -3
  33. package/esm2022/notification/store/notification.effects.mjs +3 -3
  34. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +23 -18
  35. package/esm2022/presentation/components/presentation.component.mjs +18 -18
  36. package/esm2022/presentation/style/css.component.mjs +2 -2
  37. package/esm2022/restitution/components/restitution-list/restitution-list.component.mjs +3 -3
  38. package/esm2022/restitution/components/restitution-list-item/restitution-list-item.component.mjs +6 -3
  39. package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors-select/supervision-integration-errors-select.component.mjs +6 -3
  40. package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors.component.mjs +2 -2
  41. package/esm2022/supervision/components/supervision-layout/supervision-layout.component.mjs +2 -2
  42. package/esm2022/supervision/components/supervision.component.mjs +2 -2
  43. package/esm2022/supervision/store/supervision.actions.mjs +1 -1
  44. package/esm2022/supervision/store/supervision.reducer.mjs +3 -2
  45. package/esm2022/supervision/store/supervision.selectors.mjs +2 -2
  46. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +18 -11
  47. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +20 -6
  48. package/esm2022/widgets/widget-aggregated-chart/i18n/fr.translations.mjs +1 -2
  49. package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +2 -2
  50. package/fesm2022/provoly-dashboard-admin.mjs +14 -11
  51. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  52. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs +7 -28
  53. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs.map +1 -1
  54. package/fesm2022/provoly-dashboard-notification.mjs +2 -2
  55. package/fesm2022/provoly-dashboard-notification.mjs.map +1 -1
  56. package/fesm2022/provoly-dashboard-presentation.mjs +41 -37
  57. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  58. package/fesm2022/provoly-dashboard-restitution.mjs +7 -4
  59. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  60. package/fesm2022/provoly-dashboard-supervision.mjs +11 -8
  61. package/fesm2022/provoly-dashboard-supervision.mjs.map +1 -1
  62. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +17 -10
  63. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
  64. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +19 -6
  65. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  66. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +1 -1
  67. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  68. package/fesm2022/provoly-dashboard.mjs +165 -54
  69. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  70. package/lib/core/components/about/about.component.d.ts +12 -0
  71. package/lib/core/components/about/pry-about.module.d.ts +10 -0
  72. package/lib/core/i18n/en.translations.d.ts +10 -0
  73. package/lib/core/i18n/fr.translations.d.ts +10 -0
  74. package/lib/core/i18n/i18n.service.d.ts +2 -2
  75. package/lib/core/model/widget-map-manifest.interface.d.ts +2 -0
  76. package/lib/core/public-api.d.ts +2 -0
  77. package/lib/core/store/config/config.actions.d.ts +12 -0
  78. package/lib/core/store/config/config.effects.d.ts +6 -0
  79. package/lib/core/store/config/config.reducer.d.ts +2 -0
  80. package/lib/core/store/config/config.selectors.d.ts +1 -0
  81. package/lib/core/store/config/config.service.d.ts +2 -0
  82. package/lib/core/store/config/versions.interface.d.ts +10 -0
  83. package/lib/dashboard/store/dashboard.actions.d.ts +4 -4
  84. package/lib/dashboard/store/manifest.service.d.ts +1 -1
  85. package/package.json +25 -25
  86. package/presentation/components/add-edit-presentation/add-edit-presentation.component.d.ts +4 -3
  87. package/presentation/components/presentation.component.d.ts +2 -2
  88. package/presentation/style/_o-pry-new-presentation.scss +7 -0
  89. package/restitution/components/restitution-list-item/restitution-list-item.component.d.ts +3 -2
  90. package/styles/layout/_o-base-layout.scss +8 -1
  91. package/supervision/components/supervision-integration-errors/supervision-integration-errors-select/supervision-integration-errors-select.component.d.ts +1 -1
  92. package/supervision/store/supervision.actions.d.ts +2 -2
  93. package/supervision/store/supervision.reducer.d.ts +1 -1
  94. package/supervision/store/supervision.selectors.d.ts +1 -1
  95. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +7 -0
  96. package/widgets/widget-aggregated-chart/i18n/fr.translations.d.ts +0 -1
@@ -184,6 +184,15 @@ function deepMerge(target, source) {
184
184
 
185
185
  const enTranslations$1 = {
186
186
  '@pry': {
187
+ about: {
188
+ front: 'Version Front Library : {{value}} ',
189
+ ref: 'Version repository : {{value}}',
190
+ data: 'Version data : {{value}}',
191
+ replay: 'Version replay : {{value}}',
192
+ exec: 'Version Execution : {{value}}',
193
+ transfo: 'Version Transformation : {{value}}',
194
+ monitor: 'Version Supervision : {{value}}'
195
+ },
187
196
  header: {
188
197
  noCurrentPresentation: 'Presentation not saved'
189
198
  },
@@ -237,7 +246,8 @@ const enTranslations$1 = {
237
246
  saved: 'Presentation saved as {{viewId}}',
238
247
  saveErrorCode: {
239
248
  FORBIDDEN: 'You are not the owner of this presentation',
240
- NAME_ALREADY_USED: 'A presentation called "{{name}}" already exists, please select another name.'
249
+ NAME_ALREADY_USED: 'A presentation called "{{name}}" already exists, please select another name.',
250
+ SAVE_METADATA: 'Save your presentation before choosing the theme.'
241
251
  },
242
252
  defaulted: 'Presentation {{viewId}} marked as favourite',
243
253
  undefaulted: 'Presentation {{viewId}} is no longer marked as favourite',
@@ -516,6 +526,15 @@ const enTranslations$1 = {
516
526
 
517
527
  const frTranslations$1 = {
518
528
  '@pry': {
529
+ about: {
530
+ front: 'Librairie front version : ',
531
+ ref: 'Référentiel version : ',
532
+ data: 'Données version : ',
533
+ replay: 'Rejeu version : ',
534
+ exec: 'Exécution version : ',
535
+ transfo: 'Transformation version : ',
536
+ monitor: 'Supervision version : '
537
+ },
519
538
  header: {
520
539
  noCurrentPresentation: 'Présentation non sauvegardée'
521
540
  },
@@ -569,7 +588,8 @@ const frTranslations$1 = {
569
588
  saved: 'Présentation {{viewId}} sauvegardée',
570
589
  saveErrorCode: {
571
590
  FORBIDDEN: "Vous n'êtes pas le propriétaire de cette présentation ",
572
- NAME_ALREADY_USED: 'Une présentation avec le nom "{{name}}" existe déjà, veuillez sélectionner un autre nom.'
591
+ NAME_ALREADY_USED: 'Une présentation avec le nom "{{name}}" existe déjà, veuillez sélectionner un autre nom.',
592
+ SAVE_METADATA: 'Veuillez sauvegarder la presentation avant de choisir une thématique.'
573
593
  },
574
594
  defaulted: 'Présentation {{viewId}} marquée par défaut',
575
595
  undefaulted: "La présentation {{viewId}} n'est plus marquée par défaut",
@@ -895,7 +915,7 @@ class PryI18nService {
895
915
  }
896
916
  return response;
897
917
  }
898
- instant(key, params) {
918
+ instant(key, params, warn = true) {
899
919
  let response = this.instantObject(key, params);
900
920
  if (typeof response === 'string') {
901
921
  const matches = response.match(this.parameterRegexp);
@@ -910,14 +930,14 @@ class PryI18nService {
910
930
  return response;
911
931
  }
912
932
  else {
913
- if (PryI18nService.warn) {
933
+ if (PryI18nService.warn && warn) {
914
934
  console.warn(`Key ${key} has not been found in translations for lang ${this.currentLang}.`);
915
935
  }
916
936
  return key;
917
937
  }
918
938
  }
919
- get(key, params) {
920
- return this.translations$.pipe(map((translations) => this.instant(key, params)));
939
+ get(key, params, warn = false) {
940
+ return this.translations$.pipe(map((translations) => this.instant(key, params, warn)));
921
941
  }
922
942
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryI18nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
923
943
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryI18nService, providedIn: 'root' }); }
@@ -938,15 +958,16 @@ class I18nPipe {
938
958
  this._ref = _ref;
939
959
  }
940
960
  transform(value, ...args) {
961
+ const warn = (args[0] ?? { warn: true }).warn;
941
962
  if (value === this.key && JSON.stringify(args) === JSON.stringify(this.params)) {
942
963
  return this.value;
943
964
  }
944
965
  this.key = value;
945
966
  this.params = args;
946
- this.value = this.translateService.instant(value, args[0]);
967
+ this.value = this.translateService.instant(value, args[0], warn);
947
968
  if (this.value === this.key) {
948
969
  // Not translated, maybe we must wait
949
- this.waitSubscription = this.translateService.get(value, args[0]).subscribe((value) => {
970
+ this.waitSubscription = this.translateService.get(value, args[0], warn).subscribe((value) => {
950
971
  if (this.value !== value) {
951
972
  this.value = value;
952
973
  this._ref.markForCheck();
@@ -997,6 +1018,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
997
1018
  args: [{ selector: 'pry-base-menu', template: "<nav class=\"m-nav-links\">\n <ng-container *ngFor=\"let sub of subMenu$ | async\">\n <ul class=\"m-nav-links__list\">\n <ng-container *ngFor=\"let menu of sub.subMenus\">\n <li\n *pryAccess=\"{ module: menu.module, page: menu.page, subMenu: menu.subMenu }\"\n class=\"m-nav-links__list__item\"\n >\n <a [routerLink]=\"menu.menu\" class=\"a-btn a-btn--secondary -width-full\" [routerLinkActive]=\"'is-active'\">\n {{ baseMenuTranslation + menu.menu | i18n }}\n </a>\n </li>\n </ng-container>\n </ul>\n </ng-container>\n <ng-container *ngIf=\"menus$ | async as menus\">\n <ng-container *ngIf=\"menus.length > 0\">\n <ul class=\"m-nav-links__list\">\n <ng-container *ngFor=\"let menu of menus\">\n <ng-container *ngIf=\"menu.module === 'supervision'\">\n <li *pryAccess=\"{ module: menu.module, page: menu.page }\" class=\"m-nav-links__list__item\">\n <a [routerLink]=\"menu.menu\" class=\"a-btn a-btn--secondary -width-full\" [routerLinkActive]=\"'is-active'\">\n {{ baseMenuTranslation + menu.menu | i18n }}\n </a>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </ng-container>\n </ng-container>\n</nav>\n" }]
998
1019
  }], ctorParameters: function () { return [{ type: i1.Store }]; } });
999
1020
 
1021
+ const DEFAULT_ICON_URL = '/assets/svgs/default.svg';
1022
+ const DEFAULT_RESTITUTION_ICON_URL = '/assets/svgs/default-restitution.svg';
1023
+ var IconPosition;
1024
+ (function (IconPosition) {
1025
+ IconPosition["FULL"] = "FULL";
1026
+ IconPosition["TOP_LEFT"] = "TOP_LEFT";
1027
+ IconPosition["TOP_RIGHT"] = "TOP_RIGHT";
1028
+ IconPosition["BOTTOM_LEFT"] = "BOTTOM_LEFT";
1029
+ IconPosition["BOTTOM_RIGHT"] = "BOTTOM_RIGHT";
1030
+ })(IconPosition || (IconPosition = {}));
1031
+ const compareOperationFunctions = {
1032
+ EQUALS: (a, b) => a === b,
1033
+ GREATER: (a, b) => parseInt(a, 10) > parseInt(b, 10),
1034
+ GREATER_OR_EQUAL: (a, b) => parseInt(a, 10) >= parseInt(b, 10),
1035
+ LOWER: (a, b) => parseInt(a, 10) < parseInt(b, 10),
1036
+ LOWER_OR_EQUAL: (a, b) => parseInt(a, 10) <= parseInt(b, 10),
1037
+ CONTAINS: (a, b) => (a + '').localeCompare(b + '') === 0
1038
+ };
1039
+
1000
1040
  class PryIconComponent {
1001
1041
  get iconSvgUrl() {
1002
1042
  return this._iconSvgUrl;
@@ -1040,6 +1080,9 @@ class PryIconComponent {
1040
1080
  const iconSvg = changes['iconSvg'];
1041
1081
  if (iconSvg) {
1042
1082
  this._iconSvg = iconSvg.currentValue;
1083
+ if (this._iconSvg === DEFAULT_ICON_URL) {
1084
+ this._iconSvg = 'default';
1085
+ }
1043
1086
  }
1044
1087
  const iconImage = changes['iconImage'];
1045
1088
  if (iconImage) {
@@ -1319,7 +1362,7 @@ const DashboardActions = {
1319
1362
  getCapability: createAction('[Widget map] Get Wms capability', props()),
1320
1363
  updateCapability: createAction('[Widget map] Store Wms capability', props()),
1321
1364
  addManifestMetadata: createAction('[Dashboard] Add manifest metadata', props()),
1322
- deleteManifestMetadata: createAction('[Dashboard] Add manifest metadata', props())
1365
+ deleteManifestMetadata: createAction('[Dashboard] Delete manifest metadata', props())
1323
1366
  };
1324
1367
 
1325
1368
  const ConfigActions = {
@@ -1350,7 +1393,10 @@ const ConfigActions = {
1350
1393
  loadChartOption: createAction('[Config] load chart option'),
1351
1394
  loadedChartOption: createAction('[config] loaded chart option', props()),
1352
1395
  updateChartOption: createAction('[Config] update chart option', props()),
1353
- updateMaxAttributesInTiles: createAction('[Config] update max attributes in tiles', props())
1396
+ updateMaxAttributesInTiles: createAction('[Config] update max attributes in tiles', props()),
1397
+ loadVersions: createAction('[about] Load Versions'),
1398
+ loadVersionsSuccess: createAction('[about] (bus) Load Versions Success', props()),
1399
+ loadVersionsFailure: createAction('[about] Load Versions Failure', props())
1354
1400
  };
1355
1401
 
1356
1402
  var VegaType;
@@ -1488,7 +1534,8 @@ const initialConfigState = {
1488
1534
  defaultViewUsed: false,
1489
1535
  catalog: [],
1490
1536
  chartOption: ChartOptionDefault,
1491
- maxAttributesInTiles: 5
1537
+ maxAttributesInTiles: 5,
1538
+ versions: null
1492
1539
  };
1493
1540
  const configReducer = createReducer(initialConfigState, on(ConfigActions.defineUrls, (state, action) => ({
1494
1541
  ...state,
@@ -1586,27 +1633,14 @@ const configReducer = createReducer(initialConfigState, on(ConfigActions.defineU
1586
1633
  })), on(ConfigActions.updateMaxAttributesInTiles, (state, action) => ({
1587
1634
  ...state,
1588
1635
  maxAttributesInTiles: action.max
1636
+ })), on(ConfigActions.loadVersionsSuccess, (state, { versions }) => ({
1637
+ ...state,
1638
+ versions: versions
1639
+ })), on(ConfigActions.loadVersionsFailure, (state) => ({
1640
+ ...state,
1641
+ versions: null
1589
1642
  })));
1590
1643
 
1591
- const DEFAULT_ICON_URL = '/assets/svgs/default.svg';
1592
- const DEFAULT_RESTITUTION_ICON_URL = '/assets/svgs/default-restitution.svg';
1593
- var IconPosition;
1594
- (function (IconPosition) {
1595
- IconPosition["FULL"] = "FULL";
1596
- IconPosition["TOP_LEFT"] = "TOP_LEFT";
1597
- IconPosition["TOP_RIGHT"] = "TOP_RIGHT";
1598
- IconPosition["BOTTOM_LEFT"] = "BOTTOM_LEFT";
1599
- IconPosition["BOTTOM_RIGHT"] = "BOTTOM_RIGHT";
1600
- })(IconPosition || (IconPosition = {}));
1601
- const compareOperationFunctions = {
1602
- EQUALS: (a, b) => a === b,
1603
- GREATER: (a, b) => parseInt(a, 10) > parseInt(b, 10),
1604
- GREATER_OR_EQUAL: (a, b) => parseInt(a, 10) >= parseInt(b, 10),
1605
- LOWER: (a, b) => parseInt(a, 10) < parseInt(b, 10),
1606
- LOWER_OR_EQUAL: (a, b) => parseInt(a, 10) <= parseInt(b, 10),
1607
- CONTAINS: (a, b) => (a + '').localeCompare(b + '') === 0
1608
- };
1609
-
1610
1644
  const feature$7 = createFeatureSelector(configFeatureKey);
1611
1645
  const pryUrl = createSelector(feature$7, (state) => state?.pryUrl);
1612
1646
  const wsUrl = createSelector(feature$7, (state) => state?.wsUrl);
@@ -1640,10 +1674,10 @@ const addDefaultRuleIfNotPresent = (defs) => {
1640
1674
  }
1641
1675
  return newDefs;
1642
1676
  };
1643
- const iconDefinitions = createSelector(feature$7, (config) => (({
1677
+ const iconDefinitions = createSelector(feature$7, (config) => ({
1644
1678
  default: [{ iconUrl: DEFAULT_ICON_URL, iconSize: [25, 25] }],
1645
1679
  ...addDefaultRuleIfNotPresent(config.iconDefinitions)
1646
- }) ?? {}));
1680
+ } ?? {}));
1647
1681
  const tooltipDefinitions = createSelector(feature$7, (config) => config.tooltipDefinitions);
1648
1682
  const filterDefinitions = createSelector(feature$7, (config) => config.filterDefinitions);
1649
1683
  const tableDefaultAttributesDefinitions = createSelector(feature$7, (state) => state?.tableDefaultDefinitions);
@@ -1657,6 +1691,7 @@ const defaultViewGuardUsed = createSelector(feature$7, (config) => config.defaul
1657
1691
  const catalog = createSelector(feature$7, (config) => config.catalog);
1658
1692
  const chartOption = createSelector(feature$7, (config) => config.chartOption);
1659
1693
  const maxAttributesInTiles = createSelector(feature$7, (config) => config.maxAttributesInTiles);
1694
+ const selectVersions = createSelector(feature$7, (state) => state.versions);
1660
1695
  const ConfigSelectors = {
1661
1696
  feature: feature$7,
1662
1697
  pryUrl,
@@ -1683,7 +1718,8 @@ const ConfigSelectors = {
1683
1718
  catalog,
1684
1719
  chartOption,
1685
1720
  maxAttributesInTiles,
1686
- execUrl
1721
+ execUrl,
1722
+ selectVersions
1687
1723
  };
1688
1724
 
1689
1725
  const showAnimation = animation([style({ transform: '{{transform}}', opacity: 0 }), animate('{{transition}}')]);
@@ -3601,6 +3637,40 @@ class ConfigService {
3601
3637
  return of([]);
3602
3638
  }));
3603
3639
  }
3640
+ getAllVersions() {
3641
+ return combineLatest([
3642
+ this.store.select(ConfigSelectors.refUrl),
3643
+ this.store.select(ConfigSelectors.dataUrl),
3644
+ this.store.select(ConfigSelectors.replayUrl),
3645
+ this.store.select(ConfigSelectors.execUrl),
3646
+ this.store.select(ConfigSelectors.transfoUrl),
3647
+ this.store.select(ConfigSelectors.monitorUrl)
3648
+ ]).pipe(mergeMap(([ref, data, replay, exec, transfo, monitor]) => {
3649
+ const allVersions = [
3650
+ this.httpClient.get(encodeURI(`${ref}/about/version`)),
3651
+ this.httpClient.get(encodeURI(`${data}/about/version`)),
3652
+ this.httpClient.get(encodeURI(`${replay}/about/version`)),
3653
+ this.httpClient.get(encodeURI(`${exec}/about/version`)),
3654
+ this.httpClient.get(encodeURI(`${transfo}/about/version`)),
3655
+ this.httpClient.get(encodeURI(`${monitor}/about/version`)),
3656
+ this.httpClient
3657
+ .get(encodeURI(`/assets/pry.version`))
3658
+ .pipe(map((version) => ({ libVersion: version })))
3659
+ ];
3660
+ return forkJoin(allVersions).pipe(map(([refVersion, dataVersion, replayVersion, execVersion, tranfoVersion, monitorVersion, frontend]) => {
3661
+ const versions = {
3662
+ ref: refVersion,
3663
+ data: dataVersion,
3664
+ replay: replayVersion,
3665
+ exec: execVersion,
3666
+ transfo: tranfoVersion,
3667
+ monitor: monitorVersion,
3668
+ front: frontend
3669
+ };
3670
+ return versions;
3671
+ }));
3672
+ }));
3673
+ }
3604
3674
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: ConfigService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3605
3675
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: ConfigService }); }
3606
3676
  }
@@ -3734,6 +3804,9 @@ class ConfigEffects {
3734
3804
  };
3735
3805
  return ConfigActions.loadedChartOption({ chartOption });
3736
3806
  })));
3807
+ this.loadVersions$ = createEffect(() => this.actions$.pipe(ofType(ConfigActions.loadVersions), mergeMap$1((action) => this.configService.getAllVersions().pipe(map$1((versionsData) => {
3808
+ return ConfigActions.loadVersionsSuccess({ versions: versionsData });
3809
+ }), catchError$1((error) => [ConfigActions.loadVersionsFailure({ error: error })])))));
3737
3810
  }
3738
3811
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: ConfigEffects, deps: [{ token: i1$3.Actions }, { token: OpenMapTilesService }, { token: i1.Store }, { token: ConfigService }, { token: PrySnackbarService }, { token: PryI18nService }, { token: PryDialogService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3739
3812
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: ConfigEffects }); }
@@ -6854,7 +6927,8 @@ class BaseWidgetComponent extends SubscriptionnerDirective {
6854
6927
  }), distinctUntilChanged$1((p, c) => p.width === c.width && p.height === c.height), debounceTime(100), distinctUntilChanged$1((p, c) => p.width === c.width && p.height === c.height));
6855
6928
  }
6856
6929
  ngAfterViewChecked() {
6857
- this._widgetSize$.next({ width: this.el.nativeElement.offsetWidth, height: this.el.nativeElement.offsetHeight });
6930
+ const boundingRect = this.el.nativeElement.getBoundingClientRect();
6931
+ this._widgetSize$.next({ width: boundingRect.width, height: boundingRect.height });
6858
6932
  }
6859
6933
  toImage() {
6860
6934
  return Promise.reject('Not yet implemented');
@@ -8336,21 +8410,6 @@ const defaultMenuStructure = [
8336
8410
  { icon: 'donut_large', label: '@pry.toolbox.arcchart', type: 'arcchart' }
8337
8411
  ]
8338
8412
  },
8339
- {
8340
- icon: 'show_chart',
8341
- label: '@pry.toolbox.sub.chart',
8342
- opened: false,
8343
- sub: [
8344
- { icon: 'bar_chart', label: '@pry.toolbox.barchart', type: 'barchartLegacy' },
8345
- { icon: 'bar_chart', label: '@pry.toolbox.histogram', type: 'histogramLegacy' },
8346
- { icon: 'show_chart', label: '@pry.toolbox.linechart', type: 'linechartLegacy' },
8347
- { icon: 'auto_graph', label: '@pry.toolbox.pointchart', type: 'pointchartLegacy' },
8348
- { icon: 'area_chart', label: '@pry.toolbox.areachart', type: 'areachartLegacy' },
8349
- { icon: 'donut_large', label: '@pry.toolbox.arcchart', type: 'arcchartLegacy' },
8350
- { icon: 'radar_chart', label: '@pry.toolbox.radarchart', type: 'radarchartLegacy' },
8351
- { icon: 'bubble-chart-line', label: '@pry.toolbox.circlechart', type: 'circlechartLegacy' }
8352
- ]
8353
- },
8354
8413
  {
8355
8414
  icon: 'toc',
8356
8415
  label: '@pry.toolbox.sub.other',
@@ -8641,6 +8700,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
8641
8700
  args: [{ providedIn: 'root' }]
8642
8701
  }], ctorParameters: function () { return [{ type: PrySnackbarService }, { type: PryI18nService }]; } });
8643
8702
 
8703
+ class PryAboutComponent {
8704
+ constructor(store) {
8705
+ this.store = store;
8706
+ this.store.dispatch(ConfigActions.loadVersions());
8707
+ this.version$ = this.store.select(ConfigSelectors.selectVersions);
8708
+ }
8709
+ displayVersion(value) {
8710
+ const backVersion = value;
8711
+ if (backVersion.chartVersion) {
8712
+ return `${backVersion.chartVersion}[${backVersion.applicationVersion}]`;
8713
+ }
8714
+ const frontVersion = value;
8715
+ return frontVersion.libVersion;
8716
+ }
8717
+ 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 }); }
8718
+ 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" }] }); }
8719
+ }
8720
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAboutComponent, decorators: [{
8721
+ type: Component,
8722
+ 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" }]
8723
+ }], ctorParameters: function () { return [{ type: i1.Store }]; } });
8724
+
8725
+ const PRY_ABOUT_COMPONENTS = [PryAboutComponent];
8726
+ class PryAboutModule {
8727
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAboutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8728
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.6", ngImport: i0, type: PryAboutModule, declarations: [PryAboutComponent], imports: [CommonModule, PryIconModule, PryI18nModule], exports: [PryAboutComponent] }); }
8729
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAboutModule, imports: [CommonModule, PryIconModule, PryI18nModule] }); }
8730
+ }
8731
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAboutModule, decorators: [{
8732
+ type: NgModule,
8733
+ args: [{
8734
+ imports: [CommonModule, PryIconModule, PryI18nModule],
8735
+ declarations: [...PRY_ABOUT_COMPONENTS],
8736
+ exports: [...PRY_ABOUT_COMPONENTS]
8737
+ }]
8738
+ }] });
8739
+
8644
8740
  class BusService {
8645
8741
  constructor(store, zone) {
8646
8742
  this.store = store;
@@ -8764,6 +8860,7 @@ class ManifestsComponent {
8764
8860
  const reader = new FileReader();
8765
8861
  reader.onload = (evt) => {
8766
8862
  this.store.dispatch(DashboardActions.saveManifest({
8863
+ id: v4(),
8767
8864
  name: file.name.replace('.json', ''),
8768
8865
  manifest: JSON.parse(evt.target?.result?.toString() ?? '{}')
8769
8866
  }));
@@ -9742,7 +9839,7 @@ class ManifestService {
9742
9839
  }
9743
9840
  save(name, manifest, visibility, id, description, image, cover) {
9744
9841
  return this.store.select(ConfigSelectors.refUrl).pipe(mergeMap((url) => this.httpClient.post(encodeURI(`${url}/users/me/dashboards`), {
9745
- id: id === undefined || id.length === 0 ? v4() : id,
9842
+ id,
9746
9843
  name,
9747
9844
  description,
9748
9845
  manifest,
@@ -10282,9 +10379,17 @@ class DashboardEffects {
10282
10379
  })
10283
10380
  });
10284
10381
  })));
10285
- this.addManifestMetadata = createEffect(() => this.actions$.pipe(ofType(DashboardActions.addManifestMetadata), mergeMap$1((action) => this.manifestService
10286
- .addMetadata(action.presentationId, action.metadataId, action.value)
10287
- .pipe(map$1(() => DashboardActions.fetchManifestsList())))));
10382
+ this.addManifestMetadata = createEffect(() => this.actions$.pipe(ofType(DashboardActions.addManifestMetadata), mergeMap$1((action) => this.manifestService.addMetadata(action.presentationId, action.metadataId, action.value).pipe(map$1(() => DashboardActions.fetchManifestsList()), catchError((error) => {
10383
+ if (error.status === 404) {
10384
+ this.snackBar.open({
10385
+ type: 'error',
10386
+ message: this.translateService.instant('@pry.toolbox.manifest.saveErrorCode.SAVE_METADATA', {
10387
+ code: error.status
10388
+ })
10389
+ });
10390
+ }
10391
+ return throwError(() => error);
10392
+ })))));
10288
10393
  this.deleteManifestMetadata = createEffect(() => this.actions$.pipe(ofType(DashboardActions.deleteManifestMetadata), mergeMap$1((action) => this.manifestService
10289
10394
  .deleteMetadata(action.presentationId, action.metadataId)
10290
10395
  .pipe(map$1(() => DashboardActions.fetchManifestsList())))));
@@ -10584,6 +10689,12 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
10584
10689
  manifests: {
10585
10690
  ...state.manifests,
10586
10691
  list: action.manifests
10692
+ },
10693
+ presentation: {
10694
+ ...state.presentation,
10695
+ current: state.presentation.current
10696
+ ? action.manifests.find((manifest) => manifest.id === state.presentation.current?.id)
10697
+ : undefined
10587
10698
  }
10588
10699
  })), on(DashboardActions.updateStaticManifest, (state, action) => ({
10589
10700
  ...state,
@@ -11254,5 +11365,5 @@ function filterLoader(module, prop) {
11254
11365
  * Generated bundle index. Do not edit.
11255
11366
  */
11256
11367
 
11257
- 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, 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 };
11368
+ 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 };
11258
11369
  //# sourceMappingURL=provoly-dashboard.mjs.map