@ecodev/natural 62.1.2 → 62.3.0
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/fesm2022/ecodev-natural-vanilla.mjs +1199 -0
- package/fesm2022/ecodev-natural-vanilla.mjs.map +1 -0
- package/fesm2022/ecodev-natural.mjs +625 -644
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/lib/classes/abstract-editable-list.d.ts +3 -2
- package/lib/classes/network-activity.service.d.ts +54 -0
- package/lib/classes/validators.d.ts +1 -1
- package/lib/modules/avatar/component/avatar.component.d.ts +21 -36
- package/lib/modules/avatar/service/avatar.service.d.ts +3 -2
- package/lib/modules/columns-picker/columns-picker.component.d.ts +2 -2
- package/lib/modules/common/services/seo.provider.d.ts +2 -2
- package/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.d.ts +1 -0
- package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +1 -1
- package/lib/modules/file/abstract-file.d.ts +8 -5
- package/lib/modules/file/component/file.component.d.ts +9 -4
- package/lib/modules/file/file-drop.directive.d.ts +2 -3
- package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +2 -3
- package/lib/modules/hierarchic-selector/classes/model-node.d.ts +1 -1
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -3
- package/lib/modules/icon/icon.module.d.ts +2 -2
- package/lib/modules/panels/panels.service.d.ts +17 -2
- package/lib/modules/relations/relations.component.d.ts +4 -4
- package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +2 -3
- package/lib/modules/search/group/group.component.d.ts +2 -3
- package/lib/modules/search/input/input.component.d.ts +5 -5
- package/lib/modules/search/search/search.component.d.ts +5 -4
- package/lib/modules/select/abstract-select.component.d.ts +3 -3
- package/lib/modules/select/select/select.component.d.ts +4 -4
- package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +1 -1
- package/lib/modules/table-button/table-button.component.d.ts +18 -18
- package/package.json +16 -14
- package/public-api.d.ts +1 -0
- package/src/lib/_natural.theme.scss +1 -2
- package/vanilla/index.d.ts +5 -0
- package/vanilla/package.json +3 -0
- package/vanilla/public-api.d.ts +11 -0
- package/vanilla/src/lib/classes/crypto.d.ts +8 -0
- package/vanilla/src/lib/classes/data-source.d.ts +32 -0
- package/vanilla/src/lib/classes/query-variable-manager-utils.d.ts +2 -0
- package/vanilla/src/lib/classes/query-variable-manager.d.ts +91 -0
- package/vanilla/src/lib/classes/signing.d.ts +7 -0
- package/vanilla/src/lib/classes/utility.d.ts +77 -0
- package/vanilla/src/lib/modules/search/classes/graphql-doctrine.types.d.ts +83 -0
- package/vanilla/src/lib/modules/search/classes/utils.d.ts +17 -0
- package/vanilla/src/lib/modules/search/types/dropdown-component.d.ts +20 -0
- package/vanilla/src/lib/modules/search/types/facet.d.ts +75 -0
- package/vanilla/src/lib/modules/search/types/values.d.ts +32 -0
- package/vanilla/src/lib/services/abstract-model.service.d.ts +244 -0
- package/vanilla/src/lib/services/debounce.service.d.ts +52 -0
- package/vanilla/src/lib/types/types.d.ts +100 -0
- package/esm2022/ecodev-natural.mjs +0 -5
- package/esm2022/lib/classes/abstract-detail.mjs +0 -229
- package/esm2022/lib/classes/abstract-editable-list.mjs +0 -99
- package/esm2022/lib/classes/abstract-list.mjs +0 -461
- package/esm2022/lib/classes/abstract-navigable-list.mjs +0 -133
- package/esm2022/lib/classes/apollo-utils.mjs +0 -59
- package/esm2022/lib/classes/crypto.mjs +0 -23
- package/esm2022/lib/classes/cumulative-changes.mjs +0 -50
- package/esm2022/lib/classes/data-source.mjs +0 -71
- package/esm2022/lib/classes/providers.mjs +0 -13
- package/esm2022/lib/classes/query-variable-manager-utils.mjs +0 -14
- package/esm2022/lib/classes/query-variable-manager.mjs +0 -172
- package/esm2022/lib/classes/rxjs.mjs +0 -54
- package/esm2022/lib/classes/signing.mjs +0 -38
- package/esm2022/lib/classes/tld.mjs +0 -1476
- package/esm2022/lib/classes/utility.mjs +0 -234
- package/esm2022/lib/classes/validators.mjs +0 -179
- package/esm2022/lib/directives/http-prefix.directive.mjs +0 -47
- package/esm2022/lib/modules/alert/alert.service.mjs +0 -53
- package/esm2022/lib/modules/alert/confirm.component.mjs +0 -16
- package/esm2022/lib/modules/alert/public-api.mjs +0 -6
- package/esm2022/lib/modules/avatar/component/avatar.component.mjs +0 -203
- package/esm2022/lib/modules/avatar/public-api.mjs +0 -6
- package/esm2022/lib/modules/avatar/service/avatar.service.mjs +0 -63
- package/esm2022/lib/modules/avatar/sources/gravatar.mjs +0 -29
- package/esm2022/lib/modules/avatar/sources/image.mjs +0 -13
- package/esm2022/lib/modules/avatar/sources/initials.mjs +0 -39
- package/esm2022/lib/modules/avatar/sources/source.mjs +0 -16
- package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +0 -145
- package/esm2022/lib/modules/columns-picker/public-api.mjs +0 -5
- package/esm2022/lib/modules/columns-picker/types.mjs +0 -2
- package/esm2022/lib/modules/common/directives/background-density.directive.mjs +0 -63
- package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +0 -93
- package/esm2022/lib/modules/common/directives/src-density.directive.mjs +0 -72
- package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +0 -24
- package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +0 -17
- package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +0 -24
- package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +0 -140
- package/esm2022/lib/modules/common/public-api.mjs +0 -14
- package/esm2022/lib/modules/common/services/memory-storage.mjs +0 -110
- package/esm2022/lib/modules/common/services/seo.provider.mjs +0 -23
- package/esm2022/lib/modules/common/services/seo.service.mjs +0 -235
- package/esm2022/lib/modules/detail-header/detail-header.component.mjs +0 -84
- package/esm2022/lib/modules/detail-header/public-api.mjs +0 -5
- package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +0 -72
- package/esm2022/lib/modules/dialog-trigger/public-api.mjs +0 -5
- package/esm2022/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +0 -100
- package/esm2022/lib/modules/dropdown-components/public-api.mjs +0 -14
- package/esm2022/lib/modules/dropdown-components/type-boolean/type-boolean.component.mjs +0 -39
- package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +0 -173
- package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +0 -134
- package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +0 -80
- package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +0 -48
- package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +0 -110
- package/esm2022/lib/modules/dropdown-components/type-options/type-options.component.mjs +0 -64
- package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +0 -175
- package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +0 -62
- package/esm2022/lib/modules/dropdown-components/types.mjs +0 -41
- package/esm2022/lib/modules/dropdown-components/utils.mjs +0 -35
- package/esm2022/lib/modules/file/abstract-file.mjs +0 -230
- package/esm2022/lib/modules/file/component/file.component.mjs +0 -172
- package/esm2022/lib/modules/file/file-drop.directive.mjs +0 -111
- package/esm2022/lib/modules/file/file-select.directive.mjs +0 -26
- package/esm2022/lib/modules/file/file.service.mjs +0 -43
- package/esm2022/lib/modules/file/public-api.mjs +0 -9
- package/esm2022/lib/modules/file/types.mjs +0 -2
- package/esm2022/lib/modules/file/utils.mjs +0 -129
- package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +0 -30
- package/esm2022/lib/modules/fixed-button/public-api.mjs +0 -5
- package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +0 -56
- package/esm2022/lib/modules/fixed-button-detail/public-api.mjs +0 -5
- package/esm2022/lib/modules/hierarchic-selector/classes/flat-node.mjs +0 -18
- package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs +0 -2
- package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs +0 -2
- package/esm2022/lib/modules/hierarchic-selector/classes/model-node.mjs +0 -14
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +0 -398
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +0 -243
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +0 -38
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +0 -22
- package/esm2022/lib/modules/hierarchic-selector/public-api.mjs +0 -10
- package/esm2022/lib/modules/icon/icon.directive.mjs +0 -96
- package/esm2022/lib/modules/icon/icon.module.mjs +0 -33
- package/esm2022/lib/modules/icon/public-api.mjs +0 -6
- package/esm2022/lib/modules/logger/error-handler.mjs +0 -87
- package/esm2022/lib/modules/logger/error.module.mjs +0 -22
- package/esm2022/lib/modules/logger/public-api.mjs +0 -6
- package/esm2022/lib/modules/matomo/matomo.service.mjs +0 -96
- package/esm2022/lib/modules/matomo/public-api.mjs +0 -5
- package/esm2022/lib/modules/panels/abstract-panel.mjs +0 -76
- package/esm2022/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs +0 -12
- package/esm2022/lib/modules/panels/panels.component.mjs +0 -27
- package/esm2022/lib/modules/panels/panels.module.mjs +0 -10
- package/esm2022/lib/modules/panels/panels.service.mjs +0 -329
- package/esm2022/lib/modules/panels/panels.urlmatcher.mjs +0 -75
- package/esm2022/lib/modules/panels/public-api.mjs +0 -11
- package/esm2022/lib/modules/panels/types.mjs +0 -3
- package/esm2022/lib/modules/relations/public-api.mjs +0 -5
- package/esm2022/lib/modules/relations/relations.component.mjs +0 -254
- package/esm2022/lib/modules/search/classes/graphql-doctrine.mjs +0 -111
- package/esm2022/lib/modules/search/classes/graphql-doctrine.types.mjs +0 -14
- package/esm2022/lib/modules/search/classes/transformers.mjs +0 -142
- package/esm2022/lib/modules/search/classes/url.mjs +0 -53
- package/esm2022/lib/modules/search/classes/utils.mjs +0 -25
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container-animations.mjs +0 -44
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +0 -87
- package/esm2022/lib/modules/search/dropdown-container/dropdown-ref.mjs +0 -24
- package/esm2022/lib/modules/search/dropdown-container/dropdown.service.mjs +0 -90
- package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +0 -45
- package/esm2022/lib/modules/search/group/group.component.mjs +0 -53
- package/esm2022/lib/modules/search/input/input.component.mjs +0 -365
- package/esm2022/lib/modules/search/public-api.mjs +0 -7
- package/esm2022/lib/modules/search/search/search.component.mjs +0 -102
- package/esm2022/lib/modules/search/types/dropdown-component.mjs +0 -2
- package/esm2022/lib/modules/search/types/facet.mjs +0 -2
- package/esm2022/lib/modules/search/types/values.mjs +0 -2
- package/esm2022/lib/modules/select/abstract-select.component.mjs +0 -232
- package/esm2022/lib/modules/select/public-api.mjs +0 -7
- package/esm2022/lib/modules/select/select/select.component.mjs +0 -310
- package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +0 -57
- package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +0 -155
- package/esm2022/lib/modules/sidenav/public-api.mjs +0 -9
- package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +0 -15
- package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +0 -90
- package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +0 -11
- package/esm2022/lib/modules/sidenav/sidenav-stack.service.mjs +0 -50
- package/esm2022/lib/modules/sidenav/sidenav.service.mjs +0 -196
- package/esm2022/lib/modules/stamp/public-api.mjs +0 -5
- package/esm2022/lib/modules/stamp/stamp.component.mjs +0 -23
- package/esm2022/lib/modules/table-button/public-api.mjs +0 -5
- package/esm2022/lib/modules/table-button/table-button.component.mjs +0 -78
- package/esm2022/lib/services/abstract-model.service.mjs +0 -526
- package/esm2022/lib/services/debounce.service.mjs +0 -149
- package/esm2022/lib/services/enum.service.mjs +0 -64
- package/esm2022/lib/services/link-mutation.service.mjs +0 -154
- package/esm2022/lib/services/persistence.service.mjs +0 -115
- package/esm2022/lib/services/swiss-parsing-date-adapter.service.mjs +0 -63
- package/esm2022/lib/types/types.mjs +0 -2
- package/esm2022/public-api.mjs +0 -46
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import { Directive, inject } from '@angular/core';
|
|
2
|
-
import { UntypedFormGroup } from '@angular/forms';
|
|
3
|
-
import { ActivatedRoute, Router } from '@angular/router';
|
|
4
|
-
import { kebabCase } from 'lodash-es';
|
|
5
|
-
import { NaturalAlertService } from '../modules/alert/alert.service';
|
|
6
|
-
import { NaturalAbstractPanel } from '../modules/panels/abstract-panel';
|
|
7
|
-
import { EMPTY, endWith, finalize, last, Observable, switchMap, tap } from 'rxjs';
|
|
8
|
-
import { ifValid, validateAllFormControls } from './validators';
|
|
9
|
-
import { CumulativeChanges } from './cumulative-changes';
|
|
10
|
-
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
11
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
function isNaturalDialogTriggerProvidedData(dialogData) {
|
|
14
|
-
return (!!dialogData &&
|
|
15
|
-
typeof dialogData === 'object' &&
|
|
16
|
-
'activatedRoute' in dialogData &&
|
|
17
|
-
dialogData.activatedRoute instanceof ActivatedRoute);
|
|
18
|
-
}
|
|
19
|
-
// @dynamic
|
|
20
|
-
export class NaturalAbstractDetail extends NaturalAbstractPanel {
|
|
21
|
-
key;
|
|
22
|
-
service;
|
|
23
|
-
/**
|
|
24
|
-
* Data retrieved by the server via route resolvers.
|
|
25
|
-
*
|
|
26
|
-
* The key `model` is special. It is readonly and represents the model being updated
|
|
27
|
-
* as it exists on server. The value is kept up to date when Apollo mutates it on server.
|
|
28
|
-
*
|
|
29
|
-
* The only time when `model` is not readonly is during creation. Only then can we modify the model values directly.
|
|
30
|
-
*
|
|
31
|
-
* Other keys, if present, are whatever is returned from route resolvers as-is.
|
|
32
|
-
*/
|
|
33
|
-
data;
|
|
34
|
-
/**
|
|
35
|
-
* Form that manages the data from the controller
|
|
36
|
-
*/
|
|
37
|
-
form = new UntypedFormGroup({});
|
|
38
|
-
/**
|
|
39
|
-
* Show / hides the bottom fab button (mostly to hide it when we are on other tabs where semantic of button can conflict with ...
|
|
40
|
-
* semantic of data on other tab, like relations that list other objects)
|
|
41
|
-
*/
|
|
42
|
-
showFabButton = true;
|
|
43
|
-
alertService = inject(NaturalAlertService);
|
|
44
|
-
router = inject(Router);
|
|
45
|
-
route = inject(ActivatedRoute);
|
|
46
|
-
_dialogData = inject(MAT_DIALOG_DATA, { optional: true });
|
|
47
|
-
/**
|
|
48
|
-
* Once set, this must not change anymore, especially not right after the creation mutation,
|
|
49
|
-
* so the form does not switch from creation mode to update mode without an actual reload of
|
|
50
|
-
* model from DB (by navigating to update page).
|
|
51
|
-
*/
|
|
52
|
-
_isUpdatePage = false;
|
|
53
|
-
changes = new CumulativeChanges();
|
|
54
|
-
constructor(key, service) {
|
|
55
|
-
super();
|
|
56
|
-
this.key = key;
|
|
57
|
-
this.service = service;
|
|
58
|
-
this.data = {
|
|
59
|
-
model: this.service.getDefaultForServer(),
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* You probably should not override this method. Instead, consider overriding `initForm()`.
|
|
64
|
-
*/
|
|
65
|
-
ngOnInit() {
|
|
66
|
-
if (this.isPanel) {
|
|
67
|
-
this.initForm();
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
const route = isNaturalDialogTriggerProvidedData(this._dialogData)
|
|
71
|
-
? this._dialogData.activatedRoute
|
|
72
|
-
: this.route;
|
|
73
|
-
this.#subscribeToModelFromResolvedData(route);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
changeTab(index) {
|
|
77
|
-
this.showFabButton = index === 0;
|
|
78
|
-
}
|
|
79
|
-
#subscribeToModelFromResolvedData(route) {
|
|
80
|
-
let previousId = -1;
|
|
81
|
-
route.data
|
|
82
|
-
.pipe(switchMap(data => {
|
|
83
|
-
if (!(data.model instanceof Observable)) {
|
|
84
|
-
throw new Error('Resolved data must include the key `model`, and it must be an observable (usually one from Apollo).');
|
|
85
|
-
}
|
|
86
|
-
// Subscribe to model to know when Apollo cache is changed, so we can reflect it into `data.model`
|
|
87
|
-
return data.model.pipe(tap((model) => {
|
|
88
|
-
this.data = {
|
|
89
|
-
...data,
|
|
90
|
-
model: model,
|
|
91
|
-
};
|
|
92
|
-
if (previousId !== model.id) {
|
|
93
|
-
previousId = model.id;
|
|
94
|
-
this.initForm();
|
|
95
|
-
}
|
|
96
|
-
}));
|
|
97
|
-
}), takeUntilDestroyed(this.destroyRef))
|
|
98
|
-
.subscribe();
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Returns whether `data.model` was fetched from DB, so we are on an update page, or if it is a new object
|
|
102
|
-
* with (only) default values, so we are on a creation page.
|
|
103
|
-
*
|
|
104
|
-
* This should be used instead of checking `data.model.id` directly, in order to type guard and get proper typing
|
|
105
|
-
*/
|
|
106
|
-
isUpdatePage() {
|
|
107
|
-
return this._isUpdatePage;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Update the object on the server with the values from the form fields that were modified since
|
|
111
|
-
* the initialization, or since the previous successful update.
|
|
112
|
-
*
|
|
113
|
-
* Form fields that are never modified are **not** sent to the server, unless if you specify `submitAllFields`.
|
|
114
|
-
*/
|
|
115
|
-
update(now = false, submitAllFields = false) {
|
|
116
|
-
if (!this.isUpdatePage()) {
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
validateAllFormControls(this.form);
|
|
120
|
-
ifValid(this.form).subscribe(() => {
|
|
121
|
-
const newValues = this.form.getRawValue();
|
|
122
|
-
if (submitAllFields) {
|
|
123
|
-
this.changes.initialize({});
|
|
124
|
-
}
|
|
125
|
-
const toSubmit = {
|
|
126
|
-
id: this.data.model.id,
|
|
127
|
-
...this.changes.differences(newValues),
|
|
128
|
-
};
|
|
129
|
-
const update = now ? this.service.updateNow(toSubmit) : this.service.update(toSubmit);
|
|
130
|
-
update.subscribe(model => {
|
|
131
|
-
this.changes.commit(newValues);
|
|
132
|
-
this.alertService.info($localize `Mis à jour`);
|
|
133
|
-
this.postUpdate(model);
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
create(redirect = true) {
|
|
138
|
-
validateAllFormControls(this.form);
|
|
139
|
-
if (!this.form.valid) {
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
const newValues = this.form.getRawValue();
|
|
143
|
-
this.form.disable();
|
|
144
|
-
this.service
|
|
145
|
-
.create(newValues)
|
|
146
|
-
.pipe(switchMap(model => {
|
|
147
|
-
this.alertService.info($localize `Créé`);
|
|
148
|
-
return this.postCreate(model).pipe(endWith(model), last());
|
|
149
|
-
}), switchMap((model) => {
|
|
150
|
-
if (redirect) {
|
|
151
|
-
if (this.isPanel) {
|
|
152
|
-
const oldUrl = this.router.url;
|
|
153
|
-
const nextUrl = this.panelData?.config.params.nextRoute;
|
|
154
|
-
const newUrl = oldUrl.replace('/new', '/' + model.id) + (nextUrl ? '/' + nextUrl : '');
|
|
155
|
-
return this.router.navigateByUrl(newUrl); // replace /new by /123
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
const queryParams = this.route.snapshot.queryParams;
|
|
159
|
-
return this.router.navigate(['..', model.id], { relativeTo: this.route, queryParams });
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return EMPTY;
|
|
163
|
-
}), finalize(() => this.form.enable()))
|
|
164
|
-
.subscribe();
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* `confirmer` can be used to open a custom dialog, or anything else, to confirm the deletion, instead of the standard dialog
|
|
168
|
-
*/
|
|
169
|
-
delete(redirectionRoute, confirmer) {
|
|
170
|
-
this.form.disable();
|
|
171
|
-
(confirmer ??
|
|
172
|
-
this.alertService.confirm($localize `Suppression`, $localize `Voulez-vous supprimer définitivement cet élément ?`, $localize `Supprimer définitivement`))
|
|
173
|
-
.pipe(switchMap(confirmed => {
|
|
174
|
-
if (!confirmed || !this.isUpdatePage()) {
|
|
175
|
-
return EMPTY;
|
|
176
|
-
}
|
|
177
|
-
this.preDelete(this.data.model);
|
|
178
|
-
return this.service.delete([this.data.model]).pipe(switchMap(() => {
|
|
179
|
-
this.alertService.info($localize `Supprimé`);
|
|
180
|
-
if (this.isPanel) {
|
|
181
|
-
this.panelService?.goToPenultimatePanel();
|
|
182
|
-
return EMPTY;
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
const defaultRoute = ['../../' + kebabCase(this.key)];
|
|
186
|
-
return this.router.navigate(redirectionRoute ? redirectionRoute : defaultRoute, {
|
|
187
|
-
relativeTo: this.route,
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
}));
|
|
191
|
-
}), finalize(() => this.form.enable()))
|
|
192
|
-
.subscribe();
|
|
193
|
-
}
|
|
194
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
195
|
-
postUpdate(model) {
|
|
196
|
-
// noop
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Returns an observable that will be subscribed to immediately and the
|
|
200
|
-
* redirect navigation will only happen after the observable completes.
|
|
201
|
-
*/
|
|
202
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
203
|
-
postCreate(model) {
|
|
204
|
-
return EMPTY;
|
|
205
|
-
}
|
|
206
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
207
|
-
preDelete(model) {
|
|
208
|
-
// noop
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Initialize the form whenever it is needed.
|
|
212
|
-
*
|
|
213
|
-
* You should override this method, and not `ngOnInit()` if you need to customize the form. Because this will
|
|
214
|
-
* correctly be called more than one time per component instance if needed, when the route changes. But `ngOnInit()`
|
|
215
|
-
* will incorrectly be called exactly 1 time per component instance, even if the object changes via route navigation.
|
|
216
|
-
*/
|
|
217
|
-
initForm() {
|
|
218
|
-
this._isUpdatePage = !!this.data.model.id;
|
|
219
|
-
this.form = this.service.getFormGroup(this.data.model);
|
|
220
|
-
this.changes.initialize(this.form.getRawValue());
|
|
221
|
-
}
|
|
222
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractDetail, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
223
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalAbstractDetail, isStandalone: true, usesInheritance: true, ngImport: i0 });
|
|
224
|
-
}
|
|
225
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractDetail, decorators: [{
|
|
226
|
-
type: Directive,
|
|
227
|
-
args: [{ standalone: true }]
|
|
228
|
-
}], ctorParameters: () => [{ type: undefined }, { type: undefined }] });
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZGV0YWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL2NsYXNzZXMvYWJzdHJhY3QtZGV0YWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUd0RSxPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFHOUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDOztBQVE5RCxTQUFTLGtDQUFrQyxDQUN2QyxVQUFtQjtJQUVuQixPQUFPLENBQ0gsQ0FBQyxDQUFDLFVBQVU7UUFDWixPQUFPLFVBQVUsS0FBSyxRQUFRO1FBQzlCLGdCQUFnQixJQUFJLFVBQVU7UUFDOUIsVUFBVSxDQUFDLGNBQWMsWUFBWSxjQUFjLENBQ3RELENBQUM7QUFDTixDQUFDO0FBRUQsV0FBVztB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QUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7dUdBaFJRLHFCQUFxQjsyRkFBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQURqQyxTQUFTO21CQUFDLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBpbmplY3QsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1VudHlwZWRGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7a2ViYWJDYXNlfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtOYXR1cmFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9tb2R1bGVzL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RQYW5lbH0gZnJvbSAnLi4vbW9kdWxlcy9wYW5lbHMvYWJzdHJhY3QtcGFuZWwnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2UsIFdpdGhJZH0gZnJvbSAnLi4vc2VydmljZXMvYWJzdHJhY3QtbW9kZWwuc2VydmljZSc7XG5pbXBvcnQge0V4dHJhY3RSZXNvbHZlLCBFeHRyYWN0VGNyZWF0ZSwgRXh0cmFjdFRvbmUsIEV4dHJhY3RUdXBkYXRlLCBMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge0VNUFRZLCBlbmRXaXRoLCBmaW5hbGl6ZSwgbGFzdCwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwLCB0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtpZlZhbGlkLCB2YWxpZGF0ZUFsbEZvcm1Db250cm9sc30gZnJvbSAnLi92YWxpZGF0b3JzJztcbmltcG9ydCB7UGFnaW5hdGVkRGF0YX0gZnJvbSAnLi9kYXRhLXNvdXJjZSc7XG5pbXBvcnQge1F1ZXJ5VmFyaWFibGVzfSBmcm9tICcuL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtDdW11bGF0aXZlQ2hhbmdlc30gZnJvbSAnLi9jdW11bGF0aXZlLWNoYW5nZXMnO1xuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEF9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge05hdHVyYWxEaWFsb2dUcmlnZ2VyUHJvdmlkZWREYXRhfSBmcm9tICcuLi9tb2R1bGVzL2RpYWxvZy10cmlnZ2VyL2RpYWxvZy10cmlnZ2VyLmNvbXBvbmVudCc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG4vKipcbiAqIGBEYXRhYCBjb250YWlucyBpbiBgbW9kZWxgIGVpdGhlciB0aGUgbW9kZWwgZmV0Y2hlZCBmcm9tIERCIG9yIGRlZmF1bHQgdmFsdWVzICh3aXRob3V0IElEKS4gQW5kIGJlc2lkZXMgYG1vZGVsYCxcbiAqIGFueSBvdGhlciBleHRyYSBrZXlzIGRlZmluZWQgYnkgRXh0cmEuXG4gKi9cbnR5cGUgRGF0YTxUU2VydmljZSwgRXh0cmE+ID0ge21vZGVsOiB7aWQ/OiBzdHJpbmd9ICYgRXh0cmFjdFJlc29sdmU8VFNlcnZpY2U+fSAmIEV4dHJhO1xuXG5mdW5jdGlvbiBpc05hdHVyYWxEaWFsb2dUcmlnZ2VyUHJvdmlkZWREYXRhKFxuICAgIGRpYWxvZ0RhdGE6IHVua25vd24sXG4pOiBkaWFsb2dEYXRhIGlzIE5hdHVyYWxEaWFsb2dUcmlnZ2VyUHJvdmlkZWREYXRhPG5ldmVyPiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgISFkaWFsb2dEYXRhICYmXG4gICAgICAgIHR5cGVvZiBkaWFsb2dEYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAnYWN0aXZhdGVkUm91dGUnIGluIGRpYWxvZ0RhdGEgJiZcbiAgICAgICAgZGlhbG9nRGF0YS5hY3RpdmF0ZWRSb3V0ZSBpbnN0YW5jZW9mIEFjdGl2YXRlZFJvdXRlXG4gICAgKTtcbn1cblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoe3N0YW5kYWxvbmU6IHRydWV9KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdERldGFpbDxcbiAgICAgICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgICAgICB7aWQ6IHN0cmluZ30sXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBQYWdpbmF0ZWREYXRhPExpdGVyYWw+LFxuICAgICAgICAgICAgUXVlcnlWYXJpYWJsZXMsXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICB1bmtub3duLFxuICAgICAgICAgICAgYW55XG4gICAgICAgID4sXG4gICAgICAgIEV4dHJhUmVzb2x2ZSBleHRlbmRzIExpdGVyYWwgPSBSZWNvcmQ8bmV2ZXIsIG5ldmVyPixcbiAgICA+XG4gICAgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RQYW5lbFxuICAgIGltcGxlbWVudHMgT25Jbml0XG57XG4gICAgLyoqXG4gICAgICogRGF0YSByZXRyaWV2ZWQgYnkgdGhlIHNlcnZlciB2aWEgcm91dGUgcmVzb2x2ZXJzLlxuICAgICAqXG4gICAgICogVGhlIGtleSBgbW9kZWxgIGlzIHNwZWNpYWwuIEl0IGlzIHJlYWRvbmx5IGFuZCByZXByZXNlbnRzIHRoZSBtb2RlbCBiZWluZyB1cGRhdGVkXG4gICAgICogYXMgaXQgZXhpc3RzIG9uIHNlcnZlci4gVGhlIHZhbHVlIGlzIGtlcHQgdXAgdG8gZGF0ZSB3aGVuIEFwb2xsbyBtdXRhdGVzIGl0IG9uIHNlcnZlci5cbiAgICAgKlxuICAgICAqIFRoZSBvbmx5IHRpbWUgd2hlbiBgbW9kZWxgIGlzIG5vdCByZWFkb25seSBpcyBkdXJpbmcgY3JlYXRpb24uIE9ubHkgdGhlbiBjYW4gd2UgbW9kaWZ5IHRoZSBtb2RlbCB2YWx1ZXMgZGlyZWN0bHkuXG4gICAgICpcbiAgICAgKiBPdGhlciBrZXlzLCBpZiBwcmVzZW50LCBhcmUgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgZnJvbSByb3V0ZSByZXNvbHZlcnMgYXMtaXMuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGRhdGE6IERhdGE8VFNlcnZpY2UsIEV4dHJhUmVzb2x2ZT47XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIHRoYXQgbWFuYWdlcyB0aGUgZGF0YSBmcm9tIHRoZSBjb250cm9sbGVyXG4gICAgICovXG4gICAgcHVibGljIGZvcm06IFVudHlwZWRGb3JtR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IC8gaGlkZXMgdGhlIGJvdHRvbSBmYWIgYnV0dG9uIChtb3N0bHkgdG8gaGlkZSBpdCB3aGVuIHdlIGFyZSBvbiBvdGhlciB0YWJzIHdoZXJlIHNlbWFudGljIG9mIGJ1dHRvbiBjYW4gY29uZmxpY3Qgd2l0aCAuLi5cbiAgICAgKiBzZW1hbnRpYyBvZiBkYXRhIG9uIG90aGVyIHRhYiwgbGlrZSByZWxhdGlvbnMgdGhhdCBsaXN0IG90aGVyIG9iamVjdHMpXG4gICAgICovXG4gICAgcHVibGljIHNob3dGYWJCdXR0b24gPSB0cnVlO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0U2VydmljZSA9IGluamVjdChOYXR1cmFsQWxlcnRTZXJ2aWNlKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kaWFsb2dEYXRhOiB1bmtub3duID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSwge29wdGlvbmFsOiB0cnVlfSk7XG5cbiAgICAvKipcbiAgICAgKiBPbmNlIHNldCwgdGhpcyBtdXN0IG5vdCBjaGFuZ2UgYW55bW9yZSwgZXNwZWNpYWxseSBub3QgcmlnaHQgYWZ0ZXIgdGhlIGNyZWF0aW9uIG11dGF0aW9uLFxuICAgICAqIHNvIHRoZSBmb3JtIGRvZXMgbm90IHN3aXRjaCBmcm9tIGNyZWF0aW9uIG1vZGUgdG8gdXBkYXRlIG1vZGUgd2l0aG91dCBhbiBhY3R1YWwgcmVsb2FkIG9mXG4gICAgICogbW9kZWwgZnJvbSBEQiAoYnkgbmF2aWdhdGluZyB0byB1cGRhdGUgcGFnZSkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaXNVcGRhdGVQYWdlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VzID0gbmV3IEN1bXVsYXRpdmVDaGFuZ2VzPHR5cGVvZiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWU+KCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBrZXk6IHN0cmluZyxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2U6IFRTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuZGF0YSA9IHtcbiAgICAgICAgICAgIG1vZGVsOiB0aGlzLnNlcnZpY2UuZ2V0RGVmYXVsdEZvclNlcnZlcigpLFxuICAgICAgICB9IGFzIERhdGE8VFNlcnZpY2UsIEV4dHJhUmVzb2x2ZT47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogWW91IHByb2JhYmx5IHNob3VsZCBub3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QuIEluc3RlYWQsIGNvbnNpZGVyIG92ZXJyaWRpbmcgYGluaXRGb3JtKClgLlxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm91dGUgPSBpc05hdHVyYWxEaWFsb2dUcmlnZ2VyUHJvdmlkZWREYXRhKHRoaXMuX2RpYWxvZ0RhdGEpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9kaWFsb2dEYXRhLmFjdGl2YXRlZFJvdXRlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnJvdXRlO1xuICAgICAgICAgICAgdGhpcy4jc3Vic2NyaWJlVG9Nb2RlbEZyb21SZXNvbHZlZERhdGEocm91dGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZVRhYihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd0ZhYkJ1dHRvbiA9IGluZGV4ID09PSAwO1xuICAgIH1cblxuICAgICNzdWJzY3JpYmVUb01vZGVsRnJvbVJlc29sdmVkRGF0YShyb3V0ZTogQWN0aXZhdGVkUm91dGUpOiB2b2lkIHtcbiAgICAgICAgbGV0IHByZXZpb3VzSWQgPSAtMTtcbiAgICAgICAgcm91dGUuZGF0YVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShkYXRhLm1vZGVsIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVzb2x2ZWQgZGF0YSBtdXN0IGluY2x1ZGUgdGhlIGtleSBgbW9kZWxgLCBhbmQgaXQgbXVzdCBiZSBhbiBvYnNlcnZhYmxlICh1c3VhbGx5IG9uZSBmcm9tIEFwb2xsbykuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gbW9kZWwgdG8ga25vdyB3aGVuIEFwb2xsbyBjYWNoZSBpcyBjaGFuZ2VkLCBzbyB3ZSBjYW4gcmVmbGVjdCBpdCBpbnRvIGBkYXRhLm1vZGVsYFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5tb2RlbC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFwKChtb2RlbDogRXh0cmFjdFJlc29sdmU8VFNlcnZpY2U+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogbW9kZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBEYXRhPFRTZXJ2aWNlLCBFeHRyYVJlc29sdmU+O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzSWQgIT09IG1vZGVsLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzSWQgPSBtb2RlbC5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciBgZGF0YS5tb2RlbGAgd2FzIGZldGNoZWQgZnJvbSBEQiwgc28gd2UgYXJlIG9uIGFuIHVwZGF0ZSBwYWdlLCBvciBpZiBpdCBpcyBhIG5ldyBvYmplY3RcbiAgICAgKiB3aXRoIChvbmx5KSBkZWZhdWx0IHZhbHVlcywgc28gd2UgYXJlIG9uIGEgY3JlYXRpb24gcGFnZS5cbiAgICAgKlxuICAgICAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBjaGVja2luZyBgZGF0YS5tb2RlbC5pZGAgZGlyZWN0bHksIGluIG9yZGVyIHRvIHR5cGUgZ3VhcmQgYW5kIGdldCBwcm9wZXIgdHlwaW5nXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzVXBkYXRlUGFnZSgpOiB0aGlzIGlzIHtkYXRhOiB7bW9kZWw6IEV4dHJhY3RUb25lPFRTZXJ2aWNlPn19IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVXBkYXRlUGFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhlIG9iamVjdCBvbiB0aGUgc2VydmVyIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSBmb3JtIGZpZWxkcyB0aGF0IHdlcmUgbW9kaWZpZWQgc2luY2VcbiAgICAgKiB0aGUgaW5pdGlhbGl6YXRpb24sIG9yIHNpbmNlIHRoZSBwcmV2aW91cyBzdWNjZXNzZnVsIHVwZGF0ZS5cbiAgICAgKlxuICAgICAqIEZvcm0gZmllbGRzIHRoYXQgYXJlIG5ldmVyIG1vZGlmaWVkIGFyZSAqKm5vdCoqIHNlbnQgdG8gdGhlIHNlcnZlciwgdW5sZXNzIGlmIHlvdSBzcGVjaWZ5IGBzdWJtaXRBbGxGaWVsZHNgLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUobm93ID0gZmFsc2UsIHN1Ym1pdEFsbEZpZWxkcyA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0ZVBhZ2UoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsaWRhdGVBbGxGb3JtQ29udHJvbHModGhpcy5mb3JtKTtcblxuICAgICAgICBpZlZhbGlkKHRoaXMuZm9ybSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHN1Ym1pdEFsbEZpZWxkcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5pbml0aWFsaXplKHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdG9TdWJtaXQgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuZGF0YS5tb2RlbC5pZCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNoYW5nZXMuZGlmZmVyZW5jZXMobmV3VmFsdWVzKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IG5vdyA/IHRoaXMuc2VydmljZS51cGRhdGVOb3codG9TdWJtaXQpIDogdGhpcy5zZXJ2aWNlLnVwZGF0ZSh0b1N1Ym1pdCk7XG4gICAgICAgICAgICB1cGRhdGUuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZXMuY29tbWl0KG5ld1ZhbHVlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbygkbG9jYWxpemVgTWlzIMOgIGpvdXJgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RVcGRhdGUobW9kZWwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGUocmVkaXJlY3QgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHZhbGlkYXRlQWxsRm9ybUNvbnRyb2xzKHRoaXMuZm9ybSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICB0aGlzLmZvcm0uZGlzYWJsZSgpO1xuXG4gICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLmNyZWF0ZShuZXdWYWx1ZXMpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAobW9kZWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKCRsb2NhbGl6ZWBDcsOpw6lgKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0Q3JlYXRlKG1vZGVsKS5waXBlKGVuZFdpdGgobW9kZWwpLCBsYXN0KCkpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgobW9kZWw6IFdpdGhJZDxvYmplY3Q+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZFVybCA9IHRoaXMucm91dGVyLnVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VXJsOiBzdHJpbmcgPSB0aGlzLnBhbmVsRGF0YT8uY29uZmlnLnBhcmFtcy5uZXh0Um91dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VXJsID0gb2xkVXJsLnJlcGxhY2UoJy9uZXcnLCAnLycgKyBtb2RlbC5pZCkgKyAobmV4dFVybCA/ICcvJyArIG5leHRVcmwgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobmV3VXJsKTsgLy8gcmVwbGFjZSAvbmV3IGJ5IC8xMjNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJywgbW9kZWwuaWRdLCB7cmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgcXVlcnlQYXJhbXN9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmZvcm0uZW5hYmxlKCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGBjb25maXJtZXJgIGNhbiBiZSB1c2VkIHRvIG9wZW4gYSBjdXN0b20gZGlhbG9nLCBvciBhbnl0aGluZyBlbHNlLCB0byBjb25maXJtIHRoZSBkZWxldGlvbiwgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgZGlhbG9nXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZShyZWRpcmVjdGlvblJvdXRlPzogdW5rbm93bltdLCBjb25maXJtZXI/OiBPYnNlcnZhYmxlPGJvb2xlYW4gfCB1bmRlZmluZWQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5kaXNhYmxlKCk7XG5cbiAgICAgICAgKFxuICAgICAgICAgICAgY29uZmlybWVyID8/XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5jb25maXJtKFxuICAgICAgICAgICAgICAgICRsb2NhbGl6ZWBTdXBwcmVzc2lvbmAsXG4gICAgICAgICAgICAgICAgJGxvY2FsaXplYFZvdWxlei12b3VzIHN1cHByaW1lciBkw6lmaW5pdGl2ZW1lbnQgY2V0IMOpbMOpbWVudCA/YCxcbiAgICAgICAgICAgICAgICAkbG9jYWxpemVgU3VwcHJpbWVyIGTDqWZpbml0aXZlbWVudGAsXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChjb25maXJtZWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpcm1lZCB8fCAhdGhpcy5pc1VwZGF0ZVBhZ2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVEZWxldGUodGhpcy5kYXRhLm1vZGVsKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmRlbGV0ZShbdGhpcy5kYXRhLm1vZGVsXSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbygkbG9jYWxpemVgU3VwcHJpbcOpYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFuZWxTZXJ2aWNlPy5nb1RvUGVudWx0aW1hdGVQYW5lbCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0Um91dGUgPSBbJy4uLy4uLycgKyBrZWJhYkNhc2UodGhpcy5rZXkpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKHJlZGlyZWN0aW9uUm91dGUgPyByZWRpcmVjdGlvblJvdXRlIDogZGVmYXVsdFJvdXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmZvcm0uZW5hYmxlKCkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgcG9zdFVwZGF0ZShtb2RlbDogRXh0cmFjdFR1cGRhdGU8VFNlcnZpY2U+KTogdm9pZCB7XG4gICAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIGJlIHN1YnNjcmliZWQgdG8gaW1tZWRpYXRlbHkgYW5kIHRoZVxuICAgICAqIHJlZGlyZWN0IG5hdmlnYXRpb24gd2lsbCBvbmx5IGhhcHBlbiBhZnRlciB0aGUgb2JzZXJ2YWJsZSBjb21wbGV0ZXMuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByb3RlY3RlZCBwb3N0Q3JlYXRlKG1vZGVsOiBFeHRyYWN0VGNyZWF0ZTxUU2VydmljZT4pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgcHJlRGVsZXRlKG1vZGVsOiBFeHRyYWN0VG9uZTxUU2VydmljZT4pOiB2b2lkIHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhlIGZvcm0gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkLlxuICAgICAqXG4gICAgICogWW91IHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCwgYW5kIG5vdCBgbmdPbkluaXQoKWAgaWYgeW91IG5lZWQgdG8gY3VzdG9taXplIHRoZSBmb3JtLiBCZWNhdXNlIHRoaXMgd2lsbFxuICAgICAqIGNvcnJlY3RseSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uZSB0aW1lIHBlciBjb21wb25lbnQgaW5zdGFuY2UgaWYgbmVlZGVkLCB3aGVuIHRoZSByb3V0ZSBjaGFuZ2VzLiBCdXQgYG5nT25Jbml0KClgXG4gICAgICogd2lsbCBpbmNvcnJlY3RseSBiZSBjYWxsZWQgZXhhY3RseSAxIHRpbWUgcGVyIGNvbXBvbmVudCBpbnN0YW5jZSwgZXZlbiBpZiB0aGUgb2JqZWN0IGNoYW5nZXMgdmlhIHJvdXRlIG5hdmlnYXRpb24uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGluaXRGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1VwZGF0ZVBhZ2UgPSAhIXRoaXMuZGF0YS5tb2RlbC5pZDtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5zZXJ2aWNlLmdldEZvcm1Hcm91cCh0aGlzLmRhdGEubW9kZWwpO1xuICAgICAgICB0aGlzLmNoYW5nZXMuaW5pdGlhbGl6ZSh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { UntypedFormArray, UntypedFormGroup } from '@angular/forms';
|
|
2
|
-
import { MatTableDataSource } from '@angular/material/table';
|
|
3
|
-
import { merge } from 'lodash-es';
|
|
4
|
-
import { NaturalQueryVariablesManager } from './query-variable-manager';
|
|
5
|
-
import { validateAllFormControls } from './validators';
|
|
6
|
-
import { Directive } from '@angular/core';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
/**
|
|
9
|
-
* This class helps managing non-paginated rows of items that can be edited in-place, typically in a <mat-table>.
|
|
10
|
-
* But it does **not** mutate anything to persist the edits on the server. It is up to the consuming component to implement
|
|
11
|
-
* custom mutation mechanism.
|
|
12
|
-
*
|
|
13
|
-
* To access data of this component from a parent component, use:
|
|
14
|
-
*
|
|
15
|
-
* ```
|
|
16
|
-
* @ViewChildren(ComponentType) cmp: ComponentType;
|
|
17
|
-
* this.cmp.getItems();
|
|
18
|
-
* ```
|
|
19
|
-
*
|
|
20
|
-
* To add empty line, call:
|
|
21
|
-
*
|
|
22
|
-
* ```
|
|
23
|
-
* this.cmp.addEmpty();
|
|
24
|
-
* ```
|
|
25
|
-
*
|
|
26
|
-
* @dynamic
|
|
27
|
-
*/
|
|
28
|
-
export class NaturalAbstractEditableList {
|
|
29
|
-
service;
|
|
30
|
-
form;
|
|
31
|
-
formArray = new UntypedFormArray([]);
|
|
32
|
-
variablesManager = new NaturalQueryVariablesManager();
|
|
33
|
-
dataSource = new MatTableDataSource();
|
|
34
|
-
constructor(service) {
|
|
35
|
-
this.service = service;
|
|
36
|
-
// Create a form group with a line attributes that contain an array of formGroups (one by line = one by model)
|
|
37
|
-
this.form = new UntypedFormGroup({ rows: this.formArray });
|
|
38
|
-
this.dataSource.data = this.formArray.controls;
|
|
39
|
-
this.variablesManager.set('pagination', { pagination: { pageSize: 999, pageIndex: 0 } });
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Set the list of items (overwriting what may have existed)
|
|
43
|
-
*/
|
|
44
|
-
setItems(items) {
|
|
45
|
-
this.formArray.clear(); // reset list
|
|
46
|
-
this.addItems(items);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Add given items to the list
|
|
50
|
-
* Reproduces the model data loading the same way as it would be on a detail page (via AbstractDetail controller) but without resolving
|
|
51
|
-
*/
|
|
52
|
-
addItems(items) {
|
|
53
|
-
items.forEach(item => {
|
|
54
|
-
const completedItem = merge(this.service.getDefaultForServer(), item);
|
|
55
|
-
const lineFormGroup = this.service.getFormGroup(completedItem);
|
|
56
|
-
this.formArray.push(lineFormGroup);
|
|
57
|
-
});
|
|
58
|
-
this.dataSource.data = this.formArray.controls;
|
|
59
|
-
}
|
|
60
|
-
removeAt(index) {
|
|
61
|
-
this.formArray.removeAt(index);
|
|
62
|
-
this.dataSource.data = this.formArray.controls;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Add empty item at the end of the list
|
|
66
|
-
*/
|
|
67
|
-
addEmpty() {
|
|
68
|
-
this.addItems([{}]);
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Return a list of models without any treatment.
|
|
72
|
-
*
|
|
73
|
-
* To mutate models, it would be required to map them using :
|
|
74
|
-
* - AbstractModelService.getInput()
|
|
75
|
-
* - AbstractModelService.getPartialVariablesForCreation()
|
|
76
|
-
* - AbstractModelService.getPartialVariablesForUpdate()
|
|
77
|
-
* - some other required treatment.
|
|
78
|
-
*
|
|
79
|
-
* TODO return type is incorrect and should be closer to `Partial<T>[]` or an even looser type, because we don't really know what fields exists in the form. When we fix this, we should also remove type coercing in unit tests.
|
|
80
|
-
*/
|
|
81
|
-
getItems() {
|
|
82
|
-
return this.formArray.getRawValue();
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Force the form validation.
|
|
86
|
-
*
|
|
87
|
-
* The valid state can then be read via `this.form.valid`
|
|
88
|
-
*/
|
|
89
|
-
validateForm() {
|
|
90
|
-
validateAllFormControls(this.form);
|
|
91
|
-
}
|
|
92
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractEditableList, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
|
|
93
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: NaturalAbstractEditableList, isStandalone: true, ngImport: i0 });
|
|
94
|
-
}
|
|
95
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalAbstractEditableList, decorators: [{
|
|
96
|
-
type: Directive,
|
|
97
|
-
args: [{ standalone: true }]
|
|
98
|
-
}], ctorParameters: () => [{ type: undefined }] });
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZWRpdGFibGUtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL2Fic3RyYWN0LWVkaXRhYmxlLWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25GLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFaEMsT0FBTyxFQUFDLDRCQUE0QixFQUFpQixNQUFNLDBCQUEwQixDQUFDO0FBRXRGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNyRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUd4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILE1BQU0sT0FBTywyQkFBMkI7SUFzQkU7SUFMdEIsSUFBSSxDQUFtQjtJQUN2QixTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxnQkFBZ0IsR0FBRyxJQUFJLDRCQUE0QixFQUF5QixDQUFDO0lBQzdFLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixFQUFtQixDQUFDO0lBRXZFLFlBQXNDLE9BQWlCO1FBQWpCLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFDbkQsOEdBQThHO1FBQzlHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFDLFVBQVUsRUFBRSxFQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBQyxFQUEwQixDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUSxDQUFDLEtBQW1CO1FBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxhQUFhO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxLQUFtQjtRQUMvQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUNuRCxDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksUUFBUTtRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFlBQVk7UUFDZix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQzt1R0FyRlEsMkJBQTJCOzJGQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBRHZDLFNBQVM7bUJBQUMsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TWF0VGFibGVEYXRhU291cmNlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQge21lcmdlfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2Fic3RyYWN0LW1vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyLCBRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7RXh0cmFjdFRhbGxPbmUsIEV4dHJhY3RWYWxsLCBMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge3ZhbGlkYXRlQWxsRm9ybUNvbnRyb2xzfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtEaXJlY3RpdmV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYWdpbmF0ZWREYXRhfSBmcm9tICcuL2RhdGEtc291cmNlJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhlbHBzIG1hbmFnaW5nIG5vbi1wYWdpbmF0ZWQgcm93cyBvZiBpdGVtcyB0aGF0IGNhbiBiZSBlZGl0ZWQgaW4tcGxhY2UsIHR5cGljYWxseSBpbiBhIDxtYXQtdGFibGU+LlxuICogQnV0IGl0IGRvZXMgKipub3QqKiBtdXRhdGUgYW55dGhpbmcgdG8gcGVyc2lzdCB0aGUgZWRpdHMgb24gdGhlIHNlcnZlci4gSXQgaXMgdXAgdG8gdGhlIGNvbnN1bWluZyBjb21wb25lbnQgdG8gaW1wbGVtZW50XG4gKiBjdXN0b20gbXV0YXRpb24gbWVjaGFuaXNtLlxuICpcbiAqIFRvIGFjY2VzcyBkYXRhIG9mIHRoaXMgY29tcG9uZW50IGZyb20gYSBwYXJlbnQgY29tcG9uZW50LCB1c2U6XG4gKlxuICogYGBgXG4gKiBAVmlld0NoaWxkcmVuKENvbXBvbmVudFR5cGUpIGNtcDogQ29tcG9uZW50VHlwZTtcbiAqIHRoaXMuY21wLmdldEl0ZW1zKCk7XG4gKiBgYGBcbiAqXG4gKiBUbyBhZGQgZW1wdHkgbGluZSwgY2FsbDpcbiAqXG4gKiBgYGBcbiAqIHRoaXMuY21wLmFkZEVtcHR5KCk7XG4gKiBgYGBcbiAqXG4gKiBAZHluYW1pY1xuICovXG5ARGlyZWN0aXZlKHtzdGFuZGFsb25lOiB0cnVlfSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsQWJzdHJhY3RFZGl0YWJsZUxpc3Q8XG4gICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgIGFueSxcbiAgICAgICAgYW55LFxuICAgICAgICBQYWdpbmF0ZWREYXRhPExpdGVyYWw+LFxuICAgICAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgYW55LFxuICAgICAgICBhbnksXG4gICAgICAgIGFueSxcbiAgICAgICAgYW55LFxuICAgICAgICBhbnksXG4gICAgICAgIGFueVxuICAgID4sXG4gICAgLy8gVGhlIExpdGVyYWwgaGVyZSBpcyBhIGJpdCB0b28gbG9vc2UuIElkZWFsbHkgd2Ugd291bGQgbGlrZSB0byBleHByZXNzXG4gICAgLy8gXCJpdCBtdXN0IGJlIGEgdW5pb24gYW5kIG9uZSBvZiB0aGUgdHlwZSBpbiB0aGUgdW5pb24gbXVzdCBiZSBFeHRyYWN0VGFsbE9uZTxUU2VydmljZT5cIlxuICAgIFQgZXh0ZW5kcyBMaXRlcmFsID0gRXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+LFxuPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gICAgcHVibGljIHJlYWRvbmx5IGZvcm1BcnJheSA9IG5ldyBVbnR5cGVkRm9ybUFycmF5KFtdKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFyaWFibGVzTWFuYWdlciA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPEV4dHJhY3RWYWxsPFRTZXJ2aWNlPj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8QWJzdHJhY3RDb250cm9sPigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBzZXJ2aWNlOiBUU2VydmljZSkge1xuICAgICAgICAvLyBDcmVhdGUgYSBmb3JtIGdyb3VwIHdpdGggYSBsaW5lIGF0dHJpYnV0ZXMgdGhhdCBjb250YWluIGFuIGFycmF5IG9mIGZvcm1Hcm91cHMgKG9uZSBieSBsaW5lID0gb25lIGJ5IG1vZGVsKVxuICAgICAgICB0aGlzLmZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7cm93czogdGhpcy5mb3JtQXJyYXl9KTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmZvcm1BcnJheS5jb250cm9scztcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9uOiB7cGFnZVNpemU6IDk5OSwgcGFnZUluZGV4OiAwfX0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGxpc3Qgb2YgaXRlbXMgKG92ZXJ3cml0aW5nIHdoYXQgbWF5IGhhdmUgZXhpc3RlZClcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0SXRlbXMoaXRlbXM6IHJlYWRvbmx5IFRbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1BcnJheS5jbGVhcigpOyAvLyByZXNldCBsaXN0XG4gICAgICAgIHRoaXMuYWRkSXRlbXMoaXRlbXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBnaXZlbiBpdGVtcyB0byB0aGUgbGlzdFxuICAgICAqIFJlcHJvZHVjZXMgdGhlIG1vZGVsIGRhdGEgbG9hZGluZyB0aGUgc2FtZSB3YXkgYXMgaXQgd291bGQgYmUgb24gYSBkZXRhaWwgcGFnZSAodmlhIEFic3RyYWN0RGV0YWlsIGNvbnRyb2xsZXIpIGJ1dCB3aXRob3V0IHJlc29sdmluZ1xuICAgICAqL1xuICAgIHB1YmxpYyBhZGRJdGVtcyhpdGVtczogcmVhZG9ubHkgVFtdKTogdm9pZCB7XG4gICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wbGV0ZWRJdGVtID0gbWVyZ2UodGhpcy5zZXJ2aWNlLmdldERlZmF1bHRGb3JTZXJ2ZXIoKSwgaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBsaW5lRm9ybUdyb3VwID0gdGhpcy5zZXJ2aWNlLmdldEZvcm1Hcm91cChjb21wbGV0ZWRJdGVtKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUFycmF5LnB1c2gobGluZUZvcm1Hcm91cCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5mb3JtQXJyYXkuY29udHJvbHM7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUF0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZm9ybUFycmF5LmNvbnRyb2xzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBlbXB0eSBpdGVtIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRW1wdHkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkSXRlbXMoW3t9IGFzIFRdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBsaXN0IG9mIG1vZGVscyB3aXRob3V0IGFueSB0cmVhdG1lbnQuXG4gICAgICpcbiAgICAgKiBUbyBtdXRhdGUgbW9kZWxzLCBpdCB3b3VsZCBiZSByZXF1aXJlZCB0byBtYXAgdGhlbSB1c2luZyA6XG4gICAgICogIC0gQWJzdHJhY3RNb2RlbFNlcnZpY2UuZ2V0SW5wdXQoKVxuICAgICAqICAtIEFic3RyYWN0TW9kZWxTZXJ2aWNlLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JDcmVhdGlvbigpXG4gICAgICogIC0gQWJzdHJhY3RNb2RlbFNlcnZpY2UuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvclVwZGF0ZSgpXG4gICAgICogIC0gc29tZSBvdGhlciByZXF1aXJlZCB0cmVhdG1lbnQuXG4gICAgICpcbiAgICAgKiBUT0RPIHJldHVybiB0eXBlIGlzIGluY29ycmVjdCBhbmQgc2hvdWxkIGJlIGNsb3NlciB0byBgUGFydGlhbDxUPltdYCBvciBhbiBldmVuIGxvb3NlciB0eXBlLCBiZWNhdXNlIHdlIGRvbid0IHJlYWxseSBrbm93IHdoYXQgZmllbGRzIGV4aXN0cyBpbiB0aGUgZm9ybS4gV2hlbiB3ZSBmaXggdGhpcywgd2Ugc2hvdWxkIGFsc28gcmVtb3ZlIHR5cGUgY29lcmNpbmcgaW4gdW5pdCB0ZXN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SXRlbXMoKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUFycmF5LmdldFJhd1ZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yY2UgdGhlIGZvcm0gdmFsaWRhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSB2YWxpZCBzdGF0ZSBjYW4gdGhlbiBiZSByZWFkIHZpYSBgdGhpcy5mb3JtLnZhbGlkYFxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZUZvcm0oKTogdm9pZCB7XG4gICAgICAgIHZhbGlkYXRlQWxsRm9ybUNvbnRyb2xzKHRoaXMuZm9ybSk7XG4gICAgfVxufVxuIl19
|