@provoly/dashboard 0.23.1 → 0.23.3

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 (37) hide show
  1. package/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.d.ts +10 -2
  2. package/admin/i18n/en.translations.d.ts +5 -0
  3. package/admin/i18n/fr.translations.d.ts +4 -0
  4. package/admin/store/admin.effects.d.ts +7 -1
  5. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +26 -10
  6. package/esm2022/admin/i18n/en.translations.mjs +7 -2
  7. package/esm2022/admin/i18n/fr.translations.mjs +7 -3
  8. package/esm2022/admin/store/admin.effects.mjs +17 -5
  9. package/esm2022/lib/core/components/share/share.model.mjs +1 -1
  10. package/esm2022/lib/core/i18n/en.translations.mjs +7 -2
  11. package/esm2022/lib/core/i18n/fr.translations.mjs +7 -2
  12. package/esm2022/lib/core/store/data-source/data-source.actions.mjs +2 -1
  13. package/esm2022/lib/core/store/data-source/data-source.effects.mjs +2 -8
  14. package/esm2022/lib/core/store/data-source/data-source.reducer.mjs +4 -1
  15. package/esm2022/lib/core/store/data-source/data-source.selectors.mjs +3 -1
  16. package/esm2022/lib/core/store/data-source/data-source.service.mjs +1 -1
  17. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +32 -9
  18. package/esm2022/lib/dashboard/store/manifest.service.mjs +14 -12
  19. package/fesm2022/provoly-dashboard-admin.mjs +49 -13
  20. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  21. package/fesm2022/provoly-dashboard.mjs +62 -28
  22. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  23. package/lib/core/components/share/share.model.d.ts +6 -0
  24. package/lib/core/i18n/en.translations.d.ts +5 -0
  25. package/lib/core/i18n/fr.translations.d.ts +5 -0
  26. package/lib/core/store/data-source/data-source.actions.d.ts +8 -3
  27. package/lib/core/store/data-source/data-source.effects.d.ts +3 -8
  28. package/lib/core/store/data-source/data-source.reducer.d.ts +2 -0
  29. package/lib/core/store/data-source/data-source.selectors.d.ts +1 -0
  30. package/lib/core/store/data-source/data-source.service.d.ts +2 -1
  31. package/lib/dashboard/store/dashboard.effects.d.ts +2 -1
  32. package/lib/dashboard/store/manifest.service.d.ts +2 -1
  33. package/package.json +36 -36
  34. package/styles/components/_o-widget.scss +1 -0
  35. package/styles-theme/components-theme/_a-btn.theme.scss +1 -1
  36. package/styles-theme/components-theme/_a-checkbox.theme.scss +5 -0
  37. package/styles-theme/components-theme/_a-form-field.theme.scss +5 -0
@@ -475,7 +475,12 @@ const enTranslations$1 = {
475
475
  public: 'Public',
476
476
  restricted: 'Restricted',
477
477
  type: 'Visibility',
478
- users: 'Authorized users'
478
+ users: 'Authorized users',
479
+ conflict: {
480
+ title: 'Warning',
481
+ main: 'The following data sources are not accessible to the selected user groups:',
482
+ unavailable: 'inaccessible aux groupes : '
483
+ }
479
484
  },
480
485
  homepage: {
481
486
  menu: {
@@ -866,7 +871,12 @@ const frTranslations$1 = {
866
871
  public: 'Public',
867
872
  restricted: 'Restreint',
868
873
  type: 'Visibilité',
869
- users: 'Utilisateurs autorisés'
874
+ users: 'Utilisateurs autorisés',
875
+ conflict: {
876
+ title: 'Warning',
877
+ main: 'Attention, les sources de données suivantes ne seront pas visible de toutes les personnes accédant à la présentation : ',
878
+ unavailable: 'inaccessible aux groupes : '
879
+ }
870
880
  },
871
881
  homepage: {
872
882
  menu: {
@@ -2339,6 +2349,7 @@ const DataSourceActions = {
2339
2349
  create: createAction('[Dataset] create Dataset', props()),
2340
2350
  created: createAction('[Dataset] Datadef is created call to admin', props()),
2341
2351
  update: createAction('[Dataset] update Dataset', props()),
2352
+ setMissingGroups: createAction('[Dataset] set missing groups', props()),
2342
2353
  updated: createAction('[Dataset] Dataset is updated call to admin', props()),
2343
2354
  delete: createAction('[Dataset] delete Dataset', props()),
2344
2355
  deleted: createAction('[Dataset] Dataset is deleted call to admin', props()),
@@ -2408,6 +2419,9 @@ const dataSourceReducer = createReducer(initialDataSourceState, on(DataSourceAct
2408
2419
  ...state,
2409
2420
  datasets: action.datasets,
2410
2421
  isLoading: false
2422
+ })), on(DataSourceActions.dataset.setMissingGroups, (state, { missingGroups }) => ({
2423
+ ...state,
2424
+ missingGroups
2411
2425
  })), on(DataSourceActions.dataset.unselectDataset, (state) => ({
2412
2426
  ...state,
2413
2427
  selectedDataset: null
@@ -2547,6 +2561,7 @@ const getDataSourcesSorted = createSelector(getAllNamedQuery, datasets, (nqs, ds
2547
2561
  const selectedDatasetId = createSelector(selectFeature, (state) => state?.selectedDataset?.id);
2548
2562
  const selectedDataset = createSelector(selectFeature, (state) => state?.selectedDataset);
2549
2563
  const selectedDatasetMetadata = createSelector(selectFeature, (state) => state?.selectedDataset?.metadata ?? []);
2564
+ const selectedDatasetMissingGroups = createSelector(selectFeature, (state) => state?.missingGroups);
2550
2565
  const datasetVersions = createSelector(selectFeature, (state) => state?.datasetVersions ?? []);
2551
2566
  const memoizeDatasetVersions = {};
2552
2567
  const matchingDatasetVersions = (datasetId) => {
@@ -2575,6 +2590,7 @@ const DataSourceSelectors = {
2575
2590
  getDataSourcesSorted,
2576
2591
  selectedDataset,
2577
2592
  selectedDatasetMetadata,
2593
+ selectedDatasetMissingGroups,
2578
2594
  datasetVersions,
2579
2595
  selectedDatasetId,
2580
2596
  matchingDatasetVersions,
@@ -4391,13 +4407,7 @@ class DataSourceEffects {
4391
4407
  DataSourceActions.dataset.unselectDataset(),
4392
4408
  DataSourceActions.dataset.created({ path: props.route })
4393
4409
  ]))), catchError((error) => [DataSourceActions.dataset.failure({ error })])));
4394
- this.updateDataset$ = createEffect(() => this.actions$.pipe(ofType(DataSourceActions.dataset.update), switchMap((props) => this.dataSourceService
4395
- .updateDataset(props.dataset)
4396
- .pipe(mergeMap(() => [
4397
- DataSourceActions.dataset.loadDataset(),
4398
- DataSourceActions.dataset.unselectDataset(),
4399
- DataSourceActions.dataset.updated({ path: props.route })
4400
- ]))), catchError((error) => [DataSourceActions.dataset.failure({ error })])));
4410
+ this.unsetMissingGroupsOnDatasetSelection$ = createEffect(() => this.actions$.pipe(ofType(DataSourceActions.dataset.selectDataset), map(() => DataSourceActions.dataset.setMissingGroups({ missingGroups: undefined }))));
4401
4411
  this.deleteDataset$ = createEffect(() => this.actions$.pipe(ofType(DataSourceActions.dataset.delete), switchMap((action) => this.dataSourceService.deleteDataset(action.name).pipe(mergeMap(() => [
4402
4412
  DataSourceActions.dataset.loadDataset(),
4403
4413
  DataSourceActions.dataset.unselectDataset(),
@@ -10582,17 +10592,19 @@ class ManifestService {
10582
10592
  .pipe(mergeMap((url) => this.httpClient.get(encodeURI(`${url}/users/me/dashboards/id/${id}/manifest`))));
10583
10593
  }
10584
10594
  save(name, manifest, id, description, image, cover, metadata, groups) {
10585
- return this.store.select(ConfigSelectors.refUrl).pipe(mergeMap((url) => this.httpClient.post(encodeURI(`${url}/users/me/dashboards`), {
10586
- id,
10587
- name,
10588
- description,
10589
- manifest,
10590
- image,
10591
- cover,
10592
- metadata,
10593
- datasource: ManifestUtils.getDatasourcesUsedByManifest(manifest).map((ds) => ds.datasetId),
10594
- groups
10595
- })));
10595
+ return this.store.select(ConfigSelectors.refUrl).pipe(mergeMap((url) => {
10596
+ return this.httpClient.post(encodeURI(`${url}/users/me/dashboards`), {
10597
+ id,
10598
+ name,
10599
+ description,
10600
+ manifest,
10601
+ image,
10602
+ cover,
10603
+ metadata,
10604
+ datasource: ManifestUtils.getDatasourcesUsedByManifest(manifest).map((ds) => ds.datasetId),
10605
+ groups
10606
+ });
10607
+ }));
10596
10608
  }
10597
10609
  delete(id) {
10598
10610
  return this.store
@@ -10756,7 +10768,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
10756
10768
  }], ctorParameters: () => [{ type: i1$2.HttpClient }] });
10757
10769
 
10758
10770
  class DashboardEffects {
10759
- constructor(dashboardInitService, actions$, store, manifestService, itemService, titleService, translateService, snackBar, router, refreshService, toolboxManifestService, busService, searchService, pryDialog, wmsService, widgetFactoryService) {
10771
+ constructor(dashboardInitService, actions$, store, manifestService, itemService, titleService, translateService, snackBar, router, refreshService, toolboxManifestService, busService, searchService, pryDialog, wmsService, widgetFactoryService, i18nService) {
10760
10772
  this.dashboardInitService = dashboardInitService;
10761
10773
  this.actions$ = actions$;
10762
10774
  this.store = store;
@@ -10773,6 +10785,7 @@ class DashboardEffects {
10773
10785
  this.pryDialog = pryDialog;
10774
10786
  this.wmsService = wmsService;
10775
10787
  this.widgetFactoryService = widgetFactoryService;
10788
+ this.i18nService = i18nService;
10776
10789
  this.join$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.join), withLatestFrom(this.store.select(DashboardSelectors.rank), this.store.select(DashboardSelectors.tenants), this.store.select(DashboardSelectors.globalManifest), this.store.select(DashboardSelectors.resultSets), this.store.select(DashboardSelectors.selectedItemIds), this.store.select(DashboardSelectors.presentation), this.store.select(DashboardSelectors.displayOptions)), filter$1(([action, rank, tenants, manifest, resultSets, display]) => rank === 0), map$1(([action, rank, tenants, manifest, resultSets, selectedIds, presentation, display]) => DashboardActions.updateManifestAfterTenantJoin({
10777
10790
  tenants, // we already have added tenant in the reduce of the "join" action
10778
10791
  manifest: {
@@ -10897,12 +10910,33 @@ class DashboardEffects {
10897
10910
  }
10898
10911
  });
10899
10912
  })), { dispatch: false });
10900
- this.saveManifest$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.saveManifest), withLatestFrom(this.store.select(DashboardSelectors.globalManifest)), mergeMap$1(([action, currentManifest]) => this.manifestService
10913
+ this.saveManifest$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.saveManifest), withLatestFrom(this.store.select(DashboardSelectors.globalManifest)), withLatestFrom(this.store.select(DataSourceSelectors.datasets)), mergeMap$1(([[action, currentManifest], datasets]) => this.manifestService
10901
10914
  .save(action.name, action.manifest ?? currentManifest, action.id, action.description, action.image, action.cover, action.metadata, action.groups)
10902
- .pipe(tap(() => this.snackBar.open({
10903
- message: this.translateService.instant('@pry.toolbox.manifest.saved', { viewId: action.name }),
10904
- type: 'success'
10905
- })), map$1(() => action.manifest ?? currentManifest), catchError((error) => {
10915
+ .pipe(tap((response) => {
10916
+ this.snackBar.open({
10917
+ message: this.translateService.instant('@pry.toolbox.manifest.saved', { viewId: action.name }),
10918
+ type: 'success'
10919
+ });
10920
+ if (response && 'missingGroupsByEntity' in response) {
10921
+ const data = {
10922
+ title: '@pry.share.conflict.title',
10923
+ message: this.i18nService.instant('@pry.share.conflict.main') +
10924
+ '\r\n' +
10925
+ Object.keys(response.missingGroupsByEntity)
10926
+ .map((entity) => (datasets.find((ds) => ds.id === entity)?.name ?? entity) +
10927
+ ' : ' +
10928
+ response.missingGroupsByEntity[entity].join(', '))
10929
+ .join('\r\n'),
10930
+ actions: [
10931
+ {
10932
+ id: 0,
10933
+ label: '@pry.toolbox.close'
10934
+ }
10935
+ ]
10936
+ };
10937
+ this.pryDialog.open(PryDialogConfirmComponent, { data });
10938
+ }
10939
+ }), map$1(() => action.manifest ?? currentManifest), catchError((error) => {
10906
10940
  this.snackBar.open({
10907
10941
  message: this.translateService.instant('@pry.toolbox.manifest.saveErrorCode.' + (error.error?.code ?? 'UNKNOWN'), {
10908
10942
  name: action.name
@@ -11115,12 +11149,12 @@ class DashboardEffects {
11115
11149
  dashboardInitService.init();
11116
11150
  refreshService.start();
11117
11151
  }
11118
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DashboardEffects, deps: [{ token: DashboardInitService }, { token: i1$3.Actions }, { token: i1.Store }, { token: ManifestService }, { token: ItemService }, { token: PryTitleService }, { token: PryI18nService }, { token: PrySnackbarService }, { token: i3.Router }, { token: RefreshService }, { token: ToolboxManifestService }, { token: BusService }, { token: SearchService }, { token: PryDialogService }, { token: WmsService }, { token: WidgetFactoryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
11152
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DashboardEffects, deps: [{ token: DashboardInitService }, { token: i1$3.Actions }, { token: i1.Store }, { token: ManifestService }, { token: ItemService }, { token: PryTitleService }, { token: PryI18nService }, { token: PrySnackbarService }, { token: i3.Router }, { token: RefreshService }, { token: ToolboxManifestService }, { token: BusService }, { token: SearchService }, { token: PryDialogService }, { token: WmsService }, { token: WidgetFactoryService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
11119
11153
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DashboardEffects }); }
11120
11154
  }
11121
11155
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DashboardEffects, decorators: [{
11122
11156
  type: Injectable
11123
- }], ctorParameters: () => [{ type: DashboardInitService }, { type: i1$3.Actions }, { type: i1.Store }, { type: ManifestService }, { type: ItemService }, { type: PryTitleService }, { type: PryI18nService }, { type: PrySnackbarService }, { type: i3.Router }, { type: RefreshService }, { type: ToolboxManifestService }, { type: BusService }, { type: SearchService }, { type: PryDialogService }, { type: WmsService }, { type: WidgetFactoryService }] });
11157
+ }], ctorParameters: () => [{ type: DashboardInitService }, { type: i1$3.Actions }, { type: i1.Store }, { type: ManifestService }, { type: ItemService }, { type: PryTitleService }, { type: PryI18nService }, { type: PrySnackbarService }, { type: i3.Router }, { type: RefreshService }, { type: ToolboxManifestService }, { type: BusService }, { type: SearchService }, { type: PryDialogService }, { type: WmsService }, { type: WidgetFactoryService }, { type: PryI18nService }] });
11124
11158
 
11125
11159
  const dashboardFeatureKey = '@pry/dashboard';
11126
11160
  const dashboardInitialState = {