@rosoftlab/core 0.0.100
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +6 -0
- package/esm2020/lib/base-components/base-form-edit.component.mjs +242 -0
- package/esm2020/lib/base-components/field-error-display/field-error-display.component.mjs +15 -0
- package/esm2020/lib/base-components/generic-table/generic-table.component.mjs +431 -0
- package/esm2020/lib/base-components/index.mjs +5 -0
- package/esm2020/lib/base-components/page-not-found/page-not-found.component.mjs +15 -0
- package/esm2020/lib/base-components/searchable-dropdown/searchable-dropdown.component.mjs +231 -0
- package/esm2020/lib/base-components/under-construction/under-construction.component.mjs +12 -0
- package/esm2020/lib/constants/symbols.mjs +3 -0
- package/esm2020/lib/converters/date/date.converter.mjs +12 -0
- package/esm2020/lib/decorators/attribute.decorator.mjs +85 -0
- package/esm2020/lib/decorators/base-datastore-config.decorator.mjs +7 -0
- package/esm2020/lib/decorators/base-model-config.decorator.mjs +10 -0
- package/esm2020/lib/decorators/custom.type.decorator.mjs +11 -0
- package/esm2020/lib/decorators/grid-layout.decorator.mjs +23 -0
- package/esm2020/lib/directives/translated-content.directive.mjs +96 -0
- package/esm2020/lib/directives/translated-element.directive.mjs +20 -0
- package/esm2020/lib/index.mjs +29 -0
- package/esm2020/lib/interfaces/attribute-decorator-options.interface.mjs +2 -0
- package/esm2020/lib/interfaces/datastore-config.interface.mjs +2 -0
- package/esm2020/lib/interfaces/model-config.interface.mjs +2 -0
- package/esm2020/lib/interfaces/overrides.interface.mjs +2 -0
- package/esm2020/lib/interfaces/property-converter.interface.mjs +2 -0
- package/esm2020/lib/material.mjs +94 -0
- package/esm2020/lib/models/base-meta.model.mjs +7 -0
- package/esm2020/lib/models/base-query-data.mjs +13 -0
- package/esm2020/lib/models/base.model.mjs +171 -0
- package/esm2020/lib/models/error-response.model.mjs +9 -0
- package/esm2020/lib/models/grid-layout-format.enum.mjs +15 -0
- package/esm2020/lib/models/grid-layout.mjs +18 -0
- package/esm2020/lib/models/rule.mjs +6 -0
- package/esm2020/lib/module.mjs +55 -0
- package/esm2020/lib/pipes/Nl2brPipe.pipe.mjs +21 -0
- package/esm2020/lib/pipes/input-error.pipe.mjs +37 -0
- package/esm2020/lib/providers.mjs +10 -0
- package/esm2020/lib/services/base-datastore.service.mjs +333 -0
- package/esm2020/lib/services/base.service.mjs +95 -0
- package/esm2020/lib/services/dialog.service.mjs +150 -0
- package/esm2020/lib/services/grid-layout.service.mjs +21 -0
- package/esm2020/lib/services/index.mjs +5 -0
- package/esm2020/lib/validators/pattern-validator.mjs +15 -0
- package/esm2020/public-api.mjs +12 -0
- package/esm2020/rosoftlab-core.mjs +5 -0
- package/fesm2015/rosoftlab-core.mjs +2217 -0
- package/fesm2015/rosoftlab-core.mjs.map +1 -0
- package/fesm2020/rosoftlab-core.mjs +2210 -0
- package/fesm2020/rosoftlab-core.mjs.map +1 -0
- package/lib/base-components/base-form-edit.component.d.ts +58 -0
- package/lib/base-components/field-error-display/field-error-display.component.d.ts +7 -0
- package/lib/base-components/generic-table/generic-table.component.d.ts +93 -0
- package/lib/base-components/index.d.ts +4 -0
- package/lib/base-components/page-not-found/page-not-found.component.d.ts +8 -0
- package/lib/base-components/searchable-dropdown/searchable-dropdown.component.d.ts +62 -0
- package/lib/base-components/under-construction/under-construction.component.d.ts +6 -0
- package/lib/constants/symbols.d.ts +1 -0
- package/lib/converters/date/date.converter.d.ts +5 -0
- package/lib/decorators/attribute.decorator.d.ts +2 -0
- package/lib/decorators/base-datastore-config.decorator.d.ts +1 -0
- package/lib/decorators/base-model-config.decorator.d.ts +1 -0
- package/lib/decorators/custom.type.decorator.d.ts +1 -0
- package/lib/decorators/grid-layout.decorator.d.ts +2 -0
- package/lib/directives/translated-content.directive.d.ts +21 -0
- package/lib/directives/translated-element.directive.d.ts +10 -0
- package/lib/index.d.ts +27 -0
- package/lib/interfaces/attribute-decorator-options.interface.d.ts +8 -0
- package/lib/interfaces/datastore-config.interface.d.ts +8 -0
- package/lib/interfaces/model-config.interface.d.ts +8 -0
- package/lib/interfaces/overrides.interface.d.ts +5 -0
- package/lib/interfaces/property-converter.interface.d.ts +4 -0
- package/lib/material.d.ts +42 -0
- package/lib/models/base-meta.model.d.ts +5 -0
- package/lib/models/base-query-data.d.ts +7 -0
- package/lib/models/base.model.d.ts +33 -0
- package/lib/models/error-response.model.d.ts +17 -0
- package/lib/models/grid-layout-format.enum.d.ts +12 -0
- package/lib/models/grid-layout.d.ts +13 -0
- package/lib/models/rule.d.ts +5 -0
- package/lib/module.d.ts +14 -0
- package/lib/pipes/Nl2brPipe.pipe.d.ts +7 -0
- package/lib/pipes/input-error.pipe.d.ts +10 -0
- package/lib/providers.d.ts +2 -0
- package/lib/services/base-datastore.service.d.ts +45 -0
- package/lib/services/base.service.d.ts +26 -0
- package/lib/services/dialog.service.d.ts +21 -0
- package/lib/services/grid-layout.service.d.ts +9 -0
- package/lib/services/index.d.ts +4 -0
- package/lib/validators/pattern-validator.d.ts +4 -0
- package/package.json +53 -0
- package/public-api.d.ts +7 -0
- package/rosoftlab-core.d.ts +5 -0
package/README.md
ADDED
@@ -0,0 +1,242 @@
|
|
1
|
+
import { __decorate } from "tslib";
|
2
|
+
import { Component } from '@angular/core';
|
3
|
+
import { FormControl, FormGroup } from '@angular/forms';
|
4
|
+
import { BlockUI } from 'ng-block-ui';
|
5
|
+
import { Observable } from 'rxjs';
|
6
|
+
import * as i0 from "@angular/core";
|
7
|
+
import * as i1 from "@angular/forms";
|
8
|
+
import * as i2 from "@angular/router";
|
9
|
+
import * as i3 from "../services/base.service";
|
10
|
+
import * as i4 from "../services/dialog.service";
|
11
|
+
import * as i5 from "@ngx-translate/core";
|
12
|
+
import * as i6 from "@angular/common";
|
13
|
+
export class BaseFormEditComponent {
|
14
|
+
constructor(fb, router, route, modelService, dialogService, translate, location) {
|
15
|
+
this.fb = fb;
|
16
|
+
this.router = router;
|
17
|
+
this.route = route;
|
18
|
+
this.modelService = modelService;
|
19
|
+
this.dialogService = dialogService;
|
20
|
+
this.translate = translate;
|
21
|
+
this.location = location;
|
22
|
+
this.isLoading = true;
|
23
|
+
this.changeUrlRoute = true;
|
24
|
+
this.generateForm(this.modelService.newModel());
|
25
|
+
}
|
26
|
+
afterSave(model) {
|
27
|
+
return new Observable((observer) => {
|
28
|
+
observer.next(model);
|
29
|
+
observer.complete();
|
30
|
+
});
|
31
|
+
}
|
32
|
+
beforeSave(model) {
|
33
|
+
return new Observable((observer) => {
|
34
|
+
observer.next(model);
|
35
|
+
observer.complete();
|
36
|
+
});
|
37
|
+
}
|
38
|
+
ngOnInit() {
|
39
|
+
this.initForm();
|
40
|
+
}
|
41
|
+
initForm(customInclude = '', newModelId = null, model = null) {
|
42
|
+
if (model === null) {
|
43
|
+
this.modelId = this.route.snapshot.paramMap.get('id') ?? newModelId;
|
44
|
+
this.isEdit = false;
|
45
|
+
if (this.modelId) {
|
46
|
+
this.modelService.get(this.modelId, customInclude).subscribe((value) => {
|
47
|
+
this.isEdit = true;
|
48
|
+
this.generateForm(value);
|
49
|
+
});
|
50
|
+
}
|
51
|
+
else {
|
52
|
+
if (this.changeUrlRoute) {
|
53
|
+
const addUrl = this.router.createUrlTree([]).toString();
|
54
|
+
this.editRoute = this.router.createUrlTree([addUrl.replace('add', 'edit')]).toString();
|
55
|
+
}
|
56
|
+
// }
|
57
|
+
this.generateForm(this.modelService.newModel());
|
58
|
+
}
|
59
|
+
}
|
60
|
+
else {
|
61
|
+
this.modelId = model.id;
|
62
|
+
this.isEdit = true;
|
63
|
+
this.generateForm(model);
|
64
|
+
}
|
65
|
+
}
|
66
|
+
generateForm(model) {
|
67
|
+
this.isLoading = false;
|
68
|
+
this.modelId = model.id;
|
69
|
+
this.model = model;
|
70
|
+
this.baseForm = this.modelService.toFormGroup(this.fb, model);
|
71
|
+
this.afterFormGenerated();
|
72
|
+
}
|
73
|
+
afterFormGenerated() {
|
74
|
+
}
|
75
|
+
getFromGroup(formGroup = null) {
|
76
|
+
if (!formGroup)
|
77
|
+
return this.baseForm;
|
78
|
+
if (formGroup instanceof FormGroup)
|
79
|
+
return formGroup;
|
80
|
+
return this.baseForm.controls[formGroup];
|
81
|
+
}
|
82
|
+
validateAllFormFields(formGroup = null) {
|
83
|
+
const fg = this.getFromGroup(formGroup);
|
84
|
+
Object.keys(fg.controls).forEach(field => {
|
85
|
+
// console.log(field);
|
86
|
+
const control = fg.get(field);
|
87
|
+
if (control instanceof FormControl) {
|
88
|
+
control.markAsTouched({ onlySelf: true });
|
89
|
+
}
|
90
|
+
else if (control instanceof FormGroup) {
|
91
|
+
this.validateAllFormFields(control);
|
92
|
+
}
|
93
|
+
});
|
94
|
+
}
|
95
|
+
isFieldValid(field, formGroup = null) {
|
96
|
+
const fg = this.getFromGroup(formGroup);
|
97
|
+
const filedControl = fg.get(field);
|
98
|
+
return !filedControl.valid && filedControl.touched;
|
99
|
+
}
|
100
|
+
isFieldValidFromArray(arrayIndex, field, arrayName = 'formArray') {
|
101
|
+
const fieldControl = this.baseForm.get(arrayName).get([arrayIndex]).get(field);
|
102
|
+
return !fieldControl.valid && fieldControl.touched;
|
103
|
+
}
|
104
|
+
displayFieldCss(field) {
|
105
|
+
return {
|
106
|
+
'has-error': this.isFieldValid(field),
|
107
|
+
'has-feedback': this.isFieldValid(field)
|
108
|
+
};
|
109
|
+
}
|
110
|
+
onCancel() {
|
111
|
+
this.router.navigate([this.cancelRoute]);
|
112
|
+
}
|
113
|
+
onSave() {
|
114
|
+
this.saveModel(this.baseForm);
|
115
|
+
}
|
116
|
+
saveModel(formGroup = null) {
|
117
|
+
const fg = this.getFromGroup(formGroup);
|
118
|
+
const that = this;
|
119
|
+
if (fg) {
|
120
|
+
if (fg.valid) {
|
121
|
+
that.blockUI.start('Saving ...');
|
122
|
+
this.beforeSave(this.model).subscribe(_ => {
|
123
|
+
this.modelService.save(this.baseForm, this.modelId, this.model).subscribe((newModel) => {
|
124
|
+
this.model = newModel;
|
125
|
+
this.modelId = newModel.id;
|
126
|
+
if (this.editRoute) {
|
127
|
+
this.isEdit = true;
|
128
|
+
if (this.changeUrlRoute) {
|
129
|
+
const url = this.router.createUrlTree([this.editRoute, this.modelId]).toString();
|
130
|
+
this.location.replaceState(url);
|
131
|
+
}
|
132
|
+
}
|
133
|
+
this.afterSave(newModel).subscribe((val) => {
|
134
|
+
this.blockUI.stop();
|
135
|
+
this.dialogService.showSaveMessage('Your changes were saved successfully.').subscribe(d => {
|
136
|
+
fg.markAsPristine();
|
137
|
+
});
|
138
|
+
});
|
139
|
+
}, err => {
|
140
|
+
this.serverErrors(err);
|
141
|
+
this.blockUI.stop();
|
142
|
+
});
|
143
|
+
});
|
144
|
+
}
|
145
|
+
else {
|
146
|
+
this.validateAllFormFields(formGroup);
|
147
|
+
}
|
148
|
+
}
|
149
|
+
}
|
150
|
+
serverErrors(err) {
|
151
|
+
if (err.error) {
|
152
|
+
if (err.error.errors) {
|
153
|
+
const validationErrors = err.error.errors;
|
154
|
+
if (Array.isArray(validationErrors)) {
|
155
|
+
validationErrors.forEach(prop => {
|
156
|
+
const formControl = this.baseForm.get(prop);
|
157
|
+
if (formControl) {
|
158
|
+
// activate the error message
|
159
|
+
formControl.setErrors({
|
160
|
+
serverError: validationErrors[prop].join('\n')
|
161
|
+
});
|
162
|
+
}
|
163
|
+
});
|
164
|
+
}
|
165
|
+
else {
|
166
|
+
const keys = Object.keys(validationErrors);
|
167
|
+
keys.forEach(prop => {
|
168
|
+
const formControl = this.baseForm.get(prop);
|
169
|
+
if (formControl) {
|
170
|
+
// activate the error message
|
171
|
+
formControl.setErrors({
|
172
|
+
serverError: validationErrors[prop].join('\n')
|
173
|
+
});
|
174
|
+
}
|
175
|
+
});
|
176
|
+
}
|
177
|
+
}
|
178
|
+
}
|
179
|
+
}
|
180
|
+
canDeactivate() {
|
181
|
+
// Allow synchronous navigation (`true`) if no crisis or the crisis is unchanged
|
182
|
+
if (!this.baseForm.dirty) {
|
183
|
+
return true;
|
184
|
+
}
|
185
|
+
// Otherwise ask the user with the dialog service and return its
|
186
|
+
// observable which resolves to true or false when the user decides
|
187
|
+
return this.dialogService.confirm('Discard changes ?', null, 'Discard');
|
188
|
+
}
|
189
|
+
getFiledName(filedTranslationKey) {
|
190
|
+
return { field: this.translate.instant(filedTranslationKey) };
|
191
|
+
}
|
192
|
+
getCustomErrorMessage(error, fieldLabel) {
|
193
|
+
return '';
|
194
|
+
}
|
195
|
+
getErrorMessageFromArray(arrayIndex, field, filedTranslationKey, arrayName = 'formArray') {
|
196
|
+
const fieldControl = this.baseForm.get(arrayName).get([arrayIndex]).get(field);
|
197
|
+
return this.getErrorMessageForField(fieldControl, filedTranslationKey);
|
198
|
+
}
|
199
|
+
getErrorMessage(field, filedTranslationKey, formGroup = null) {
|
200
|
+
const fg = this.getFromGroup(formGroup);
|
201
|
+
return this.getErrorMessageForField(fg.get(field), filedTranslationKey);
|
202
|
+
}
|
203
|
+
getErrorMessageForField(fieldControl, filedTranslationKey) {
|
204
|
+
const error = fieldControl.errors;
|
205
|
+
const fieldLabel = this.translate.instant(filedTranslationKey);
|
206
|
+
let rvalue = '';
|
207
|
+
if (error !== null) {
|
208
|
+
if (error['required'] === true) {
|
209
|
+
rvalue = this.translate.instant('General.Field.Required', { field: fieldLabel });
|
210
|
+
}
|
211
|
+
if (error['minlength']) {
|
212
|
+
rvalue = this.translate.instant('General.Field.MinLength', { field: fieldLabel, requiredLength: error.minlength.requiredLength });
|
213
|
+
}
|
214
|
+
if (error['email'] === true) {
|
215
|
+
rvalue = this.translate.instant('General.Field.InvalidEmail');
|
216
|
+
}
|
217
|
+
if (error['url'] === true) {
|
218
|
+
rvalue = this.translate.instant('General.Field.InvalidUrl');
|
219
|
+
}
|
220
|
+
if (error['serverError']) {
|
221
|
+
rvalue = error['serverError'];
|
222
|
+
}
|
223
|
+
if (rvalue === '') {
|
224
|
+
rvalue = this.getCustomErrorMessage(error, fieldLabel);
|
225
|
+
}
|
226
|
+
}
|
227
|
+
return rvalue;
|
228
|
+
}
|
229
|
+
}
|
230
|
+
BaseFormEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: BaseFormEditComponent, deps: [{ token: i1.FormBuilder }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.BaseService }, { token: i4.DialogService }, { token: i5.TranslateService }, { token: i6.Location }], target: i0.ɵɵFactoryTarget.Component });
|
231
|
+
BaseFormEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: BaseFormEditComponent, selector: "app-base.form.edit", ngImport: i0, template: '', isInline: true });
|
232
|
+
__decorate([
|
233
|
+
BlockUI()
|
234
|
+
], BaseFormEditComponent.prototype, "blockUI", void 0);
|
235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: BaseFormEditComponent, decorators: [{
|
236
|
+
type: Component,
|
237
|
+
args: [{
|
238
|
+
selector: 'app-base.form.edit',
|
239
|
+
template: ''
|
240
|
+
}]
|
241
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.BaseService }, { type: i4.DialogService }, { type: i5.TranslateService }, { type: i6.Location }]; }, propDecorators: { blockUI: [] } });
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL2NvcmUvc3JjL2xpYi9iYXNlLWNvbXBvbmVudHMvYmFzZS1mb3JtLWVkaXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBZSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckUsT0FBTyxFQUFFLE9BQU8sRUFBYSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQVFsQyxNQUFNLE9BQWdCLHFCQUFxQjtJQVV6QyxZQUNZLEVBQWUsRUFDZixNQUFjLEVBQ2QsS0FBcUIsRUFDckIsWUFBNEIsRUFDNUIsYUFBNEIsRUFDNUIsU0FBMkIsRUFDM0IsUUFBa0I7UUFObEIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVg5QixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR1YsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFVcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFRO1FBQ3ZCLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUss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QyxFQUFFO2dCQUN0QixNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7YUFDbkk7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQzNCLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2FBQy9EO1lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUN6QixNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQzthQUM3RDtZQUNELElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN4QixNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQy9CO1lBQ0QsSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO2dCQUNqQixNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQzthQUN4RDtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7a0hBbk9tQixxQkFBcUI7c0dBQXJCLHFCQUFxQiwwREFGL0IsRUFBRTtBQUdEO0lBQVYsT0FBTyxFQUFFO3NEQUFvQjsyRkFEVixxQkFBcUI7a0JBSjFDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7Z1FBRVksT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJsb2NrVUksIE5nQmxvY2tVSSB9IGZyb20gJ25nLWJsb2NrLXVpJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBCYXNlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvYmFzZS5tb2RlbCc7XHJcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYmFzZS5mb3JtLmVkaXQnLFxyXG4gIHRlbXBsYXRlOiAnJ1xyXG59KVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZvcm1FZGl0Q29tcG9uZW50PFQgZXh0ZW5kcyBCYXNlTW9kZWw+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAQmxvY2tVSSgpIGJsb2NrVUk6IE5nQmxvY2tVSTtcclxuICBiYXNlRm9ybTogRm9ybUdyb3VwO1xyXG4gIG1vZGVsSWQ6IHN0cmluZztcclxuICBtb2RlbDogVDtcclxuICBpc0VkaXQ6IGJvb2xlYW47XHJcbiAgaXNMb2FkaW5nID0gdHJ1ZTtcclxuICBjYW5jZWxSb3V0ZTogc3RyaW5nO1xyXG4gIGVkaXRSb3V0ZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBjaGFuZ2VVcmxSb3V0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByb3RlY3RlZCBtb2RlbFNlcnZpY2U6IEJhc2VTZXJ2aWNlPFQ+LFxyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGxvY2F0aW9uOiBMb2NhdGlvblxyXG4gICkge1xyXG4gICAgdGhpcy5nZW5lcmF0ZUZvcm0odGhpcy5tb2RlbFNlcnZpY2UubmV3TW9kZWwoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWZ0ZXJTYXZlKG1vZGVsOiBUKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIG9ic2VydmVyLm5leHQobW9kZWwpO1xyXG4gICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmVmb3JlU2F2ZShtb2RlbDogVCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICBvYnNlcnZlci5uZXh0KG1vZGVsKTtcclxuICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgfVxyXG4gIGluaXRGb3JtKGN1c3RvbUluY2x1ZGU6IHN0cmluZyA9ICcnLCBuZXdNb2RlbElkOiBzdHJpbmcgPSBudWxsLCBtb2RlbDogVCA9IG51bGwpIHtcclxuICAgIGlmIChtb2RlbCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm1vZGVsSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKSA/PyBuZXdNb2RlbElkO1xyXG4gICAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5tb2RlbElkKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2UuZ2V0KHRoaXMubW9kZWxJZCwgY3VzdG9tSW5jbHVkZSkuc3Vic2NyaWJlKCh2YWx1ZTogVCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm0odmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhbmdlVXJsUm91dGUpIHtcclxuICAgICAgICAgIGNvbnN0IGFkZFVybCA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW10pLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICB0aGlzLmVkaXRSb3V0ZSA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW2FkZFVybC5yZXBsYWNlKCdhZGQnLCAnZWRpdCcpXSkudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVGb3JtKHRoaXMubW9kZWxTZXJ2aWNlLm5ld01vZGVsKCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1vZGVsSWQgPSBtb2RlbC5pZDtcclxuICAgICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlRm9ybShtb2RlbClcclxuICAgIH1cclxuICB9XHJcbiAgZ2VuZXJhdGVGb3JtKG1vZGVsPzogVCkge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMubW9kZWxJZCA9IG1vZGVsLmlkO1xyXG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgdGhpcy5iYXNlRm9ybSA9IHRoaXMubW9kZWxTZXJ2aWNlLnRvRm9ybUdyb3VwKHRoaXMuZmIsIG1vZGVsKTtcclxuICAgIHRoaXMuYWZ0ZXJGb3JtR2VuZXJhdGVkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBhZnRlckZvcm1HZW5lcmF0ZWQoKSB7XHJcblxyXG4gIH1cclxuICBwcml2YXRlIGdldEZyb21Hcm91cChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IHN0cmluZyA9IG51bGwpOiBGb3JtR3JvdXAge1xyXG4gICAgaWYgKCFmb3JtR3JvdXApXHJcbiAgICAgIHJldHVybiB0aGlzLmJhc2VGb3JtO1xyXG4gICAgaWYgKGZvcm1Hcm91cCBpbnN0YW5jZW9mIEZvcm1Hcm91cClcclxuICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuICAgIHJldHVybiB0aGlzLmJhc2VGb3JtLmNvbnRyb2xzW2Zvcm1Hcm91cF0gYXMgRm9ybUdyb3VwO1xyXG4gIH1cclxuICB2YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybUdyb3VwOiBGb3JtR3JvdXAgfCBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBmZyA9IHRoaXMuZ2V0RnJvbUdyb3VwKGZvcm1Hcm91cClcclxuICAgIE9iamVjdC5rZXlzKGZnLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgLy8gY29uc29sZS5sb2coZmllbGQpO1xyXG4gICAgICBjb25zdCBjb250cm9sID0gZmcuZ2V0KGZpZWxkKTtcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyhjb250cm9sKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGlzRmllbGRWYWxpZChmaWVsZDogc3RyaW5nLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGZnID0gdGhpcy5nZXRGcm9tR3JvdXAoZm9ybUdyb3VwKVxyXG4gICAgY29uc3QgZmlsZWRDb250cm9sID0gZmcuZ2V0KGZpZWxkKVxyXG4gICAgcmV0dXJuICFmaWxlZENvbnRyb2wudmFsaWQgJiYgZmlsZWRDb250cm9sLnRvdWNoZWQ7XHJcbiAgfVxyXG5cclxuICBpc0ZpZWxkVmFsaWRGcm9tQXJyYXkoYXJyYXlJbmRleDogbnVtYmVyLCBmaWVsZDogc3RyaW5nLCBhcnJheU5hbWU6IHN0cmluZyA9ICdmb3JtQXJyYXknKSB7XHJcbiAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLmJhc2VGb3JtLmdldChhcnJheU5hbWUpLmdldChbYXJyYXlJbmRleF0pLmdldChmaWVsZClcclxuICAgIHJldHVybiAhZmllbGRDb250cm9sLnZhbGlkICYmIGZpZWxkQ29udHJvbC50b3VjaGVkO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUZpZWxkQ3NzKGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdoYXMtZXJyb3InOiB0aGlzLmlzRmllbGRWYWxpZChmaWVsZCksXHJcbiAgICAgICdoYXMtZmVlZGJhY2snOiB0aGlzLmlzRmllbGRWYWxpZChmaWVsZClcclxuICAgIH07XHJcbiAgfVxyXG4gIG9uQ2FuY2VsKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuY2FuY2VsUm91dGVdKTtcclxuICB9XHJcbiAgb25TYXZlKCkge1xyXG4gICAgdGhpcy5zYXZlTW9kZWwodGhpcy5iYXNlRm9ybSlcclxuICB9XHJcbiAgc2F2ZU1vZGVsKGZvcm1Hcm91cDogRm9ybUdyb3VwIHwgc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3QgZmcgPSB0aGlzLmdldEZyb21Hcm91cChmb3JtR3JvdXApXHJcbiAgICBjb25zdCB0aGF0ID0gdGhpcztcclxuICAgIGlmIChmZykge1xyXG4gICAgICBpZiAoZmcudmFsaWQpIHtcclxuICAgICAgICB0aGF0LmJsb2NrVUkuc3RhcnQoJ1NhdmluZyAuLi4nKTtcclxuICAgICAgICB0aGlzLmJlZm9yZVNhdmUodGhpcy5tb2RlbCkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgICAgdGhpcy5tb2RlbFNlcnZpY2Uuc2F2ZSh0aGlzLmJhc2VGb3JtLCB0aGlzLm1vZGVsSWQsIHRoaXMubW9kZWwpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKG5ld01vZGVsOiBUKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IG5ld01vZGVsO1xyXG4gICAgICAgICAgICAgIHRoaXMubW9kZWxJZCA9IG5ld01vZGVsLmlkO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRSb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhbmdlVXJsUm91dGUpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbdGhpcy5lZGl0Um91dGUsIHRoaXMubW9kZWxJZF0pLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHVybCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuYWZ0ZXJTYXZlKG5ld01vZGVsKS5zdWJzY3JpYmUoKHZhbDogVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja1VJLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93U2F2ZU1lc3NhZ2UoJ1lvdXIgY2hhbmdlcyB3ZXJlIHNhdmVkIHN1Y2Nlc3NmdWxseS4nKS5zdWJzY3JpYmUoZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGZnLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlcnZlckVycm9ycyhlcnIpXHJcbiAgICAgICAgICAgICAgdGhpcy5ibG9ja1VJLnN0b3AoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybUdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzZXJ2ZXJFcnJvcnMoZXJyOiBhbnkpIHtcclxuICAgIGlmIChlcnIuZXJyb3IpIHtcclxuICAgICAgaWYgKGVyci5lcnJvci5lcnJvcnMpIHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3JzID0gZXJyLmVycm9yLmVycm9ycztcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZGF0aW9uRXJyb3JzKSkge1xyXG4gICAgICAgICAgdmFsaWRhdGlvbkVycm9ycy5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuYmFzZUZvcm0uZ2V0KHByb3ApO1xyXG4gICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGUgZXJyb3IgbWVzc2FnZVxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldEVycm9ycyh7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJFcnJvcjogdmFsaWRhdGlvbkVycm9yc1twcm9wXS5qb2luKCdcXG4nKVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbGlkYXRpb25FcnJvcnMpO1xyXG4gICAgICAgICAga2V5cy5mb3JFYWNoKHByb3AgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuYmFzZUZvcm0uZ2V0KHByb3ApO1xyXG4gICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAvLyBhY3RpdmF0ZSB0aGUgZXJyb3IgbWVzc2FnZVxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldEVycm9ycyh7XHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJFcnJvcjogdmFsaWRhdGlvbkVycm9yc1twcm9wXS5qb2luKCdcXG4nKVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgY2FuRGVhY3RpdmF0ZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XHJcbiAgICAvLyBBbGxvdyBzeW5jaHJvbm91cyBuYXZpZ2F0aW9uIChgdHJ1ZWApIGlmIG5vIGNyaXNpcyBvciB0aGUgY3Jpc2lzIGlzIHVuY2hhbmdlZFxyXG4gICAgaWYgKCF0aGlzLmJhc2VGb3JtLmRpcnR5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gT3RoZXJ3aXNlIGFzayB0aGUgdXNlciB3aXRoIHRoZSBkaWFsb2cgc2VydmljZSBhbmQgcmV0dXJuIGl0c1xyXG4gICAgLy8gb2JzZXJ2YWJsZSB3aGljaCByZXNvbHZlcyB0byB0cnVlIG9yIGZhbHNlIHdoZW4gdGhlIHVzZXIgZGVjaWRlc1xyXG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKCdEaXNjYXJkIGNoYW5nZXMgPycsIG51bGwsICdEaXNjYXJkJyk7XHJcbiAgfVxyXG4gIGdldEZpbGVkTmFtZShmaWxlZFRyYW5zbGF0aW9uS2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB7IGZpZWxkOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGZpbGVkVHJhbnNsYXRpb25LZXkpIH07XHJcbiAgfVxyXG4gIGdldEN1c3RvbUVycm9yTWVzc2FnZShlcnJvcjogYW55LCBmaWVsZExhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuICBnZXRFcnJvck1lc3NhZ2VGcm9tQXJyYXkoYXJyYXlJbmRleDogbnVtYmVyLCBmaWVsZDogc3RyaW5nLCBmaWxlZFRyYW5zbGF0aW9uS2V5OiBzdHJpbmcsIGFycmF5TmFtZTogc3RyaW5nID0gJ2Zvcm1BcnJheScpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZmllbGRDb250cm9sID0gdGhpcy5iYXNlRm9ybS5nZXQoYXJyYXlOYW1lKS5nZXQoW2FycmF5SW5kZXhdKS5nZXQoZmllbGQpXHJcbiAgICByZXR1cm4gdGhpcy5nZXRFcnJvck1lc3NhZ2VGb3JGaWVsZChmaWVsZENvbnRyb2wsIGZpbGVkVHJhbnNsYXRpb25LZXkpXHJcbiAgfVxyXG4gIGdldEVycm9yTWVzc2FnZShmaWVsZDogc3RyaW5nLCBmaWxlZFRyYW5zbGF0aW9uS2V5OiBzdHJpbmcsIGZvcm1Hcm91cDogRm9ybUdyb3VwIHwgc3RyaW5nID0gbnVsbCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmZyA9IHRoaXMuZ2V0RnJvbUdyb3VwKGZvcm1Hcm91cClcclxuICAgIHJldHVybiB0aGlzLmdldEVycm9yTWVzc2FnZUZvckZpZWxkKGZnLmdldChmaWVsZCksIGZpbGVkVHJhbnNsYXRpb25LZXkpXHJcbiAgfVxyXG4gIGdldEVycm9yTWVzc2FnZUZvckZpZWxkKGZpZWxkQ29udHJvbDogYW55LCBmaWxlZFRyYW5zbGF0aW9uS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZXJyb3IgPSBmaWVsZENvbnRyb2wuZXJyb3JzO1xyXG4gICAgY29uc3QgZmllbGRMYWJlbCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmlsZWRUcmFuc2xhdGlvbktleSk7XHJcbiAgICBsZXQgcnZhbHVlID0gJyc7XHJcbiAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcclxuICAgICAgaWYgKGVycm9yWydyZXF1aXJlZCddID09PSB0cnVlKSB7XHJcbiAgICAgICAgcnZhbHVlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnR2VuZXJhbC5GaWVsZC5SZXF1aXJlZCcsIHsgZmllbGQ6IGZpZWxkTGFiZWwgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVycm9yWydtaW5sZW5ndGgnXSkge1xyXG4gICAgICAgIHJ2YWx1ZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0dlbmVyYWwuRmllbGQuTWluTGVuZ3RoJywgeyBmaWVsZDogZmllbGRMYWJlbCwgcmVxdWlyZWRMZW5ndGg6IGVycm9yLm1pbmxlbmd0aC5yZXF1aXJlZExlbmd0aCB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXJyb3JbJ2VtYWlsJ10gPT09IHRydWUpIHtcclxuICAgICAgICBydmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdHZW5lcmFsLkZpZWxkLkludmFsaWRFbWFpbCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlcnJvclsndXJsJ10gPT09IHRydWUpIHtcclxuICAgICAgICBydmFsdWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdHZW5lcmFsLkZpZWxkLkludmFsaWRVcmwnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXJyb3JbJ3NlcnZlckVycm9yJ10pIHtcclxuICAgICAgICBydmFsdWUgPSBlcnJvclsnc2VydmVyRXJyb3InXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocnZhbHVlID09PSAnJykge1xyXG4gICAgICAgIHJ2YWx1ZSA9IHRoaXMuZ2V0Q3VzdG9tRXJyb3JNZXNzYWdlKGVycm9yLCBmaWVsZExhYmVsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJ2YWx1ZTtcclxuICB9XHJcbn1cclxuIl19
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
export class FieldErrorDisplayComponent {
|
4
|
+
}
|
5
|
+
FieldErrorDisplayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: FieldErrorDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
6
|
+
FieldErrorDisplayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: FieldErrorDisplayComponent, selector: "rsl-field-error-display", inputs: { errorMsg: "errorMsg", displayError: "displayError" }, ngImport: i0, template: "<div *ngIf=\"displayError\" >\n <!-- <span class=\"glyphicon glyphicon-remove form-control-feedback fix-error-icon\"></span> -->\n <span class=\"sr-only\">(error)</span>\n <div class=\"error-msg\">\n {{ errorMsg }}\n </div>\n</div>\n", styles: [".error-msg{color:red}.fix-error-icon{top:27px}\n"] });
|
7
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: FieldErrorDisplayComponent, decorators: [{
|
8
|
+
type: Component,
|
9
|
+
args: [{ selector: 'rsl-field-error-display', template: "<div *ngIf=\"displayError\" >\n <!-- <span class=\"glyphicon glyphicon-remove form-control-feedback fix-error-icon\"></span> -->\n <span class=\"sr-only\">(error)</span>\n <div class=\"error-msg\">\n {{ errorMsg }}\n </div>\n</div>\n", styles: [".error-msg{color:red}.fix-error-icon{top:27px}\n"] }]
|
10
|
+
}], propDecorators: { errorMsg: [{
|
11
|
+
type: Input
|
12
|
+
}], displayError: [{
|
13
|
+
type: Input
|
14
|
+
}] } });
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXJyb3ItZGlzcGxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL2Jhc2UtY29tcG9uZW50cy9maWVsZC1lcnJvci1kaXNwbGF5L2ZpZWxkLWVycm9yLWRpc3BsYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcm9zb2Z0bGFiL2NvcmUvc3JjL2xpYi9iYXNlLWNvbXBvbmVudHMvZmllbGQtZXJyb3ItZGlzcGxheS9maWVsZC1lcnJvci1kaXNwbGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU9qRCxNQUFNLE9BQU8sMEJBQTBCOzt1SEFBMUIsMEJBQTBCOzJHQUExQiwwQkFBMEIsK0hDUHZDLGtQQU9BOzJGREFhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx5QkFBeUI7OEJBTTFCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnNsLWZpZWxkLWVycm9yLWRpc3BsYXknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWVsZC1lcnJvci1kaXNwbGF5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWVsZC1lcnJvci1kaXNwbGF5LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpZWxkRXJyb3JEaXNwbGF5Q29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgZXJyb3JNc2c6IHN0cmluZztcclxuICBASW5wdXQoKSBkaXNwbGF5RXJyb3I6IGJvb2xlYW47XHJcblxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJkaXNwbGF5RXJyb3JcIiA+XG4gIDwhLS0gPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZSBmb3JtLWNvbnRyb2wtZmVlZGJhY2sgZml4LWVycm9yLWljb25cIj48L3NwYW4+IC0tPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj4oZXJyb3IpPC9zcGFuPlxuICA8ZGl2IGNsYXNzPVwiZXJyb3ItbXNnXCI+XG4gICAge3sgZXJyb3JNc2cgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|