@provoly/dashboard 1.2.7 → 1.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin/admin.module.d.ts +16 -15
- package/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.d.ts +5 -16
- package/admin/components/admin-dataset/{shared/admin-form-dataset → admin-form-dataset}/admin-form-dataset.component.d.ts +8 -7
- package/admin/components/admin-dataset/store/admin-dataset.actions.d.ts +23 -18
- package/admin/components/admin-dataset/store/admin-dataset.effects.d.ts +9 -6
- package/admin/components/admin-dataset/store/admin-dataset.service.d.ts +2 -1
- package/admin/components/shared/add-category-modal/add-category-modal.component.d.ts +39 -0
- package/admin/i18n/en.translations.d.ts +23 -8
- package/admin/i18n/fr.translations.d.ts +23 -8
- package/dataset/components/dataset.component.d.ts +6 -2
- package/dataset/dataset.module.d.ts +1 -1
- package/dataset/i18n/en.translations.d.ts +8 -0
- package/dataset/i18n/fr.translations.d.ts +8 -0
- package/dataset/style/_o-pry-dataset-card.scss +19 -11
- package/dataset/style/_o-pry-dataset.scss +43 -11
- package/esm2022/admin/admin.module.mjs +7 -4
- package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +22 -53
- package/esm2022/admin/components/admin-dataset/admin-edit-dataset/admin-edit-dataset.component.mjs +1 -1
- package/esm2022/admin/components/admin-dataset/admin-form-dataset/admin-form-dataset.component.mjs +115 -0
- package/esm2022/admin/components/admin-dataset/admin-new-dataset/admin-new-dataset.component.mjs +1 -1
- package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +3 -3
- package/esm2022/admin/components/admin-dataset/store/admin-dataset.actions.mjs +11 -10
- package/esm2022/admin/components/admin-dataset/store/admin-dataset.effects.mjs +2 -1
- package/esm2022/admin/components/admin-dataset/store/admin-dataset.service.mjs +10 -4
- package/esm2022/admin/components/shared/add-category-modal/add-category-modal.component.mjs +73 -0
- package/esm2022/admin/i18n/en.translations.mjs +25 -10
- package/esm2022/admin/i18n/fr.translations.mjs +26 -11
- package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +6 -6
- package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +3 -3
- package/esm2022/dataset/components/dataset.component.mjs +16 -6
- package/esm2022/dataset/dataset.module.mjs +8 -5
- package/esm2022/dataset/i18n/en.translations.mjs +9 -1
- package/esm2022/dataset/i18n/fr.translations.mjs +10 -2
- package/esm2022/dataset/style/css.component.mjs +2 -2
- package/esm2022/lib/core/components/share/access-rights-share/access-rights-share.component.mjs +1 -3
- package/esm2022/lib/core/components/share/access-rights-share-modal/access-rights-share-modal.component.mjs +11 -9
- package/esm2022/lib/core/components/share/share.utils.mjs +7 -4
- package/esm2022/lib/core/store/data-source/data-source.actions.mjs +4 -2
- package/esm2022/lib/core/store/data-source/data-source.effects.mjs +4 -1
- package/esm2022/lib/core/store/data-source/data-source.model.mjs +1 -1
- package/esm2022/lib/core/store/data-source/data-source.reducer.mjs +6 -2
- package/esm2022/lib/core/store/data-source/data-source.selectors.mjs +4 -2
- package/esm2022/lib/core/store/data-source/data-source.service.mjs +6 -1
- package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +3 -3
- package/esm2022/toolbox/components/save-view/save-view.component.mjs +7 -1
- package/esm2022/toolbox/shared/presentation-form/presentation-form.component.mjs +3 -3
- package/fesm2022/provoly-dashboard-admin.mjs +194 -105
- package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-dataset.mjs +45 -16
- package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +2 -2
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-toolbox.mjs +8 -2
- package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +50 -16
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/lib/core/components/share/share.utils.d.ts +1 -1
- package/lib/core/store/data-source/data-source.actions.d.ts +7 -0
- package/lib/core/store/data-source/data-source.effects.d.ts +3 -0
- package/lib/core/store/data-source/data-source.model.d.ts +3 -0
- package/lib/core/store/data-source/data-source.reducer.d.ts +2 -0
- package/lib/core/store/data-source/data-source.selectors.d.ts +1 -0
- package/lib/core/store/data-source/data-source.service.d.ts +2 -0
- package/package.json +48 -48
- package/styles/base/_typography.scss +4 -0
- package/styles/base/_utils.scss +27 -1
- package/styles/components/_a-btn.scss +4 -0
- package/styles/components/_a-chip.scss +1 -0
- package/styles/components/_o-modal.scss +0 -42
- package/styles/layout/_o-base-layout.scss +1 -7
- package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +0 -99
|
@@ -10,7 +10,7 @@ export declare const WRITE_ACCESS = "WRITE";
|
|
|
10
10
|
export declare const getGroupLabel: (group: Group, i18n: PryI18nService) => string;
|
|
11
11
|
export declare const getGroupLabelByName: (groupName: string, i18n: PryI18nService) => string;
|
|
12
12
|
export declare const canManifestBeMadePublic: (manifest: ManifestDescription, datasets: Dataset[]) => boolean;
|
|
13
|
-
export declare const getCommonDatasourceGroupsForManifest: (manifest: ManifestDescription, datasets: Dataset[]) => string[];
|
|
13
|
+
export declare const getCommonDatasourceGroupsForManifest: (manifest: ManifestDescription, datasets: Dataset[], allGroups: Group[]) => string[];
|
|
14
14
|
export declare const getAccessRightsArrayByGroup: (accessByGroup: {
|
|
15
15
|
[key: string]: string;
|
|
16
16
|
}) => {
|
|
@@ -2,6 +2,7 @@ import { DatasetPreview } from '../../model/dataset.interface';
|
|
|
2
2
|
import { MonoClassSearchPayload } from '../../model/search-mono-class.model';
|
|
3
3
|
import { FullTextSearchPayload, MultiClassSearchPayload } from '../../model/search-multi-class.model';
|
|
4
4
|
import { Dataset, DatasetVersion, NamedQuery, PryVisibilityType } from './data-source.model';
|
|
5
|
+
import { Category } from '../category/category.interface';
|
|
5
6
|
export declare const DataSourceActions: {
|
|
6
7
|
load: import("@ngrx/store").ActionCreator<"[Datasource] load", () => import("@ngrx/store/src/models").TypedAction<"[Datasource] load">>;
|
|
7
8
|
namedQuery: {
|
|
@@ -191,5 +192,11 @@ export declare const DataSourceActions: {
|
|
|
191
192
|
}) => {
|
|
192
193
|
err: any;
|
|
193
194
|
} & import("@ngrx/store/src/models").TypedAction<"[Dataset] Delete datasetVersion failure">>;
|
|
195
|
+
getCategories: import("@ngrx/store").ActionCreator<"[Dataset] Get Categories", () => import("@ngrx/store/src/models").TypedAction<"[Dataset] Get Categories">>;
|
|
196
|
+
getCategoriesSuccess: import("@ngrx/store").ActionCreator<"[Dataset] Get Categories Success", (props: {
|
|
197
|
+
categories: Category[];
|
|
198
|
+
}) => {
|
|
199
|
+
categories: Category[];
|
|
200
|
+
} & import("@ngrx/store/src/models").TypedAction<"[Dataset] Get Categories Success">>;
|
|
194
201
|
};
|
|
195
202
|
};
|
|
@@ -85,6 +85,9 @@ export declare class DataSourceEffects {
|
|
|
85
85
|
} & import("@ngrx/store/src/models").TypedAction<"[Dataset] Get Dataset Versions by Dataset Id">) | ({
|
|
86
86
|
err: any;
|
|
87
87
|
} & import("@ngrx/store/src/models").TypedAction<"[Dataset] Delete datasetVersion failure">)> & import("@ngrx/effects").CreateEffectMetadata;
|
|
88
|
+
getCategories$: import("rxjs").Observable<{
|
|
89
|
+
categories: import("@provoly/dashboard").Category[];
|
|
90
|
+
} & import("@ngrx/store/src/models").TypedAction<"[Dataset] Get Categories Success">> & import("@ngrx/effects").CreateEffectMetadata;
|
|
88
91
|
static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceEffects, never>;
|
|
89
92
|
static ɵprov: i0.ɵɵInjectableDeclaration<DataSourceEffects>;
|
|
90
93
|
}
|
|
@@ -2,6 +2,7 @@ import { MetadataValue } from '../../model/admin-api.model';
|
|
|
2
2
|
import { PryDatasetType } from '../../model/dataset.interface';
|
|
3
3
|
import { MonoClassSearchPayload } from '../../model/search-mono-class.model';
|
|
4
4
|
import { FullTextSearchPayload, MultiClassSearchPayload } from '../../model/search-multi-class.model';
|
|
5
|
+
import { Category } from '../category/category.interface';
|
|
5
6
|
export type DataSource = NamedQuery | Dataset;
|
|
6
7
|
export interface NamedQuery extends DescriptionQuery {
|
|
7
8
|
sourceType: 'namedQuery';
|
|
@@ -33,6 +34,8 @@ export interface Dataset extends DescriptionQuery {
|
|
|
33
34
|
type: PryDatasetType;
|
|
34
35
|
owner?: boolean;
|
|
35
36
|
groups?: string[];
|
|
37
|
+
slug: string;
|
|
38
|
+
categories?: Category[];
|
|
36
39
|
}
|
|
37
40
|
export interface DatasetVersion {
|
|
38
41
|
id: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DatasetPreview } from '../../model/dataset.interface';
|
|
2
2
|
import { Dataset, DatasetVersion, NamedQuery } from './data-source.model';
|
|
3
|
+
import { Category } from '../category/category.interface';
|
|
3
4
|
export declare const dataSourceFeatureKey = "@pry/datasources";
|
|
4
5
|
export interface DataSourceState {
|
|
5
6
|
isLoading: boolean;
|
|
@@ -15,6 +16,7 @@ export interface DataSourceState {
|
|
|
15
16
|
datasetVersions: DatasetVersion[];
|
|
16
17
|
selectedDatasetVersion: DatasetVersion | null;
|
|
17
18
|
previews: DatasetPreview[];
|
|
19
|
+
categories: Category[];
|
|
18
20
|
}
|
|
19
21
|
export declare const initialDataSourceState: DataSourceState;
|
|
20
22
|
export declare const dataSourceReducer: import("@ngrx/store").ActionReducer<DataSourceState, import("@ngrx/store").Action>;
|
|
@@ -25,4 +25,5 @@ export declare const DataSourceSelectors: {
|
|
|
25
25
|
datasetVersions: MemoizedSelector<object, DatasetVersion[], (s1: DataSourceState) => DatasetVersion[]>;
|
|
26
26
|
matchingDatasetVersions: (datasetId: string) => MemoizedSelector<any, DatasetVersion[], import("@ngrx/store").DefaultProjectorFn<DatasetVersion[]>>;
|
|
27
27
|
datasetPreviews: MemoizedSelector<object, import("@provoly/dashboard").DatasetPreview[], (s1: DataSourceState) => import("@provoly/dashboard").DatasetPreview[]>;
|
|
28
|
+
categories: MemoizedSelector<object, import("@provoly/dashboard").Category[], (s1: DataSourceState) => import("@provoly/dashboard").Category[]>;
|
|
28
29
|
};
|
|
@@ -6,6 +6,7 @@ import { DatasetPreview } from '../../model/dataset.interface';
|
|
|
6
6
|
import { ConfigState } from '../config/config.reducer';
|
|
7
7
|
import { Dataset, DatasetVersion, NamedQuery } from './data-source.model';
|
|
8
8
|
import { DataSourceState } from './data-source.reducer';
|
|
9
|
+
import { Category } from '../category/category.interface';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
export interface ResponseRequest {
|
|
11
12
|
data: {
|
|
@@ -31,6 +32,7 @@ export declare class DataSourceService {
|
|
|
31
32
|
getLastActiveDatasetVersion(datasetId: string): Observable<DatasetVersion>;
|
|
32
33
|
updateDatasetVersionInfo(version: Partial<DatasetVersion>): Observable<DatasetVersion>;
|
|
33
34
|
deleteDatasetVersion(version: DatasetVersion): Observable<void>;
|
|
35
|
+
getCategories(): Observable<Category[]>;
|
|
34
36
|
static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceService, never>;
|
|
35
37
|
static ɵprov: i0.ɵɵInjectableDeclaration<DataSourceService>;
|
|
36
38
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@provoly/dashboard",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.9",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/cdk": "16.x || 17.x",
|
|
@@ -132,6 +132,36 @@
|
|
|
132
132
|
"esm": "./esm2022/toolbox/provoly-dashboard-toolbox.mjs",
|
|
133
133
|
"default": "./fesm2022/provoly-dashboard-toolbox.mjs"
|
|
134
134
|
},
|
|
135
|
+
"./filters/autocomplete": {
|
|
136
|
+
"types": "./filters/autocomplete/index.d.ts",
|
|
137
|
+
"esm2022": "./esm2022/filters/autocomplete/provoly-dashboard-filters-autocomplete.mjs",
|
|
138
|
+
"esm": "./esm2022/filters/autocomplete/provoly-dashboard-filters-autocomplete.mjs",
|
|
139
|
+
"default": "./fesm2022/provoly-dashboard-filters-autocomplete.mjs"
|
|
140
|
+
},
|
|
141
|
+
"./filters/date": {
|
|
142
|
+
"types": "./filters/date/index.d.ts",
|
|
143
|
+
"esm2022": "./esm2022/filters/date/provoly-dashboard-filters-date.mjs",
|
|
144
|
+
"esm": "./esm2022/filters/date/provoly-dashboard-filters-date.mjs",
|
|
145
|
+
"default": "./fesm2022/provoly-dashboard-filters-date.mjs"
|
|
146
|
+
},
|
|
147
|
+
"./filters/list": {
|
|
148
|
+
"types": "./filters/list/index.d.ts",
|
|
149
|
+
"esm2022": "./esm2022/filters/list/provoly-dashboard-filters-list.mjs",
|
|
150
|
+
"esm": "./esm2022/filters/list/provoly-dashboard-filters-list.mjs",
|
|
151
|
+
"default": "./fesm2022/provoly-dashboard-filters-list.mjs"
|
|
152
|
+
},
|
|
153
|
+
"./filters/number": {
|
|
154
|
+
"types": "./filters/number/index.d.ts",
|
|
155
|
+
"esm2022": "./esm2022/filters/number/provoly-dashboard-filters-number.mjs",
|
|
156
|
+
"esm": "./esm2022/filters/number/provoly-dashboard-filters-number.mjs",
|
|
157
|
+
"default": "./fesm2022/provoly-dashboard-filters-number.mjs"
|
|
158
|
+
},
|
|
159
|
+
"./filters/text": {
|
|
160
|
+
"types": "./filters/text/index.d.ts",
|
|
161
|
+
"esm2022": "./esm2022/filters/text/provoly-dashboard-filters-text.mjs",
|
|
162
|
+
"esm": "./esm2022/filters/text/provoly-dashboard-filters-text.mjs",
|
|
163
|
+
"default": "./fesm2022/provoly-dashboard-filters-text.mjs"
|
|
164
|
+
},
|
|
135
165
|
"./components/card": {
|
|
136
166
|
"types": "./components/card/index.d.ts",
|
|
137
167
|
"esm2022": "./esm2022/components/card/provoly-dashboard-components-card.mjs",
|
|
@@ -174,65 +204,35 @@
|
|
|
174
204
|
"esm": "./esm2022/components/metadata-editor/provoly-dashboard-components-metadata-editor.mjs",
|
|
175
205
|
"default": "./fesm2022/provoly-dashboard-components-metadata-editor.mjs"
|
|
176
206
|
},
|
|
177
|
-
"./components/scheme-picker": {
|
|
178
|
-
"types": "./components/scheme-picker/index.d.ts",
|
|
179
|
-
"esm2022": "./esm2022/components/scheme-picker/provoly-dashboard-components-scheme-picker.mjs",
|
|
180
|
-
"esm": "./esm2022/components/scheme-picker/provoly-dashboard-components-scheme-picker.mjs",
|
|
181
|
-
"default": "./fesm2022/provoly-dashboard-components-scheme-picker.mjs"
|
|
182
|
-
},
|
|
183
207
|
"./components/page-loader": {
|
|
184
208
|
"types": "./components/page-loader/index.d.ts",
|
|
185
209
|
"esm2022": "./esm2022/components/page-loader/provoly-dashboard-components-page-loader.mjs",
|
|
186
210
|
"esm": "./esm2022/components/page-loader/provoly-dashboard-components-page-loader.mjs",
|
|
187
211
|
"default": "./fesm2022/provoly-dashboard-components-page-loader.mjs"
|
|
188
212
|
},
|
|
213
|
+
"./components/scheme-picker": {
|
|
214
|
+
"types": "./components/scheme-picker/index.d.ts",
|
|
215
|
+
"esm2022": "./esm2022/components/scheme-picker/provoly-dashboard-components-scheme-picker.mjs",
|
|
216
|
+
"esm": "./esm2022/components/scheme-picker/provoly-dashboard-components-scheme-picker.mjs",
|
|
217
|
+
"default": "./fesm2022/provoly-dashboard-components-scheme-picker.mjs"
|
|
218
|
+
},
|
|
189
219
|
"./components/sinceDate": {
|
|
190
220
|
"types": "./components/sinceDate/index.d.ts",
|
|
191
221
|
"esm2022": "./esm2022/components/sinceDate/provoly-dashboard-components-sinceDate.mjs",
|
|
192
222
|
"esm": "./esm2022/components/sinceDate/provoly-dashboard-components-sinceDate.mjs",
|
|
193
223
|
"default": "./fesm2022/provoly-dashboard-components-sinceDate.mjs"
|
|
194
224
|
},
|
|
195
|
-
"./components/text-editor": {
|
|
196
|
-
"types": "./components/text-editor/index.d.ts",
|
|
197
|
-
"esm2022": "./esm2022/components/text-editor/provoly-dashboard-components-text-editor.mjs",
|
|
198
|
-
"esm": "./esm2022/components/text-editor/provoly-dashboard-components-text-editor.mjs",
|
|
199
|
-
"default": "./fesm2022/provoly-dashboard-components-text-editor.mjs"
|
|
200
|
-
},
|
|
201
225
|
"./components/stepper": {
|
|
202
226
|
"types": "./components/stepper/index.d.ts",
|
|
203
227
|
"esm2022": "./esm2022/components/stepper/provoly-dashboard-components-stepper.mjs",
|
|
204
228
|
"esm": "./esm2022/components/stepper/provoly-dashboard-components-stepper.mjs",
|
|
205
229
|
"default": "./fesm2022/provoly-dashboard-components-stepper.mjs"
|
|
206
230
|
},
|
|
207
|
-
"./
|
|
208
|
-
"types": "./
|
|
209
|
-
"esm2022": "./esm2022/
|
|
210
|
-
"esm": "./esm2022/
|
|
211
|
-
"default": "./fesm2022/provoly-dashboard-
|
|
212
|
-
},
|
|
213
|
-
"./filters/date": {
|
|
214
|
-
"types": "./filters/date/index.d.ts",
|
|
215
|
-
"esm2022": "./esm2022/filters/date/provoly-dashboard-filters-date.mjs",
|
|
216
|
-
"esm": "./esm2022/filters/date/provoly-dashboard-filters-date.mjs",
|
|
217
|
-
"default": "./fesm2022/provoly-dashboard-filters-date.mjs"
|
|
218
|
-
},
|
|
219
|
-
"./filters/list": {
|
|
220
|
-
"types": "./filters/list/index.d.ts",
|
|
221
|
-
"esm2022": "./esm2022/filters/list/provoly-dashboard-filters-list.mjs",
|
|
222
|
-
"esm": "./esm2022/filters/list/provoly-dashboard-filters-list.mjs",
|
|
223
|
-
"default": "./fesm2022/provoly-dashboard-filters-list.mjs"
|
|
224
|
-
},
|
|
225
|
-
"./filters/number": {
|
|
226
|
-
"types": "./filters/number/index.d.ts",
|
|
227
|
-
"esm2022": "./esm2022/filters/number/provoly-dashboard-filters-number.mjs",
|
|
228
|
-
"esm": "./esm2022/filters/number/provoly-dashboard-filters-number.mjs",
|
|
229
|
-
"default": "./fesm2022/provoly-dashboard-filters-number.mjs"
|
|
230
|
-
},
|
|
231
|
-
"./filters/text": {
|
|
232
|
-
"types": "./filters/text/index.d.ts",
|
|
233
|
-
"esm2022": "./esm2022/filters/text/provoly-dashboard-filters-text.mjs",
|
|
234
|
-
"esm": "./esm2022/filters/text/provoly-dashboard-filters-text.mjs",
|
|
235
|
-
"default": "./fesm2022/provoly-dashboard-filters-text.mjs"
|
|
231
|
+
"./components/text-editor": {
|
|
232
|
+
"types": "./components/text-editor/index.d.ts",
|
|
233
|
+
"esm2022": "./esm2022/components/text-editor/provoly-dashboard-components-text-editor.mjs",
|
|
234
|
+
"esm": "./esm2022/components/text-editor/provoly-dashboard-components-text-editor.mjs",
|
|
235
|
+
"default": "./fesm2022/provoly-dashboard-components-text-editor.mjs"
|
|
236
236
|
},
|
|
237
237
|
"./pipeline-components/filter": {
|
|
238
238
|
"types": "./pipeline-components/filter/index.d.ts",
|
|
@@ -300,18 +300,18 @@
|
|
|
300
300
|
"esm": "./esm2022/widgets/widget-detail/provoly-dashboard-widgets-widget-detail.mjs",
|
|
301
301
|
"default": "./fesm2022/provoly-dashboard-widgets-widget-detail.mjs"
|
|
302
302
|
},
|
|
303
|
-
"./widgets/widget-iframe": {
|
|
304
|
-
"types": "./widgets/widget-iframe/index.d.ts",
|
|
305
|
-
"esm2022": "./esm2022/widgets/widget-iframe/provoly-dashboard-widgets-widget-iframe.mjs",
|
|
306
|
-
"esm": "./esm2022/widgets/widget-iframe/provoly-dashboard-widgets-widget-iframe.mjs",
|
|
307
|
-
"default": "./fesm2022/provoly-dashboard-widgets-widget-iframe.mjs"
|
|
308
|
-
},
|
|
309
303
|
"./widgets/widget-graph": {
|
|
310
304
|
"types": "./widgets/widget-graph/index.d.ts",
|
|
311
305
|
"esm2022": "./esm2022/widgets/widget-graph/provoly-dashboard-widgets-widget-graph.mjs",
|
|
312
306
|
"esm": "./esm2022/widgets/widget-graph/provoly-dashboard-widgets-widget-graph.mjs",
|
|
313
307
|
"default": "./fesm2022/provoly-dashboard-widgets-widget-graph.mjs"
|
|
314
308
|
},
|
|
309
|
+
"./widgets/widget-iframe": {
|
|
310
|
+
"types": "./widgets/widget-iframe/index.d.ts",
|
|
311
|
+
"esm2022": "./esm2022/widgets/widget-iframe/provoly-dashboard-widgets-widget-iframe.mjs",
|
|
312
|
+
"esm": "./esm2022/widgets/widget-iframe/provoly-dashboard-widgets-widget-iframe.mjs",
|
|
313
|
+
"default": "./fesm2022/provoly-dashboard-widgets-widget-iframe.mjs"
|
|
314
|
+
},
|
|
315
315
|
"./widgets/widget-image": {
|
|
316
316
|
"types": "./widgets/widget-image/index.d.ts",
|
|
317
317
|
"esm2022": "./esm2022/widgets/widget-image/provoly-dashboard-widgets-widget-image.mjs",
|
package/styles/base/_utils.scss
CHANGED
|
@@ -36,6 +36,10 @@
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
.u-txt-left {
|
|
40
|
+
text-align: left;
|
|
41
|
+
}
|
|
42
|
+
|
|
39
43
|
.u-txt-center {
|
|
40
44
|
text-align: center;
|
|
41
45
|
}
|
|
@@ -49,14 +53,22 @@
|
|
|
49
53
|
align-items: center;
|
|
50
54
|
}
|
|
51
55
|
|
|
52
|
-
&.-align-start{
|
|
56
|
+
&.-align-start {
|
|
53
57
|
align-items: flex-start;
|
|
54
58
|
}
|
|
55
59
|
|
|
60
|
+
&.-justify-start {
|
|
61
|
+
justify-content: flex-start;
|
|
62
|
+
}
|
|
63
|
+
|
|
56
64
|
&.-justify-center {
|
|
57
65
|
justify-content: center;
|
|
58
66
|
}
|
|
59
67
|
|
|
68
|
+
&.-justify-end {
|
|
69
|
+
justify-content: flex-end;
|
|
70
|
+
}
|
|
71
|
+
|
|
60
72
|
&.-justify-space-between {
|
|
61
73
|
justify-content: space-between;
|
|
62
74
|
}
|
|
@@ -69,14 +81,28 @@
|
|
|
69
81
|
flex-direction: row;
|
|
70
82
|
}
|
|
71
83
|
|
|
84
|
+
&.-wrap {
|
|
85
|
+
flex-wrap: wrap;
|
|
86
|
+
}
|
|
87
|
+
|
|
72
88
|
&.-no-gap {
|
|
73
89
|
gap: 0;
|
|
74
90
|
}
|
|
91
|
+
|
|
75
92
|
&.-gap-10 {
|
|
76
93
|
gap: toRem(10);
|
|
77
94
|
}
|
|
95
|
+
|
|
96
|
+
&.-gap-20 {
|
|
97
|
+
gap: toRem(20);
|
|
98
|
+
}
|
|
78
99
|
}
|
|
79
100
|
|
|
101
|
+
.u-self-start {
|
|
102
|
+
align-self: start;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
|
|
80
106
|
.u-self-center {
|
|
81
107
|
align-self: center;
|
|
82
108
|
}
|
|
@@ -72,46 +72,4 @@
|
|
|
72
72
|
.m-btn-group {
|
|
73
73
|
padding-top: toRem(15);
|
|
74
74
|
}
|
|
75
|
-
|
|
76
|
-
// Version of modal with a filter/selector OR item creator (ex. admin/classes/nouvel attribut)
|
|
77
|
-
&--selector {
|
|
78
|
-
.m-form-label-field.selector {
|
|
79
|
-
position: relative;
|
|
80
|
-
// Color layer behind field
|
|
81
|
-
&:before {
|
|
82
|
-
content: '';
|
|
83
|
-
position: absolute;
|
|
84
|
-
z-index: -1;
|
|
85
|
-
top: toRem(-300);
|
|
86
|
-
bottom: toRem(-25);
|
|
87
|
-
left: toRem(-30);
|
|
88
|
-
right: toRem(-30);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.a-table {
|
|
93
|
-
tbody tr td {
|
|
94
|
-
padding: toRem(5);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
.a-btn--secondary.select-it {
|
|
98
|
-
justify-content: flex-start;
|
|
99
|
-
width: 100%;
|
|
100
|
-
height: 100%;
|
|
101
|
-
padding: toRem(10) toRem(2);
|
|
102
|
-
@include outlineOnFocus($border-radius: 2px);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
.a-p--create {
|
|
107
|
-
margin-top: toRem(15);
|
|
108
|
-
padding-bottom: toRem(10);
|
|
109
|
-
line-height: toRem(21);
|
|
110
|
-
|
|
111
|
-
+ .a-btn {
|
|
112
|
-
left: 50%;
|
|
113
|
-
transform: translateX(-50%);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
75
|
}
|
|
@@ -101,19 +101,13 @@
|
|
|
101
101
|
|
|
102
102
|
&.is-open {
|
|
103
103
|
overflow: hidden;
|
|
104
|
-
width:
|
|
104
|
+
width: 30rem;
|
|
105
105
|
-webkit-transition: width ease-in-out 0.6s;
|
|
106
106
|
transition: width ease-in-out 0.6s;
|
|
107
107
|
|
|
108
108
|
.o-base-layout__panel__content {
|
|
109
109
|
display: block;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
&.-model {
|
|
113
110
|
width: 30rem;
|
|
114
|
-
.o-base-layout__panel__content {
|
|
115
|
-
width: 30rem;
|
|
116
|
-
}
|
|
117
111
|
}
|
|
118
112
|
}
|
|
119
113
|
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { Validators } from '@angular/forms';
|
|
3
|
-
import { ClassActions, ClassSelectors, DataSourceActions, DataSourceSelectors, PryDatasetType } from '@provoly/dashboard';
|
|
4
|
-
import { Subscription } from 'rxjs';
|
|
5
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
6
|
-
import { AdminActions } from '../../../../store/admin.actions';
|
|
7
|
-
import { AdminDatasetActions } from '../../store/admin-dataset.actions';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@ngrx/store";
|
|
10
|
-
import * as i2 from "@angular/router";
|
|
11
|
-
import * as i3 from "@angular/forms";
|
|
12
|
-
import * as i4 from "@angular/common";
|
|
13
|
-
import * as i5 from "@provoly/dashboard";
|
|
14
|
-
export class AdminFormDatasetComponent {
|
|
15
|
-
constructor(store, router, route, formBuilder) {
|
|
16
|
-
this.store = store;
|
|
17
|
-
this.router = router;
|
|
18
|
-
this.route = route;
|
|
19
|
-
this.formBuilder = formBuilder;
|
|
20
|
-
this.datasetList = [];
|
|
21
|
-
this.datasetTypes = [];
|
|
22
|
-
this.sub = new Subscription();
|
|
23
|
-
this.isSameName = false;
|
|
24
|
-
this.isSubmitted = false;
|
|
25
|
-
this.store.dispatch(ClassActions.load());
|
|
26
|
-
this.store.dispatch(DataSourceActions.dataset.loadDataset());
|
|
27
|
-
this.datasetList$ = this.store.select(DataSourceSelectors.datasets);
|
|
28
|
-
this.classes = this.store.select(ClassSelectors.classes);
|
|
29
|
-
this.form = this.formBuilder.group({
|
|
30
|
-
id: [uuidv4()],
|
|
31
|
-
name: ['', [Validators.required, Validators.maxLength(100)]],
|
|
32
|
-
oClass: ['', [Validators.required]],
|
|
33
|
-
type: ['', [Validators.required]],
|
|
34
|
-
description: ['', [Validators.maxLength(500)]]
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
ngOnInit() {
|
|
38
|
-
this.isSameName = false;
|
|
39
|
-
this.sub = this.datasetList$.subscribe((dataset) => {
|
|
40
|
-
this.datasetList = dataset;
|
|
41
|
-
});
|
|
42
|
-
this.datasetTypes = Object.keys(PryDatasetType).map((label) => ({
|
|
43
|
-
label: '@pry.admin.dataset.' + label,
|
|
44
|
-
value: label
|
|
45
|
-
}));
|
|
46
|
-
this.sub.add(this.dataset$?.subscribe((dataset) => {
|
|
47
|
-
if (dataset) {
|
|
48
|
-
this.form.patchValue({
|
|
49
|
-
id: dataset.id,
|
|
50
|
-
name: dataset.name,
|
|
51
|
-
oClass: dataset.oClass,
|
|
52
|
-
type: dataset.type,
|
|
53
|
-
description: dataset.description
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}));
|
|
57
|
-
}
|
|
58
|
-
ngOnDestroy() {
|
|
59
|
-
this.sub.unsubscribe();
|
|
60
|
-
}
|
|
61
|
-
goBack() {
|
|
62
|
-
this.store.dispatch(AdminActions.routeTo({ path: this.getPath() }));
|
|
63
|
-
}
|
|
64
|
-
getPath() {
|
|
65
|
-
let path = this.router.createUrlTree(['..'], { relativeTo: this.route });
|
|
66
|
-
if (this.dataset$) {
|
|
67
|
-
path = this.router.createUrlTree(['../..'], { relativeTo: this.route });
|
|
68
|
-
}
|
|
69
|
-
return path.toString();
|
|
70
|
-
}
|
|
71
|
-
changeValueName(value) {
|
|
72
|
-
this.isSameName = false;
|
|
73
|
-
}
|
|
74
|
-
submit() {
|
|
75
|
-
this.isSubmitted = true;
|
|
76
|
-
if (this.form.valid) {
|
|
77
|
-
this.isSubmitted = false;
|
|
78
|
-
if (this.dataset$) {
|
|
79
|
-
const path = this.router.createUrlTree(['../..'], { relativeTo: this.route });
|
|
80
|
-
this.store.dispatch(AdminDatasetActions.update({ dataset: this.form.value, route: path.toString() }));
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
const path = this.router.createUrlTree(['..'], { relativeTo: this.route });
|
|
84
|
-
this.isSameName = !!this.datasetList.find((dataset) => this.form.get('name')?.value.toLowerCase() === dataset.name.toLowerCase());
|
|
85
|
-
if (!this.isSameName) {
|
|
86
|
-
this.store.dispatch(AdminDatasetActions.create({ dataset: this.form.value, route: path.toString() }));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AdminFormDatasetComponent, deps: [{ token: i1.Store }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
91
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: AdminFormDatasetComponent, selector: "pry-admin-form-dataset", inputs: { dataset$: "dataset$" }, ngImport: i0, template: "<form class=\"o-form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"name-label\" for=\"name\">\n {{ '@pry.admin.dataset.name' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"name\"\n type=\"text\"\n class=\"a-form-field\"\n formControlName=\"name\"\n (ngModelChange)=\"changeValueName($event)\"\n [attr.aria-labelledby]=\"isSubmitted && form.get('name')?.invalid ? 'name-label name-error' : 'name-label'\"\n [attr.aria-invalid]=\"isSubmitted && form.get('name')?.invalid\"\n required\n />\n <label\n class=\"a-label a-label--help -error\"\n id=\"name-error\"\n for=\"name\"\n *ngIf=\"isSubmitted && form.get('name')?.invalid\"\n >{{ '@pry.admin.required' | i18n }}</label\n >\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"description-label\" for=\"description\">{{ '@pry.admin.fields.description' | i18n }}</label>\n <textarea\n class=\"-resizable-both\"\n formControlName=\"description\"\n name=\"description\"\n id=\"description\"\n maxlength=\"500\"\n ></textarea>\n <label\n for=\"description\"\n *ngIf=\"form.get('description')?.hasError('maxlength')\"\n class=\"a-label a-label--help -error\"\n >\n {{ '@pry.presentation.maxLength' | i18n : { len: '500' } }}\n </label>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"item-label\" for=\"class\">{{ '@pry.admin.dataset.oClass' | i18n }}</label>\n <pry-select\n id=\"class\"\n formControlName=\"oClass\"\n [items]=\"classes | async\"\n bindValue=\"id\"\n bindLabel=\"name\"\n [isForm]=\"true\"\n aria-labelledby=\"item-label\"\n [readonly]=\"!!dataset$\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"user-label\" for=\"type\">{{ '@pry.admin.dataset.type' | i18n }}</label>\n <pry-select\n id=\"type\"\n formControlName=\"type\"\n [items]=\"datasetTypes\"\n bindValue=\"value\"\n bindLabel=\"label\"\n [isForm]=\"true\"\n aria-labelledby=\"user-label\"\n [readonly]=\"!!dataset$\"\n ></pry-select>\n </div>\n\n <label class=\"a-label a-label--help -error\" *ngIf=\"isSameName\">{{ '@pry.admin.dataset.is-same-name' | i18n }}</label>\n\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [innerHTML]=\"(dataset$ ? '@pry.admin.edit' : '@pry.admin.create') | i18n\"\n ></button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.I18nPipe, name: "i18n" }] }); }
|
|
92
|
-
}
|
|
93
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AdminFormDatasetComponent, decorators: [{
|
|
94
|
-
type: Component,
|
|
95
|
-
args: [{ selector: 'pry-admin-form-dataset', template: "<form class=\"o-form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"name-label\" for=\"name\">\n {{ '@pry.admin.dataset.name' | i18n }} *\n <span class=\"u-visually-hidden\">({{ '@pry.admin.required' | i18n }})</span>\n </label>\n <input\n id=\"name\"\n type=\"text\"\n class=\"a-form-field\"\n formControlName=\"name\"\n (ngModelChange)=\"changeValueName($event)\"\n [attr.aria-labelledby]=\"isSubmitted && form.get('name')?.invalid ? 'name-label name-error' : 'name-label'\"\n [attr.aria-invalid]=\"isSubmitted && form.get('name')?.invalid\"\n required\n />\n <label\n class=\"a-label a-label--help -error\"\n id=\"name-error\"\n for=\"name\"\n *ngIf=\"isSubmitted && form.get('name')?.invalid\"\n >{{ '@pry.admin.required' | i18n }}</label\n >\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"description-label\" for=\"description\">{{ '@pry.admin.fields.description' | i18n }}</label>\n <textarea\n class=\"-resizable-both\"\n formControlName=\"description\"\n name=\"description\"\n id=\"description\"\n maxlength=\"500\"\n ></textarea>\n <label\n for=\"description\"\n *ngIf=\"form.get('description')?.hasError('maxlength')\"\n class=\"a-label a-label--help -error\"\n >\n {{ '@pry.presentation.maxLength' | i18n : { len: '500' } }}\n </label>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"item-label\" for=\"class\">{{ '@pry.admin.dataset.oClass' | i18n }}</label>\n <pry-select\n id=\"class\"\n formControlName=\"oClass\"\n [items]=\"classes | async\"\n bindValue=\"id\"\n bindLabel=\"name\"\n [isForm]=\"true\"\n aria-labelledby=\"item-label\"\n [readonly]=\"!!dataset$\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field -width-sm\">\n <label class=\"a-label\" id=\"user-label\" for=\"type\">{{ '@pry.admin.dataset.type' | i18n }}</label>\n <pry-select\n id=\"type\"\n formControlName=\"type\"\n [items]=\"datasetTypes\"\n bindValue=\"value\"\n bindLabel=\"label\"\n [isForm]=\"true\"\n aria-labelledby=\"user-label\"\n [readonly]=\"!!dataset$\"\n ></pry-select>\n </div>\n\n <label class=\"a-label a-label--help -error\" *ngIf=\"isSameName\">{{ '@pry.admin.dataset.is-same-name' | i18n }}</label>\n\n <div class=\"m-btn-group -width-sm\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary\"\n (click)=\"goBack()\"\n [innerHTML]=\"'@pry.admin.cancel' | i18n\"\n ></button>\n <button\n class=\"a-btn a-btn--primary\"\n type=\"submit\"\n [innerHTML]=\"(dataset$ ? '@pry.admin.edit' : '@pry.admin.create') | i18n\"\n ></button>\n </div>\n</form>\n" }]
|
|
96
|
-
}], ctorParameters: () => [{ type: i1.Store }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.UntypedFormBuilder }], propDecorators: { dataset$: [{
|
|
97
|
-
type: Input
|
|
98
|
-
}] } });
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tZm9ybS1kYXRhc2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2FkbWluL2NvbXBvbmVudHMvYWRtaW4tZGF0YXNldC9zaGFyZWQvYWRtaW4tZm9ybS1kYXRhc2V0L2FkbWluLWZvcm0tZGF0YXNldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9hZG1pbi9jb21wb25lbnRzL2FkbWluLWRhdGFzZXQvc2hhcmVkL2FkbWluLWZvcm0tZGF0YXNldC9hZG1pbi1mb3JtLWRhdGFzZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBd0MsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbEYsT0FBTyxFQUVMLFlBQVksRUFDWixjQUFjLEVBRWQsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUVuQixjQUFjLEVBQ2YsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7OztBQU14RSxNQUFNLE9BQU8seUJBQXlCO0lBZXBDLFlBQ1UsS0FBNkIsRUFDN0IsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLFdBQStCO1FBSC9CLFVBQUssR0FBTCxLQUFLLENBQXdCO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxV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LENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUN2QyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3ZGLENBQUM7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4RyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7OEdBL0ZVLHlCQUF5QjtrR0FBekIseUJBQXlCLGdHQ3ZCdEMsNDRGQXVGQTs7MkZEaEVhLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7NkpBSXpCLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENsYXNzLFxuICBDbGFzc0FjdGlvbnMsXG4gIENsYXNzU2VsZWN0b3JzLFxuICBEYXRhc2V0LFxuICBEYXRhU291cmNlQWN0aW9ucyxcbiAgRGF0YVNvdXJjZVNlbGVjdG9ycyxcbiAgRGF0YVNvdXJjZVN0YXRlLFxuICBQcnlEYXRhc2V0VHlwZVxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IEFkbWluQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL2FkbWluLmFjdGlvbnMnO1xuaW1wb3J0IHsgQWRtaW5EYXRhc2V0QWN0aW9ucyB9IGZyb20gJy4uLy4uL3N0b3JlL2FkbWluLWRhdGFzZXQuYWN0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1hZG1pbi1mb3JtLWRhdGFzZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRtaW4tZm9ybS1kYXRhc2V0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZG1pbkZvcm1EYXRhc2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBkYXRhc2V0JD86IE9ic2VydmFibGU8RGF0YXNldCB8IG51bGw+O1xuXG4gIGRhdGFzZXRMaXN0JDogT2JzZXJ2YWJsZTxEYXRhc2V0W10+O1xuICBkYXRhc2V0TGlzdDogRGF0YXNldFtdID0gW107XG4gIGRhdGFzZXRUeXBlczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuICBjbGFzc2VzOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuXG4gIHN1YiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gIGlzU2FtZU5hbWUgPSBmYWxzZTtcbiAgaXNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTxEYXRhU291cmNlU3RhdGU+LFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ2xhc3NBY3Rpb25zLmxvYWQoKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXRhU291cmNlQWN0aW9ucy5kYXRhc2V0LmxvYWREYXRhc2V0KCkpO1xuICAgIHRoaXMuZGF0YXNldExpc3QkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5kYXRhc2V0cyk7XG4gICAgdGhpcy5jbGFzc2VzID0gdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3Nlcyk7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpZDogW3V1aWR2NCgpXSxcbiAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCldXSxcbiAgICAgIG9DbGFzczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgdHlwZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgZGVzY3JpcHRpb246IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwMCldXVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1NhbWVOYW1lID0gZmFsc2U7XG4gICAgdGhpcy5zdWIgPSB0aGlzLmRhdGFzZXRMaXN0JC5zdWJzY3JpYmUoKGRhdGFzZXQpID0+IHtcbiAgICAgIHRoaXMuZGF0YXNldExpc3QgPSBkYXRhc2V0O1xuICAgIH0pO1xuICAgIHRoaXMuZGF0YXNldFR5cGVzID0gT2JqZWN0LmtleXMoUHJ5RGF0YXNldFR5cGUpLm1hcCgobGFiZWwpID0+ICh7XG4gICAgICBsYWJlbDogJ0BwcnkuYWRtaW4uZGF0YXNldC4nICsgbGFiZWwsXG4gICAgICB2YWx1ZTogbGFiZWxcbiAgICB9KSk7XG4gICAgdGhpcy5zdWIuYWRkKFxuICAgICAgdGhpcy5kYXRhc2V0JD8uc3Vic2NyaWJlKChkYXRhc2V0OiBEYXRhc2V0IHwgbnVsbCkgPT4ge1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgIGlkOiBkYXRhc2V0LmlkLFxuICAgICAgICAgICAgbmFtZTogZGF0YXNldC5uYW1lLFxuICAgICAgICAgICAgb0NsYXNzOiBkYXRhc2V0Lm9DbGFzcyxcbiAgICAgICAgICAgIHR5cGU6IGRhdGFzZXQudHlwZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhc2V0LmRlc2NyaXB0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnb0JhY2soKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChBZG1pbkFjdGlvbnMucm91dGVUbyh7IHBhdGg6IHRoaXMuZ2V0UGF0aCgpIH0pKTtcbiAgfVxuXG4gIGdldFBhdGgoKSB7XG4gICAgbGV0IHBhdGggPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFsnLi4nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIGlmICh0aGlzLmRhdGFzZXQkKSB7XG4gICAgICBwYXRoID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbJy4uLy4uJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGgudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNoYW5nZVZhbHVlTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pc1NhbWVOYW1lID0gZmFsc2U7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgdGhpcy5pc1N1Ym1pdHRlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5pc1N1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuZGF0YXNldCQpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoWycuLi8uLiddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQWRtaW5EYXRhc2V0QWN0aW9ucy51cGRhdGUoeyBkYXRhc2V0OiB0aGlzLmZvcm0udmFsdWUsIHJvdXRlOiBwYXRoLnRvU3RyaW5nKCkgfSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbJy4uJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgIHRoaXMuaXNTYW1lTmFtZSA9ICEhdGhpcy5kYXRhc2V0TGlzdC5maW5kKFxuICAgICAgICAoZGF0YXNldCkgPT4gdGhpcy5mb3JtLmdldCgnbmFtZScpPy52YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBkYXRhc2V0Lm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGlmICghdGhpcy5pc1NhbWVOYW1lKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQWRtaW5EYXRhc2V0QWN0aW9ucy5jcmVhdGUoeyBkYXRhc2V0OiB0aGlzLmZvcm0udmFsdWUsIHJvdXRlOiBwYXRoLnRvU3RyaW5nKCkgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJvLWZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwic3VibWl0KClcIj5cbiAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCAtd2lkdGgtc21cIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgaWQ9XCJuYW1lLWxhYmVsXCIgZm9yPVwibmFtZVwiPlxuICAgICAge3sgJ0BwcnkuYWRtaW4uZGF0YXNldC5uYW1lJyB8IGkxOG4gfX0gKlxuICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPih7eyAnQHByeS5hZG1pbi5yZXF1aXJlZCcgfCBpMThuIH19KTwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgaWQ9XCJuYW1lXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVmFsdWVOYW1lKCRldmVudClcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImlzU3VibWl0dGVkICYmIGZvcm0uZ2V0KCduYW1lJyk/LmludmFsaWQgPyAnbmFtZS1sYWJlbCBuYW1lLWVycm9yJyA6ICduYW1lLWxhYmVsJ1wiXG4gICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaXNTdWJtaXR0ZWQgJiYgZm9ybS5nZXQoJ25hbWUnKT8uaW52YWxpZFwiXG4gICAgICByZXF1aXJlZFxuICAgIC8+XG4gICAgPGxhYmVsXG4gICAgICBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIlxuICAgICAgaWQ9XCJuYW1lLWVycm9yXCJcbiAgICAgIGZvcj1cIm5hbWVcIlxuICAgICAgKm5nSWY9XCJpc1N1Ym1pdHRlZCAmJiBmb3JtLmdldCgnbmFtZScpPy5pbnZhbGlkXCJcbiAgICAgID57eyAnQHByeS5hZG1pbi5yZXF1aXJlZCcgfCBpMThuIH19PC9sYWJlbFxuICAgID5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCAtd2lkdGgtc21cIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgaWQ9XCJkZXNjcmlwdGlvbi1sYWJlbFwiIGZvcj1cImRlc2NyaXB0aW9uXCI+e3sgJ0BwcnkuYWRtaW4uZmllbGRzLmRlc2NyaXB0aW9uJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgIDx0ZXh0YXJlYVxuICAgICAgY2xhc3M9XCItcmVzaXphYmxlLWJvdGhcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgIGlkPVwiZGVzY3JpcHRpb25cIlxuICAgICAgbWF4bGVuZ3RoPVwiNTAwXCJcbiAgICA+PC90ZXh0YXJlYT5cbiAgICA8bGFiZWxcbiAgICAgIGZvcj1cImRlc2NyaXB0aW9uXCJcbiAgICAgICpuZ0lmPVwiZm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/Lmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiXG4gICAgICBjbGFzcz1cImEtbGFiZWwgYS1sYWJlbC0taGVscCAtZXJyb3JcIlxuICAgID5cbiAgICAgIHt7ICdAcHJ5LnByZXNlbnRhdGlvbi5tYXhMZW5ndGgnIHwgaTE4biA6IHsgbGVuOiAnNTAwJyB9IH19XG4gICAgPC9sYWJlbD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCAtd2lkdGgtc21cIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgaWQ9XCJpdGVtLWxhYmVsXCIgZm9yPVwiY2xhc3NcIj57eyAnQHByeS5hZG1pbi5kYXRhc2V0Lm9DbGFzcycgfCBpMThuIH19PC9sYWJlbD5cbiAgICA8cHJ5LXNlbGVjdFxuICAgICAgaWQ9XCJjbGFzc1wiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJvQ2xhc3NcIlxuICAgICAgW2l0ZW1zXT1cImNsYXNzZXMgfCBhc3luY1wiXG4gICAgICBiaW5kVmFsdWU9XCJpZFwiXG4gICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgIFtpc0Zvcm1dPVwidHJ1ZVwiXG4gICAgICBhcmlhLWxhYmVsbGVkYnk9XCJpdGVtLWxhYmVsXCJcbiAgICAgIFtyZWFkb25seV09XCIhIWRhdGFzZXQkXCJcbiAgICA+PC9wcnktc2VsZWN0PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkIC13aWR0aC1zbVwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBpZD1cInVzZXItbGFiZWxcIiBmb3I9XCJ0eXBlXCI+e3sgJ0BwcnkuYWRtaW4uZGF0YXNldC50eXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgIDxwcnktc2VsZWN0XG4gICAgICBpZD1cInR5cGVcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiXG4gICAgICBbaXRlbXNdPVwiZGF0YXNldFR5cGVzXCJcbiAgICAgIGJpbmRWYWx1ZT1cInZhbHVlXCJcbiAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcbiAgICAgIFtpc0Zvcm1dPVwidHJ1ZVwiXG4gICAgICBhcmlhLWxhYmVsbGVkYnk9XCJ1c2VyLWxhYmVsXCJcbiAgICAgIFtyZWFkb25seV09XCIhIWRhdGFzZXQkXCJcbiAgICA+PC9wcnktc2VsZWN0PlxuICA8L2Rpdj5cblxuICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsIGEtbGFiZWwtLWhlbHAgLWVycm9yXCIgKm5nSWY9XCJpc1NhbWVOYW1lXCI+e3sgJ0BwcnkuYWRtaW4uZGF0YXNldC5pcy1zYW1lLW5hbWUnIHwgaTE4biB9fTwvbGFiZWw+XG5cbiAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwIC13aWR0aC1zbVwiPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCJcbiAgICAgIChjbGljayk9XCJnb0JhY2soKVwiXG4gICAgICBbaW5uZXJIVE1MXT1cIidAcHJ5LmFkbWluLmNhbmNlbCcgfCBpMThuXCJcbiAgICA+PC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIFtpbm5lckhUTUxdPVwiKGRhdGFzZXQkID8gJ0BwcnkuYWRtaW4uZWRpdCcgOiAnQHByeS5hZG1pbi5jcmVhdGUnKSB8IGkxOG5cIlxuICAgID48L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
|