@solidev/data 0.0.8 → 0.1.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/esm2022/lib/auth/auth-interceptor.service.mjs +92 -0
- package/{esm2020 → esm2022}/lib/auth/auth.service.mjs +1 -1
- package/esm2022/lib/data/data-backend.mjs +135 -0
- package/esm2022/lib/data/data-model.mjs +292 -0
- package/esm2022/lib/dispedit/choice.pipe.mjs +81 -0
- package/{esm2020 → esm2022}/lib/dispedit/dispedit/dispedit.component.mjs +10 -5
- package/esm2022/lib/dispedit/factor.pipe.mjs +83 -0
- package/esm2022/lib/dispedit/factorc.pipe.mjs +101 -0
- package/esm2022/lib/dispedit/fkselect/fkselect.component.mjs +143 -0
- package/esm2022/lib/dispedit/flags/flags.component.mjs +141 -0
- package/esm2022/lib/dispedit/m2mselect/m2mselect.component.mjs +319 -0
- package/esm2022/lib/dispedit/richedit/richedit.component.mjs +127 -0
- package/esm2022/lib/dispedit/sdelete/sdelete.component.mjs +94 -0
- package/esm2022/lib/messages/message-zone/message-zone.component.mjs +58 -0
- package/esm2022/lib/messages/message.service.mjs +152 -0
- package/esm2022/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +66 -0
- package/esm2022/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +65 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +113 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +30 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +41 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +41 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +22 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +50 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +64 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +47 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +57 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +52 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +41 -0
- package/esm2022/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +175 -0
- package/esm2022/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +51 -0
- package/esm2022/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +31 -0
- package/esm2022/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +71 -0
- package/esm2022/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +50 -0
- package/esm2022/lib/modellist/model-list.service.mjs +158 -0
- package/esm2022/lib/routing/breadcrumb/breadcrumb.component.mjs +143 -0
- package/esm2022/lib/updates/update/update.component.mjs +18 -0
- package/esm2022/lib/updates/update.service.mjs +59 -0
- package/esm2022/lib/uploader/ng-file-drop.directive.mjs +82 -0
- package/esm2022/lib/uploader/ng-file-select.directive.mjs +52 -0
- package/esm2022/lib/uploader/ngx-uploader.module.mjs +18 -0
- package/esm2022/lib/utils/tab-memory.service.mjs +81 -0
- package/{fesm2020 → fesm2022}/solidev-data.mjs +153 -149
- package/fesm2022/solidev-data.mjs.map +1 -0
- package/lib/dispedit/dispedit/dispedit.component.d.ts +1 -1
- package/lib/dispedit/fkselect/fkselect.component.d.ts +1 -1
- package/lib/dispedit/flags/flags.component.d.ts +1 -1
- package/lib/dispedit/m2mselect/m2mselect.component.d.ts +1 -1
- package/lib/dispedit/richedit/richedit.component.d.ts +1 -1
- package/lib/dispedit/sdelete/sdelete.component.d.ts +1 -1
- package/lib/messages/message-zone/message-zone.component.d.ts +1 -1
- package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +1 -1
- package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +1 -1
- package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +1 -1
- package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +1 -1
- package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +1 -1
- package/lib/routing/breadcrumb/breadcrumb.component.d.ts +1 -1
- package/lib/uploader/ng-file-drop.directive.d.ts +1 -1
- package/lib/uploader/ng-file-select.directive.d.ts +1 -1
- package/package.json +7 -13
- package/esm2020/lib/auth/auth-interceptor.service.mjs +0 -91
- package/esm2020/lib/data/data-backend.mjs +0 -134
- package/esm2020/lib/data/data-model.mjs +0 -291
- package/esm2020/lib/dispedit/choice.pipe.mjs +0 -79
- package/esm2020/lib/dispedit/factor.pipe.mjs +0 -81
- package/esm2020/lib/dispedit/factorc.pipe.mjs +0 -99
- package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +0 -142
- package/esm2020/lib/dispedit/flags/flags.component.mjs +0 -140
- package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +0 -318
- package/esm2020/lib/dispedit/richedit/richedit.component.mjs +0 -126
- package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +0 -93
- package/esm2020/lib/messages/message-zone/message-zone.component.mjs +0 -57
- package/esm2020/lib/messages/message.service.mjs +0 -151
- package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +0 -65
- package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +0 -64
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +0 -112
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +0 -29
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +0 -40
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +0 -40
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +0 -21
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +0 -49
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +0 -63
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +0 -46
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +0 -56
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +0 -51
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +0 -40
- package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +0 -174
- package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +0 -50
- package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +0 -30
- package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +0 -70
- package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +0 -49
- package/esm2020/lib/modellist/model-list.service.mjs +0 -157
- package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +0 -142
- package/esm2020/lib/updates/update/update.component.mjs +0 -17
- package/esm2020/lib/updates/update.service.mjs +0 -58
- package/esm2020/lib/uploader/ng-file-drop.directive.mjs +0 -81
- package/esm2020/lib/uploader/ng-file-select.directive.mjs +0 -51
- package/esm2020/lib/uploader/ngx-uploader.module.mjs +0 -17
- package/esm2020/lib/utils/tab-memory.service.mjs +0 -80
- package/fesm2015/solidev-data.mjs +0 -6224
- package/fesm2015/solidev-data.mjs.map +0 -1
- package/fesm2020/solidev-data.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/auth/jwt.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/data-collection.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/data-collection.mock.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/data-parameters.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/data-query.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/data-query.mock.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/fields/base.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/fields/boolean.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/fields/computed.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/fields/datetime.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/fields/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/fields/numbers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/fields/primaryfield.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/fields/relations.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/data/fields/stringfields.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/dispedit/dispedit/dispedit.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-fields/model-list-field-header/messages.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-fields/model-list-fields.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/filtertypes.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/model-list-filter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/model-list-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-paginator/model-list-paginator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modellist/model-list-sorter/model-list-sorter.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/routing/routing.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/uploader/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/uploader/interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/uploader/ngx-uploader.class.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/slugify.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/template.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/solidev-data.mjs +0 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { PROPERTY_METADATA_KEY, } from './fields/base';
|
|
2
|
+
import { FormControl, FormGroup } from '@angular/forms';
|
|
3
|
+
import { throwError } from 'rxjs';
|
|
4
|
+
import { tap } from 'rxjs/operators';
|
|
5
|
+
/**
|
|
6
|
+
* Base class for data model.
|
|
7
|
+
*
|
|
8
|
+
* Each class must have a static __name
|
|
9
|
+
* primary field is given with id field.
|
|
10
|
+
*
|
|
11
|
+
* Some methods are provided to be used with a collection, mostly for CRUD operations.
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
class DataModel {
|
|
15
|
+
/**
|
|
16
|
+
* data model name
|
|
17
|
+
* this need to be given because class name is not fully available because of minification.
|
|
18
|
+
*/
|
|
19
|
+
static { this.__name = ''; }
|
|
20
|
+
/**
|
|
21
|
+
* Constructor for data model instance.
|
|
22
|
+
* A matching collection can be provided.
|
|
23
|
+
* ___fields readonly property is also populated from Reflected metadata
|
|
24
|
+
*
|
|
25
|
+
* @param _coll collection used for CRUD, etc..
|
|
26
|
+
*/
|
|
27
|
+
constructor(_coll) {
|
|
28
|
+
this._coll = _coll;
|
|
29
|
+
const md = Reflect.getMetadata(PROPERTY_METADATA_KEY, this);
|
|
30
|
+
// istanbul ignore if
|
|
31
|
+
if (!md) {
|
|
32
|
+
// This should never occur as all datamodel have at least id field
|
|
33
|
+
throw new Error('No property metadata found for this object; is there a property in current collection ?');
|
|
34
|
+
}
|
|
35
|
+
// Get all fields from current class and its parents
|
|
36
|
+
const fields = new Map();
|
|
37
|
+
let parent = Object.getPrototypeOf(this);
|
|
38
|
+
while (parent.constructor.name !== 'Object') {
|
|
39
|
+
for (const f of md.keys()) {
|
|
40
|
+
const fieldName = f.split('__')[1];
|
|
41
|
+
if (fields.has(fieldName)) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (f.indexOf(parent.constructor.__name + '__') === 0) {
|
|
45
|
+
fields.set(fieldName, md.get(f));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
parent = Object.getPrototypeOf(parent);
|
|
49
|
+
}
|
|
50
|
+
this._F = Object.freeze(fields);
|
|
51
|
+
}
|
|
52
|
+
get _collection() {
|
|
53
|
+
return this._coll;
|
|
54
|
+
}
|
|
55
|
+
set _collection(coll) {
|
|
56
|
+
this._coll = coll;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* HashMap of fields metadata (type, name, manager, etc...)
|
|
60
|
+
*/
|
|
61
|
+
get F() {
|
|
62
|
+
// istanbul ignore if
|
|
63
|
+
if (!this._F) {
|
|
64
|
+
throw new Error('Invalid data model, fields metadata is missing');
|
|
65
|
+
}
|
|
66
|
+
return this._F;
|
|
67
|
+
}
|
|
68
|
+
// Return field names iterator
|
|
69
|
+
get FN() {
|
|
70
|
+
return this.F.keys();
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Loads model data from json.
|
|
74
|
+
* If partial is true, only fields with matching data keys will be loaded
|
|
75
|
+
* @param data
|
|
76
|
+
* @param options
|
|
77
|
+
*/
|
|
78
|
+
fromJson(data, { partial, check } = {
|
|
79
|
+
partial: false,
|
|
80
|
+
check: false,
|
|
81
|
+
}) {
|
|
82
|
+
const errors = {};
|
|
83
|
+
let haveError = false;
|
|
84
|
+
for (const f of this.FN) {
|
|
85
|
+
if (!partial || (partial && Object.keys(data).indexOf(f) !== -1)) {
|
|
86
|
+
const ferr = this.setFV(f, this.FM(f).fromJson(data[f]), check);
|
|
87
|
+
if (ferr !== null) {
|
|
88
|
+
errors[f] = ferr;
|
|
89
|
+
haveError = true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return haveError ? errors : null;
|
|
94
|
+
}
|
|
95
|
+
toJson(fields) {
|
|
96
|
+
if (fields && !Array.isArray(fields)) {
|
|
97
|
+
fields = [fields];
|
|
98
|
+
}
|
|
99
|
+
const out = {};
|
|
100
|
+
const fl = this.F;
|
|
101
|
+
for (const f of this.FN) {
|
|
102
|
+
const mgr = this.FM(f);
|
|
103
|
+
if (!fields || fields.length === 0) {
|
|
104
|
+
if (mgr.readonly) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
out[f] = fl.get(f).manager.toJson(this.FV(f));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
if (fields.indexOf(f) !== -1) {
|
|
111
|
+
out[f] = fl.get(f).manager.toJson(this.FV(f));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return out;
|
|
116
|
+
}
|
|
117
|
+
action(method, name, { body = undefined, update = false, updatePartial = true, updateCheck = false,
|
|
118
|
+
// updateRaise = false,
|
|
119
|
+
params = {}, headers = {}, } = {}) {
|
|
120
|
+
if (this._coll === undefined) {
|
|
121
|
+
return throwError(() => new Error('Missing collection'));
|
|
122
|
+
}
|
|
123
|
+
return this._coll
|
|
124
|
+
.action(this, method, name, {
|
|
125
|
+
body,
|
|
126
|
+
params,
|
|
127
|
+
headers,
|
|
128
|
+
})
|
|
129
|
+
.pipe(tap((result) => {
|
|
130
|
+
if (update) {
|
|
131
|
+
this.fromJson(result, {
|
|
132
|
+
partial: updatePartial,
|
|
133
|
+
check: updateCheck,
|
|
134
|
+
});
|
|
135
|
+
return this;
|
|
136
|
+
}
|
|
137
|
+
return result;
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
// Called on model, returns the manager for a field.
|
|
141
|
+
FM(field) {
|
|
142
|
+
if (this.F.has(field)) {
|
|
143
|
+
return this.F.get(field).manager;
|
|
144
|
+
}
|
|
145
|
+
throw new Error(`${field} not found in ${Object.keys(this.F).join(',')} model ${this}`);
|
|
146
|
+
}
|
|
147
|
+
// Return field value, without typing
|
|
148
|
+
FV(field) {
|
|
149
|
+
return this[field];
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Set field value. If check is true, only set value if all validators pass.
|
|
153
|
+
* Skip setting field value if manager computed flag is true.
|
|
154
|
+
*
|
|
155
|
+
* The validation result is returned.
|
|
156
|
+
*
|
|
157
|
+
* @param field field name
|
|
158
|
+
* @param value field valued
|
|
159
|
+
* @param check default false
|
|
160
|
+
* @return null or ValidationError
|
|
161
|
+
*/
|
|
162
|
+
setFV(field, value, check = false) {
|
|
163
|
+
if (this.FM(field).computed) {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
if (check) {
|
|
167
|
+
const fc = new FormControl(value);
|
|
168
|
+
for (const v of this.FM(field).validators) {
|
|
169
|
+
const val = v(fc);
|
|
170
|
+
if (val !== null) {
|
|
171
|
+
console.error(val);
|
|
172
|
+
return val;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
this[field] = value;
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
FC(field) {
|
|
180
|
+
if (field === undefined) {
|
|
181
|
+
field = Array.from(this.FN).filter((n) => !this.FM(n).readonly);
|
|
182
|
+
}
|
|
183
|
+
if (Array.isArray(field)) {
|
|
184
|
+
const fg = {};
|
|
185
|
+
for (const f of field) {
|
|
186
|
+
fg[f] = this.FC(f);
|
|
187
|
+
}
|
|
188
|
+
return new FormGroup(fg);
|
|
189
|
+
}
|
|
190
|
+
return this.FM(field).formControl(this);
|
|
191
|
+
}
|
|
192
|
+
save({ updateModel = true } = {
|
|
193
|
+
updateModel: true,
|
|
194
|
+
}) {
|
|
195
|
+
if (this._coll) {
|
|
196
|
+
return this._coll.save(this, { updateModel });
|
|
197
|
+
}
|
|
198
|
+
return throwError(() => new Error('Missing collection'));
|
|
199
|
+
}
|
|
200
|
+
update(fields = [], { updateModel = true } = {
|
|
201
|
+
updateModel: true,
|
|
202
|
+
}) {
|
|
203
|
+
if (this._coll) {
|
|
204
|
+
return this._coll.update(this, fields, { updateModel });
|
|
205
|
+
}
|
|
206
|
+
return throwError(() => new Error('Missing collection'));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
export { DataModel };
|
|
210
|
+
//
|
|
211
|
+
// export class TreeDataModel extends DataModel {
|
|
212
|
+
// static override __name = 'TreeDataModel';
|
|
213
|
+
// @detailsField({
|
|
214
|
+
// model: this,
|
|
215
|
+
// many: true,
|
|
216
|
+
// description: 'Parents',
|
|
217
|
+
// })
|
|
218
|
+
// public parents_details?: this[];
|
|
219
|
+
//
|
|
220
|
+
// @foreignKeyField({
|
|
221
|
+
// required: false,
|
|
222
|
+
// description: 'Structure parente',
|
|
223
|
+
// related: 'Structure',
|
|
224
|
+
// })
|
|
225
|
+
// public parent?: number;
|
|
226
|
+
//
|
|
227
|
+
// @integerField({
|
|
228
|
+
// required: false,
|
|
229
|
+
// readonly: true,
|
|
230
|
+
// description: 'ID Tree',
|
|
231
|
+
// })
|
|
232
|
+
// public tree_id!: number;
|
|
233
|
+
//
|
|
234
|
+
// @integerField({
|
|
235
|
+
// required: false,
|
|
236
|
+
// readonly: true,
|
|
237
|
+
// description: 'MPTT left',
|
|
238
|
+
// })
|
|
239
|
+
// public lft!: number;
|
|
240
|
+
//
|
|
241
|
+
// @integerField({
|
|
242
|
+
// required: false,
|
|
243
|
+
// readonly: true,
|
|
244
|
+
// description: 'MPTT right',
|
|
245
|
+
// })
|
|
246
|
+
// public rght!: number;
|
|
247
|
+
//
|
|
248
|
+
// @integerField({
|
|
249
|
+
// required: false,
|
|
250
|
+
// readonly: true,
|
|
251
|
+
// description: 'Niveau hiérarchique',
|
|
252
|
+
// })
|
|
253
|
+
// public level!: number;
|
|
254
|
+
//
|
|
255
|
+
// public get parent_details(): this | null {
|
|
256
|
+
// if (this.parents_details) {
|
|
257
|
+
// const out = this.parents_details[this.parents_details.length - 1];
|
|
258
|
+
// out.parents_details = this.parents_details.slice(
|
|
259
|
+
// 0,
|
|
260
|
+
// this.parents_details.length - 1
|
|
261
|
+
// );
|
|
262
|
+
// return out;
|
|
263
|
+
// }
|
|
264
|
+
// return null;
|
|
265
|
+
// }
|
|
266
|
+
//
|
|
267
|
+
// public set parent_details(d: this | null) {
|
|
268
|
+
// console.log(d);
|
|
269
|
+
// this.parents_details = d?.parents_details;
|
|
270
|
+
// }
|
|
271
|
+
//
|
|
272
|
+
// public _display(): string {
|
|
273
|
+
// const out: string[] = [];
|
|
274
|
+
// if (this.parents_details) {
|
|
275
|
+
// for (const p of this.parents_details) {
|
|
276
|
+
// if ((p as any).code) {
|
|
277
|
+
// out.push(`[${(p as any).code}] ${(p as any).name}`);
|
|
278
|
+
// } else {
|
|
279
|
+
// out.push((p as any).name);
|
|
280
|
+
// }
|
|
281
|
+
// }
|
|
282
|
+
// }
|
|
283
|
+
// if ((this as any).code) {
|
|
284
|
+
// out.push(`[${(this as any).code}] ${(this as any).name}`);
|
|
285
|
+
// } else {
|
|
286
|
+
// out.push((this as any).name);
|
|
287
|
+
// }
|
|
288
|
+
//
|
|
289
|
+
// return out.join(' : ');
|
|
290
|
+
// }
|
|
291
|
+
// }
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9kYXRhL2RhdGEtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHFCQUFxQixHQUN0QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyQzs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsU0FBUztJQUNwQjs7O09BR0c7YUFDdUIsV0FBTSxHQUFXLEVBQUUsQ0FBQztJQVk5Qzs7Ozs7O09BTUc7SUFDSCxZQUFzQixLQUF1QjtRQUF2QixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUMzQyxNQUFNLEVBQUUsR0FDTixPQUFPLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1Asa0VBQWtFO1lBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQ2IseUZBQXlGLENBQzFGLENBQUM7U0FDSDtRQUNELG9EQUFvRDtRQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBcUMsQ0FBQztRQUM1RCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzNDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN6QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMs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Q0YsK0NBQStDO0FBQy9DLGtDQUFrQztBQUNsQywyRUFBMkU7QUFDM0UsMERBQTBEO0FBQzFELGFBQWE7QUFDYiwwQ0FBMEM7QUFDMUMsV0FBVztBQUNYLG9CQUFvQjtBQUNwQixRQUFRO0FBQ1IsbUJBQW1CO0FBQ25CLE1BQU07QUFDTixFQUFFO0FBQ0YsZ0RBQWdEO0FBQ2hELHNCQUFzQjtBQUN0QixpREFBaUQ7QUFDakQsTUFBTTtBQUNOLEVBQUU7QUFDRixnQ0FBZ0M7QUFDaEMsZ0NBQWdDO0FBQ2hDLGtDQUFrQztBQUNsQyxnREFBZ0Q7QUFDaEQsaUNBQWlDO0FBQ2pDLGlFQUFpRTtBQUNqRSxtQkFBbUI7QUFDbkIsdUNBQXVDO0FBQ3ZDLFlBQVk7QUFDWixVQUFVO0FBQ1YsUUFBUTtBQUNSLGdDQUFnQztBQUNoQyxtRUFBbUU7QUFDbkUsZUFBZTtBQUNmLHNDQUFzQztBQUN0QyxRQUFRO0FBQ1IsRUFBRTtBQUNGLDhCQUE4QjtBQUM5QixNQUFNO0FBQ04sSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VGaWVsZE1hbmFnZXIsXG4gIElGaWVsZFN0b3JlZE1ldGFkYXRhLFxuICBQUk9QRVJUWV9NRVRBREFUQV9LRVksXG59IGZyb20gJy4vZmllbGRzL2Jhc2UnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL2RhdGEtY29sbGVjdGlvbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCB0eXBlIERhdGFNb2RlbEZpZWxkcyA9IFJlYWRvbmx5PE1hcDxzdHJpbmcsIElGaWVsZFN0b3JlZE1ldGFkYXRhPGFueT4+PjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBkYXRhIG1vZGVsLlxuICpcbiAqIEVhY2ggY2xhc3MgbXVzdCBoYXZlIGEgc3RhdGljIF9fbmFtZVxuICogcHJpbWFyeSBmaWVsZCBpcyBnaXZlbiB3aXRoIGlkIGZpZWxkLlxuICpcbiAqIFNvbWUgbWV0aG9kcyBhcmUgcHJvdmlkZWQgdG8gYmUgdXNlZCB3aXRoIGEgY29sbGVjdGlvbiwgbW9zdGx5IGZvciBDUlVEIG9wZXJhdGlvbnMuXG4gKlxuICovXG5leHBvcnQgY2xhc3MgRGF0YU1vZGVsIHtcbiAgLyoqXG4gICAqIGRhdGEgbW9kZWwgbmFtZVxuICAgKiB0aGlzIG5lZWQgdG8gYmUgZ2l2ZW4gYmVjYXVzZSBjbGFzcyBuYW1lIGlzIG5vdCBmdWxseSBhdmFpbGFibGUgYmVjYXVzZSBvZiBtaW5pZmljYXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IF9fbmFtZTogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFByaW1hcnkgZmllbGQ7IHJlYWRvbmx5OyBtdXN0IGJlIGNyZWF0ZWQgYW5kIGF1dG8gaW5jcmVtZW50ZWQgb24gZGIgc2lkZS5cbiAgICovXG4gIC8vIEBwcmltYXJ5RmllbGQoe1xuICAvLyAgIGRlc2NyaXB0aW9uOiAnSUQnLFxuICAvLyAgIGhlbHA6ICdJZGVudGlmaWFudCBwcmltYWlyZScsXG4gIC8vIH0pXG4gIHB1YmxpYyBpZCE6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfRjogRGF0YU1vZGVsRmllbGRzO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvciBmb3IgZGF0YSBtb2RlbCBpbnN0YW5jZS5cbiAgICogQSBtYXRjaGluZyBjb2xsZWN0aW9uIGNhbiBiZSBwcm92aWRlZC5cbiAgICogX19fZmllbGRzIHJlYWRvbmx5IHByb3BlcnR5IGlzIGFsc28gcG9wdWxhdGVkIGZyb20gUmVmbGVjdGVkIG1ldGFkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBfY29sbCBjb2xsZWN0aW9uIHVzZWQgZm9yIENSVUQsIGV0Yy4uXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NvbGw/OiBDb2xsZWN0aW9uPGFueT4pIHtcbiAgICBjb25zdCBtZDogTWFwPHN0cmluZywgSUZpZWxkU3RvcmVkTWV0YWRhdGE8YW55Pj4gfCB1bmRlZmluZWQgPVxuICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShQUk9QRVJUWV9NRVRBREFUQV9LRVksIHRoaXMpO1xuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICAgIGlmICghbWQpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyIGFzIGFsbCBkYXRhbW9kZWwgaGF2ZSBhdCBsZWFzdCBpZCBmaWVsZFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTm8gcHJvcGVydHkgbWV0YWRhdGEgZm91bmQgZm9yIHRoaXMgb2JqZWN0OyBpcyB0aGVyZSBhIHByb3BlcnR5IGluIGN1cnJlbnQgY29sbGVjdGlvbiA/J1xuICAgICAgKTtcbiAgICB9XG4gICAgLy8gR2V0IGFsbCBmaWVsZHMgZnJvbSBjdXJyZW50IGNsYXNzIGFuZCBpdHMgcGFyZW50c1xuICAgIGNvbnN0IGZpZWxkcyA9IG5ldyBNYXA8c3RyaW5nLCBJRmllbGRTdG9yZWRNZXRhZGF0YTxhbnk+PigpO1xuICAgIGxldCBwYXJlbnQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7XG4gICAgd2hpbGUgKHBhcmVudC5jb25zdHJ1Y3Rvci5uYW1lICE9PSAnT2JqZWN0Jykge1xuICAgICAgZm9yIChjb25zdCBmIG9mIG1kLmtleXMoKSkge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBmLnNwbGl0KCdfXycpWzFdO1xuICAgICAgICBpZiAoZmllbGRzLmhhcyhmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYuaW5kZXhPZihwYXJlbnQuY29uc3RydWN0b3IuX19uYW1lICsgJ19fJykgPT09IDApIHtcbiAgICAgICAgICBmaWVsZHMuc2V0KGZpZWxkTmFtZSwgbWQuZ2V0KGYpISk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwYXJlbnQpO1xuICAgIH1cbiAgICB0aGlzLl9GID0gT2JqZWN0LmZyZWV6ZShmaWVsZHMpO1xuICB9XG5cbiAgcHVibGljIGdldCBfY29sbGVjdGlvbigpOiBDb2xsZWN0aW9uPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9jb2xsIGFzIENvbGxlY3Rpb248YW55PjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgX2NvbGxlY3Rpb24oY29sbDogQ29sbGVjdGlvbjxhbnk+KSB7XG4gICAgdGhpcy5fY29sbCA9IGNvbGw7XG4gIH1cblxuICAvKipcbiAgICogIEhhc2hNYXAgb2YgZmllbGRzIG1ldGFkYXRhICh0eXBlLCBuYW1lLCBtYW5hZ2VyLCBldGMuLi4pXG4gICAqL1xuICBwdWJsaWMgZ2V0IEYoKTogRGF0YU1vZGVsRmllbGRzIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgICBpZiAoIXRoaXMuX0YpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhIG1vZGVsLCBmaWVsZHMgbWV0YWRhdGEgaXMgbWlzc2luZycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fRjtcbiAgfVxuXG4gIC8vIFJldHVybiBmaWVsZCBuYW1lcyBpdGVyYXRvclxuICBwdWJsaWMgZ2V0IEZOKCk6IEl0ZXJhYmxlSXRlcmF0b3I8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuRi5rZXlzKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgbW9kZWwgZGF0YSBmcm9tIGpzb24uXG4gICAqIElmIHBhcnRpYWwgaXMgdHJ1ZSwgb25seSBmaWVsZHMgd2l0aCBtYXRjaGluZyBkYXRhIGtleXMgd2lsbCBiZSBsb2FkZWRcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBmcm9tSnNvbihcbiAgICBkYXRhOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0sXG4gICAgeyBwYXJ0aWFsLCBjaGVjayB9OiB7IHBhcnRpYWw/OiBib29sZWFuOyBjaGVjaz86IGJvb2xlYW4gfSA9IHtcbiAgICAgIHBhcnRpYWw6IGZhbHNlLFxuICAgICAgY2hlY2s6IGZhbHNlLFxuICAgIH1cbiAgKTogbnVsbCB8IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGNvbnN0IGVycm9yczogeyBbaW5kZXg6IHN0cmluZ106IG51bGwgfCBWYWxpZGF0aW9uRXJyb3JzIH0gPSB7fTtcbiAgICBsZXQgaGF2ZUVycm9yID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBmIG9mIHRoaXMuRk4pIHtcbiAgICAgIGlmICghcGFydGlhbCB8fCAocGFydGlhbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5pbmRleE9mKGYpICE9PSAtMSkpIHtcbiAgICAgICAgY29uc3QgZmVyciA9IHRoaXMuc2V0RlYoZiwgdGhpcy5GTShmKS5mcm9tSnNvbihkYXRhW2ZdKSwgY2hlY2spO1xuICAgICAgICBpZiAoZmVyciAhPT0gbnVsbCkge1xuICAgICAgICAgIGVycm9yc1tmXSA9IGZlcnI7XG4gICAgICAgICAgaGF2ZUVycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGF2ZUVycm9yID8gZXJyb3JzIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB0b0pzb24oZmllbGRzPzogc3RyaW5nIHwgc3RyaW5nW10pOiBhbnkge1xuICAgIGlmIChmaWVsZHMgJiYgIUFycmF5LmlzQXJyYXkoZmllbGRzKSkge1xuICAgICAgZmllbGRzID0gW2ZpZWxkc107XG4gICAgfVxuICAgIGNvbnN0IG91dDogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgY29uc3QgZmwgPSB0aGlzLkY7XG4gICAgZm9yIChjb25zdCBmIG9mIHRoaXMuRk4pIHtcbiAgICAgIGNvbnN0IG1nciA9IHRoaXMuRk0oZik7XG4gICAgICBpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChtZ3IucmVhZG9ubHkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBvdXRbZl0gPSBmbC5nZXQoZikhLm1hbmFnZXIudG9Kc29uKHRoaXMuRlYoZikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpZWxkcy5pbmRleE9mKGYpICE9PSAtMSkge1xuICAgICAgICAgIG91dFtmXSA9IGZsLmdldChmKSEubWFuYWdlci50b0pzb24odGhpcy5GVihmKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHB1YmxpYyBhY3Rpb248VCwgUlQgZXh0ZW5kcyB7IFtpbmRleDogc3RyaW5nXTogYW55IH0+KFxuICAgIG1ldGhvZDogJ1BPU1QnIHwgJ1BBVENIJyB8ICdHRVQnIHwgJ0RFTEVURScgfCAnUFVUJyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAge1xuICAgICAgYm9keSA9IHVuZGVmaW5lZCxcbiAgICAgIHVwZGF0ZSA9IGZhbHNlLFxuICAgICAgdXBkYXRlUGFydGlhbCA9IHRydWUsXG4gICAgICB1cGRhdGVDaGVjayA9IGZhbHNlLFxuICAgICAgLy8gdXBkYXRlUmFpc2UgPSBmYWxzZSxcbiAgICAgIHBhcmFtcyA9IHt9LFxuICAgICAgaGVhZGVycyA9IHt9LFxuICAgIH06IHtcbiAgICAgIGJvZHk/OiB7IFtfaW5kZXg6IHN0cmluZ106IGFueSB9O1xuICAgICAgdXBkYXRlPzogYm9vbGVhbjtcbiAgICAgIHVwZGF0ZVBhcnRpYWw/OiBib29sZWFuO1xuICAgICAgdXBkYXRlQ2hlY2s/OiBib29sZWFuO1xuICAgICAgLy8gdXBkYXRlUmFpc2U/OiBib29sZWFuO1xuICAgICAgcGFyYW1zPzogeyBbX2luZGV4OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICAgIGhlYWRlcnM/OiB7IFtfaW5kZXg6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPFJUPiB7XG4gICAgaWYgKHRoaXMuX2NvbGwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdNaXNzaW5nIGNvbGxlY3Rpb24nKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jb2xsXG4gICAgICAuYWN0aW9uPFJUPih0aGlzLCBtZXRob2QsIG5hbWUsIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZnJvbUpzb24ocmVzdWx0LCB7XG4gICAgICAgICAgICAgIHBhcnRpYWw6IHVwZGF0ZVBhcnRpYWwsXG4gICAgICAgICAgICAgIGNoZWNrOiB1cGRhdGVDaGVjayxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLy8gQ2FsbGVkIG9uIG1vZGVsLCByZXR1cm5zIHRoZSBtYW5hZ2VyIGZvciBhIGZpZWxkLlxuICBwdWJsaWMgRk08RlQ+KGZpZWxkOiBzdHJpbmcpOiBCYXNlRmllbGRNYW5hZ2VyPEZUPiB7XG4gICAgaWYgKHRoaXMuRi5oYXMoZmllbGQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5GLmdldChmaWVsZCkhLm1hbmFnZXI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2ZpZWxkfSBub3QgZm91bmQgaW4gJHtPYmplY3Qua2V5cyh0aGlzLkYpLmpvaW4oJywnKX0gbW9kZWwgJHt0aGlzfWBcbiAgICApO1xuICB9XG5cbiAgLy8gUmV0dXJuIGZpZWxkIHZhbHVlLCB3aXRob3V0IHR5cGluZ1xuICBwdWJsaWMgRlY8RlQ+KGZpZWxkOiBzdHJpbmcpOiBGVCB7XG4gICAgcmV0dXJuICh0aGlzIGFzIGFueSlbZmllbGRdIGFzIEZUO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBmaWVsZCB2YWx1ZS4gSWYgY2hlY2sgaXMgdHJ1ZSwgb25seSBzZXQgdmFsdWUgaWYgYWxsIHZhbGlkYXRvcnMgcGFzcy5cbiAgICogU2tpcCBzZXR0aW5nIGZpZWxkIHZhbHVlIGlmIG1hbmFnZXIgY29tcHV0ZWQgZmxhZyBpcyB0cnVlLlxuICAgKlxuICAgKiBUaGUgdmFsaWRhdGlvbiByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCBmaWVsZCBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZSBmaWVsZCB2YWx1ZWRcbiAgICogQHBhcmFtIGNoZWNrIGRlZmF1bHQgZmFsc2VcbiAgICogQHJldHVybiBudWxsIG9yIFZhbGlkYXRpb25FcnJvclxuICAgKi9cbiAgcHVibGljIHNldEZWPEZUPihcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIHZhbHVlOiBGVCxcbiAgICBjaGVjazogYm9vbGVhbiA9IGZhbHNlXG4gICk6IG51bGwgfCBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICBpZiAodGhpcy5GTShmaWVsZCkuY29tcHV0ZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoY2hlY2spIHtcbiAgICAgIGNvbnN0IGZjID0gbmV3IEZvcm1Db250cm9sKHZhbHVlKTtcblxuICAgICAgZm9yIChjb25zdCB2IG9mIHRoaXMuRk0oZmllbGQpLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgY29uc3QgdmFsID0gdihmYyk7XG4gICAgICAgIGlmICh2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHZhbCk7XG4gICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAodGhpcyBhcyBhbnkpW2ZpZWxkXSA9IHZhbHVlO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2FsbGVkIG9uIG1vZGVsIHdpdGggYSBsaXN0IG9mIGZpZWxkcywgcmV0dXJucyBhIEZvcm1Hcm91cCB3aXRoXG4gIC8vIHRoZXNlIGZpZWxkcywgb3Igb25seSB0aGUgZm9ybSBjb250cm9sIGZvciBvbmUgZmllbGQuXG4gIHB1YmxpYyBGQygpOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBGQyhmaWVsZDogc3RyaW5nKTogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBGQyhmaWVsZDogc3RyaW5nW10pOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBGQyhmaWVsZD86IHN0cmluZyB8IHN0cmluZ1tdKTogRm9ybUNvbnRyb2wgfCBGb3JtR3JvdXAge1xuICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaWVsZCA9IEFycmF5LmZyb20odGhpcy5GTikuZmlsdGVyKChuKSA9PiAhdGhpcy5GTShuKS5yZWFkb25seSk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkKSkge1xuICAgICAgY29uc3QgZmc6IHsgW2luZGV4OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmllbGQpIHtcbiAgICAgICAgZmdbZl0gPSB0aGlzLkZDKGYpIGFzIEZvcm1Db250cm9sO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoZmcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5GTShmaWVsZCkuZm9ybUNvbnRyb2wodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZShcbiAgICB7IHVwZGF0ZU1vZGVsID0gdHJ1ZSB9OiB7IHVwZGF0ZU1vZGVsPzogYm9vbGVhbiB9ID0ge1xuICAgICAgdXBkYXRlTW9kZWw6IHRydWUsXG4gICAgfVxuICApOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBpZiAodGhpcy5fY29sbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbGwuc2F2ZSh0aGlzLCB7IHVwZGF0ZU1vZGVsIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ01pc3NpbmcgY29sbGVjdGlvbicpKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGUoXG4gICAgZmllbGRzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHsgdXBkYXRlTW9kZWwgPSB0cnVlIH06IHsgdXBkYXRlTW9kZWw/OiBib29sZWFuIH0gPSB7XG4gICAgICB1cGRhdGVNb2RlbDogdHJ1ZSxcbiAgICB9XG4gICk6IE9ic2VydmFibGU8dGhpcz4ge1xuICAgIGlmICh0aGlzLl9jb2xsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29sbC51cGRhdGUodGhpcywgZmllbGRzLCB7IHVwZGF0ZU1vZGVsIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ01pc3NpbmcgY29sbGVjdGlvbicpKTtcbiAgfVxufVxuXG4vL1xuLy8gZXhwb3J0IGNsYXNzIFRyZWVEYXRhTW9kZWwgZXh0ZW5kcyBEYXRhTW9kZWwge1xuLy8gICBzdGF0aWMgb3ZlcnJpZGUgX19uYW1lID0gJ1RyZWVEYXRhTW9kZWwnO1xuLy8gICBAZGV0YWlsc0ZpZWxkKHtcbi8vICAgICBtb2RlbDogdGhpcyxcbi8vICAgICBtYW55OiB0cnVlLFxuLy8gICAgIGRlc2NyaXB0aW9uOiAnUGFyZW50cycsXG4vLyAgIH0pXG4vLyAgIHB1YmxpYyBwYXJlbnRzX2RldGFpbHM/OiB0aGlzW107XG4vL1xuLy8gICBAZm9yZWlnbktleUZpZWxkKHtcbi8vICAgICByZXF1aXJlZDogZmFsc2UsXG4vLyAgICAgZGVzY3JpcHRpb246ICdTdHJ1Y3R1cmUgcGFyZW50ZScsXG4vLyAgICAgcmVsYXRlZDogJ1N0cnVjdHVyZScsXG4vLyAgIH0pXG4vLyAgIHB1YmxpYyBwYXJlbnQ/OiBudW1iZXI7XG4vL1xuLy8gICBAaW50ZWdlckZpZWxkKHtcbi8vICAgICByZXF1aXJlZDogZmFsc2UsXG4vLyAgICAgcmVhZG9ubHk6IHRydWUsXG4vLyAgICAgZGVzY3JpcHRpb246ICdJRCBUcmVlJyxcbi8vICAgfSlcbi8vICAgcHVibGljIHRyZWVfaWQhOiBudW1iZXI7XG4vL1xuLy8gICBAaW50ZWdlckZpZWxkKHtcbi8vICAgICByZXF1aXJlZDogZmFsc2UsXG4vLyAgICAgcmVhZG9ubHk6IHRydWUsXG4vLyAgICAgZGVzY3JpcHRpb246ICdNUFRUIGxlZnQnLFxuLy8gICB9KVxuLy8gICBwdWJsaWMgbGZ0ITogbnVtYmVyO1xuLy9cbi8vICAgQGludGVnZXJGaWVsZCh7XG4vLyAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuLy8gICAgIHJlYWRvbmx5OiB0cnVlLFxuLy8gICAgIGRlc2NyaXB0aW9uOiAnTVBUVCByaWdodCcsXG4vLyAgIH0pXG4vLyAgIHB1YmxpYyByZ2h0ITogbnVtYmVyO1xuLy9cbi8vICAgQGludGVnZXJGaWVsZCh7XG4vLyAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuLy8gICAgIHJlYWRvbmx5OiB0cnVlLFxuLy8gICAgIGRlc2NyaXB0aW9uOiAnTml2ZWF1IGhpw6lyYXJjaGlxdWUnLFxuLy8gICB9KVxuLy8gICBwdWJsaWMgbGV2ZWwhOiBudW1iZXI7XG4vL1xuLy8gICBwdWJsaWMgZ2V0IHBhcmVudF9kZXRhaWxzKCk6IHRoaXMgfCBudWxsIHtcbi8vICAgICBpZiAodGhpcy5wYXJlbnRzX2RldGFpbHMpIHtcbi8vICAgICAgIGNvbnN0IG91dCA9IHRoaXMucGFyZW50c19kZXRhaWxzW3RoaXMucGFyZW50c19kZXRhaWxzLmxlbmd0aCAtIDFdO1xuLy8gICAgICAgb3V0LnBhcmVudHNfZGV0YWlscyA9IHRoaXMucGFyZW50c19kZXRhaWxzLnNsaWNlKFxuLy8gICAgICAgICAwLFxuLy8gICAgICAgICB0aGlzLnBhcmVudHNfZGV0YWlscy5sZW5ndGggLSAxXG4vLyAgICAgICApO1xuLy8gICAgICAgcmV0dXJuIG91dDtcbi8vICAgICB9XG4vLyAgICAgcmV0dXJuIG51bGw7XG4vLyAgIH1cbi8vXG4vLyAgIHB1YmxpYyBzZXQgcGFyZW50X2RldGFpbHMoZDogdGhpcyB8IG51bGwpIHtcbi8vICAgICBjb25zb2xlLmxvZyhkKTtcbi8vICAgICB0aGlzLnBhcmVudHNfZGV0YWlscyA9IGQ/LnBhcmVudHNfZGV0YWlscztcbi8vICAgfVxuLy9cbi8vICAgcHVibGljIF9kaXNwbGF5KCk6IHN0cmluZyB7XG4vLyAgICAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuLy8gICAgIGlmICh0aGlzLnBhcmVudHNfZGV0YWlscykge1xuLy8gICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMucGFyZW50c19kZXRhaWxzKSB7XG4vLyAgICAgICAgIGlmICgocCBhcyBhbnkpLmNvZGUpIHtcbi8vICAgICAgICAgICBvdXQucHVzaChgWyR7KHAgYXMgYW55KS5jb2RlfV0gJHsocCBhcyBhbnkpLm5hbWV9YCk7XG4vLyAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgb3V0LnB1c2goKHAgYXMgYW55KS5uYW1lKTtcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBpZiAoKHRoaXMgYXMgYW55KS5jb2RlKSB7XG4vLyAgICAgICBvdXQucHVzaChgWyR7KHRoaXMgYXMgYW55KS5jb2RlfV0gJHsodGhpcyBhcyBhbnkpLm5hbWV9YCk7XG4vLyAgICAgfSBlbHNlIHtcbi8vICAgICAgIG91dC5wdXNoKCh0aGlzIGFzIGFueSkubmFtZSk7XG4vLyAgICAgfVxuLy9cbi8vICAgICByZXR1cm4gb3V0LmpvaW4oJyA6ICcpO1xuLy8gICB9XG4vLyB9XG4iXX0=
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
class ChoicePipe {
|
|
4
|
+
transform(value, field, mode = 'desc') {
|
|
5
|
+
if (!value) {
|
|
6
|
+
return '-';
|
|
7
|
+
}
|
|
8
|
+
const fvalue = value[field];
|
|
9
|
+
if (mode === 'code') {
|
|
10
|
+
return `${fvalue}`;
|
|
11
|
+
}
|
|
12
|
+
const manager = value.FM(field);
|
|
13
|
+
const choices = manager.choices;
|
|
14
|
+
if (!choices) {
|
|
15
|
+
return `${fvalue}`;
|
|
16
|
+
}
|
|
17
|
+
for (const ch of choices) {
|
|
18
|
+
if (ch.value === fvalue) {
|
|
19
|
+
if (mode === 'desc') {
|
|
20
|
+
return ch.desc;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return `[${fvalue}] ${ch.desc}`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return `[${fvalue}] ??`;
|
|
28
|
+
}
|
|
29
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ChoicePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
30
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: ChoicePipe, isStandalone: true, name: "choice" }); }
|
|
31
|
+
}
|
|
32
|
+
export { ChoicePipe };
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ChoicePipe, decorators: [{
|
|
34
|
+
type: Pipe,
|
|
35
|
+
args: [{
|
|
36
|
+
name: 'choice',
|
|
37
|
+
standalone: true,
|
|
38
|
+
}]
|
|
39
|
+
}] });
|
|
40
|
+
class PChoicePipe {
|
|
41
|
+
transform(value, model, field, mode = 'desc') {
|
|
42
|
+
if (!model) {
|
|
43
|
+
return '-';
|
|
44
|
+
}
|
|
45
|
+
if (!value) {
|
|
46
|
+
return '-';
|
|
47
|
+
}
|
|
48
|
+
// Use value from input, not from field
|
|
49
|
+
const fvalue = value; //- (model as any)[field];
|
|
50
|
+
if (mode === 'code') {
|
|
51
|
+
return `${fvalue}`;
|
|
52
|
+
}
|
|
53
|
+
const manager = model.FM(field);
|
|
54
|
+
const choices = manager.choices;
|
|
55
|
+
if (!choices) {
|
|
56
|
+
return `${fvalue}`;
|
|
57
|
+
}
|
|
58
|
+
for (const ch of choices) {
|
|
59
|
+
if (ch.value === fvalue) {
|
|
60
|
+
if (mode === 'desc') {
|
|
61
|
+
return ch.desc;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
return `[${fvalue}] ${ch.desc}`;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return `[${fvalue}] ??`;
|
|
69
|
+
}
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PChoicePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
71
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: PChoicePipe, isStandalone: true, name: "pchoice" }); }
|
|
72
|
+
}
|
|
73
|
+
export { PChoicePipe };
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PChoicePipe, decorators: [{
|
|
75
|
+
type: Pipe,
|
|
76
|
+
args: [{
|
|
77
|
+
name: 'pchoice',
|
|
78
|
+
standalone: true,
|
|
79
|
+
}]
|
|
80
|
+
}] });
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvaWNlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvZGlzcGVkaXQvY2hvaWNlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBR3BELE1BSWEsVUFBVTtJQUNyQixTQUFTLENBQ1AsS0FBUSxFQUNSLEtBQWEsRUFDYixPQUFpQyxNQUFNO1FBRXZDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQ0QsTUFBTSxNQUFNLEdBQUksS0FBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNuQixPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUM7U0FDcEI7UUFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFJLE9BQWUsQ0FBQyxPQUFPLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQztTQUNwQjtRQUNELEtBQUssTUFBTSxFQUFFLElBQUksT0FBTyxFQUFFO1lBQ3hCLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxNQUFNLEVBQUU7Z0JBQ3ZCLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtvQkFDbkIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO2lCQUNoQjtxQkFBTTtvQkFDTCxPQUFPLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDakM7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0lBQzFCLENBQUM7OEdBNUJVLFVBQVU7NEdBQVYsVUFBVTs7U0FBVixVQUFVOzJGQUFWLFVBQVU7a0JBSnRCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztBQWdDRCxNQUlhLFdBQVc7SUFDdEIsU0FBUyxDQUNQLEtBQVUsRUFDVixLQUFRLEVBQ1IsS0FBYSxFQUNiLE9BQWlDLE1BQU07UUFFdkMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUNELHVDQUF1QztRQUN2QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQywwQkFBMEI7UUFDaEQsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQ25CLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQztTQUNwQjtRQUNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsTUFBTSxPQUFPLEdBQUksT0FBZSxDQUFDLE9BQU8sQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsS0FBSyxNQUFNLEVBQUUsSUFBSSxPQUFPLEVBQUU7WUFDeEIsSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRTtnQkFDdkIsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO29CQUNuQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7aUJBQ2hCO3FCQUFNO29CQUNMLE9BQU8sSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNqQzthQUNGO1NBQ0Y7UUFDRCxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7SUFDMUIsQ0FBQzs4R0FqQ1UsV0FBVzs0R0FBWCxXQUFXOztTQUFYLFdBQVc7MkZBQVgsV0FBVztrQkFKdkIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsU0FBUztvQkFDZixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi9kYXRhL2RhdGEtbW9kZWwnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdjaG9pY2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDaG9pY2VQaXBlPFQgZXh0ZW5kcyBEYXRhTW9kZWw+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShcbiAgICB2YWx1ZTogVCxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIG1vZGU6ICdjb2RlJyB8ICdkZXNjJyB8ICdib3RoJyA9ICdkZXNjJ1xuICApOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuICAgIGNvbnN0IGZ2YWx1ZSA9ICh2YWx1ZSBhcyBhbnkpW2ZpZWxkXTtcbiAgICBpZiAobW9kZSA9PT0gJ2NvZGUnKSB7XG4gICAgICByZXR1cm4gYCR7ZnZhbHVlfWA7XG4gICAgfVxuICAgIGNvbnN0IG1hbmFnZXIgPSB2YWx1ZS5GTShmaWVsZCk7XG4gICAgY29uc3QgY2hvaWNlcyA9IChtYW5hZ2VyIGFzIGFueSkuY2hvaWNlcztcbiAgICBpZiAoIWNob2ljZXMpIHtcbiAgICAgIHJldHVybiBgJHtmdmFsdWV9YDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaCBvZiBjaG9pY2VzKSB7XG4gICAgICBpZiAoY2gudmFsdWUgPT09IGZ2YWx1ZSkge1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgICAgcmV0dXJuIGNoLmRlc2M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGBbJHtmdmFsdWV9XSAke2NoLmRlc2N9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYFske2Z2YWx1ZX1dID8/YDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdwY2hvaWNlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUENob2ljZVBpcGU8VCBleHRlbmRzIERhdGFNb2RlbD4gaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKFxuICAgIHZhbHVlOiBhbnksXG4gICAgbW9kZWw6IFQsXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBtb2RlOiAnY29kZScgfCAnZGVzYycgfCAnYm90aCcgPSAnZGVzYydcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIW1vZGVsKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgICAvLyBVc2UgdmFsdWUgZnJvbSBpbnB1dCwgbm90IGZyb20gZmllbGRcbiAgICBjb25zdCBmdmFsdWUgPSB2YWx1ZTsgLy8tIChtb2RlbCBhcyBhbnkpW2ZpZWxkXTtcbiAgICBpZiAobW9kZSA9PT0gJ2NvZGUnKSB7XG4gICAgICByZXR1cm4gYCR7ZnZhbHVlfWA7XG4gICAgfVxuICAgIGNvbnN0IG1hbmFnZXIgPSBtb2RlbC5GTShmaWVsZCk7XG4gICAgY29uc3QgY2hvaWNlcyA9IChtYW5hZ2VyIGFzIGFueSkuY2hvaWNlcztcbiAgICBpZiAoIWNob2ljZXMpIHtcbiAgICAgIHJldHVybiBgJHtmdmFsdWV9YDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaCBvZiBjaG9pY2VzKSB7XG4gICAgICBpZiAoY2gudmFsdWUgPT09IGZ2YWx1ZSkge1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgICAgcmV0dXJuIGNoLmRlc2M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGBbJHtmdmFsdWV9XSAke2NoLmRlc2N9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYFske2Z2YWx1ZX1dID8/YDtcbiAgfVxufVxuIl19
|