@provoly/dashboard 0.14.8 → 0.14.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/admin/components/admin-layout/admin-layout.component.d.ts +5 -3
  2. package/admin/components/admin-metadata-user/admin-metadata-user.component.d.ts +1 -1
  3. package/admin/components/admin-metadata-user/store/admin-metadata-user.action.d.ts +0 -11
  4. package/admin/components/admin-metadata-user/store/admin-metadata-user.effects.d.ts +2 -7
  5. package/admin/components/admin-metadata-user/store/admin-metadata-user.reducer.d.ts +1 -3
  6. package/admin/components/admin-metadata-user/store/admin-metadata-user.selector.d.ts +1 -4
  7. package/admin/components/admin-user/store/admin-user.action.d.ts +1 -52
  8. package/admin/components/admin-user/store/admin-user.effects.d.ts +0 -28
  9. package/admin/components/admin-user/store/admin-user.reducer.d.ts +1 -2
  10. package/admin/components/admin-user/store/admin-user.selector.d.ts +0 -1
  11. package/admin/store/admin.service.d.ts +1 -4
  12. package/assets/svgs/map.svg +1 -1
  13. package/components/metadata-editor/metadata-editor.component.d.ts +6 -6
  14. package/components/metadata-editor/metadata-editor.module.d.ts +7 -6
  15. package/components/metadata-editor/public-api.d.ts +1 -0
  16. package/components/metadata-editor/store/metadata.action.d.ts +63 -1
  17. package/components/metadata-editor/store/metadata.effects.d.ts +33 -0
  18. package/components/metadata-editor/store/metadata.reducer.d.ts +3 -1
  19. package/components/metadata-editor/store/metadata.selector.d.ts +2 -0
  20. package/components/metadata-editor/store/metadata.service.d.ts +5 -1
  21. package/components/metadata-editor/style/_o-metadata-editor.scss +15 -0
  22. package/components/metadata-editor/style/css.component.d.ts +5 -0
  23. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-edit/admin-abac-rules-edit.component.mjs +2 -3
  24. package/esm2022/admin/components/admin-abac-rules/admin-abac-rules-new/admin-abac-rules-new.component.mjs +2 -3
  25. package/esm2022/admin/components/admin-abac-rules/components/metadata-condition/metadata-condition.component.mjs +2 -3
  26. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-edit/admin-attributes-edit.component.mjs +1 -1
  27. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +4 -4
  28. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +3 -3
  29. package/esm2022/admin/components/admin-layout/admin-layout.component.mjs +10 -7
  30. package/esm2022/admin/components/admin-metadata/shared/form-metadata/form-metadata.component.mjs +2 -3
  31. package/esm2022/admin/components/admin-metadata-rules/shared/admin-form-metadata-rules/admin-form-metadata-rules.component.mjs +3 -5
  32. package/esm2022/admin/components/admin-metadata-user/admin-metadata-user.component.mjs +9 -10
  33. package/esm2022/admin/components/admin-metadata-user/admin-user-edit-metadata/admin-user-edit-metadata.component.mjs +4 -4
  34. package/esm2022/admin/components/admin-metadata-user/admin-user-select-metadata/admin-user-select-metadata.component.mjs +7 -3
  35. package/esm2022/admin/components/admin-metadata-user/store/admin-metadata-user.action.mjs +1 -4
  36. package/esm2022/admin/components/admin-metadata-user/store/admin-metadata-user.effects.mjs +4 -4
  37. package/esm2022/admin/components/admin-metadata-user/store/admin-metadata-user.reducer.mjs +8 -28
  38. package/esm2022/admin/components/admin-metadata-user/store/admin-metadata-user.selector.mjs +2 -6
  39. package/esm2022/admin/components/admin-user/admin-user-select/admin-user-select.component.mjs +9 -10
  40. package/esm2022/admin/components/admin-user/admin-user.component.mjs +1 -1
  41. package/esm2022/admin/components/admin-user/store/admin-user.action.mjs +2 -11
  42. package/esm2022/admin/components/admin-user/store/admin-user.effects.mjs +1 -19
  43. package/esm2022/admin/components/admin-user/store/admin-user.reducer.mjs +2 -7
  44. package/esm2022/admin/components/admin-user/store/admin-user.selector.mjs +1 -3
  45. package/esm2022/admin/i18n/en.translations.mjs +2 -2
  46. package/esm2022/admin/i18n/fr.translations.mjs +4 -4
  47. package/esm2022/admin/store/admin.effects.mjs +1 -1
  48. package/esm2022/admin/store/admin.service.mjs +1 -16
  49. package/esm2022/components/metadata-editor/metadata-editor.component.mjs +40 -45
  50. package/esm2022/components/metadata-editor/metadata-editor.module.mjs +5 -4
  51. package/esm2022/components/metadata-editor/public-api.mjs +2 -1
  52. package/esm2022/components/metadata-editor/store/metadata.action.mjs +14 -2
  53. package/esm2022/components/metadata-editor/store/metadata.effects.mjs +21 -1
  54. package/esm2022/components/metadata-editor/store/metadata.reducer.mjs +18 -2
  55. package/esm2022/components/metadata-editor/store/metadata.selector.mjs +6 -2
  56. package/esm2022/components/metadata-editor/store/metadata.service.mjs +21 -1
  57. package/esm2022/components/metadata-editor/style/css.component.mjs +11 -0
  58. package/esm2022/dataset/i18n/fr.translations.mjs +2 -2
  59. package/esm2022/import/i18n/en.translations.mjs +4 -1
  60. package/esm2022/import/i18n/fr.translations.mjs +4 -1
  61. package/esm2022/import/store/import.effects.mjs +8 -1
  62. package/esm2022/lib/core/components/about/about.component.mjs +29 -0
  63. package/esm2022/lib/core/components/about/pry-about.module.mjs +21 -0
  64. package/esm2022/lib/core/components/icon/icon.component.mjs +5 -1
  65. package/esm2022/lib/core/components/modal-status/modal-status.component.mjs +10 -6
  66. package/esm2022/lib/core/components/snackbar/snackbar.service.mjs +1 -1
  67. package/esm2022/lib/core/i18n/en.translations.mjs +14 -3
  68. package/esm2022/lib/core/i18n/fr.translations.mjs +14 -3
  69. package/esm2022/lib/core/i18n/i18n.pipe.mjs +4 -3
  70. package/esm2022/lib/core/i18n/i18n.service.mjs +5 -5
  71. package/esm2022/lib/core/model/display-options.interface.mjs +1 -1
  72. package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
  73. package/esm2022/lib/core/model/public-api.mjs +2 -1
  74. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -1
  75. package/esm2022/lib/core/model/widget-vega-manifest.interface.mjs +2 -0
  76. package/esm2022/lib/core/public-api.mjs +3 -1
  77. package/esm2022/lib/core/store/class/class.effects.mjs +1 -1
  78. package/esm2022/lib/core/store/config/config.actions.mjs +5 -2
  79. package/esm2022/lib/core/store/config/config.effects.mjs +4 -1
  80. package/esm2022/lib/core/store/config/config.reducer.mjs +9 -2
  81. package/esm2022/lib/core/store/config/config.selectors.mjs +6 -4
  82. package/esm2022/lib/core/store/config/config.service.mjs +36 -2
  83. package/esm2022/lib/core/store/config/versions.interface.mjs +2 -0
  84. package/esm2022/lib/core/toolbox/toolbox-menu.service.mjs +1 -16
  85. package/esm2022/lib/dashboard/components/manifests/manifests.component.mjs +3 -1
  86. package/esm2022/lib/dashboard/components/widgets/base-widget.component.mjs +3 -2
  87. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +3 -3
  88. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +15 -6
  89. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +10 -2
  90. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +3 -4
  91. package/esm2022/lib/dashboard/store/manifest.service.mjs +2 -3
  92. package/esm2022/notification/store/notification.effects.mjs +3 -3
  93. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +23 -18
  94. package/esm2022/presentation/components/presentation.component.mjs +18 -18
  95. package/esm2022/presentation/style/css.component.mjs +2 -2
  96. package/esm2022/restitution/components/restitution-list/restitution-list.component.mjs +3 -3
  97. package/esm2022/restitution/components/restitution-list-item/restitution-list-item.component.mjs +6 -3
  98. package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors-select/supervision-integration-errors-select.component.mjs +6 -3
  99. package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors.component.mjs +2 -2
  100. package/esm2022/supervision/components/supervision-layout/supervision-layout.component.mjs +2 -2
  101. package/esm2022/supervision/components/supervision.component.mjs +2 -2
  102. package/esm2022/supervision/store/supervision.actions.mjs +1 -1
  103. package/esm2022/supervision/store/supervision.reducer.mjs +3 -2
  104. package/esm2022/supervision/store/supervision.selectors.mjs +2 -2
  105. package/esm2022/toolbox/components/save-view/save-view.component.mjs +4 -4
  106. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +18 -11
  107. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +20 -6
  108. package/esm2022/widgets/widget-aggregated-chart/i18n/fr.translations.mjs +1 -2
  109. package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +4 -2
  110. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +15 -9
  111. package/esm2022/widgets/widget-map/utils/cql-utils.class.mjs +5 -5
  112. package/esm2022/widgets/widget-map/utils/xml-utils.class.mjs +23 -1
  113. package/esm2022/widgets/widget-vega/component/widget-vega.component.mjs +139 -0
  114. package/esm2022/widgets/widget-vega/i18n/en.translations.mjs +11 -0
  115. package/esm2022/widgets/widget-vega/i18n/fr.translations.mjs +11 -0
  116. package/esm2022/widgets/widget-vega/provoly-dashboard-widgets-widget-vega.mjs +5 -0
  117. package/esm2022/widgets/widget-vega/public-api.mjs +3 -0
  118. package/esm2022/widgets/widget-vega/style/css.component.mjs +11 -0
  119. package/esm2022/widgets/widget-vega/widget-vega.module.mjs +68 -0
  120. package/fesm2022/provoly-dashboard-admin.mjs +134 -206
  121. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  122. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs +127 -52
  123. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs.map +1 -1
  124. package/fesm2022/provoly-dashboard-dataset.mjs +1 -1
  125. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  126. package/fesm2022/provoly-dashboard-import.mjs +13 -0
  127. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  128. package/fesm2022/provoly-dashboard-notification.mjs +2 -2
  129. package/fesm2022/provoly-dashboard-notification.mjs.map +1 -1
  130. package/fesm2022/provoly-dashboard-presentation.mjs +41 -37
  131. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  132. package/fesm2022/provoly-dashboard-restitution.mjs +7 -4
  133. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  134. package/fesm2022/provoly-dashboard-supervision.mjs +11 -8
  135. package/fesm2022/provoly-dashboard-supervision.mjs.map +1 -1
  136. package/fesm2022/provoly-dashboard-toolbox.mjs +3 -3
  137. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  138. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +17 -10
  139. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
  140. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +19 -6
  141. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  142. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +43 -14
  143. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  144. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +235 -0
  145. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -0
  146. package/fesm2022/provoly-dashboard.mjs +188 -68
  147. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  148. package/import/i18n/en.translations.d.ts +3 -0
  149. package/import/i18n/fr.translations.d.ts +3 -0
  150. package/lib/core/components/about/about.component.d.ts +12 -0
  151. package/lib/core/components/about/pry-about.module.d.ts +10 -0
  152. package/lib/core/i18n/en.translations.d.ts +11 -0
  153. package/lib/core/i18n/fr.translations.d.ts +11 -0
  154. package/lib/core/i18n/i18n.service.d.ts +2 -2
  155. package/lib/core/model/display-options.interface.d.ts +1 -1
  156. package/lib/core/model/manifest.interface.d.ts +2 -1
  157. package/lib/core/model/public-api.d.ts +1 -0
  158. package/lib/core/model/widget-map-manifest.interface.d.ts +2 -0
  159. package/lib/core/model/widget-vega-manifest.interface.d.ts +5 -0
  160. package/lib/core/public-api.d.ts +2 -0
  161. package/lib/core/store/config/config.actions.d.ts +12 -0
  162. package/lib/core/store/config/config.effects.d.ts +6 -0
  163. package/lib/core/store/config/config.reducer.d.ts +2 -0
  164. package/lib/core/store/config/config.selectors.d.ts +1 -0
  165. package/lib/core/store/config/config.service.d.ts +2 -0
  166. package/lib/core/store/config/versions.interface.d.ts +10 -0
  167. package/lib/dashboard/store/dashboard.actions.d.ts +10 -8
  168. package/lib/dashboard/store/dashboard.effects.d.ts +2 -0
  169. package/lib/dashboard/store/dashboard.selectors.d.ts +1 -1
  170. package/lib/dashboard/store/manifest.service.d.ts +1 -1
  171. package/package.json +31 -25
  172. package/presentation/components/add-edit-presentation/add-edit-presentation.component.d.ts +4 -3
  173. package/presentation/components/presentation.component.d.ts +2 -2
  174. package/presentation/style/_o-pry-new-presentation.scss +7 -0
  175. package/restitution/components/restitution-list-item/restitution-list-item.component.d.ts +3 -2
  176. package/schematics/ng-add/index.js +7 -1
  177. package/schematics/ng-add/index.js.map +1 -1
  178. package/schematics/ng-add/schema.json +2 -1
  179. package/styles/components/_o-tabs.scss +1 -7
  180. package/styles/layout/_o-base-layout.scss +8 -1
  181. package/supervision/components/supervision-integration-errors/supervision-integration-errors-select/supervision-integration-errors-select.component.d.ts +1 -1
  182. package/supervision/store/supervision.actions.d.ts +2 -2
  183. package/supervision/store/supervision.reducer.d.ts +1 -1
  184. package/supervision/store/supervision.selectors.d.ts +1 -1
  185. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +7 -0
  186. package/widgets/widget-aggregated-chart/i18n/fr.translations.d.ts +0 -1
  187. package/widgets/widget-map/component/widget-map.component.d.ts +3 -1
  188. package/widgets/widget-map/utils/xml-utils.class.d.ts +2 -0
  189. package/widgets/widget-vega/component/widget-vega.component.d.ts +37 -0
  190. package/widgets/widget-vega/i18n/en.translations.d.ts +10 -0
  191. package/widgets/widget-vega/i18n/fr.translations.d.ts +10 -0
  192. package/widgets/widget-vega/index.d.ts +5 -0
  193. package/widgets/widget-vega/public-api.d.ts +2 -0
  194. package/widgets/widget-vega/style/_o-widget-vega.scss +6 -0
  195. package/widgets/widget-vega/style/css.component.d.ts +5 -0
  196. package/widgets/widget-vega/widget-vega.module.d.ts +19 -0
@@ -1,7 +1,7 @@
1
1
  import * as i3 from '@angular/common';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { EventEmitter, Component, Input, Output, Injectable, NgModule } from '@angular/core';
4
+ import { Component, ViewEncapsulation, EventEmitter, Input, Output, Injectable, NgModule } from '@angular/core';
5
5
  import * as i2 from '@angular/forms';
6
6
  import { Validators, ReactiveFormsModule } from '@angular/forms';
7
7
  import * as i1$2 from '@ngrx/effects';
@@ -37,7 +37,19 @@ const MetadataActions = {
37
37
  isEditable: createAction(`[Metadata] Is editable`, props()),
38
38
  loadDatasetMetadata: createAction(`[Metadata] Load Metadata of selected Datasets`, props()),
39
39
  loadDatasetMetadataSuccess: createAction(`[Metadata] Load Metadata of selected Datasets Success`, props()),
40
- loadDatasetMetadataFailure: createAction(`[Metadata] Load Metadata of selected Datasets Failure`, props())
40
+ loadDatasetMetadataFailure: createAction(`[Metadata] Load Metadata of selected Datasets Failure`, props()),
41
+ loadMetadataUser: createAction(`[Metadata/User] Load Metadata of selected Users`, props()),
42
+ loadMetadataUserSuccess: createAction(`[Metadata/User] Load Metadata of selected Users Success`, props()),
43
+ loadMetadataUserFailure: createAction(`[Metadata/User] Load Metadata of selected Users Failure`, props()),
44
+ addMetadataUser: createAction(`[Metadata/User] Add Metadata of selected Users`, props()),
45
+ addMetadataUserSuccess: createAction(`[Metadata/User] Add Metadata of selected Users Success`, props()),
46
+ addMetadataUserFailure: createAction(`[Metadata/User] Add Metadata of selected Users Failure`, props()),
47
+ deleteMetadataUser: createAction(`[Metadata/User] Delete Metadata of selected Users`, props()),
48
+ deleteMetadataUserSuccess: createAction(`[Metadata/User] Delete Metadata of selected Users Success`, props()),
49
+ deleteMetadataUserFailure: createAction(`[Metadata/User] Delete Metadata of selected Users Failure`, props()),
50
+ loadUserProfile: createAction(`[Metadata/User] Load Metadata`),
51
+ loadUserProfileSuccess: createAction(`[Metadata/User] Load Success`, props()),
52
+ loadUserProfileFailure: createAction(`[Metadata/User] Load Failure`, props())
41
53
  };
42
54
 
43
55
  const metadataFeatureKey = '@pry/metadata';
@@ -46,7 +58,9 @@ const initialMetadataState = {
46
58
  selectedMetadata: null,
47
59
  loading: false,
48
60
  errors: null,
49
- editable: false
61
+ editable: false,
62
+ selectedUserProfile: [],
63
+ userProfile: []
50
64
  };
51
65
  /**
52
66
  * @TODO merge this store with admin user store ?
@@ -75,6 +89,20 @@ const metadataReducer = createReducer(initialMetadataState, on(MetadataActions.l
75
89
  })), on(MetadataActions.isEditable, (state, action) => ({
76
90
  ...state,
77
91
  editable: action.editable
92
+ })), on(MetadataActions.loadMetadataUserSuccess, (state, action) => ({
93
+ ...state,
94
+ selectedUserProfile: action.metadata
95
+ })), on(MetadataActions.loadUserProfile, (state) => ({
96
+ ...state,
97
+ loading: true
98
+ })), on(MetadataActions.loadUserProfileSuccess, (state, action) => ({
99
+ ...state,
100
+ userProfile: [...action.userProfile],
101
+ loading: false
102
+ })), on(MetadataActions.loadUserProfileFailure, (state, action) => ({
103
+ ...state,
104
+ loading: false,
105
+ errors: action.error
78
106
  })));
79
107
 
80
108
  const feature = createFeatureSelector(metadataFeatureKey);
@@ -84,6 +112,8 @@ const selectedMetadata = createSelector(feature, (state) => state?.metadata.find
84
112
  const selectedMetadataId = createSelector(selectedMetadata, (metadata) => metadata?.id);
85
113
  const selectMetadataById = (id) => createSelector(metadata, (metadata) => metadata?.find((m) => m.id === id));
86
114
  const editable = createSelector(feature, (state) => state.editable);
115
+ const selectedUserProfile = createSelector(feature, (state) => state?.selectedUserProfile);
116
+ const userProfile = createSelector(feature, (state) => state?.userProfile ?? []);
87
117
  const MetadataSelectors = {
88
118
  feature,
89
119
  loading,
@@ -91,69 +121,68 @@ const MetadataSelectors = {
91
121
  selectedMetadata,
92
122
  selectedMetadataId,
93
123
  selectMetadataById,
94
- editable
124
+ editable,
125
+ selectedUserProfile,
126
+ userProfile
95
127
  };
96
128
 
129
+ class PryMetadataEditorCssComponent {
130
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryMetadataEditorCssComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
131
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryMetadataEditorCssComponent, selector: "pry-metadata-editor-css", ngImport: i0, template: '', isInline: true, styles: [".o-metadata-editor ng-select{position:absolute;width:80%}.o-metadata-editor__container{min-height:3.4375rem}\n"], encapsulation: i0.ViewEncapsulation.None }); }
132
+ }
133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryMetadataEditorCssComponent, decorators: [{
134
+ type: Component,
135
+ args: [{ selector: 'pry-metadata-editor-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".o-metadata-editor ng-select{position:absolute;width:80%}.o-metadata-editor__container{min-height:3.4375rem}\n"] }]
136
+ }] });
137
+
97
138
  const INTEGER_REGEXP_PATTERN = '^[+-]?[0-9]*$';
98
139
  const DOUBLE_REGEXP_PATTERN = '[+-]?([0-9]*[.])?[0-9]+';
99
140
  class PryMetadataEditorComponent extends SubscriptionnerDirective {
141
+ set type(type) {
142
+ this._type$.next(type);
143
+ }
100
144
  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
145
  this._metadata$.next(metadata);
110
146
  }
111
- set initialMetadataSelection(metadataName) {
112
- this._initialMetadataSelection$.next(metadataName);
113
- }
114
147
  constructor(store, formBuilder) {
115
148
  super();
116
149
  this.store = store;
117
150
  this.formBuilder = formBuilder;
118
151
  this._metadata$ = new BehaviorSubject([]);
119
- this._initialMetadataSelection$ = new BehaviorSubject('');
120
152
  this.isSubmitted = false;
121
- this.targetId = '';
122
- this.editable = false;
123
- this.type = 'meta';
153
+ this.isModification = false;
154
+ this._type$ = new BehaviorSubject('meta');
124
155
  this.addMeta = new EventEmitter();
125
156
  this.removeMeta = new EventEmitter();
157
+ this.targetId = '';
126
158
  this.form = this.formBuilder.group({
127
159
  metadata: [{}, [Validators.required]],
128
160
  value: ['', [Validators.required, Validators.pattern(INTEGER_REGEXP_PATTERN)]]
129
161
  });
130
162
  this.metadataDefs$ = this.store.select(MetadataSelectors.metadata);
131
- this.availableMetadata$ = combineLatest([this._metadata$, this.metadataDefs$]).pipe(map(([metadata, metaDefs]) => {
132
- let datasetMetadataIds = metadata?.map((u) => this.type === 'meta' ? u.metadataDef.id : u.userProfile);
133
- return metaDefs.filter((meta) => !datasetMetadataIds?.includes(meta.id));
134
- }));
135
- this.subscriptions.add(combineLatest([
136
- this.metadataDefs$,
137
- this.availableMetadata$,
163
+ this.userProfileDefs$ = this.store.select(MetadataSelectors.userProfile);
164
+ this.availableMetadata$ = combineLatest([
165
+ this._type$,
138
166
  this._metadata$,
139
- this._initialMetadataSelection$
140
- ]).subscribe(([allMeta, availableMeta, inputMeta, initiallySelectedMeta]) => {
141
- let initiallySelectedMetaAvailable = availableMeta.find((metadata) => metadata.name === initiallySelectedMeta);
142
- if (!!initiallySelectedMetaAvailable) {
143
- this.form.patchValue({
144
- metadata: initiallySelectedMetaAvailable ?? availableMeta[0]
145
- });
146
- this.onMetaChange(initiallySelectedMetaAvailable ?? availableMeta[0]);
147
- this.form.patchValue({ value: '' });
167
+ this.metadataDefs$,
168
+ this.userProfileDefs$
169
+ ]).pipe(map(([type, metadata, metaDefs, userProfileDefs]) => {
170
+ if (type === 'meta') {
171
+ let datasetMetadataIds = metadata?.map((u) => u.metadataDef.id);
172
+ return metaDefs.filter((meta) => !datasetMetadataIds?.includes(meta.id));
148
173
  }
149
174
  else {
150
- this.store.dispatch(MetadataActions.isEditable({ editable: true }));
151
- this.form.patchValue({
152
- metadata: allMeta.find((metadata) => metadata.name === initiallySelectedMeta),
153
- value: inputMeta.find((meta) => this.metaDefinition(meta).name === initiallySelectedMeta)?.value
154
- });
175
+ let userProfileIds = metadata?.map((u) => u.userProfile.id);
176
+ return (userProfileDefs ?? []).filter((meta) => !userProfileIds?.includes(meta.id));
155
177
  }
156
178
  }));
179
+ this.subscriptions.add(this.availableMetadata$.subscribe((meta) => {
180
+ this.form.patchValue({
181
+ metadata: meta[0]
182
+ });
183
+ this.onMetaChange(meta[0]);
184
+ this.form.patchValue({ value: '' });
185
+ }));
157
186
  }
158
187
  onMetaChange(metadata) {
159
188
  if (metadata) {
@@ -166,6 +195,10 @@ class PryMetadataEditorComponent extends SubscriptionnerDirective {
166
195
  else {
167
196
  this.form.controls['value'].setValidators([Validators.required]);
168
197
  }
198
+ this.isModification = true;
199
+ }
200
+ else {
201
+ this.isModification = false;
169
202
  }
170
203
  }
171
204
  editMetadata(currentMetadata) {
@@ -179,7 +212,9 @@ class PryMetadataEditorComponent extends SubscriptionnerDirective {
179
212
  this.onMetaChange(datasetMetadataDef);
180
213
  }
181
214
  metaDefinition(metadata) {
182
- return this.type === 'user' ? metadata.userProfile : metadata.metadataDef;
215
+ return this._type$.getValue() === 'user'
216
+ ? metadata.userProfile
217
+ : metadata.metadataDef;
183
218
  }
184
219
  removeMetadata(metadata) {
185
220
  this.removeMeta.emit({ id: this.targetId, metadataId: this.metaDefinition(metadata).id });
@@ -196,22 +231,22 @@ class PryMetadataEditorComponent extends SubscriptionnerDirective {
196
231
  }
197
232
  }
198
233
  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 }); }
199
- 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", initialMetadataSelection: "initialMetadataSelection" }, outputs: { addMeta: "addMeta", removeMeta: "removeMeta" }, usesInheritance: true, ngImport: i0, template: "<div *ngFor=\"let metadata of (_metadata$ | async) ?? []\">\n <div class=\"o-tabs__panel__content__actions\">\n <div class=\"o-tabs__panel__content__actions__text\">\n <span class=\"o-tabs__panel__content__actions__text__label\">{{ metaDefinition(metadata).name }} :</span>\n <span class=\"o-tabs__panel__content__actions__text__value\">{{ metadata.value }}</span>\n </div>\n\n <div class=\"o-tabs__panel__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\">{{ '@pry.action.delete' | i18n }} {{ metaDefinition(metadata).name }}</span>\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\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.action.editMetadata' : '@pry.action.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" }] }); }
234
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryMetadataEditorComponent, selector: "pry-metadata-editor", inputs: { isModification: "isModification", targetId: "targetId", type: "type", metadata: "metadata" }, outputs: { addMeta: "addMeta", removeMeta: "removeMeta" }, usesInheritance: true, ngImport: i0, template: "<pry-metadata-editor-css></pry-metadata-editor-css>\n<div *ngFor=\"let metadata of (_metadata$ | async) ?? []\">\n <div class=\"o-tabs__panel__content__actions\">\n <div class=\"o-tabs__panel__content__actions__text\">\n <span class=\"o-tabs__panel__content__actions__text__label\">{{ metaDefinition(metadata).name }} :</span>\n <span class=\"o-tabs__panel__content__actions__text__value\">{{ metadata.value }}</span>\n </div>\n\n <div class=\"o-tabs__panel__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\">{{ '@pry.action.delete' | i18n }} {{ metaDefinition(metadata).name }}</span>\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\n<ng-container *pryAccess=\"{ module: 'admin', page: 'dataset', action: 'write' }\">\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 o-metadata-editor__container\">\n <label for=\"metadata\" id=\"metadata-label\" class=\"a-label\">Data</label>\n <pry-select\n id=\"metadata\"\n class=\"a-pry-select o-metadata-editor\"\n formControlName=\"metadata\"\n [items]=\"availableMetadata$ | async\"\n (ngModelChange)=\"onMetaChange($event)\"\n [isForm]=\"true\"\n [itemsAsOption]=\"true\"\n bindLabel=\"name\"\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\">\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 </ng-container>\n </fieldset>\n\n <div class=\"m-btn-group -end\">\n <button type=\"submit\" class=\"a-btn a-btn--primary\">\n {{ (isModification ? '@pry.action.editMetadata' : '@pry.action.addMetadata') | i18n }}\n </button>\n </div>\n </form>\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: "component", type: PryMetadataEditorCssComponent, selector: "pry-metadata-editor-css" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
200
235
  }
201
236
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryMetadataEditorComponent, decorators: [{
202
237
  type: Component,
203
- args: [{ selector: 'pry-metadata-editor', template: "<div *ngFor=\"let metadata of (_metadata$ | async) ?? []\">\n <div class=\"o-tabs__panel__content__actions\">\n <div class=\"o-tabs__panel__content__actions__text\">\n <span class=\"o-tabs__panel__content__actions__text__label\">{{ metaDefinition(metadata).name }} :</span>\n <span class=\"o-tabs__panel__content__actions__text__value\">{{ metadata.value }}</span>\n </div>\n\n <div class=\"o-tabs__panel__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\">{{ '@pry.action.delete' | i18n }} {{ metaDefinition(metadata).name }}</span>\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\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.action.editMetadata' : '@pry.action.addMetadata') | i18n }}\n </button>\n </div>\n </form>\n </ng-container>\n</ng-container>\n" }]
204
- }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.FormBuilder }]; }, propDecorators: { targetId: [{
205
- type: Input
206
- }], editable: [{
238
+ args: [{ selector: 'pry-metadata-editor', template: "<pry-metadata-editor-css></pry-metadata-editor-css>\n<div *ngFor=\"let metadata of (_metadata$ | async) ?? []\">\n <div class=\"o-tabs__panel__content__actions\">\n <div class=\"o-tabs__panel__content__actions__text\">\n <span class=\"o-tabs__panel__content__actions__text__label\">{{ metaDefinition(metadata).name }} :</span>\n <span class=\"o-tabs__panel__content__actions__text__value\">{{ metadata.value }}</span>\n </div>\n\n <div class=\"o-tabs__panel__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\">{{ '@pry.action.delete' | i18n }} {{ metaDefinition(metadata).name }}</span>\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\n<ng-container *pryAccess=\"{ module: 'admin', page: 'dataset', action: 'write' }\">\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 o-metadata-editor__container\">\n <label for=\"metadata\" id=\"metadata-label\" class=\"a-label\">Data</label>\n <pry-select\n id=\"metadata\"\n class=\"a-pry-select o-metadata-editor\"\n formControlName=\"metadata\"\n [items]=\"availableMetadata$ | async\"\n (ngModelChange)=\"onMetaChange($event)\"\n [isForm]=\"true\"\n [itemsAsOption]=\"true\"\n bindLabel=\"name\"\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\">\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 </ng-container>\n </fieldset>\n\n <div class=\"m-btn-group -end\">\n <button type=\"submit\" class=\"a-btn a-btn--primary\">\n {{ (isModification ? '@pry.action.editMetadata' : '@pry.action.addMetadata') | i18n }}\n </button>\n </div>\n </form>\n</ng-container>\n" }]
239
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.FormBuilder }]; }, propDecorators: { isModification: [{
207
240
  type: Input
208
241
  }], addMeta: [{
209
242
  type: Output
210
243
  }], removeMeta: [{
211
244
  type: Output
212
- }], metadata: [{
245
+ }], targetId: [{
213
246
  type: Input
214
- }], initialMetadataSelection: [{
247
+ }], type: [{
248
+ type: Input
249
+ }], metadata: [{
215
250
  type: Input
216
251
  }] } });
217
252
 
@@ -235,6 +270,26 @@ class MetadataService {
235
270
  .select(ConfigSelectors.refUrl)
236
271
  .pipe(mergeMap((url) => this.httpClient.post(`${url}/metadata`, metadata)));
237
272
  }
273
+ getMetadataUser(userId) {
274
+ return this.store
275
+ .select(ConfigSelectors.refUrl)
276
+ .pipe(mergeMap((url) => this.httpClient.get(`${url}/users/id/${userId}/metadata`)));
277
+ }
278
+ addMetadataUser(userId, metaId, value) {
279
+ return this.store.select(ConfigSelectors.refUrl).pipe(mergeMap((url) => this.httpClient.put(encodeURI(`${url}/users/id/${userId}/metadata/id/${metaId}`), {
280
+ value: value
281
+ })));
282
+ }
283
+ deleteMetadataUser(userId, metaId) {
284
+ return this.store
285
+ .select(ConfigSelectors.refUrl)
286
+ .pipe(mergeMap((url) => this.httpClient.delete(encodeURI(`${url}/users/id/${userId}/metadata/id/${metaId}`))));
287
+ }
288
+ getUserMetadata() {
289
+ return this.store
290
+ .select(ConfigSelectors.refUrl)
291
+ .pipe(mergeMap((url) => this.httpClient.get(`${url}/users/metadata`)));
292
+ }
238
293
  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 }); }
239
294
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: MetadataService, providedIn: 'root' }); }
240
295
  }
@@ -272,6 +327,26 @@ class MetadataEffects {
272
327
  DataSourceActions.dataset.loadDataset()
273
328
  ];
274
329
  })));
330
+ this.loadMetadataUser$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.loadMetadataUser), mergeMap$1((action) => this.service.getMetadataUser(action.userId).pipe(map$1((metadata) => MetadataActions.loadMetadataUserSuccess({ metadata })), catchError((error) => [MetadataActions.loadMetadataUserFailure({ error })])))));
331
+ this.selectUser$ = createEffect(() => this.actions$.pipe(ofType('[Admin/User] Select User'), map$1((action) => {
332
+ // @ts-ignore
333
+ return MetadataActions.loadMetadataUser({ userId: action.userId });
334
+ })));
335
+ this.addMetadataUser$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.addMetadataUser), mergeMap$1((action) => this.service.addMetadataUser(action.userId, action.metaId, action.value).pipe(map$1(() => MetadataActions.addMetadataUserSuccess({ userId: action.userId })), catchError((error) => [MetadataActions.addMetadataUserFailure({ error })])))));
336
+ this.addMetadataUserSuccess$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.addMetadataUserSuccess), mergeMap$1((action) => {
337
+ return [
338
+ MetadataActions.loadMetadataUser({ userId: action.userId }),
339
+ MetadataActions.isEditable({ editable: false })
340
+ ];
341
+ })));
342
+ this.deleteMetadataUser$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.deleteMetadataUser), mergeMap$1((action) => this.service.deleteMetadataUser(action.userId, action.metadataId).pipe(map$1(() => MetadataActions.deleteMetadataUserSuccess({ userId: action.userId })), catchError((error) => [MetadataActions.deleteMetadataUserFailure({ error })])))));
343
+ this.deleteMetadataUserSuccess$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.deleteMetadataUserSuccess), mergeMap$1((action) => {
344
+ return [
345
+ MetadataActions.loadMetadataUser({ userId: action.userId }),
346
+ MetadataActions.isEditable({ editable: false })
347
+ ];
348
+ })));
349
+ this.loadUserProfile$ = createEffect(() => this.actions$.pipe(ofType(MetadataActions.loadUserProfile), mergeMap$1((_) => this.service.getUserMetadata().pipe(map$1((metadata) => MetadataActions.loadUserProfileSuccess({ userProfile: metadata })), catchError((error) => [MetadataActions.loadUserProfileFailure({ error: error })])))));
275
350
  }
276
351
  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 }); }
277
352
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: MetadataEffects }); }
@@ -280,14 +355,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
280
355
  type: Injectable
281
356
  }], ctorParameters: function () { return [{ type: i1$2.Actions }, { type: MetadataService }, { type: i4.DataSourceService }]; } });
282
357
 
283
- const PRY_METADATA_EDITOR_COMPONENTS = [PryMetadataEditorComponent];
358
+ const PRY_METADATA_EDITOR_COMPONENTS = [PryMetadataEditorComponent, PryMetadataEditorCssComponent];
284
359
  class PryExpandPanelModule {
285
360
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryExpandPanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
286
- 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,
361
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.6", ngImport: i0, type: PryExpandPanelModule, declarations: [PryMetadataEditorComponent, PryMetadataEditorCssComponent], imports: [CommonModule, i1.StoreFeatureModule, i1$2.EffectsFeatureModule, PryCoreModule,
287
362
  PryI18nModule,
288
363
  ReactiveFormsModule,
289
364
  PrySelectModule,
290
- PryIconModule], exports: [PryMetadataEditorComponent] }); }
365
+ PryIconModule], exports: [PryMetadataEditorComponent, PryMetadataEditorCssComponent] }); }
291
366
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryExpandPanelModule, imports: [CommonModule,
292
367
  StoreModule.forFeature(metadataFeatureKey, metadataReducer),
293
368
  EffectsModule.forFeature([MetadataEffects]),
@@ -319,5 +394,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
319
394
  * Generated bundle index. Do not edit.
320
395
  */
321
396
 
322
- export { DOUBLE_REGEXP_PATTERN, INTEGER_REGEXP_PATTERN, MetadataActions, MetadataEffects, MetadataSelectors, MetadataService, PryExpandPanelModule, PryMetadataEditorComponent, initialMetadataState, metadataFeatureKey, metadataReducer };
397
+ export { DOUBLE_REGEXP_PATTERN, INTEGER_REGEXP_PATTERN, MetadataActions, MetadataEffects, MetadataSelectors, MetadataService, PryExpandPanelModule, PryMetadataEditorComponent, PryMetadataEditorCssComponent, initialMetadataState, metadataFeatureKey, metadataReducer };
323
398
  //# sourceMappingURL=provoly-dashboard-components-metadata-editor.mjs.map