@provoly/dashboard 0.13.9 → 0.13.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 (106) hide show
  1. package/admin/admin.module.d.ts +2 -1
  2. package/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.d.ts +5 -13
  3. package/admin/components/admin-metadata-rules/admin-edit-metadata-rules/admin-edit-metadata-rules.component.d.ts +1 -1
  4. package/admin/components/admin-metadata-rules/shared/admin-form-metadata-rules/admin-form-metadata-rules.component.d.ts +1 -1
  5. package/admin/components/admin-user/admin-user-select/admin-user-select.component.d.ts +4 -9
  6. package/admin/components/association/association.component.d.ts +1 -3
  7. package/admin/store/admin.effects.d.ts +19 -15
  8. package/admin/store/admin.service.d.ts +0 -3
  9. package/components/metadata-editor/index.d.ts +5 -0
  10. package/components/metadata-editor/metadata-editor.component.d.ts +36 -0
  11. package/components/metadata-editor/metadata-editor.module.d.ts +12 -0
  12. package/components/metadata-editor/public-api.d.ts +7 -0
  13. package/components/metadata-editor/store/metadata.action.d.ts +112 -0
  14. package/components/metadata-editor/store/metadata.effects.d.ts +48 -0
  15. package/{admin/components/admin-metadata → components/metadata-editor}/store/metadata.reducer.d.ts +2 -1
  16. package/{admin/components/admin-metadata → components/metadata-editor}/store/metadata.selector.d.ts +1 -0
  17. package/components/metadata-editor/store/metadata.service.d.ts +15 -0
  18. package/dataset/i18n/en.translations.d.ts +1 -0
  19. package/dataset/i18n/fr.translations.d.ts +1 -0
  20. package/dataset/style/_o-pry-dataset-card.scss +7 -0
  21. package/esm2022/admin/admin.module.mjs +9 -17
  22. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-edit/admin-abac-rules-edit.component.mjs +2 -2
  23. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-new/admin-abac-rules-new.component.mjs +2 -2
  24. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-view/admin-abac-rules-view.component.mjs +2 -2
  25. package/esm2022/admin/components/admin-abac-rules/components/metadata-condition/metadata-condition.component.mjs +2 -2
  26. package/esm2022/admin/components/admin-abac-rules/components/select-metadata/select-metadata.component.mjs +2 -2
  27. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +21 -77
  28. package/esm2022/admin/components/admin-metadata/admin-edit-metadata/admin-edit-metadata.component.mjs +2 -3
  29. package/esm2022/admin/components/admin-metadata/admin-metadata.component.mjs +2 -3
  30. package/esm2022/admin/components/admin-metadata/admin-new-metadata/admin-new-metadata.component.mjs +2 -2
  31. package/esm2022/admin/components/admin-metadata/admin-select-metadata/admin-select-metadata.component.mjs +2 -3
  32. package/esm2022/admin/components/admin-metadata/shared/form-metadata/form-metadata.component.mjs +2 -2
  33. package/esm2022/admin/components/admin-metadata-rules/admin-edit-metadata-rules/admin-edit-metadata-rules.component.mjs +1 -1
  34. package/esm2022/admin/components/admin-metadata-rules/shared/admin-form-metadata-rules/admin-form-metadata-rules.component.mjs +2 -3
  35. package/esm2022/admin/components/admin-user/admin-user-select/admin-user-select.component.mjs +17 -65
  36. package/esm2022/admin/components/association/association.component.mjs +1 -4
  37. package/esm2022/admin/store/admin.effects.mjs +6 -2
  38. package/esm2022/admin/store/admin.service.mjs +1 -16
  39. package/esm2022/components/metadata-editor/metadata-editor.component.mjs +111 -0
  40. package/esm2022/components/metadata-editor/metadata-editor.module.mjs +47 -0
  41. package/esm2022/components/metadata-editor/provoly-dashboard-components-metadata-editor.mjs +5 -0
  42. package/esm2022/components/metadata-editor/public-api.mjs +8 -0
  43. package/esm2022/components/metadata-editor/store/metadata.action.mjs +27 -0
  44. package/esm2022/components/metadata-editor/store/metadata.effects.mjs +44 -0
  45. package/esm2022/components/metadata-editor/store/metadata.reducer.mjs +39 -0
  46. package/esm2022/components/metadata-editor/store/metadata.selector.mjs +19 -0
  47. package/esm2022/components/metadata-editor/store/metadata.service.mjs +36 -0
  48. package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +3 -3
  49. package/esm2022/dataset/i18n/en.translations.mjs +3 -2
  50. package/esm2022/dataset/i18n/fr.translations.mjs +3 -2
  51. package/esm2022/dataset/style/css.component.mjs +2 -2
  52. package/esm2022/import/components/import.component.mjs +8 -4
  53. package/esm2022/lib/core/components/modal-status/modal-status.component.mjs +3 -12
  54. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -1
  55. package/esm2022/lib/dashboard/store/manifest.service.mjs +2 -2
  56. package/esm2022/toolbox/components/save-view/save-view.component.mjs +3 -3
  57. package/esm2022/toolbox/components/toolbox-action-instanciator/toolbox-action-instanciator.component.mjs +31 -17
  58. package/esm2022/toolbox/components/toolbox.component.mjs +20 -14
  59. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +45 -13
  60. package/esm2022/widgets/widget-map/i18n/en.translations.mjs +3 -1
  61. package/esm2022/widgets/widget-map/i18n/fr.translations.mjs +3 -1
  62. package/esm2022/widgets/widget-map/pipe/widget-map-legend-url.pipe.mjs +2 -2
  63. package/esm2022/widgets/widget-map/public-api.mjs +3 -1
  64. package/esm2022/widgets/widget-map/utils/cql-utils.class.mjs +56 -0
  65. package/esm2022/widgets/widget-map/utils/xml-utils.class.mjs +32 -0
  66. package/fesm2022/provoly-dashboard-admin.mjs +107 -370
  67. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  68. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs +302 -0
  69. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs.map +1 -0
  70. package/fesm2022/provoly-dashboard-dataset.mjs +8 -6
  71. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  72. package/fesm2022/provoly-dashboard-import.mjs +7 -3
  73. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  74. package/fesm2022/provoly-dashboard-toolbox.mjs +49 -29
  75. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  76. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +104 -13
  77. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  78. package/fesm2022/provoly-dashboard.mjs +6 -13
  79. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  80. package/import/components/import.component.d.ts +5 -3
  81. package/lib/core/components/modal-status/modal-status.component.d.ts +0 -8
  82. package/lib/core/model/widget-map-manifest.interface.d.ts +2 -0
  83. package/package.json +19 -13
  84. package/toolbox/components/toolbox-action-instanciator/toolbox-action-instanciator.component.d.ts +7 -5
  85. package/toolbox/components/toolbox.component.d.ts +10 -5
  86. package/widgets/widget-map/component/widget-map.component.d.ts +4 -1
  87. package/widgets/widget-map/i18n/en.translations.d.ts +2 -0
  88. package/widgets/widget-map/i18n/fr.translations.d.ts +2 -0
  89. package/widgets/widget-map/public-api.d.ts +2 -0
  90. package/widgets/widget-map/utils/cql-utils.class.d.ts +6 -0
  91. package/admin/components/admin-dataset/store/admin-dataset.actions.d.ts +0 -59
  92. package/admin/components/admin-dataset/store/admin-dataset.effects.d.ts +0 -30
  93. package/admin/components/admin-dataset/store/admin-dataset.reducer.d.ts +0 -6
  94. package/admin/components/admin-dataset/store/admin-dataset.selector.d.ts +0 -5
  95. package/admin/components/admin-metadata/store/metadata.action.d.ts +0 -56
  96. package/admin/components/admin-metadata/store/metadata.effects.d.ts +0 -36
  97. package/esm2022/admin/components/admin-dataset/store/admin-dataset.actions.mjs +0 -14
  98. package/esm2022/admin/components/admin-dataset/store/admin-dataset.effects.mjs +0 -36
  99. package/esm2022/admin/components/admin-dataset/store/admin-dataset.reducer.mjs +0 -11
  100. package/esm2022/admin/components/admin-dataset/store/admin-dataset.selector.mjs +0 -9
  101. package/esm2022/admin/components/admin-metadata/store/metadata.action.mjs +0 -19
  102. package/esm2022/admin/components/admin-metadata/store/metadata.effects.mjs +0 -33
  103. package/esm2022/admin/components/admin-metadata/store/metadata.reducer.mjs +0 -35
  104. package/esm2022/admin/components/admin-metadata/store/metadata.selector.mjs +0 -17
  105. package/esm2022/widgets/widget-map/pipe/xml-utils.class.mjs +0 -32
  106. /package/widgets/widget-map/{pipe → utils}/xml-utils.class.d.ts +0 -0
@@ -0,0 +1,302 @@
1
+ import * as i3 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { EventEmitter, Component, Input, Output, Injectable, NgModule } from '@angular/core';
5
+ import * as i2 from '@angular/forms';
6
+ import { Validators, ReactiveFormsModule } from '@angular/forms';
7
+ import * as i1$2 from '@ngrx/effects';
8
+ import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
9
+ import * as i1 from '@ngrx/store';
10
+ import { createAction, props, createReducer, on, createFeatureSelector, createSelector, StoreModule } from '@ngrx/store';
11
+ import * as i4 from '@provoly/dashboard';
12
+ import { SubscriptionnerDirective, ConfigSelectors, DataSourceActions, PryCoreModule, PryI18nModule, PrySelectModule, PryIconModule } from '@provoly/dashboard';
13
+ import { BehaviorSubject, combineLatest, map, mergeMap } from 'rxjs';
14
+ import { mergeMap as mergeMap$1, map as map$1, catchError } from 'rxjs/operators';
15
+ import * as i1$1 from '@angular/common/http';
16
+
17
+ const MetadataActions = {
18
+ loadMetadata: createAction(`[Metadata] Load Metadata`),
19
+ loadMetadataSuccess: createAction(`[Metadata] Load Metadata Success`, props()),
20
+ loadMetadataFailure: createAction(`[Metadata] Load Metadata Failure`, props()),
21
+ unselectMetadata: createAction(`[Metadata] unSelect Metadata`),
22
+ goToNewMetadata: createAction(`[Metadata] go to new metadata`, props()),
23
+ goToNewMetadataSuccess: createAction(`[Metadata] go to new metadata success`),
24
+ goToNewMetadataFailure: createAction(`[Metadata] go to new metadata failure`, props()),
25
+ createMetadata: createAction(`[Metadata] create metadata`, props()),
26
+ createMetadataSuccess: createAction(`[Metadata] create metadata Success`, props()),
27
+ createMetadataFailure: createAction(`[Metadata] create metadata Failure`, props()),
28
+ goToDetailsView: createAction(`[Metadata] go to details view`, props()),
29
+ goToDetailsViewSuccess: createAction(`[Metadata] go to details view success`, props()),
30
+ goToDetailsViewFailure: createAction(`[Metadata] go to details view failure`, props()),
31
+ addDatasetMetadata: createAction(`[Metadata] Add Metadata of selected Datasets`, props()),
32
+ addDatasetMetadataSuccess: createAction(`[Metadata] Add Metadata of selected Datasets Success`, props()),
33
+ addDatasetMetadataFailure: createAction(`[Metadata] Add Metadata of selected Datasets Failure`, props()),
34
+ deleteDatasetMetadata: createAction(`[Metadata] Delete Metadata of selected Datasets`, props()),
35
+ deleteDatasetMetadataSuccess: createAction(`[Metadata] Delete Metadata of selected Datasets Success`, props()),
36
+ deleteDatasetMetadataFailure: createAction(`[Metadata] Delete Metadata of selected Datasets Failure`, props()),
37
+ isEditable: createAction(`[Metadata] Is editable`, props()),
38
+ loadDatasetMetadata: createAction(`[Metadata] Load Metadata of selected Datasets`, props()),
39
+ loadDatasetMetadataSuccess: createAction(`[Metadata] Load Metadata of selected Datasets Success`, props()),
40
+ loadDatasetMetadataFailure: createAction(`[Metadata] Load Metadata of selected Datasets Failure`, props())
41
+ };
42
+
43
+ const metadataFeatureKey = '@pry/metadata';
44
+ const initialMetadataState = {
45
+ metadata: [],
46
+ selectedMetadata: null,
47
+ loading: false,
48
+ errors: null,
49
+ editable: false
50
+ };
51
+ /**
52
+ * @TODO merge this store with admin user store ?
53
+ */
54
+ const metadataReducer = createReducer(initialMetadataState, on(MetadataActions.loadMetadataSuccess, (state, action) => ({
55
+ ...state,
56
+ metadata: [...action.metadata],
57
+ loading: false
58
+ })), on(MetadataActions.loadMetadataFailure, MetadataActions.goToNewMetadataFailure, MetadataActions.createMetadataFailure, MetadataActions.goToDetailsViewFailure, (state, action) => ({
59
+ ...state,
60
+ loading: false,
61
+ errors: action.error
62
+ })), on(MetadataActions.unselectMetadata, (state) => ({
63
+ ...state,
64
+ selectedMetadata: null
65
+ })), on(MetadataActions.loadMetadata, MetadataActions.goToNewMetadata, (state) => ({
66
+ ...state,
67
+ loading: true
68
+ })), on(MetadataActions.createMetadataSuccess, (state, action) => ({
69
+ ...state,
70
+ metadata: [...state.metadata, action.metadata],
71
+ loading: false
72
+ })), on(MetadataActions.goToDetailsView, (state, action) => ({
73
+ ...state,
74
+ selectedMetadata: action.id
75
+ })), on(MetadataActions.isEditable, (state, action) => ({
76
+ ...state,
77
+ editable: action.editable
78
+ })));
79
+
80
+ const feature = createFeatureSelector(metadataFeatureKey);
81
+ const metadata = createSelector(feature, (state) => state?.metadata);
82
+ const loading = createSelector(feature, (state) => state?.loading);
83
+ const selectedMetadata = createSelector(feature, (state) => state?.metadata.find((x) => x.id === state.selectedMetadata) || null);
84
+ const selectedMetadataId = createSelector(selectedMetadata, (metadata) => metadata?.id);
85
+ const selectMetadataById = (id) => createSelector(metadata, (metadata) => metadata?.find((m) => m.id === id));
86
+ const editable = createSelector(feature, (state) => state.editable);
87
+ const MetadataSelectors = {
88
+ feature,
89
+ loading,
90
+ metadata,
91
+ selectedMetadata,
92
+ selectedMetadataId,
93
+ selectMetadataById,
94
+ editable
95
+ };
96
+
97
+ const INTEGER_REGEXP_PATTERN = '^[+-]?[0-9]*$';
98
+ const DOUBLE_REGEXP_PATTERN = '[+-]?([0-9]*[.])?[0-9]+';
99
+ class PryMetadataEditorComponent extends SubscriptionnerDirective {
100
+ set metadata(metadata) {
101
+ // @ts-ignore
102
+ const isUserProfile = metadata.length >= 1 && metadata[0].userProfile !== undefined;
103
+ if (isUserProfile) {
104
+ this.type = 'user';
105
+ }
106
+ else {
107
+ this.type = 'meta';
108
+ }
109
+ this._metadata$.next(metadata);
110
+ }
111
+ constructor(store, formBuilder) {
112
+ super();
113
+ this.store = store;
114
+ this.formBuilder = formBuilder;
115
+ this._metadata$ = new BehaviorSubject([]);
116
+ this.isSubmitted = false;
117
+ this.targetId = '';
118
+ this.editable = false;
119
+ this.type = 'meta';
120
+ this.addMeta = new EventEmitter();
121
+ this.removeMeta = new EventEmitter();
122
+ this.form = this.formBuilder.group({
123
+ metadata: [{}, [Validators.required]],
124
+ value: ['', [Validators.required, Validators.pattern(INTEGER_REGEXP_PATTERN)]]
125
+ });
126
+ this.metadataDefs$ = this.store.select(MetadataSelectors.metadata);
127
+ this.availableMetadata$ = combineLatest([this._metadata$, this.metadataDefs$]).pipe(map(([metadata, metaDefs]) => {
128
+ let datasetMetadataIds = metadata?.map((u) => this.type === 'meta' ? u.metadataDef.id : u.userProfile);
129
+ return metaDefs.filter((meta) => !datasetMetadataIds?.includes(meta.id));
130
+ }));
131
+ this.subscriptions.add(this.availableMetadata$.subscribe((meta) => {
132
+ this.form.patchValue({
133
+ metadata: meta[0]
134
+ });
135
+ this.onMetaChange(meta[0]);
136
+ this.form.patchValue({ value: '' });
137
+ }));
138
+ }
139
+ onMetaChange(metadata) {
140
+ if (metadata) {
141
+ if (metadata.type === 'INTEGER') {
142
+ this.form.controls['value'].setValidators([Validators.required, Validators.pattern(INTEGER_REGEXP_PATTERN)]);
143
+ }
144
+ else if (metadata.type === 'DOUBLE') {
145
+ this.form.controls['value'].setValidators([Validators.required, Validators.pattern(DOUBLE_REGEXP_PATTERN)]);
146
+ }
147
+ else {
148
+ this.form.controls['value'].setValidators([Validators.required]);
149
+ }
150
+ }
151
+ }
152
+ editMetadata(currentMetadata) {
153
+ this.store.dispatch(MetadataActions.isEditable({ editable: true }));
154
+ let value = currentMetadata.value;
155
+ let datasetMetadataDef = this.metaDefinition(currentMetadata);
156
+ this.form.patchValue({
157
+ metadata: datasetMetadataDef,
158
+ value: value
159
+ });
160
+ this.onMetaChange(datasetMetadataDef);
161
+ }
162
+ metaDefinition(metadata) {
163
+ return this.type === 'user' ? metadata.userProfile : metadata.metadataDef;
164
+ }
165
+ removeMetadata(metadata) {
166
+ this.removeMeta.emit({ id: this.targetId, metadataId: this.metaDefinition(metadata).id });
167
+ }
168
+ addDatasetMetadata() {
169
+ this.isSubmitted = true;
170
+ if (this.form.valid) {
171
+ this.isSubmitted = false;
172
+ this.removeMeta.emit({
173
+ id: this.targetId,
174
+ metadataId: this.form.value['metadata']['id'],
175
+ value: this.form.value['value']
176
+ });
177
+ }
178
+ }
179
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryMetadataEditorComponent, deps: [{ token: i1.Store }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
180
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryMetadataEditorComponent, selector: "pry-metadata-editor", inputs: { targetId: "targetId", editable: "editable", metadata: "metadata" }, outputs: { addMeta: "addMeta", removeMeta: "removeMeta" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-tabs__panels__item__content o-tabs__panels__item__content--profil\">\n <div *ngFor=\"let metadata of (_metadata$ | async) ?? []\">\n <div class=\"o-tabs__panels__item__content\">\n <div class=\"o-tabs__panels__item__content__actions\">\n <div class=\"o-tabs__panels__item__content__actions__text\">\n <span class=\"o-tabs__panels__item__content__actions__text__label\">{{ metaDefinition(metadata).name }} :</span>\n <span class=\"o-tabs__panels__item__content__actions__text__value\">{{ metadata.value }}</span>\n </div>\n\n <div class=\"o-tabs__panels__item__content__actions__buttons\">\n <ng-container *pryAccess=\"{ module: 'admin', page: 'dataset', action: 'write' }\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" aria-pressed=\"false\">\n <span class=\"u-visually-hidden\">{{ '@pry.action.edit' | i18n }} {{ metaDefinition(metadata).name }}</span>\n <pry-icon\n class=\"edit-icon\"\n iconSvg=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"editMetadata(metadata)\"\n ></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" aria-pressed=\"false\">\n <span class=\"u-visually-hidden\"\n >{{ '@pry.action.delete' | i18n }} {{ metaDefinition(metadata).name }}</span\n >\n <pry-icon\n class=\"delete-icon\"\n iconSvg=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"removeMetadata(metadata)\"\n ></pry-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *pryAccess=\"{ module: 'admin', page: 'dataset', action: 'write' }\">\n <ng-container *ngIf=\"form.value.metadata\">\n <form class=\"o-form -border-top\" [formGroup]=\"form\" (ngSubmit)=\"addDatasetMetadata()\">\n <fieldset>\n <legend class=\"u-visually-hidden\">{{ '@pry.action.editProfil' | i18n }}</legend>\n\n <div class=\"m-form-label-field\">\n <label for=\"metadata\" id=\"metadata-label\" class=\"a-label\">Data</label>\n <pry-select\n id=\"metadata\"\n class=\"a-pry-select\"\n formControlName=\"metadata\"\n [items]=\"availableMetadata$ | async\"\n (ngModelChange)=\"onMetaChange($event)\"\n [isForm]=\"true\"\n [itemsAsOption]=\"true\"\n bindLabel=\"name\"\n [readonly]=\"editable\"\n [attr.aria-labelledby]=\"\n isSubmitted && form.get('metadata')?.invalid ? 'metadata-label metadata-error' : 'metadata-label'\n \"\n [attr.aria-invalid]=\"isSubmitted && form.get('metadata')?.invalid\"\n >\n </pry-select>\n <label\n *ngIf=\"isSubmitted && form.get('metadata')?.invalid\"\n id=\"metadata-error\"\n for=\"metadata\"\n class=\"a-label a-label--help -error\"\n >\n {{ '@pry.admin.required' | i18n }}\n </label>\n </div>\n\n <ng-container *ngIf=\"form.value['metadata']['type'] === 'DATE'; else inputList\">\n <div class=\"m-form-label-field\">\n <label id=\"form_date-label\" for=\"form_date\" class=\"a-label\">\n {{ '@pry.action.selectDate' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"form_date\"\n type=\"date\"\n class=\"a-form-field\"\n formControlName=\"value\"\n [attr.aria-labelledby]=\"\n isSubmitted && form.get('value')?.invalid ? 'form-date-label form-date-error' : 'form-date-label'\n \"\n [attr.aria-invalid]=\"isSubmitted && form.get('value')?.invalid\"\n required\n />\n <label\n *ngIf=\"isSubmitted && form.get('value')?.invalid\"\n id=\"form_date-error\"\n for=\"form_date\"\n class=\"a-label a-label--help -error\"\n >\n {{ '@pry.admin.required' | i18n }}\n </label>\n </div>\n </ng-container>\n\n <ng-template #inputList>\n <ng-container *ngIf=\"form.value['metadata']['type'] === 'LIST'; else inputText\">\n <div class=\"m-form-label-field\">\n <label id=\"list-label\" class=\"a-label\" for=\"list\">{{ '@pry.action.choiceInList' | i18n }}</label>\n <pry-select\n id=\"list\"\n class=\"a-pry-select\"\n formControlName=\"value\"\n [items]=\"form.value['metadata']['allowedValues']\"\n [isForm]=\"true\"\n aria-labelledby=\"list-label\"\n ></pry-select>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template #inputText>\n <div class=\"m-form-label-field\">\n <label id=\"text-label\" class=\"a-label\" for=\"text\">\n {{ '@pry.action.text' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"text\"\n type=\"text\"\n class=\"a-form-field\"\n formControlName=\"value\"\n [attr.aria-labelledby]=\"\n isSubmitted && form.get('value')?.invalid ? 'text-label text-error' : 'text-label'\n \"\n [attr.aria-invalid]=\"isSubmitted && form.get('value')?.invalid\"\n required\n />\n <label\n *ngIf=\"isSubmitted && form.get('value')?.invalid\"\n id=\"test-error\"\n for=\"text\"\n class=\"a-label a-label--help -error\"\n >\n <span *ngIf=\"form.get('value')?.hasError('required')\">{{ '@pry.admin.required' | i18n }}</span>\n <ng-container *ngIf=\"form.get('value')?.hasError('pattern')\">\n <span *ngIf=\"form.value['metadata']['type'] === 'DOUBLE'\">\n {{ '@pry.admin.environment.formatDouble' | i18n }}\n </span>\n <span *ngIf=\"form.value['metadata']['type'] === 'INTEGER'\">\n {{ '@pry.admin.environment.formatInt' | i18n }}\n </span>\n </ng-container>\n </label>\n </div>\n </ng-template>\n </fieldset>\n\n <div class=\"m-btn-group -end\">\n <button type=\"submit\" class=\"a-btn a-btn--primary\">\n {{ (editable ? '@pry.admin.userInfo.editMetadata' : '@pry.admin.userInfo.addMetadata') | i18n }}\n </button>\n </div>\n </form>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
181
+ }
182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryMetadataEditorComponent, decorators: [{
183
+ type: Component,
184
+ args: [{ selector: 'pry-metadata-editor', template: "<div class=\"o-tabs__panels__item__content o-tabs__panels__item__content--profil\">\n <div *ngFor=\"let metadata of (_metadata$ | async) ?? []\">\n <div class=\"o-tabs__panels__item__content\">\n <div class=\"o-tabs__panels__item__content__actions\">\n <div class=\"o-tabs__panels__item__content__actions__text\">\n <span class=\"o-tabs__panels__item__content__actions__text__label\">{{ metaDefinition(metadata).name }} :</span>\n <span class=\"o-tabs__panels__item__content__actions__text__value\">{{ metadata.value }}</span>\n </div>\n\n <div class=\"o-tabs__panels__item__content__actions__buttons\">\n <ng-container *pryAccess=\"{ module: 'admin', page: 'dataset', action: 'write' }\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" aria-pressed=\"false\">\n <span class=\"u-visually-hidden\">{{ '@pry.action.edit' | i18n }} {{ metaDefinition(metadata).name }}</span>\n <pry-icon\n class=\"edit-icon\"\n iconSvg=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"editMetadata(metadata)\"\n ></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" aria-pressed=\"false\">\n <span class=\"u-visually-hidden\"\n >{{ '@pry.action.delete' | i18n }} {{ metaDefinition(metadata).name }}</span\n >\n <pry-icon\n class=\"delete-icon\"\n iconSvg=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"removeMetadata(metadata)\"\n ></pry-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *pryAccess=\"{ module: 'admin', page: 'dataset', action: 'write' }\">\n <ng-container *ngIf=\"form.value.metadata\">\n <form class=\"o-form -border-top\" [formGroup]=\"form\" (ngSubmit)=\"addDatasetMetadata()\">\n <fieldset>\n <legend class=\"u-visually-hidden\">{{ '@pry.action.editProfil' | i18n }}</legend>\n\n <div class=\"m-form-label-field\">\n <label for=\"metadata\" id=\"metadata-label\" class=\"a-label\">Data</label>\n <pry-select\n id=\"metadata\"\n class=\"a-pry-select\"\n formControlName=\"metadata\"\n [items]=\"availableMetadata$ | async\"\n (ngModelChange)=\"onMetaChange($event)\"\n [isForm]=\"true\"\n [itemsAsOption]=\"true\"\n bindLabel=\"name\"\n [readonly]=\"editable\"\n [attr.aria-labelledby]=\"\n isSubmitted && form.get('metadata')?.invalid ? 'metadata-label metadata-error' : 'metadata-label'\n \"\n [attr.aria-invalid]=\"isSubmitted && form.get('metadata')?.invalid\"\n >\n </pry-select>\n <label\n *ngIf=\"isSubmitted && form.get('metadata')?.invalid\"\n id=\"metadata-error\"\n for=\"metadata\"\n class=\"a-label a-label--help -error\"\n >\n {{ '@pry.admin.required' | i18n }}\n </label>\n </div>\n\n <ng-container *ngIf=\"form.value['metadata']['type'] === 'DATE'; else inputList\">\n <div class=\"m-form-label-field\">\n <label id=\"form_date-label\" for=\"form_date\" class=\"a-label\">\n {{ '@pry.action.selectDate' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"form_date\"\n type=\"date\"\n class=\"a-form-field\"\n formControlName=\"value\"\n [attr.aria-labelledby]=\"\n isSubmitted && form.get('value')?.invalid ? 'form-date-label form-date-error' : 'form-date-label'\n \"\n [attr.aria-invalid]=\"isSubmitted && form.get('value')?.invalid\"\n required\n />\n <label\n *ngIf=\"isSubmitted && form.get('value')?.invalid\"\n id=\"form_date-error\"\n for=\"form_date\"\n class=\"a-label a-label--help -error\"\n >\n {{ '@pry.admin.required' | i18n }}\n </label>\n </div>\n </ng-container>\n\n <ng-template #inputList>\n <ng-container *ngIf=\"form.value['metadata']['type'] === 'LIST'; else inputText\">\n <div class=\"m-form-label-field\">\n <label id=\"list-label\" class=\"a-label\" for=\"list\">{{ '@pry.action.choiceInList' | i18n }}</label>\n <pry-select\n id=\"list\"\n class=\"a-pry-select\"\n formControlName=\"value\"\n [items]=\"form.value['metadata']['allowedValues']\"\n [isForm]=\"true\"\n aria-labelledby=\"list-label\"\n ></pry-select>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template #inputText>\n <div class=\"m-form-label-field\">\n <label id=\"text-label\" class=\"a-label\" for=\"text\">\n {{ '@pry.action.text' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"text\"\n type=\"text\"\n class=\"a-form-field\"\n formControlName=\"value\"\n [attr.aria-labelledby]=\"\n isSubmitted && form.get('value')?.invalid ? 'text-label text-error' : 'text-label'\n \"\n [attr.aria-invalid]=\"isSubmitted && form.get('value')?.invalid\"\n required\n />\n <label\n *ngIf=\"isSubmitted && form.get('value')?.invalid\"\n id=\"test-error\"\n for=\"text\"\n class=\"a-label a-label--help -error\"\n >\n <span *ngIf=\"form.get('value')?.hasError('required')\">{{ '@pry.admin.required' | i18n }}</span>\n <ng-container *ngIf=\"form.get('value')?.hasError('pattern')\">\n <span *ngIf=\"form.value['metadata']['type'] === 'DOUBLE'\">\n {{ '@pry.admin.environment.formatDouble' | i18n }}\n </span>\n <span *ngIf=\"form.value['metadata']['type'] === 'INTEGER'\">\n {{ '@pry.admin.environment.formatInt' | i18n }}\n </span>\n </ng-container>\n </label>\n </div>\n </ng-template>\n </fieldset>\n\n <div class=\"m-btn-group -end\">\n <button type=\"submit\" class=\"a-btn a-btn--primary\">\n {{ (editable ? '@pry.admin.userInfo.editMetadata' : '@pry.admin.userInfo.addMetadata') | i18n }}\n </button>\n </div>\n </form>\n </ng-container>\n</ng-container>\n" }]
185
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.FormBuilder }]; }, propDecorators: { targetId: [{
186
+ type: Input
187
+ }], editable: [{
188
+ type: Input
189
+ }], addMeta: [{
190
+ type: Output
191
+ }], removeMeta: [{
192
+ type: Output
193
+ }], metadata: [{
194
+ type: Input
195
+ }] } });
196
+
197
+ class MetadataService {
198
+ constructor(httpClient, store) {
199
+ this.httpClient = httpClient;
200
+ this.store = store;
201
+ }
202
+ getMetadataList() {
203
+ return this.store
204
+ .select(ConfigSelectors.refUrl)
205
+ .pipe(mergeMap((url) => this.httpClient.get(`${url}/metadata`)));
206
+ }
207
+ getMetadata(id) {
208
+ return this.store
209
+ .select(ConfigSelectors.refUrl)
210
+ .pipe(mergeMap((url) => this.httpClient.get(`${url}/metadata/id/${id}`)));
211
+ }
212
+ postMetadata(metadata) {
213
+ return this.store
214
+ .select(ConfigSelectors.refUrl)
215
+ .pipe(mergeMap((url) => this.httpClient.post(`${url}/metadata`, metadata)));
216
+ }
217
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: MetadataService, deps: [{ token: i1$1.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
218
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: MetadataService, providedIn: 'root' }); }
219
+ }
220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: MetadataService, decorators: [{
221
+ type: Injectable,
222
+ args: [{
223
+ providedIn: 'root'
224
+ }]
225
+ }], ctorParameters: function () { return [{ type: i1$1.HttpClient }, { type: i1.Store }]; } });
226
+
227
+ class MetadataEffects {
228
+ constructor(actions$, service, dataSourceService) {
229
+ this.actions$ = actions$;
230
+ this.service = service;
231
+ this.dataSourceService = dataSourceService;
232
+ this.loadMetadata$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.loadMetadata), mergeMap$1((_) => this.service.getMetadataList().pipe(map$1((metadata) => MetadataActions.loadMetadataSuccess({ metadata: metadata })), catchError((error) => [MetadataActions.loadMetadataFailure({ error: error })])))));
233
+ this.goToDetailsView$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.goToDetailsView), mergeMap$1((action) => this.service.getMetadata(action.id).pipe(map$1((metadata) => MetadataActions.goToDetailsViewSuccess({ metadata })), catchError((error) => [MetadataActions.goToDetailsViewFailure({ error: error })])))));
234
+ this.createMetadata$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.createMetadata), mergeMap$1((action) => this.service.postMetadata(action.metadata).pipe(map$1(() => MetadataActions.createMetadataSuccess({ metadata: action.metadata })), catchError((error) => [MetadataActions.createMetadataFailure({ error: error })])))));
235
+ this.createMetadataSuccess$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.createMetadataSuccess), map$1((action) => {
236
+ return MetadataActions.loadMetadata();
237
+ })));
238
+ this.addDatasetMetadata$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.addDatasetMetadata), mergeMap$1((action) => this.dataSourceService.addDatasetMetadata(action.datasetId, action.metadataId, action.value).pipe(map$1(() => MetadataActions.addDatasetMetadataSuccess({ datasetId: action.datasetId })), catchError((error) => [MetadataActions.addDatasetMetadataFailure({ error })])))));
239
+ this.addDatasetMetadataSuccess$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.addDatasetMetadataSuccess), mergeMap$1((action) => {
240
+ return [
241
+ DataSourceActions.dataset.getDatasetById({ id: action.datasetId }),
242
+ MetadataActions.isEditable({ editable: false }),
243
+ DataSourceActions.dataset.loadDataset()
244
+ ];
245
+ })));
246
+ this.deleteDatasetMetadata$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.deleteDatasetMetadata), mergeMap$1((action) => this.dataSourceService.deleteDatasetMetadata(action.datasetId, action.metadataId).pipe(map$1(() => MetadataActions.deleteDatasetMetadataSuccess({ datasetId: action.datasetId })), catchError((error) => [MetadataActions.deleteDatasetMetadataFailure({ error })])))));
247
+ this.deleteDatasetMetadataSuccess$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.deleteDatasetMetadataSuccess), mergeMap$1((action) => {
248
+ return [
249
+ DataSourceActions.dataset.getDatasetById({ id: action.datasetId }),
250
+ MetadataActions.isEditable({ editable: false }),
251
+ DataSourceActions.dataset.loadDataset()
252
+ ];
253
+ })));
254
+ }
255
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: MetadataEffects, deps: [{ token: i1$2.Actions }, { token: MetadataService }, { token: i4.DataSourceService }], target: i0.ɵɵFactoryTarget.Injectable }); }
256
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: MetadataEffects }); }
257
+ }
258
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: MetadataEffects, decorators: [{
259
+ type: Injectable
260
+ }], ctorParameters: function () { return [{ type: i1$2.Actions }, { type: MetadataService }, { type: i4.DataSourceService }]; } });
261
+
262
+ const PRY_METADATA_EDITOR_COMPONENTS = [PryMetadataEditorComponent];
263
+ class PryExpandPanelModule {
264
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryExpandPanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
265
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.6", ngImport: i0, type: PryExpandPanelModule, declarations: [PryMetadataEditorComponent], imports: [CommonModule, i1.StoreFeatureModule, i1$2.EffectsFeatureModule, PryCoreModule,
266
+ PryI18nModule,
267
+ ReactiveFormsModule,
268
+ PrySelectModule,
269
+ PryIconModule], exports: [PryMetadataEditorComponent] }); }
270
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryExpandPanelModule, imports: [CommonModule,
271
+ StoreModule.forFeature(metadataFeatureKey, metadataReducer),
272
+ EffectsModule.forFeature([MetadataEffects]),
273
+ PryCoreModule,
274
+ PryI18nModule,
275
+ ReactiveFormsModule,
276
+ PrySelectModule,
277
+ PryIconModule] }); }
278
+ }
279
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryExpandPanelModule, decorators: [{
280
+ type: NgModule,
281
+ args: [{
282
+ declarations: [...PRY_METADATA_EDITOR_COMPONENTS],
283
+ exports: [...PRY_METADATA_EDITOR_COMPONENTS],
284
+ imports: [
285
+ CommonModule,
286
+ StoreModule.forFeature(metadataFeatureKey, metadataReducer),
287
+ EffectsModule.forFeature([MetadataEffects]),
288
+ PryCoreModule,
289
+ PryI18nModule,
290
+ ReactiveFormsModule,
291
+ PrySelectModule,
292
+ PryIconModule
293
+ ]
294
+ }]
295
+ }] });
296
+
297
+ /**
298
+ * Generated bundle index. Do not edit.
299
+ */
300
+
301
+ export { DOUBLE_REGEXP_PATTERN, INTEGER_REGEXP_PATTERN, MetadataActions, MetadataEffects, MetadataSelectors, MetadataService, PryExpandPanelModule, PryMetadataEditorComponent, initialMetadataState, metadataFeatureKey, metadataReducer };
302
+ //# sourceMappingURL=provoly-dashboard-components-metadata-editor.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provoly-dashboard-components-metadata-editor.mjs","sources":["../../../../projects/provoly/dashboard/components/metadata-editor/store/metadata.action.ts","../../../../projects/provoly/dashboard/components/metadata-editor/store/metadata.reducer.ts","../../../../projects/provoly/dashboard/components/metadata-editor/store/metadata.selector.ts","../../../../projects/provoly/dashboard/components/metadata-editor/metadata-editor.component.ts","../../../../projects/provoly/dashboard/components/metadata-editor/metadata-editor.component.html","../../../../projects/provoly/dashboard/components/metadata-editor/store/metadata.service.ts","../../../../projects/provoly/dashboard/components/metadata-editor/store/metadata.effects.ts","../../../../projects/provoly/dashboard/components/metadata-editor/metadata-editor.module.ts","../../../../projects/provoly/dashboard/components/metadata-editor/provoly-dashboard-components-metadata-editor.ts"],"sourcesContent":["import { createAction, props } from '@ngrx/store';\nimport { IMetadata, MetadataValue } from '@provoly/dashboard';\n\nexport const MetadataActions = {\n loadMetadata: createAction(`[Metadata] Load Metadata`),\n loadMetadataSuccess: createAction(`[Metadata] Load Metadata Success`, props<{ metadata: Array<IMetadata> }>()),\n loadMetadataFailure: createAction(`[Metadata] Load Metadata Failure`, props<{ error: any }>()),\n\n unselectMetadata: createAction(`[Metadata] unSelect Metadata`),\n\n goToNewMetadata: createAction(`[Metadata] go to new metadata`, props<{ route: string }>()),\n goToNewMetadataSuccess: createAction(`[Metadata] go to new metadata success`),\n goToNewMetadataFailure: createAction(`[Metadata] go to new metadata failure`, props<{ error: any }>()),\n\n createMetadata: createAction(`[Metadata] create metadata`, props<{ metadata: IMetadata }>()),\n createMetadataSuccess: createAction(`[Metadata] create metadata Success`, props<{ metadata: IMetadata }>()),\n createMetadataFailure: createAction(`[Metadata] create metadata Failure`, props<{ error: any }>()),\n\n goToDetailsView: createAction(`[Metadata] go to details view`, props<{ id: string }>()),\n goToDetailsViewSuccess: createAction(`[Metadata] go to details view success`, props<{ metadata: IMetadata }>()),\n goToDetailsViewFailure: createAction(`[Metadata] go to details view failure`, props<{ error: any }>()),\n\n addDatasetMetadata: createAction(\n `[Metadata] Add Metadata of selected Datasets`,\n props<{ datasetId: string; metadataId: string; value: any }>()\n ),\n addDatasetMetadataSuccess: createAction(\n `[Metadata] Add Metadata of selected Datasets Success`,\n props<{ datasetId: string }>()\n ),\n addDatasetMetadataFailure: createAction(\n `[Metadata] Add Metadata of selected Datasets Failure`,\n props<{ error: any }>()\n ),\n\n deleteDatasetMetadata: createAction(\n `[Metadata] Delete Metadata of selected Datasets`,\n props<{ datasetId: string; metadataId: string }>()\n ),\n deleteDatasetMetadataSuccess: createAction(\n `[Metadata] Delete Metadata of selected Datasets Success`,\n props<{ datasetId: string }>()\n ),\n deleteDatasetMetadataFailure: createAction(\n `[Metadata] Delete Metadata of selected Datasets Failure`,\n props<{ error: any }>()\n ),\n isEditable: createAction(`[Metadata] Is editable`, props<{ editable: boolean }>()),\n loadDatasetMetadata: createAction(`[Metadata] Load Metadata of selected Datasets`, props<{ datasetId: string }>()),\n loadDatasetMetadataSuccess: createAction(\n `[Metadata] Load Metadata of selected Datasets Success`,\n props<{ metadata: MetadataValue[] }>()\n ),\n loadDatasetMetadataFailure: createAction(\n `[Metadata] Load Metadata of selected Datasets Failure`,\n props<{ error: any }>()\n )\n};\n","import { createReducer, on } from '@ngrx/store';\nimport { IMetadata } from '@provoly/dashboard';\nimport { MetadataActions } from './metadata.action';\n\nexport const metadataFeatureKey = '@pry/metadata';\n\nexport interface MetadataState {\n metadata: IMetadata[];\n selectedMetadata: string | null;\n loading: boolean;\n errors: any;\n editable: boolean;\n}\n\nexport const initialMetadataState: MetadataState = {\n metadata: [],\n selectedMetadata: null,\n loading: false,\n errors: null,\n editable: false\n};\n\n/**\n * @TODO merge this store with admin user store ?\n */\nexport const metadataReducer = createReducer(\n initialMetadataState,\n on(MetadataActions.loadMetadataSuccess, (state, action) => ({\n ...state,\n metadata: [...action.metadata],\n loading: false\n })),\n on(\n MetadataActions.loadMetadataFailure,\n MetadataActions.goToNewMetadataFailure,\n MetadataActions.createMetadataFailure,\n MetadataActions.goToDetailsViewFailure,\n (state, action) => ({\n ...state,\n loading: false,\n errors: action.error\n })\n ),\n on(MetadataActions.unselectMetadata, (state) => ({\n ...state,\n selectedMetadata: null\n })),\n on(MetadataActions.loadMetadata, MetadataActions.goToNewMetadata, (state) => ({\n ...state,\n loading: true\n })),\n on(MetadataActions.createMetadataSuccess, (state, action) => ({\n ...state,\n metadata: [...state.metadata, action.metadata],\n loading: false\n })),\n on(MetadataActions.goToDetailsView, (state, action) => ({\n ...state,\n selectedMetadata: action.id\n })),\n on(MetadataActions.isEditable, (state, action) => ({\n ...state,\n editable: action.editable\n }))\n);\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\nimport { IMetadata } from '@provoly/dashboard';\nimport * as fromMetadata from './metadata.reducer';\n\nconst feature = createFeatureSelector<fromMetadata.MetadataState>(fromMetadata.metadataFeatureKey);\n\nconst metadata = createSelector(feature, (state) => state?.metadata);\nconst loading = createSelector(feature, (state) => state?.loading);\nconst selectedMetadata = createSelector(\n feature,\n (state) => (state?.metadata.find((x) => x.id === state.selectedMetadata) as IMetadata) || null\n);\nconst selectedMetadataId = createSelector(selectedMetadata, (metadata) => metadata?.id);\nconst selectMetadataById = (id: string) =>\n createSelector(metadata, (metadata: IMetadata[]) => metadata?.find((m) => m.id === id));\n\nconst editable = createSelector(feature, (state) => state.editable);\n\nexport const MetadataSelectors = {\n feature,\n loading,\n metadata,\n selectedMetadata,\n selectedMetadataId,\n selectMetadataById,\n editable\n};\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { IMetadata, MetadataUser, MetadataValue, SubscriptionnerDirective } from '@provoly/dashboard';\nimport { BehaviorSubject, combineLatest, map, Observable } from 'rxjs';\nimport { MetadataActions } from './store/metadata.action';\nimport { MetadataSelectors } from './store/metadata.selector';\n\nexport type MetaEventType = { id: string; metadataId: string; value?: string };\n\nexport const INTEGER_REGEXP_PATTERN = '^[+-]?[0-9]*$';\nexport const DOUBLE_REGEXP_PATTERN = '[+-]?([0-9]*[.])?[0-9]+';\n@Component({\n selector: 'pry-metadata-editor',\n templateUrl: 'metadata-editor.component.html'\n})\nexport class PryMetadataEditorComponent extends SubscriptionnerDirective {\n _metadata$ = new BehaviorSubject<(MetadataValue | MetadataUser)[]>([]);\n form: FormGroup;\n isSubmitted = false;\n @Input() targetId = '';\n @Input() editable = false;\n metadataDefs$: Observable<IMetadata[]>;\n availableMetadata$: Observable<IMetadata[]>;\n type: 'meta' | 'user' = 'meta';\n @Output() addMeta = new EventEmitter<MetaEventType>();\n @Output() removeMeta = new EventEmitter<MetaEventType>();\n\n @Input() set metadata(metadata: MetadataValue[] | MetadataUser[]) {\n // @ts-ignore\n const isUserProfile = metadata.length >= 1 && metadata[0].userProfile !== undefined;\n if (isUserProfile) {\n this.type = 'user';\n } else {\n this.type = 'meta';\n }\n this._metadata$.next(metadata);\n }\n\n constructor(private store: Store, private formBuilder: FormBuilder) {\n super();\n\n this.form = this.formBuilder.group({\n metadata: [{}, [Validators.required]],\n value: ['', [Validators.required, Validators.pattern(INTEGER_REGEXP_PATTERN)]]\n });\n\n this.metadataDefs$ = this.store.select(MetadataSelectors.metadata);\n this.availableMetadata$ = combineLatest([this._metadata$, this.metadataDefs$]).pipe(\n map(([metadata, metaDefs]) => {\n let datasetMetadataIds = metadata?.map((u) =>\n this.type === 'meta' ? (u as MetadataValue).metadataDef.id : (u as MetadataUser).userProfile\n );\n return metaDefs.filter((meta) => !datasetMetadataIds?.includes(meta.id));\n })\n );\n\n this.subscriptions.add(\n this.availableMetadata$.subscribe((meta) => {\n this.form.patchValue({\n metadata: meta[0]\n });\n this.onMetaChange(meta[0]);\n this.form.patchValue({ value: '' });\n })\n );\n }\n\n onMetaChange(metadata: IMetadata) {\n if (metadata) {\n if (metadata.type === 'INTEGER') {\n this.form.controls['value'].setValidators([Validators.required, Validators.pattern(INTEGER_REGEXP_PATTERN)]);\n } else if (metadata.type === 'DOUBLE') {\n this.form.controls['value'].setValidators([Validators.required, Validators.pattern(DOUBLE_REGEXP_PATTERN)]);\n } else {\n this.form.controls['value'].setValidators([Validators.required]);\n }\n }\n }\n\n editMetadata(currentMetadata: MetadataValue | MetadataUser) {\n this.store.dispatch(MetadataActions.isEditable({ editable: true }));\n let value = currentMetadata.value;\n let datasetMetadataDef = this.metaDefinition(currentMetadata);\n\n this.form.patchValue({\n metadata: datasetMetadataDef,\n value: value\n });\n this.onMetaChange(datasetMetadataDef);\n }\n\n metaDefinition(metadata: MetadataUser | MetadataValue) {\n return this.type === 'user' ? (metadata as MetadataUser).userProfile : (metadata as MetadataValue).metadataDef;\n }\n\n removeMetadata(metadata: MetadataUser | MetadataValue) {\n this.removeMeta.emit({ id: this.targetId, metadataId: this.metaDefinition(metadata).id });\n }\n addDatasetMetadata() {\n this.isSubmitted = true;\n if (this.form.valid) {\n this.isSubmitted = false;\n this.removeMeta.emit({\n id: this.targetId,\n metadataId: this.form.value['metadata']['id'],\n value: this.form.value['value']\n });\n }\n }\n}\n","<div class=\"o-tabs__panels__item__content o-tabs__panels__item__content--profil\">\n <div *ngFor=\"let metadata of (_metadata$ | async) ?? []\">\n <div class=\"o-tabs__panels__item__content\">\n <div class=\"o-tabs__panels__item__content__actions\">\n <div class=\"o-tabs__panels__item__content__actions__text\">\n <span class=\"o-tabs__panels__item__content__actions__text__label\">{{ metaDefinition(metadata).name }} :</span>\n <span class=\"o-tabs__panels__item__content__actions__text__value\">{{ metadata.value }}</span>\n </div>\n\n <div class=\"o-tabs__panels__item__content__actions__buttons\">\n <ng-container *pryAccess=\"{ module: 'admin', page: 'dataset', action: 'write' }\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" aria-pressed=\"false\">\n <span class=\"u-visually-hidden\">{{ '@pry.action.edit' | i18n }} {{ metaDefinition(metadata).name }}</span>\n <pry-icon\n class=\"edit-icon\"\n iconSvg=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"editMetadata(metadata)\"\n ></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" aria-pressed=\"false\">\n <span class=\"u-visually-hidden\"\n >{{ '@pry.action.delete' | i18n }} {{ metaDefinition(metadata).name }}</span\n >\n <pry-icon\n class=\"delete-icon\"\n iconSvg=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"removeMetadata(metadata)\"\n ></pry-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *pryAccess=\"{ module: 'admin', page: 'dataset', action: 'write' }\">\n <ng-container *ngIf=\"form.value.metadata\">\n <form class=\"o-form -border-top\" [formGroup]=\"form\" (ngSubmit)=\"addDatasetMetadata()\">\n <fieldset>\n <legend class=\"u-visually-hidden\">{{ '@pry.action.editProfil' | i18n }}</legend>\n\n <div class=\"m-form-label-field\">\n <label for=\"metadata\" id=\"metadata-label\" class=\"a-label\">Data</label>\n <pry-select\n id=\"metadata\"\n class=\"a-pry-select\"\n formControlName=\"metadata\"\n [items]=\"availableMetadata$ | async\"\n (ngModelChange)=\"onMetaChange($event)\"\n [isForm]=\"true\"\n [itemsAsOption]=\"true\"\n bindLabel=\"name\"\n [readonly]=\"editable\"\n [attr.aria-labelledby]=\"\n isSubmitted && form.get('metadata')?.invalid ? 'metadata-label metadata-error' : 'metadata-label'\n \"\n [attr.aria-invalid]=\"isSubmitted && form.get('metadata')?.invalid\"\n >\n </pry-select>\n <label\n *ngIf=\"isSubmitted && form.get('metadata')?.invalid\"\n id=\"metadata-error\"\n for=\"metadata\"\n class=\"a-label a-label--help -error\"\n >\n {{ '@pry.admin.required' | i18n }}\n </label>\n </div>\n\n <ng-container *ngIf=\"form.value['metadata']['type'] === 'DATE'; else inputList\">\n <div class=\"m-form-label-field\">\n <label id=\"form_date-label\" for=\"form_date\" class=\"a-label\">\n {{ '@pry.action.selectDate' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"form_date\"\n type=\"date\"\n class=\"a-form-field\"\n formControlName=\"value\"\n [attr.aria-labelledby]=\"\n isSubmitted && form.get('value')?.invalid ? 'form-date-label form-date-error' : 'form-date-label'\n \"\n [attr.aria-invalid]=\"isSubmitted && form.get('value')?.invalid\"\n required\n />\n <label\n *ngIf=\"isSubmitted && form.get('value')?.invalid\"\n id=\"form_date-error\"\n for=\"form_date\"\n class=\"a-label a-label--help -error\"\n >\n {{ '@pry.admin.required' | i18n }}\n </label>\n </div>\n </ng-container>\n\n <ng-template #inputList>\n <ng-container *ngIf=\"form.value['metadata']['type'] === 'LIST'; else inputText\">\n <div class=\"m-form-label-field\">\n <label id=\"list-label\" class=\"a-label\" for=\"list\">{{ '@pry.action.choiceInList' | i18n }}</label>\n <pry-select\n id=\"list\"\n class=\"a-pry-select\"\n formControlName=\"value\"\n [items]=\"form.value['metadata']['allowedValues']\"\n [isForm]=\"true\"\n aria-labelledby=\"list-label\"\n ></pry-select>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template #inputText>\n <div class=\"m-form-label-field\">\n <label id=\"text-label\" class=\"a-label\" for=\"text\">\n {{ '@pry.action.text' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"text\"\n type=\"text\"\n class=\"a-form-field\"\n formControlName=\"value\"\n [attr.aria-labelledby]=\"\n isSubmitted && form.get('value')?.invalid ? 'text-label text-error' : 'text-label'\n \"\n [attr.aria-invalid]=\"isSubmitted && form.get('value')?.invalid\"\n required\n />\n <label\n *ngIf=\"isSubmitted && form.get('value')?.invalid\"\n id=\"test-error\"\n for=\"text\"\n class=\"a-label a-label--help -error\"\n >\n <span *ngIf=\"form.get('value')?.hasError('required')\">{{ '@pry.admin.required' | i18n }}</span>\n <ng-container *ngIf=\"form.get('value')?.hasError('pattern')\">\n <span *ngIf=\"form.value['metadata']['type'] === 'DOUBLE'\">\n {{ '@pry.admin.environment.formatDouble' | i18n }}\n </span>\n <span *ngIf=\"form.value['metadata']['type'] === 'INTEGER'\">\n {{ '@pry.admin.environment.formatInt' | i18n }}\n </span>\n </ng-container>\n </label>\n </div>\n </ng-template>\n </fieldset>\n\n <div class=\"m-btn-group -end\">\n <button type=\"submit\" class=\"a-btn a-btn--primary\">\n {{ (editable ? '@pry.admin.userInfo.editMetadata' : '@pry.admin.userInfo.addMetadata') | i18n }}\n </button>\n </div>\n </form>\n </ng-container>\n</ng-container>\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { ConfigSelectors, IMetadata } from '@provoly/dashboard';\nimport { mergeMap, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MetadataService {\n constructor(private httpClient: HttpClient, private store: Store<any>) {}\n\n getMetadataList(): Observable<any> {\n return this.store\n .select(ConfigSelectors.refUrl)\n .pipe(mergeMap((url) => this.httpClient.get<any>(`${url}/metadata`)));\n }\n\n getMetadata(id: string): Observable<IMetadata> {\n return this.store\n .select(ConfigSelectors.refUrl)\n .pipe(mergeMap((url) => this.httpClient.get<IMetadata>(`${url}/metadata/id/${id}`)));\n }\n\n postMetadata(metadata: IMetadata): Observable<void> {\n return this.store\n .select(ConfigSelectors.refUrl)\n .pipe(mergeMap((url) => this.httpClient.post<void>(`${url}/metadata`, metadata)));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { DataSourceActions, DataSourceService } from '@provoly/dashboard';\nimport { catchError, map, mergeMap } from 'rxjs/operators';\nimport { MetadataActions } from './metadata.action';\nimport { MetadataService } from './metadata.service';\n\n@Injectable()\nexport class MetadataEffects {\n loadMetadata$ = createEffect(() =>\n this.actions$.pipe(\n ofType(MetadataActions.loadMetadata),\n mergeMap((_) =>\n this.service.getMetadataList().pipe(\n map((metadata) => MetadataActions.loadMetadataSuccess({ metadata: metadata })),\n catchError((error) => [MetadataActions.loadMetadataFailure({ error: error })])\n )\n )\n )\n );\n\n goToDetailsView$ = createEffect(() =>\n this.actions$.pipe(\n ofType(MetadataActions.goToDetailsView),\n mergeMap((action) =>\n this.service.getMetadata(action.id).pipe(\n map((metadata) => MetadataActions.goToDetailsViewSuccess({ metadata })),\n catchError((error) => [MetadataActions.goToDetailsViewFailure({ error: error })])\n )\n )\n )\n );\n\n createMetadata$ = createEffect(() =>\n this.actions$.pipe(\n ofType(MetadataActions.createMetadata),\n mergeMap((action) =>\n this.service.postMetadata(action.metadata).pipe(\n map(() => MetadataActions.createMetadataSuccess({ metadata: action.metadata })),\n catchError((error) => [MetadataActions.createMetadataFailure({ error: error })])\n )\n )\n )\n );\n\n createMetadataSuccess$ = createEffect(() =>\n this.actions$.pipe(\n ofType(MetadataActions.createMetadataSuccess),\n map((action) => {\n return MetadataActions.loadMetadata();\n })\n )\n );\n\n addDatasetMetadata$ = createEffect(() =>\n this.actions$.pipe(\n ofType(MetadataActions.addDatasetMetadata),\n mergeMap((action) =>\n this.dataSourceService.addDatasetMetadata(action.datasetId, action.metadataId, action.value).pipe(\n map(() => MetadataActions.addDatasetMetadataSuccess({ datasetId: action.datasetId })),\n catchError((error) => [MetadataActions.addDatasetMetadataFailure({ error })])\n )\n )\n )\n );\n\n addDatasetMetadataSuccess$ = createEffect(() =>\n this.actions$.pipe(\n ofType(MetadataActions.addDatasetMetadataSuccess),\n mergeMap((action) => {\n return [\n DataSourceActions.dataset.getDatasetById({ id: action.datasetId }),\n MetadataActions.isEditable({ editable: false }),\n DataSourceActions.dataset.loadDataset()\n ];\n })\n )\n );\n\n deleteDatasetMetadata$ = createEffect(() =>\n this.actions$.pipe(\n ofType(MetadataActions.deleteDatasetMetadata),\n mergeMap((action) =>\n this.dataSourceService.deleteDatasetMetadata(action.datasetId, action.metadataId).pipe(\n map(() => MetadataActions.deleteDatasetMetadataSuccess({ datasetId: action.datasetId })),\n catchError((error) => [MetadataActions.deleteDatasetMetadataFailure({ error })])\n )\n )\n )\n );\n\n deleteDatasetMetadataSuccess$ = createEffect(() =>\n this.actions$.pipe(\n ofType(MetadataActions.deleteDatasetMetadataSuccess),\n mergeMap((action) => {\n return [\n DataSourceActions.dataset.getDatasetById({ id: action.datasetId }),\n MetadataActions.isEditable({ editable: false }),\n DataSourceActions.dataset.loadDataset()\n ];\n })\n )\n );\n\n constructor(\n private actions$: Actions,\n private service: MetadataService,\n private dataSourceService: DataSourceService\n ) {}\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { PryCoreModule, PryI18nModule, PryIconModule, PrySelectModule } from '@provoly/dashboard';\nimport { PryMetadataEditorComponent } from './metadata-editor.component';\nimport { MetadataEffects } from './store/metadata.effects';\nimport { metadataFeatureKey, metadataReducer } from './store/metadata.reducer';\n\nconst PRY_METADATA_EDITOR_COMPONENTS = [PryMetadataEditorComponent];\n\n@NgModule({\n declarations: [...PRY_METADATA_EDITOR_COMPONENTS],\n exports: [...PRY_METADATA_EDITOR_COMPONENTS],\n imports: [\n CommonModule,\n StoreModule.forFeature(metadataFeatureKey, metadataReducer),\n EffectsModule.forFeature([MetadataEffects]),\n PryCoreModule,\n PryI18nModule,\n ReactiveFormsModule,\n PrySelectModule,\n PryIconModule\n ]\n})\nexport class PryExpandPanelModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["fromMetadata.metadataFeatureKey","i1","i2","mergeMap","map","i2.MetadataService","i3"],"mappings":"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"}
@@ -13,11 +13,11 @@ import * as i1 from '@ngrx/store';
13
13
 
14
14
  class PryDatasetCssComponent {
15
15
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryDatasetCssComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
16
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryDatasetCssComponent, selector: "pry-dataset-css", ngImport: i0, template: '', isInline: true, styles: [".o-pry-dataset{display:flex;flex-wrap:wrap;justify-content:space-around;gap:3.75rem;padding-bottom:5.625rem}.o-pry-dataset__search{position:relative}.o-pry-dataset__search .a-icon{position:absolute;right:.6875rem;bottom:.5625rem;opacity:.5;pointer-events:none}.o-pry-dataset pry-dataset-card{min-width:22.5rem}.o-dataset-layout{overflow:hidden;height:100%}.o-manifest-layout__content{padding-left:2rem}\n", ".o-pry-dataset-card{margin:0 auto;border-collapse:collapse;font-size:.875rem;min-width:20.625rem;flex-grow:2;overflow:hidden}.o-pry-dataset-card__header{display:flex;gap:.9375rem;padding:.625rem}.o-pry-dataset-card__footer{display:flex;align-items:center}.o-pry-dataset-card__button .a-btn{width:100%}\n", "pry-dataset-detail{height:100%;width:100%}pry-dataset-detail .dataset-detail{overflow:auto;height:80%;display:flex;flex-direction:column;flex:1 1;padding:1.5625rem}pry-dataset-detail .dashboard-container{flex:1 1}pry-dataset-detail pry-icon{position:relative;top:.3125rem}pry-dataset-detail .table-container{flex:1 1}pry-dataset-detail .state-button{text-decoration:underline}.info-icon{position:relative;width:1.5rem;height:1.5rem;border-radius:50%;cursor:pointer;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-left:.5rem}.info-text{font-size:14px;color:#6c6c6c}.o-tabs{padding-left:2rem;padding-right:2rem}.dataset-layout__content{overflow:hidden;height:100%;padding-left:2rem}td .a-btn+.a-btn{margin-left:.625rem}.description:after{content:\"\";display:block;position:absolute;top:0;right:0;width:40px;height:48px;z-index:1;pointer-events:initial}.description:hover:after{cursor:pointer}.description-tooltip{position:absolute;max-width:50vw;visibility:hidden;padding:20px;-webkit-box-shadow:0 0 50px 0 rgba(0,0,0,.3);opacity:0;transition:opacity .5s ease;z-index:2}.description:hover+.description-tooltip{visibility:visible;transition:opacity .2s ease;opacity:1}\n"], encapsulation: i0.ViewEncapsulation.None }); }
16
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryDatasetCssComponent, selector: "pry-dataset-css", ngImport: i0, template: '', isInline: true, styles: [".o-pry-dataset{display:flex;flex-wrap:wrap;justify-content:space-around;gap:3.75rem;padding-bottom:5.625rem}.o-pry-dataset__search{position:relative}.o-pry-dataset__search .a-icon{position:absolute;right:.6875rem;bottom:.5625rem;opacity:.5;pointer-events:none}.o-pry-dataset pry-dataset-card{min-width:22.5rem}.o-dataset-layout{overflow:hidden;height:100%}.o-manifest-layout__content{padding-left:2rem}\n", ".o-pry-dataset-card{margin:0 auto;border-collapse:collapse;font-size:.875rem;min-width:20.625rem;flex-grow:2;overflow:hidden}.o-pry-dataset-card__header{display:flex;gap:.9375rem;padding:.625rem;max-width:20.625rem}.o-pry-dataset-card__footer{display:flex;align-items:center}.o-pry-dataset-card__button .a-btn{width:100%}.o-pry-dataset-card .dataset-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n", "pry-dataset-detail{height:100%;width:100%}pry-dataset-detail .dataset-detail{overflow:auto;height:80%;display:flex;flex-direction:column;flex:1 1;padding:1.5625rem}pry-dataset-detail .dashboard-container{flex:1 1}pry-dataset-detail pry-icon{position:relative;top:.3125rem}pry-dataset-detail .table-container{flex:1 1}pry-dataset-detail .state-button{text-decoration:underline}.info-icon{position:relative;width:1.5rem;height:1.5rem;border-radius:50%;cursor:pointer;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-left:.5rem}.info-text{font-size:14px;color:#6c6c6c}.o-tabs{padding-left:2rem;padding-right:2rem}.dataset-layout__content{overflow:hidden;height:100%;padding-left:2rem}td .a-btn+.a-btn{margin-left:.625rem}.description:after{content:\"\";display:block;position:absolute;top:0;right:0;width:40px;height:48px;z-index:1;pointer-events:initial}.description:hover:after{cursor:pointer}.description-tooltip{position:absolute;max-width:50vw;visibility:hidden;padding:20px;-webkit-box-shadow:0 0 50px 0 rgba(0,0,0,.3);opacity:0;transition:opacity .5s ease;z-index:2}.description:hover+.description-tooltip{visibility:visible;transition:opacity .2s ease;opacity:1}\n"], encapsulation: i0.ViewEncapsulation.None }); }
17
17
  }
18
18
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryDatasetCssComponent, decorators: [{
19
19
  type: Component,
20
- args: [{ selector: 'pry-dataset-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".o-pry-dataset{display:flex;flex-wrap:wrap;justify-content:space-around;gap:3.75rem;padding-bottom:5.625rem}.o-pry-dataset__search{position:relative}.o-pry-dataset__search .a-icon{position:absolute;right:.6875rem;bottom:.5625rem;opacity:.5;pointer-events:none}.o-pry-dataset pry-dataset-card{min-width:22.5rem}.o-dataset-layout{overflow:hidden;height:100%}.o-manifest-layout__content{padding-left:2rem}\n", ".o-pry-dataset-card{margin:0 auto;border-collapse:collapse;font-size:.875rem;min-width:20.625rem;flex-grow:2;overflow:hidden}.o-pry-dataset-card__header{display:flex;gap:.9375rem;padding:.625rem}.o-pry-dataset-card__footer{display:flex;align-items:center}.o-pry-dataset-card__button .a-btn{width:100%}\n", "pry-dataset-detail{height:100%;width:100%}pry-dataset-detail .dataset-detail{overflow:auto;height:80%;display:flex;flex-direction:column;flex:1 1;padding:1.5625rem}pry-dataset-detail .dashboard-container{flex:1 1}pry-dataset-detail pry-icon{position:relative;top:.3125rem}pry-dataset-detail .table-container{flex:1 1}pry-dataset-detail .state-button{text-decoration:underline}.info-icon{position:relative;width:1.5rem;height:1.5rem;border-radius:50%;cursor:pointer;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-left:.5rem}.info-text{font-size:14px;color:#6c6c6c}.o-tabs{padding-left:2rem;padding-right:2rem}.dataset-layout__content{overflow:hidden;height:100%;padding-left:2rem}td .a-btn+.a-btn{margin-left:.625rem}.description:after{content:\"\";display:block;position:absolute;top:0;right:0;width:40px;height:48px;z-index:1;pointer-events:initial}.description:hover:after{cursor:pointer}.description-tooltip{position:absolute;max-width:50vw;visibility:hidden;padding:20px;-webkit-box-shadow:0 0 50px 0 rgba(0,0,0,.3);opacity:0;transition:opacity .5s ease;z-index:2}.description:hover+.description-tooltip{visibility:visible;transition:opacity .2s ease;opacity:1}\n"] }]
20
+ args: [{ selector: 'pry-dataset-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".o-pry-dataset{display:flex;flex-wrap:wrap;justify-content:space-around;gap:3.75rem;padding-bottom:5.625rem}.o-pry-dataset__search{position:relative}.o-pry-dataset__search .a-icon{position:absolute;right:.6875rem;bottom:.5625rem;opacity:.5;pointer-events:none}.o-pry-dataset pry-dataset-card{min-width:22.5rem}.o-dataset-layout{overflow:hidden;height:100%}.o-manifest-layout__content{padding-left:2rem}\n", ".o-pry-dataset-card{margin:0 auto;border-collapse:collapse;font-size:.875rem;min-width:20.625rem;flex-grow:2;overflow:hidden}.o-pry-dataset-card__header{display:flex;gap:.9375rem;padding:.625rem;max-width:20.625rem}.o-pry-dataset-card__footer{display:flex;align-items:center}.o-pry-dataset-card__button .a-btn{width:100%}.o-pry-dataset-card .dataset-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n", "pry-dataset-detail{height:100%;width:100%}pry-dataset-detail .dataset-detail{overflow:auto;height:80%;display:flex;flex-direction:column;flex:1 1;padding:1.5625rem}pry-dataset-detail .dashboard-container{flex:1 1}pry-dataset-detail pry-icon{position:relative;top:.3125rem}pry-dataset-detail .table-container{flex:1 1}pry-dataset-detail .state-button{text-decoration:underline}.info-icon{position:relative;width:1.5rem;height:1.5rem;border-radius:50%;cursor:pointer;display:inline-flex;justify-content:center;align-items:center;margin-right:.5rem;margin-left:.5rem}.info-text{font-size:14px;color:#6c6c6c}.o-tabs{padding-left:2rem;padding-right:2rem}.dataset-layout__content{overflow:hidden;height:100%;padding-left:2rem}td .a-btn+.a-btn{margin-left:.625rem}.description:after{content:\"\";display:block;position:absolute;top:0;right:0;width:40px;height:48px;z-index:1;pointer-events:initial}.description:hover:after{cursor:pointer}.description-tooltip{position:absolute;max-width:50vw;visibility:hidden;padding:20px;-webkit-box-shadow:0 0 50px 0 rgba(0,0,0,.3);opacity:0;transition:opacity .5s ease;z-index:2}.description:hover+.description-tooltip{visibility:visible;transition:opacity .2s ease;opacity:1}\n"] }]
21
21
  }] });
22
22
 
23
23
  class PryDatasetCardComponent {
@@ -28,11 +28,11 @@ class PryDatasetCardComponent {
28
28
  this.consult.emit(this.dataset);
29
29
  }
30
30
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryDatasetCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryDatasetCardComponent, selector: "pry-dataset-card", inputs: { dataset: "dataset" }, outputs: { consult: "consult" }, ngImport: i0, template: "<pry-dataset-css></pry-dataset-css>\n<div class=\"o-pry-dataset-card\">\n <div class=\"o-pry-dataset-card__header\">\n <img\n alt=\"\"\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"dataset.id | translateId: { type: 'datasource', output: 'icon' } | async\"\n />\n <h4 class=\"a-h4\">{{ dataset.name }}</h4>\n </div>\n <div class=\"o-pry-dataset-card__content\"></div>\n <div class=\"o-pry-dataset-card__footer\">\n <button class=\"a-btn\" (click)=\"goToDetailView()\">\n <pry-icon iconSvg=\"table\"></pry-icon>\n {{ '@pry.dataset.table' | i18n }}\n </button>\n <button class=\"a-btn\" disabled>\n <pry-icon iconSvg=\"download\"></pry-icon>\n {{ '@pry.dataset.export' | i18n }}\n </button>\n <button class=\"a-btn\" disabled>\n {{ '@pry.dataset.api' | i18n }}\n </button>\n </div>\n <div class=\"o-pry-dataset-card__button\">\n <button class=\"a-btn\" (click)=\"goToDetailView()\">Consulter</button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryDatasetCssComponent, selector: "pry-dataset-css" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
31
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryDatasetCardComponent, selector: "pry-dataset-card", inputs: { dataset: "dataset" }, outputs: { consult: "consult" }, ngImport: i0, template: "<pry-dataset-css></pry-dataset-css>\n<div class=\"o-pry-dataset-card\">\n <div class=\"o-pry-dataset-card__header\">\n <img\n alt=\"\"\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"dataset.id | translateId: { type: 'datasource', output: 'icon' } | async\"\n />\n <div class=\"a-h4 dataset-name\">{{ dataset.name }}</div>\n </div>\n <div class=\"o-pry-dataset-card__content\"></div>\n <div class=\"o-pry-dataset-card__footer\">\n <button class=\"a-btn\" (click)=\"goToDetailView()\">\n <pry-icon iconSvg=\"table\"></pry-icon>\n {{ '@pry.dataset.table' | i18n }}\n </button>\n <button class=\"a-btn\" disabled>\n <pry-icon iconSvg=\"download\"></pry-icon>\n {{ '@pry.dataset.export' | i18n }}\n </button>\n <button class=\"a-btn\" disabled>\n {{ '@pry.dataset.api' | i18n }}\n </button>\n </div>\n <div class=\"o-pry-dataset-card__button\">\n <button class=\"a-btn\" (click)=\"goToDetailView()\">Consulter</button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryDatasetCssComponent, selector: "pry-dataset-css" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
32
32
  }
33
33
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryDatasetCardComponent, decorators: [{
34
34
  type: Component,
35
- args: [{ selector: 'pry-dataset-card', template: "<pry-dataset-css></pry-dataset-css>\n<div class=\"o-pry-dataset-card\">\n <div class=\"o-pry-dataset-card__header\">\n <img\n alt=\"\"\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"dataset.id | translateId: { type: 'datasource', output: 'icon' } | async\"\n />\n <h4 class=\"a-h4\">{{ dataset.name }}</h4>\n </div>\n <div class=\"o-pry-dataset-card__content\"></div>\n <div class=\"o-pry-dataset-card__footer\">\n <button class=\"a-btn\" (click)=\"goToDetailView()\">\n <pry-icon iconSvg=\"table\"></pry-icon>\n {{ '@pry.dataset.table' | i18n }}\n </button>\n <button class=\"a-btn\" disabled>\n <pry-icon iconSvg=\"download\"></pry-icon>\n {{ '@pry.dataset.export' | i18n }}\n </button>\n <button class=\"a-btn\" disabled>\n {{ '@pry.dataset.api' | i18n }}\n </button>\n </div>\n <div class=\"o-pry-dataset-card__button\">\n <button class=\"a-btn\" (click)=\"goToDetailView()\">Consulter</button>\n </div>\n</div>\n" }]
35
+ args: [{ selector: 'pry-dataset-card', template: "<pry-dataset-css></pry-dataset-css>\n<div class=\"o-pry-dataset-card\">\n <div class=\"o-pry-dataset-card__header\">\n <img\n alt=\"\"\n [height]=\"25\"\n [width]=\"25\"\n [src]=\"dataset.id | translateId: { type: 'datasource', output: 'icon' } | async\"\n />\n <div class=\"a-h4 dataset-name\">{{ dataset.name }}</div>\n </div>\n <div class=\"o-pry-dataset-card__content\"></div>\n <div class=\"o-pry-dataset-card__footer\">\n <button class=\"a-btn\" (click)=\"goToDetailView()\">\n <pry-icon iconSvg=\"table\"></pry-icon>\n {{ '@pry.dataset.table' | i18n }}\n </button>\n <button class=\"a-btn\" disabled>\n <pry-icon iconSvg=\"download\"></pry-icon>\n {{ '@pry.dataset.export' | i18n }}\n </button>\n <button class=\"a-btn\" disabled>\n {{ '@pry.dataset.api' | i18n }}\n </button>\n </div>\n <div class=\"o-pry-dataset-card__button\">\n <button class=\"a-btn\" (click)=\"goToDetailView()\">Consulter</button>\n </div>\n</div>\n" }]
36
36
  }], propDecorators: { dataset: [{
37
37
  type: Input
38
38
  }], consult: [{
@@ -219,7 +219,8 @@ const enTranslations = {
219
219
  FORMAT: 'Wrong format for attribute {{name}}',
220
220
  ELASTIC_SEARCH: 'Insertion error for element {{recordId}}',
221
221
  NO_VALUES: 'No value for {{recordId}} line',
222
- FORMAT_FILE_ERROR: 'Unsupported file format'
222
+ FORMAT_FILE_ERROR: 'Unsupported file format',
223
+ NO_ATTRIBUTES: 'The imported data does not correspond to the data model indicated in the import target'
223
224
  }
224
225
  },
225
226
  tooltip: {
@@ -286,7 +287,8 @@ const frTranslations = {
286
287
  FORMAT: "Format d'attribut {{name}} incorrect",
287
288
  ELASTIC_SEARCH: "Erreur d'insertion pour l'élément {{recordId}}",
288
289
  NO_VALUES: 'Pas de valeur pour la ligne {{recordId}}',
289
- FORMAT_FILE_ERROR: "Le format du fichier transmis n'est pas géré"
290
+ FORMAT_FILE_ERROR: "Le format du fichier transmis n'est pas géré",
291
+ NO_ATTRIBUTES: "Les données importés ne correspondent pas au modèle de données indiquer en cible de l'import"
290
292
  }
291
293
  },
292
294
  tooltip: {