@provoly/dashboard 1.1.2 → 1.1.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.
- package/dataset/components/dataset-detail/dataset-detail.component.d.ts +1 -0
- package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +4 -3
- package/esm2022/lib/core/components/share/access-rights-share/access-rights-share.component.mjs +127 -0
- package/esm2022/lib/core/components/share/group-share/group-share.component.mjs +1 -1
- package/esm2022/lib/core/components/share/legacy-share/share.component.mjs +83 -0
- package/esm2022/lib/core/components/share/share.module.mjs +9 -7
- package/esm2022/lib/core/components/share/share.utils.mjs +46 -1
- package/esm2022/lib/core/i18n/en.translations.mjs +15 -7
- package/esm2022/lib/core/i18n/fr.translations.mjs +16 -7
- package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
- package/esm2022/lib/core/public-api.mjs +3 -2
- package/esm2022/lib/dashboard/store/dashboard.actions.mjs +1 -1
- package/esm2022/lib/dashboard/store/dashboard.effects.mjs +2 -2
- package/esm2022/lib/dashboard/store/manifest.service.mjs +3 -3
- package/esm2022/presentation/components/presentation.component.mjs +13 -25
- package/esm2022/toolbox/components/save-view/save-view.component.mjs +8 -8
- package/esm2022/toolbox/components/share/share.component.mjs +9 -15
- package/fesm2022/provoly-dashboard-dataset.mjs +3 -2
- package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +12 -24
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-toolbox.mjs +15 -21
- package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +195 -21
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/lib/core/components/share/access-rights-share/access-rights-share.component.d.ts +47 -0
- package/lib/core/components/share/{share.component.d.ts → legacy-share/share.component.d.ts} +1 -1
- package/lib/core/components/share/share.module.d.ts +10 -8
- package/lib/core/components/share/share.utils.d.ts +18 -0
- package/lib/core/i18n/en.translations.d.ts +12 -4
- package/lib/core/i18n/fr.translations.d.ts +13 -4
- package/lib/core/model/manifest.interface.d.ts +3 -1
- package/lib/core/public-api.d.ts +2 -1
- package/lib/dashboard/store/dashboard.actions.d.ts +6 -2
- package/lib/dashboard/store/manifest.service.d.ts +3 -1
- package/package.json +1 -1
- package/presentation/components/presentation.component.d.ts +7 -7
- package/styles/components/_o-access-rights-share.scss +73 -0
- package/styles/components/_o-pry-admin-classes-customize.scss +4 -4
- package/styles/main.scss +1 -0
- package/toolbox/components/save-view/save-view.component.d.ts +6 -2
- package/toolbox/components/share/share.component.d.ts +6 -4
- package/esm2022/lib/core/components/share/share.component.mjs +0 -83
|
@@ -346,6 +346,7 @@ const enTranslations$1 = {
|
|
|
346
346
|
switchEdit: 'Edit',
|
|
347
347
|
switchEditContent: 'Edit composition',
|
|
348
348
|
share: 'Share',
|
|
349
|
+
shareAccessRights: 'Share access rights',
|
|
349
350
|
delete: 'Delete',
|
|
350
351
|
notInDsAttr: 'Unavailable attribute'
|
|
351
352
|
},
|
|
@@ -483,11 +484,22 @@ const enTranslations$1 = {
|
|
|
483
484
|
type: 'Visibility',
|
|
484
485
|
users: 'Authorized users',
|
|
485
486
|
noGroups: 'No group available',
|
|
487
|
+
groups: {
|
|
488
|
+
ALL: 'Public',
|
|
489
|
+
AUTHENTICATED: 'Connected users'
|
|
490
|
+
},
|
|
486
491
|
conflict: {
|
|
487
492
|
title: 'Warning',
|
|
488
493
|
main: 'The following data sources are not accessible to the selected user groups:',
|
|
489
494
|
unavailable: 'inaccessible aux groupes : '
|
|
490
|
-
}
|
|
495
|
+
},
|
|
496
|
+
dashboardAccess: 'Share access to this dashboard to selected user groups',
|
|
497
|
+
placeholder: 'Chose one or more groups',
|
|
498
|
+
read: 'Can read',
|
|
499
|
+
write: 'Can modify',
|
|
500
|
+
accessDescription: '"Can read" allows read acess "Can modify" allows read and write access',
|
|
501
|
+
me: 'Me',
|
|
502
|
+
owner: 'Owner'
|
|
491
503
|
},
|
|
492
504
|
homepage: {
|
|
493
505
|
menu: {
|
|
@@ -513,11 +525,7 @@ const enTranslations$1 = {
|
|
|
513
525
|
selection: 'Selected user groups:',
|
|
514
526
|
selectItem: 'Select this user group',
|
|
515
527
|
unselectItem: 'Unselect this user group',
|
|
516
|
-
noItemSelected: 'No user group selected'
|
|
517
|
-
groups: {
|
|
518
|
-
ALL: 'Public',
|
|
519
|
-
AUTHENTICATED: 'Connected users'
|
|
520
|
-
}
|
|
528
|
+
noItemSelected: 'No user group selected'
|
|
521
529
|
}
|
|
522
530
|
}
|
|
523
531
|
},
|
|
@@ -746,6 +754,7 @@ const frTranslations$1 = {
|
|
|
746
754
|
switchEdit: 'Modifier',
|
|
747
755
|
switchEditContent: 'Modifier la composition',
|
|
748
756
|
share: 'Partager',
|
|
757
|
+
shareAccessRights: "Droits d'accès",
|
|
749
758
|
delete: 'Supprimer',
|
|
750
759
|
notInDsAttr: 'Attribut indisponible'
|
|
751
760
|
},
|
|
@@ -802,6 +811,7 @@ const frTranslations$1 = {
|
|
|
802
811
|
}
|
|
803
812
|
},
|
|
804
813
|
action: {
|
|
814
|
+
add: 'Ajouter',
|
|
805
815
|
close: 'Fermer',
|
|
806
816
|
closePanel: 'Fermer le panneau',
|
|
807
817
|
delete: 'Supprimer',
|
|
@@ -883,12 +893,23 @@ const frTranslations$1 = {
|
|
|
883
893
|
restricted: 'Restreint',
|
|
884
894
|
type: 'Visibilité',
|
|
885
895
|
users: 'Utilisateurs autorisés',
|
|
896
|
+
groups: {
|
|
897
|
+
ALL: 'Public',
|
|
898
|
+
AUTHENTICATED: 'Les utilisateurs connectés'
|
|
899
|
+
},
|
|
886
900
|
noGroups: 'Aucun groupe disponible',
|
|
887
901
|
conflict: {
|
|
888
902
|
title: 'Warning',
|
|
889
903
|
main: 'Attention, les sources de données suivantes ne seront pas visible de toutes les personnes accédant à la présentation : ',
|
|
890
904
|
unavailable: 'inaccessible aux groupes : '
|
|
891
|
-
}
|
|
905
|
+
},
|
|
906
|
+
dashboardAccess: "Donner les droits d'accès de ce tableau de bord à certains groupes d’utilisateurs :",
|
|
907
|
+
placeholder: 'Choisissez le ou les groupes utilisateurs',
|
|
908
|
+
read: 'Peut voir',
|
|
909
|
+
write: 'Peut modifier',
|
|
910
|
+
accessDescription: '"Peut voir" ouvre les droits de consultation et "Peut modifier" permet de consulter et modifier',
|
|
911
|
+
me: 'Moi',
|
|
912
|
+
owner: 'Propriétaire'
|
|
892
913
|
},
|
|
893
914
|
homepage: {
|
|
894
915
|
menu: {
|
|
@@ -914,11 +935,7 @@ const frTranslations$1 = {
|
|
|
914
935
|
selection: "Groupe(s) d'utilisateurs sélectionnés:",
|
|
915
936
|
selectItem: "Sélectionner le groupe d'utilisateurs",
|
|
916
937
|
unselectItem: "Désélectionner le groupe d'utilisateurs",
|
|
917
|
-
noItemSelected: "Aucun groupe d'utilisateurs sélectionné"
|
|
918
|
-
groups: {
|
|
919
|
-
ALL: 'Public',
|
|
920
|
-
AUTHENTICATED: 'Les utilisateurs connectés'
|
|
921
|
-
}
|
|
938
|
+
noItemSelected: "Aucun groupe d'utilisateurs sélectionné"
|
|
922
939
|
}
|
|
923
940
|
}
|
|
924
941
|
},
|
|
@@ -7673,6 +7690,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
7673
7690
|
type: Output
|
|
7674
7691
|
}] } });
|
|
7675
7692
|
|
|
7693
|
+
const READ_ACCESS = 'READ';
|
|
7694
|
+
const WRITE_ACCESS = 'WRITE';
|
|
7695
|
+
// GROUP UTIL METHODS
|
|
7696
|
+
const getGroupLabel = (group, i18n) => {
|
|
7697
|
+
return group.system ? i18n.instant('@pry.share.groups.' + group.name) : group.name;
|
|
7698
|
+
};
|
|
7699
|
+
const getGroupLabelByName = (groupName, i18n) => {
|
|
7700
|
+
return i18n.instant('@pry.share.groups.' + groupName).startsWith('@')
|
|
7701
|
+
? groupName
|
|
7702
|
+
: i18n.instant('@pry.share.groups.' + groupName);
|
|
7703
|
+
};
|
|
7704
|
+
// DASHBOARD GROUP RIGHTS METHODS
|
|
7676
7705
|
const canManifestBeMadePublic = (manifest, datasets) => {
|
|
7677
7706
|
return manifest.datasource.every((dsId) => {
|
|
7678
7707
|
const datasource = datasets.find((d) => d.id === dsId);
|
|
@@ -7697,6 +7726,151 @@ const getCommonDatasourceGroupsForManifest = (manifest, datasets) => {
|
|
|
7697
7726
|
}
|
|
7698
7727
|
return result;
|
|
7699
7728
|
};
|
|
7729
|
+
// ACCESS RIGHTS METHODS
|
|
7730
|
+
const getAccessRightsArrayByGroup = (accessByGroup) => {
|
|
7731
|
+
let result = {};
|
|
7732
|
+
Object.keys(accessByGroup).forEach((key) => {
|
|
7733
|
+
result[key] = getAccessArray(accessByGroup[key]);
|
|
7734
|
+
});
|
|
7735
|
+
return result;
|
|
7736
|
+
};
|
|
7737
|
+
const getAccessArray = (access) => {
|
|
7738
|
+
switch (access) {
|
|
7739
|
+
case READ_ACCESS:
|
|
7740
|
+
return ['READ'];
|
|
7741
|
+
case WRITE_ACCESS:
|
|
7742
|
+
return ['WRITE', 'READ'];
|
|
7743
|
+
default:
|
|
7744
|
+
return [];
|
|
7745
|
+
}
|
|
7746
|
+
};
|
|
7747
|
+
const getAccessRightsStringByGroup = (accessByGroup) => {
|
|
7748
|
+
let result = {};
|
|
7749
|
+
Object.keys(accessByGroup).forEach((key) => {
|
|
7750
|
+
result[key] = getAccessString(accessByGroup[key]);
|
|
7751
|
+
});
|
|
7752
|
+
return result;
|
|
7753
|
+
};
|
|
7754
|
+
const getAccessString = (accessArray) => {
|
|
7755
|
+
if (accessArray.includes('WRITE')) {
|
|
7756
|
+
return WRITE_ACCESS;
|
|
7757
|
+
}
|
|
7758
|
+
else {
|
|
7759
|
+
return READ_ACCESS;
|
|
7760
|
+
}
|
|
7761
|
+
};
|
|
7762
|
+
|
|
7763
|
+
class PryAccessRightsShareComponent extends SubscriptionnerDirective {
|
|
7764
|
+
set allowedGroups(value) {
|
|
7765
|
+
if (value)
|
|
7766
|
+
this._allowedGroups$.next(value);
|
|
7767
|
+
}
|
|
7768
|
+
constructor(store, i18n) {
|
|
7769
|
+
super();
|
|
7770
|
+
this.store = store;
|
|
7771
|
+
this.i18n = i18n;
|
|
7772
|
+
this.value = {};
|
|
7773
|
+
this._onChange = (value) => { };
|
|
7774
|
+
this._onTouched = () => { };
|
|
7775
|
+
this._allowedGroups$ = new BehaviorSubject(undefined);
|
|
7776
|
+
this.accessRights = [];
|
|
7777
|
+
this.selectedGroups = [];
|
|
7778
|
+
this.selectedAccessRight = READ_ACCESS;
|
|
7779
|
+
this.assignedGroups$ = new BehaviorSubject([]);
|
|
7780
|
+
this.getGroupLabel = getGroupLabel;
|
|
7781
|
+
this.getGroupLabelByName = getGroupLabelByName;
|
|
7782
|
+
this.store.dispatch(ConfigActions.loadAccessGroups());
|
|
7783
|
+
this.groups$ = combineLatest([
|
|
7784
|
+
this.store.select(ConfigSelectors.accessGroups),
|
|
7785
|
+
this._allowedGroups$,
|
|
7786
|
+
this.assignedGroups$
|
|
7787
|
+
]).pipe(map(([groups, allowedGroups, alreadyAssigned]) => groups
|
|
7788
|
+
.filter((group) => (allowedGroups ? allowedGroups.includes(group.name) : true))
|
|
7789
|
+
.filter((group) => !alreadyAssigned.includes(group.name))
|
|
7790
|
+
.map((group) => ({
|
|
7791
|
+
...group,
|
|
7792
|
+
label: getGroupLabel(group, this.i18n)
|
|
7793
|
+
}))));
|
|
7794
|
+
this.accessRights = [
|
|
7795
|
+
{ label: this.i18n.instant('@pry.share.read'), value: READ_ACCESS },
|
|
7796
|
+
{ label: this.i18n.instant('@pry.share.write'), value: WRITE_ACCESS }
|
|
7797
|
+
];
|
|
7798
|
+
}
|
|
7799
|
+
writeValue(value) {
|
|
7800
|
+
if (value)
|
|
7801
|
+
this.value = getAccessRightsStringByGroup(value) ?? {};
|
|
7802
|
+
this.emitAlreadyAssignedGroups();
|
|
7803
|
+
this._onTouched();
|
|
7804
|
+
}
|
|
7805
|
+
registerOnChange(fn) {
|
|
7806
|
+
this._onChange = fn;
|
|
7807
|
+
}
|
|
7808
|
+
registerOnTouched(fn) {
|
|
7809
|
+
this._onTouched = fn;
|
|
7810
|
+
}
|
|
7811
|
+
onChange() {
|
|
7812
|
+
this._onChange(getAccessRightsArrayByGroup(this.value));
|
|
7813
|
+
this._onTouched();
|
|
7814
|
+
}
|
|
7815
|
+
addAccess() {
|
|
7816
|
+
if (this.selectedGroups) {
|
|
7817
|
+
this.selectedGroups.forEach((group) => {
|
|
7818
|
+
this.value = {
|
|
7819
|
+
...this.value,
|
|
7820
|
+
[group.name]: this.selectedAccessRight
|
|
7821
|
+
};
|
|
7822
|
+
});
|
|
7823
|
+
this.emitAlreadyAssignedGroups();
|
|
7824
|
+
this.onChange();
|
|
7825
|
+
}
|
|
7826
|
+
this.resetSelection();
|
|
7827
|
+
}
|
|
7828
|
+
modifyGroupAccess(group, access) {
|
|
7829
|
+
this.value = {
|
|
7830
|
+
...this.value,
|
|
7831
|
+
[group]: access
|
|
7832
|
+
};
|
|
7833
|
+
this._onChange(getAccessRightsArrayByGroup(this.value));
|
|
7834
|
+
}
|
|
7835
|
+
removeGroupAccess(group) {
|
|
7836
|
+
delete this.value[group];
|
|
7837
|
+
this._onChange(getAccessRightsArrayByGroup(this.value));
|
|
7838
|
+
this.emitAlreadyAssignedGroups();
|
|
7839
|
+
}
|
|
7840
|
+
resetSelection() {
|
|
7841
|
+
this.selectedAccessRight = 'READ';
|
|
7842
|
+
this.selectedGroups = undefined;
|
|
7843
|
+
}
|
|
7844
|
+
isAddingDisabled() {
|
|
7845
|
+
return this.selectedGroups?.length === 0;
|
|
7846
|
+
}
|
|
7847
|
+
emitAlreadyAssignedGroups() {
|
|
7848
|
+
this.assignedGroups$.next(Object.keys(this.value));
|
|
7849
|
+
}
|
|
7850
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryAccessRightsShareComponent, deps: [{ token: i1.Store }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
7851
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryAccessRightsShareComponent, selector: "pry-access-rights-share", inputs: { manifestDescription: "manifestDescription", allowedGroups: "allowedGroups" }, providers: [
|
|
7852
|
+
{
|
|
7853
|
+
provide: NG_VALUE_ACCESSOR,
|
|
7854
|
+
useExisting: forwardRef(() => PryAccessRightsShareComponent),
|
|
7855
|
+
multi: true
|
|
7856
|
+
}
|
|
7857
|
+
], usesInheritance: true, ngImport: i0, template: "<div class=\"o-access-rights-share\">\n <label for=\"share-group-select\" class=\"a-h4\">{{ '@pry.share.dashboardAccess' | i18n }}</label>\n <form class=\"u-display-flex\">\n <fieldset class=\"m-grouped-select u-display-flex\" name=\"add-access-rights\">\n <pry-select\n id=\"share-group-select\"\n class=\"o-access-rights-share__group-select\"\n name=\"share-group-select\"\n [(ngModel)]=\"selectedGroups\"\n [items]=\"groups$ | async\"\n bindLabel=\"label\"\n placeholder=\"{{ '@pry.share.placeholder' | i18n }}\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n ></pry-select>\n <pry-select\n id=\"share-access-rights-select\"\n class=\"o-access-rights-share__access-rights-select\"\n name=\"share-access-rights-select\"\n [(ngModel)]=\"selectedAccessRight\"\n [items]=\"accessRights\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n </fieldset>\n <button role=\"button\" class=\"a-btn a-btn--primary\" (click)=\"addAccess()\" [disabled]=\"isAddingDisabled()\">\n {{ '@pry.action.add' | i18n }}\n </button>\n </form>\n <label for=\"share-access-rights-select\" class=\"a-label\">{{ '@pry.share.accessDescription' | i18n }}</label>\n <div class=\"o-access-rights-share__groups\">\n @if (manifestDescription?.owner) {\n <div class=\"o-access-rights-share__group u-display-flex -justify-space-between -align-center\">\n <span class=\"o-access-rights-share__group-name a-h4\">{{ '@pry.share.me' | i18n }}</span>\n <span class=\"o-access-rights-share__owner\">{{ '@pry.share.owner' | i18n }}</span>\n </div>\n }\n @for (group of value | keyvalue; track group.key) {\n <div class=\"o-access-rights-share__group u-display-flex -justify-space-between\">\n <label class=\"o-access-rights-share__group-name a-h4\" for=\"modify-{{ group.key }}-access-rights-select\">{{\n getGroupLabelByName(group.key, i18n)\n }}</label>\n <div class=\"u-display-flex -align-center\">\n <pry-select\n id=\"modify-{{ group.key }}-access-rights-select\"\n class=\"o-access-rights-share__modify-access-rights\"\n name=\"modify-group-access-rights-select\"\n [(ngModel)]=\"group.value\"\n (ngModelChange)=\"modifyGroupAccess(group.key, group.value)\"\n [items]=\"accessRights\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n <button\n role=\"button\"\n class=\"a-btn a-btn--icon-only a-tooltip\"\n [attr.data-tooltip]=\"'@pry.action.delete' | i18n\"\n (click)=\"removeGroupAccess(group.key)\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"15\" [width]=\"15\"></pry-icon>\n </button>\n </div>\n </div>\n }\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
7858
|
+
}
|
|
7859
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryAccessRightsShareComponent, decorators: [{
|
|
7860
|
+
type: Component,
|
|
7861
|
+
args: [{ selector: 'pry-access-rights-share', providers: [
|
|
7862
|
+
{
|
|
7863
|
+
provide: NG_VALUE_ACCESSOR,
|
|
7864
|
+
useExisting: forwardRef(() => PryAccessRightsShareComponent),
|
|
7865
|
+
multi: true
|
|
7866
|
+
}
|
|
7867
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"o-access-rights-share\">\n <label for=\"share-group-select\" class=\"a-h4\">{{ '@pry.share.dashboardAccess' | i18n }}</label>\n <form class=\"u-display-flex\">\n <fieldset class=\"m-grouped-select u-display-flex\" name=\"add-access-rights\">\n <pry-select\n id=\"share-group-select\"\n class=\"o-access-rights-share__group-select\"\n name=\"share-group-select\"\n [(ngModel)]=\"selectedGroups\"\n [items]=\"groups$ | async\"\n bindLabel=\"label\"\n placeholder=\"{{ '@pry.share.placeholder' | i18n }}\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n ></pry-select>\n <pry-select\n id=\"share-access-rights-select\"\n class=\"o-access-rights-share__access-rights-select\"\n name=\"share-access-rights-select\"\n [(ngModel)]=\"selectedAccessRight\"\n [items]=\"accessRights\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n </fieldset>\n <button role=\"button\" class=\"a-btn a-btn--primary\" (click)=\"addAccess()\" [disabled]=\"isAddingDisabled()\">\n {{ '@pry.action.add' | i18n }}\n </button>\n </form>\n <label for=\"share-access-rights-select\" class=\"a-label\">{{ '@pry.share.accessDescription' | i18n }}</label>\n <div class=\"o-access-rights-share__groups\">\n @if (manifestDescription?.owner) {\n <div class=\"o-access-rights-share__group u-display-flex -justify-space-between -align-center\">\n <span class=\"o-access-rights-share__group-name a-h4\">{{ '@pry.share.me' | i18n }}</span>\n <span class=\"o-access-rights-share__owner\">{{ '@pry.share.owner' | i18n }}</span>\n </div>\n }\n @for (group of value | keyvalue; track group.key) {\n <div class=\"o-access-rights-share__group u-display-flex -justify-space-between\">\n <label class=\"o-access-rights-share__group-name a-h4\" for=\"modify-{{ group.key }}-access-rights-select\">{{\n getGroupLabelByName(group.key, i18n)\n }}</label>\n <div class=\"u-display-flex -align-center\">\n <pry-select\n id=\"modify-{{ group.key }}-access-rights-select\"\n class=\"o-access-rights-share__modify-access-rights\"\n name=\"modify-group-access-rights-select\"\n [(ngModel)]=\"group.value\"\n (ngModelChange)=\"modifyGroupAccess(group.key, group.value)\"\n [items]=\"accessRights\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n <button\n role=\"button\"\n class=\"a-btn a-btn--icon-only a-tooltip\"\n [attr.data-tooltip]=\"'@pry.action.delete' | i18n\"\n (click)=\"removeGroupAccess(group.key)\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"15\" [width]=\"15\"></pry-icon>\n </button>\n </div>\n </div>\n }\n </div>\n</div>\n" }]
|
|
7868
|
+
}], ctorParameters: () => [{ type: i1.Store }, { type: PryI18nService }], propDecorators: { manifestDescription: [{
|
|
7869
|
+
type: Input,
|
|
7870
|
+
args: [{ required: true }]
|
|
7871
|
+
}], allowedGroups: [{
|
|
7872
|
+
type: Input
|
|
7873
|
+
}] } });
|
|
7700
7874
|
|
|
7701
7875
|
const MIME_TYPE_RESULTSET = 'application/resultset';
|
|
7702
7876
|
|
|
@@ -10870,7 +11044,7 @@ class ManifestService {
|
|
|
10870
11044
|
.select(ConfigSelectors.refUrl)
|
|
10871
11045
|
.pipe(mergeMap((url) => this.httpClient.get(encodeURI(`${url}/users/me/dashboards/id/${id}/manifest`))));
|
|
10872
11046
|
}
|
|
10873
|
-
save(name, manifest, id, description, image, metadata,
|
|
11047
|
+
save(name, manifest, id, description, image, metadata, accesRightsByGroup, additionalInformation) {
|
|
10874
11048
|
return this.store.select(ConfigSelectors.refUrl).pipe(mergeMap((url) => {
|
|
10875
11049
|
return this.httpClient.post(encodeURI(`${url}/users/me/dashboards`), {
|
|
10876
11050
|
id,
|
|
@@ -10881,7 +11055,7 @@ class ManifestService {
|
|
|
10881
11055
|
cover: true,
|
|
10882
11056
|
metadata,
|
|
10883
11057
|
datasource: ManifestUtils.getDatasourcesUsedByManifest(manifest).map((ds) => ds.datasetId),
|
|
10884
|
-
|
|
11058
|
+
accesRightsByGroup,
|
|
10885
11059
|
additionalInformation
|
|
10886
11060
|
});
|
|
10887
11061
|
}));
|
|
@@ -11219,7 +11393,7 @@ class DashboardEffects {
|
|
|
11219
11393
|
});
|
|
11220
11394
|
})), { dispatch: false });
|
|
11221
11395
|
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
|
|
11222
|
-
.save(action.name, action.manifest ?? currentManifest, action.id, action.description, action.image, action.metadata, action.
|
|
11396
|
+
.save(action.name, action.manifest ?? currentManifest, action.id, action.description, action.image, action.metadata, action.accessRightsByGroup, action.additionalInformation)
|
|
11223
11397
|
.pipe(tap((response) => {
|
|
11224
11398
|
this.snackBar.open({
|
|
11225
11399
|
message: this.translateService.instant('@pry.toolbox.manifest.saved', { viewId: action.name }),
|
|
@@ -12465,15 +12639,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
12465
12639
|
|
|
12466
12640
|
class PryShareModule {
|
|
12467
12641
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryShareModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
12468
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: PryShareModule, declarations: [PryShareComponent, PryGroupShareComponent], imports: [CommonModule, FormsModule, PrySelectModule, PryI18nModule, PryCoreModule, PryDashboardModule], exports: [PryShareComponent, PryGroupShareComponent] }); }
|
|
12469
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryShareModule, imports: [CommonModule, FormsModule, PrySelectModule, PryI18nModule, PryCoreModule, PryDashboardModule] }); }
|
|
12642
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: PryShareModule, declarations: [PryShareComponent, PryGroupShareComponent, PryAccessRightsShareComponent], imports: [CommonModule, FormsModule, PrySelectModule, PryI18nModule, PryCoreModule, PryDashboardModule, PryIconModule], exports: [PryShareComponent, PryGroupShareComponent, PryAccessRightsShareComponent] }); }
|
|
12643
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryShareModule, imports: [CommonModule, FormsModule, PrySelectModule, PryI18nModule, PryCoreModule, PryDashboardModule, PryIconModule] }); }
|
|
12470
12644
|
}
|
|
12471
12645
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryShareModule, decorators: [{
|
|
12472
12646
|
type: NgModule,
|
|
12473
12647
|
args: [{
|
|
12474
|
-
imports: [CommonModule, FormsModule, PrySelectModule, PryI18nModule, PryCoreModule, PryDashboardModule],
|
|
12475
|
-
declarations: [PryShareComponent, PryGroupShareComponent],
|
|
12476
|
-
exports: [PryShareComponent, PryGroupShareComponent]
|
|
12648
|
+
imports: [CommonModule, FormsModule, PrySelectModule, PryI18nModule, PryCoreModule, PryDashboardModule, PryIconModule],
|
|
12649
|
+
declarations: [PryShareComponent, PryGroupShareComponent, PryAccessRightsShareComponent],
|
|
12650
|
+
exports: [PryShareComponent, PryGroupShareComponent, PryAccessRightsShareComponent]
|
|
12477
12651
|
}]
|
|
12478
12652
|
}] });
|
|
12479
12653
|
|
|
@@ -12885,5 +13059,5 @@ function filterLoader(module, prop) {
|
|
|
12885
13059
|
* Generated bundle index. Do not edit.
|
|
12886
13060
|
*/
|
|
12887
13061
|
|
|
12888
|
-
export { AccordionComponent, AccordionItemComponent, Aggregation, BASE_DISPLAY_OPTIONS, BaseFilterComponent, BaseFilterModule, BaseLayoutComponent, BaseMenuComponent, BaseToolboxComponent, BaseTooltipComponent, BaseTooltipModule, BaseWidgetComponent, BaseWidgetModule, BusService, CategoryActions, CategorySelectors, CategoryService, ChartOptionDefault, ChipsSelectorComponent, ClassActions, ClassSelectors, ClassService, ConfigActions, ConfigSelectors, ConfigService, ContextMenuActions, ContextMenuComponent, ContextMenuSelectors, DEFAULT_CATEGORY_UUID, DEFAULT_COLUMNS_NUMBER, DEFAULT_DASHBOARD_ICON_URL, 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, DEFAULT_SEARCH_LIMIT_NUMBER, DELAY_FOR_HIDE, DashboardActions, DashboardComponent, DashboardGridLayout, DashboardSelectors, DataSourceActions, DataSourceSelectors, DataSourceService, DataWidgetComponent, DatasourceSelectorComponent, DatasourceUtils, DateRangeHighlightPipe, DateUtils, DefaultTooltipComponent, ENV_OPTIONS, EXPLORE_NAMED_QUERY_ID, EllipsisDirective, FIELD_OPTIONS, FIELD_UUID, FILTERS_DOMAIN, FILTER_DEFINITION, FieldActions, FieldSelectors, FieldService, FieldType, FilterFactoryService, FilterGroupComponent, 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, NumericFieldTypes, OPERATOR_OPTIONS, Operation, PRY_ACCESS_GUARD, PRY_ACCESS_TOKEN, PRY_CUSTOMEVENT_TYPE, PRY_DIALOG_DATA, PRY_GEOAUTH_TOKEN, PryAboutComponent, PryAboutModule, PryAccessDirective, PryAccessUtils, PryAggregationService, PryBackendAggregationService, PryBaseAccess, PryBaseAccessGuard, PryCoreModule, PryDashboardModule, PryDatasetType, PryDatePickerComponent, PryDatePickerModule, PryDefaultAccessGuard, PryDefaultAccessService, PryDefaultGeoAuthService, PryDialogConfirmComponent, PryDialogRef, PryDialogService, PryEditInputComponent, PryEditInputModule, PryFilterGroupCssComponent, PryFrontendAggregationService, PryGeoAuthService, PryGroupShareComponent, 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, 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, TextFieldTypes, 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, canManifestBeMadePublic, classReducer, classesFeatureKey, compareOperationFunctions, contextMenuFeatureKey, contextMenuReducer, createPlacedWidgetCopy, dashboardFeatureKey, dashboardInitialState, dashboardReducer, dataSourceFeatureKey, dataSourceReducer, deepMerge, defaultColors, defaultMenuStructure, enTranslations$1 as enTranslations, filterLoader, frTranslations$1 as frTranslations, getCommonDatasourceGroupsForManifest, getDisplayOptions, httpErrorOptions, imageFeatureKey, imageReducer, initialClassState, initialContextMenuState, initialDataSourceState, initialImageState, initialSearchState, latLonToGeographicFieldTransformation, markTypesDefault, notificationFeatureKey, orderWidgetsAccordingToPlacement, searchFeatureKey, searchReducer, selectAll$2 as selectAll, selectEntities$2 as selectEntities, solveCollisions, solvingCollisionOptions, sortByName$2 as sortByName, subTypesDefault, tooltipLoader, vegaColorSchemesDefault, widgetLoader, widgetMapConfig };
|
|
13062
|
+
export { AccordionComponent, AccordionItemComponent, Aggregation, BASE_DISPLAY_OPTIONS, BaseFilterComponent, BaseFilterModule, BaseLayoutComponent, BaseMenuComponent, BaseToolboxComponent, BaseTooltipComponent, BaseTooltipModule, BaseWidgetComponent, BaseWidgetModule, BusService, CategoryActions, CategorySelectors, CategoryService, ChartOptionDefault, ChipsSelectorComponent, ClassActions, ClassSelectors, ClassService, ConfigActions, ConfigSelectors, ConfigService, ContextMenuActions, ContextMenuComponent, ContextMenuSelectors, DEFAULT_CATEGORY_UUID, DEFAULT_COLUMNS_NUMBER, DEFAULT_DASHBOARD_ICON_URL, 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, DEFAULT_SEARCH_LIMIT_NUMBER, DELAY_FOR_HIDE, DashboardActions, DashboardComponent, DashboardGridLayout, DashboardSelectors, DataSourceActions, DataSourceSelectors, DataSourceService, DataWidgetComponent, DatasourceSelectorComponent, DatasourceUtils, DateRangeHighlightPipe, DateUtils, DefaultTooltipComponent, ENV_OPTIONS, EXPLORE_NAMED_QUERY_ID, EllipsisDirective, FIELD_OPTIONS, FIELD_UUID, FILTERS_DOMAIN, FILTER_DEFINITION, FieldActions, FieldSelectors, FieldService, FieldType, FilterFactoryService, FilterGroupComponent, 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, NumericFieldTypes, OPERATOR_OPTIONS, Operation, PRY_ACCESS_GUARD, PRY_ACCESS_TOKEN, PRY_CUSTOMEVENT_TYPE, PRY_DIALOG_DATA, PRY_GEOAUTH_TOKEN, PryAboutComponent, PryAboutModule, PryAccessDirective, PryAccessRightsShareComponent, PryAccessUtils, PryAggregationService, PryBackendAggregationService, PryBaseAccess, PryBaseAccessGuard, PryCoreModule, PryDashboardModule, PryDatasetType, PryDatePickerComponent, PryDatePickerModule, PryDefaultAccessGuard, PryDefaultAccessService, PryDefaultGeoAuthService, PryDialogConfirmComponent, PryDialogRef, PryDialogService, PryEditInputComponent, PryEditInputModule, PryFilterGroupCssComponent, PryFrontendAggregationService, PryGeoAuthService, PryGroupShareComponent, 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, PryUploadComponent, PryVisibilityType, PryWidgetHeaderComponent, READ_ACCESS, 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, TextFieldTypes, ToolboxManifestService, ToolboxMenuService, TooltipFactoryService, TooltipMode, TranslateIdPipe, TranslateItemToSymbolPipe, UNKNOWN_DATASOURCE, USE_CURRENT_RESULTSET, VARIABLE_TYPE, VegaColorType, VegaType, ViewMode, VizualizeRawComponent, WIDGET_DEFINITION, WIDGET_HEADER_HEIGHT, WRITE_ACCESS, WebsocketService, WidgetFactoryService, WidgetInstanciatorComponent, WidgetPlaceholderComponent, WidgetPlacementUtils, WmsService, adapter$2 as adapter, aggregationDefault, baseItemProperties, canManifestBeMadePublic, classReducer, classesFeatureKey, compareOperationFunctions, contextMenuFeatureKey, contextMenuReducer, createPlacedWidgetCopy, dashboardFeatureKey, dashboardInitialState, dashboardReducer, dataSourceFeatureKey, dataSourceReducer, deepMerge, defaultColors, defaultMenuStructure, enTranslations$1 as enTranslations, filterLoader, frTranslations$1 as frTranslations, getAccessArray, getAccessRightsArrayByGroup, getAccessRightsStringByGroup, getAccessString, getCommonDatasourceGroupsForManifest, getDisplayOptions, getGroupLabel, getGroupLabelByName, httpErrorOptions, imageFeatureKey, imageReducer, initialClassState, initialContextMenuState, initialDataSourceState, initialImageState, initialSearchState, latLonToGeographicFieldTransformation, markTypesDefault, notificationFeatureKey, orderWidgetsAccordingToPlacement, searchFeatureKey, searchReducer, selectAll$2 as selectAll, selectEntities$2 as selectEntities, solveCollisions, solvingCollisionOptions, sortByName$2 as sortByName, subTypesDefault, tooltipLoader, vegaColorSchemesDefault, widgetLoader, widgetMapConfig };
|
|
12889
13063
|
//# sourceMappingURL=provoly-dashboard.mjs.map
|