@dignite-ng/expand.cms 3.0.0-rc.48 → 3.0.0-rc.50
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/config/providers/route.provider.d.ts +2 -3
- package/esm2022/config/providers/route.provider.mjs +3 -4
- package/esm2022/lib/cms-routing.module.mjs +3 -3
- package/esm2022/lib/cms.module.mjs +4 -4
- package/esm2022/lib/components/admin/entries/create-or-edit-entries.component.mjs +18 -16
- package/esm2022/lib/components/admin/entries/create-or-update-entry-input-base.mjs +9 -1
- package/esm2022/lib/components/admin/entries/create.component.mjs +25 -63
- package/esm2022/lib/components/admin/entries/edit.component.mjs +28 -14
- package/esm2022/lib/components/admin/entries/entries.component.mjs +11 -16
- package/esm2022/lib/components/admin/fields/create-field.component.mjs +54 -54
- package/esm2022/lib/components/admin/fields/create-or-edit-field.component.mjs +44 -69
- package/esm2022/lib/components/admin/fields/edit-field.component.mjs +130 -73
- package/esm2022/lib/components/admin/fields/fields-form-config.mjs +50 -0
- package/esm2022/lib/components/admin/fields/fields-group.component.mjs +128 -0
- package/esm2022/lib/components/admin/fields/fields.component.mjs +61 -57
- package/esm2022/lib/components/admin/fields/index.mjs +3 -3
- package/esm2022/lib/components/admin/sections/create-or-edit-sections-modal.component.mjs +17 -15
- package/esm2022/lib/components/admin/sections/entry-types/create-or-edit.component.mjs +59 -86
- package/esm2022/lib/components/admin/sections/sections.component.mjs +11 -14
- package/esm2022/lib/components/dynamic-form/matrix/matrix-config.component.mjs +32 -23
- package/esm2022/lib/components/dynamic-form/matrix/matrix-control.component.mjs +26 -11
- package/esm2022/lib/components/dynamic-form/table/table-config.component.mjs +50 -26
- package/esm2022/lib/components/dynamic-form/table/table-control.component.mjs +10 -10
- package/esm2022/lib/components/dynamic-form/table/table-view.component.mjs +3 -2
- package/esm2022/lib/resolvers/page-default-toolbar-actions.mjs +42 -37
- package/esm2022/lib/resolvers/table-default-entity-props.mjs +4 -4
- package/esm2022/lib/services/fields-data.service.mjs +100 -0
- package/esm2022/lib/services/form-controls.service.mjs +12 -10
- package/esm2022/lib/services/index.mjs +3 -4
- package/esm2022/lib/services/keys-convert-to-lowercase.service.mjs +40 -0
- package/fesm2022/dignite-ng-expand.cms-config.mjs +2 -3
- package/fesm2022/dignite-ng-expand.cms-config.mjs.map +1 -1
- package/fesm2022/dignite-ng-expand.cms.mjs +811 -784
- package/fesm2022/dignite-ng-expand.cms.mjs.map +1 -1
- package/lib/cms.module.d.ts +2 -2
- package/lib/components/admin/entries/create-or-edit-entries.component.d.ts +3 -1
- package/lib/components/admin/entries/create-or-update-entry-input-base.d.ts +8 -0
- package/lib/components/admin/entries/create.component.d.ts +1 -2
- package/lib/components/admin/entries/edit.component.d.ts +1 -2
- package/lib/components/admin/entries/entries.component.d.ts +2 -1
- package/lib/components/admin/fields/create-field.component.d.ts +19 -22
- package/lib/components/admin/fields/create-or-edit-field.component.d.ts +20 -26
- package/lib/components/admin/fields/edit-field.component.d.ts +24 -30
- package/lib/components/admin/fields/fields-form-config.d.ts +19 -0
- package/lib/components/admin/fields/fields-group.component.d.ts +48 -0
- package/lib/components/admin/fields/fields.component.d.ts +18 -16
- package/lib/components/admin/fields/index.d.ts +1 -2
- package/lib/components/admin/sections/create-or-edit-sections-modal.component.d.ts +4 -1
- package/lib/components/admin/sections/entry-types/create-or-edit.component.d.ts +14 -9
- package/lib/components/admin/sections/sections.component.d.ts +1 -3
- package/lib/components/dynamic-form/matrix/matrix-config.component.d.ts +10 -4
- package/lib/components/dynamic-form/matrix/matrix-control.component.d.ts +7 -3
- package/lib/components/dynamic-form/table/table-config.component.d.ts +15 -5
- package/lib/components/dynamic-form/table/table-control.component.d.ts +3 -3
- package/lib/components/dynamic-form/table/table-view.component.d.ts +2 -1
- package/lib/resolvers/page-default-toolbar-actions.d.ts +9 -6
- package/lib/services/fields-data.service.d.ts +45 -0
- package/lib/services/form-controls.service.d.ts +3 -1
- package/lib/services/index.d.ts +2 -3
- package/lib/services/keys-convert-to-lowercase.service.d.ts +16 -0
- package/package.json +1 -1
- package/esm2022/lib/components/admin/fields/create-or-update-field-input-base.mjs +0 -18
- package/esm2022/lib/components/admin/fields/field-group.component.mjs +0 -144
- package/esm2022/lib/constants/styles.mjs +0 -19
- package/esm2022/lib/services/appent-content.mjs +0 -15
- package/esm2022/lib/services/cms-api.service.mjs +0 -94
- package/esm2022/lib/services/cms.service.mjs +0 -22
- package/esm2022/lib/services/field-abstracts.service.mjs +0 -48
- package/lib/components/admin/fields/create-or-update-field-input-base.d.ts +0 -15
- package/lib/components/admin/fields/field-group.component.d.ts +0 -58
- package/lib/constants/styles.d.ts +0 -2
- package/lib/services/appent-content.d.ts +0 -1
- package/lib/services/cms-api.service.d.ts +0 -23
- package/lib/services/cms.service.d.ts +0 -10
- package/lib/services/field-abstracts.service.d.ts +0 -20
|
@@ -1,105 +1,162 @@
|
|
|
1
|
+
/* eslint-disable @angular-eslint/component-selector */
|
|
1
2
|
import { EXTENSIONS_IDENTIFIER } from '@abp/ng.components/extensible';
|
|
3
|
+
import { Component, ElementRef, ViewChild } from '@angular/core';
|
|
4
|
+
import { ECmsComponent } from '../../../enums';
|
|
2
5
|
import { LocalizationService } from '@abp/ng.core';
|
|
3
6
|
import { ToasterService } from '@abp/ng.theme.shared';
|
|
4
|
-
import { Location } from '@angular/common';
|
|
5
|
-
import { Component, ViewChild, ElementRef, inject } from '@angular/core';
|
|
6
7
|
import { FormBuilder } from '@angular/forms';
|
|
7
8
|
import { ActivatedRoute } from '@angular/router';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { CreateOrUpdateFieldInputBase } from './create-or-update-field-input-base';
|
|
12
|
-
import { ValidatorsService } from '@dignite-ng/expand.core';
|
|
13
|
-
import { finalize } from 'rxjs';
|
|
14
|
-
import { FieldAdminService } from '../../../proxy/dignite/cms/admin/fields';
|
|
9
|
+
import { LocationBackService, UpdateListService, DigniteValidatorsService, } from '@dignite-ng/expand.core';
|
|
10
|
+
import { FieldsDataService } from '../../../services/fields-data.service';
|
|
11
|
+
import { FieldsFormConfig, fieldToFormLabelMap } from './fields-form-config';
|
|
15
12
|
import * as i0 from "@angular/core";
|
|
16
13
|
import * as i1 from "@angular/forms";
|
|
17
|
-
import * as i2 from "../../../services";
|
|
18
|
-
import * as i3 from "
|
|
19
|
-
import * as i4 from "@
|
|
20
|
-
import * as i5 from "@abp/ng.
|
|
21
|
-
import * as i6 from "@angular/
|
|
22
|
-
import * as i7 from "@
|
|
23
|
-
import * as i8 from "@
|
|
24
|
-
import * as i9 from "
|
|
25
|
-
import * as i10 from "./create-or-edit-field.component";
|
|
14
|
+
import * as i2 from "../../../services/fields-data.service";
|
|
15
|
+
import * as i3 from "@abp/ng.theme.shared";
|
|
16
|
+
import * as i4 from "@dignite-ng/expand.core";
|
|
17
|
+
import * as i5 from "@abp/ng.core";
|
|
18
|
+
import * as i6 from "@angular/router";
|
|
19
|
+
import * as i7 from "@ngx-validate/core";
|
|
20
|
+
import * as i8 from "@abp/ng.components/page";
|
|
21
|
+
import * as i9 from "./create-or-edit-field.component";
|
|
26
22
|
export class EditFieldComponent {
|
|
27
|
-
constructor(fb,
|
|
23
|
+
constructor(fb, _service, toaster, _LocationBackService, _LocalizationService, route, _UpdateListService, _DigniteValidatorsService) {
|
|
28
24
|
this.fb = fb;
|
|
29
|
-
this.
|
|
30
|
-
this._FieldAdminService = _FieldAdminService;
|
|
31
|
-
this.route = route;
|
|
25
|
+
this._service = _service;
|
|
32
26
|
this.toaster = toaster;
|
|
33
|
-
this.
|
|
27
|
+
this._LocationBackService = _LocationBackService;
|
|
34
28
|
this._LocalizationService = _LocalizationService;
|
|
35
|
-
this.
|
|
36
|
-
this._UpdateListService =
|
|
37
|
-
this.
|
|
38
|
-
|
|
39
|
-
this.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
* }
|
|
45
|
-
*/
|
|
46
|
-
this.formValidation = '';
|
|
29
|
+
this.route = route;
|
|
30
|
+
this._UpdateListService = _UpdateListService;
|
|
31
|
+
this._DigniteValidatorsService = _DigniteValidatorsService;
|
|
32
|
+
/**字段详情 */
|
|
33
|
+
this.fieldDetail = '';
|
|
34
|
+
/**表单是否触发验证 */
|
|
35
|
+
this.formValidation = false;
|
|
36
|
+
/**是否提交 */
|
|
37
|
+
this.isSubmitted = false;
|
|
47
38
|
}
|
|
48
39
|
async ngOnInit() {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
40
|
+
//Called after the constructor, initializing input properties, and the first call to ngOnChanges.
|
|
41
|
+
//Add 'implements OnInit' to the class.
|
|
42
|
+
const { id } = this.route.snapshot.params;
|
|
43
|
+
this.formEntity = this.fb.group(new FieldsFormConfig());
|
|
44
|
+
await this.getFieldDetails(id);
|
|
45
|
+
if (this.fieldDetail) {
|
|
46
|
+
this.formEntity.patchValue({
|
|
47
|
+
...this.fieldDetail,
|
|
48
|
+
groupId: this.fieldDetail.groupId || '',
|
|
57
49
|
});
|
|
58
50
|
}
|
|
59
51
|
}
|
|
60
52
|
/**获取字段详情 */
|
|
61
|
-
|
|
53
|
+
getFieldDetails(id) {
|
|
62
54
|
return new Promise((resolve, reject) => {
|
|
63
|
-
this.
|
|
64
|
-
|
|
65
|
-
this.fieldDetails = res;
|
|
55
|
+
this._service.getFieldDetail(id).subscribe(res => {
|
|
56
|
+
this.fieldDetail = res;
|
|
66
57
|
resolve(res);
|
|
58
|
+
}, err => {
|
|
59
|
+
resolve('');
|
|
67
60
|
});
|
|
68
61
|
});
|
|
69
62
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
this.
|
|
63
|
+
/**字段分组控件 */
|
|
64
|
+
get groupIdInput() {
|
|
65
|
+
return this.formEntity?.get('groupId');
|
|
66
|
+
}
|
|
67
|
+
// 获取错误信息
|
|
68
|
+
getErrorMessage(error, map) {
|
|
69
|
+
// 获取本地化标签
|
|
70
|
+
const getLocalizedLabel = (path) => {
|
|
71
|
+
return this._LocalizationService.instant(map[path]);
|
|
72
|
+
};
|
|
73
|
+
// 格式化数组索引
|
|
74
|
+
const formatArrayIndex = (item) => {
|
|
75
|
+
const regex = /\[[0-9]+\]/g;
|
|
76
|
+
const indexMatch = item.match(regex);
|
|
77
|
+
const [basePath] = item.split(regex);
|
|
78
|
+
return getLocalizedLabel(basePath) + (indexMatch ? indexMatch[0] : '');
|
|
79
|
+
};
|
|
80
|
+
let errorMessage = '';
|
|
81
|
+
// 如果错误路径包含formConfiguration
|
|
82
|
+
if (error.path.includes('formConfiguration')) {
|
|
83
|
+
// 将错误路径中的formConfiguration-替换掉,并按-分割
|
|
84
|
+
const pathParts = error.path.replaceAll('formConfiguration-', '').split('-');
|
|
85
|
+
// 对分割后的路径进行格式化
|
|
86
|
+
const formattedParts = pathParts.map((part, index) => {
|
|
87
|
+
// 如果是最后一个路径且不是第一个路径
|
|
88
|
+
if (index === pathParts.length - 1 && index > 0) {
|
|
89
|
+
// 获取前一个路径
|
|
90
|
+
const prevPart = pathParts[index - 1];
|
|
91
|
+
// 将前一个路径按数组索引分割
|
|
92
|
+
const [prevBasePath] = prevPart.split(/\[[0-9]+\]/);
|
|
93
|
+
// 将当前路径按数组索引分割
|
|
94
|
+
const [currentBasePath] = part.split(/\[[0-9]+\]/);
|
|
95
|
+
// 组合前一个路径和当前路径
|
|
96
|
+
const combinedKey = `${prevBasePath}-${currentBasePath}`;
|
|
97
|
+
// 如果map中存在组合后的路径,则返回本地化标签,否则返回格式化后的数组索引
|
|
98
|
+
return map[combinedKey]
|
|
99
|
+
? getLocalizedLabel(combinedKey)
|
|
100
|
+
: formatArrayIndex(part);
|
|
101
|
+
}
|
|
102
|
+
// 否则返回格式化后的数组索引
|
|
103
|
+
return formatArrayIndex(part);
|
|
104
|
+
});
|
|
105
|
+
console.log(formattedParts, 'formattedParts', pathParts);
|
|
106
|
+
// 将格式化后的路径用-连接起来
|
|
107
|
+
errorMessage = formattedParts.join('-');
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// 否则返回本地化标签
|
|
111
|
+
errorMessage = getLocalizedLabel(error.path);
|
|
112
|
+
}
|
|
113
|
+
// 添加错误信息
|
|
114
|
+
errorMessage = `${errorMessage} ${this._LocalizationService.instant('AbpValidation::ThisFieldIsNotValid.')}`;
|
|
115
|
+
// 显示警告信息
|
|
116
|
+
this.toaster.warn(errorMessage);
|
|
117
|
+
return errorMessage;
|
|
73
118
|
}
|
|
74
|
-
|
|
119
|
+
/**提交表单 */
|
|
75
120
|
save() {
|
|
76
|
-
this.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
121
|
+
console.log(this.formEntity.value, '提交表单', this.formEntity);
|
|
122
|
+
this.formValidation = true;
|
|
123
|
+
if (!this.formEntity.valid) {
|
|
124
|
+
this._DigniteValidatorsService.getErrorMessage({
|
|
125
|
+
form: this.formEntity,
|
|
126
|
+
map: fieldToFormLabelMap
|
|
127
|
+
});
|
|
80
128
|
return;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (!this.newEntity.valid)
|
|
129
|
+
}
|
|
130
|
+
if (this.isSubmitted)
|
|
84
131
|
return;
|
|
85
|
-
this.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
132
|
+
this.isSubmitted = true;
|
|
133
|
+
const input = this.formEntity.value;
|
|
134
|
+
this._service.updateField(this.fieldDetail.id, input).subscribe({
|
|
135
|
+
next: () => {
|
|
136
|
+
this.toaster.success(this._LocalizationService.instant(`AbpUi::SavedSuccessfully`));
|
|
137
|
+
// this._LocationBackService.back();
|
|
138
|
+
this._LocationBackService.backTo({
|
|
139
|
+
url: `/cms/admin/fields`,
|
|
140
|
+
replenish: '/edit',
|
|
141
|
+
});
|
|
142
|
+
this._UpdateListService.updateList();
|
|
143
|
+
},
|
|
144
|
+
complete: () => {
|
|
145
|
+
this.reset();
|
|
146
|
+
},
|
|
94
147
|
});
|
|
95
148
|
}
|
|
96
|
-
|
|
97
|
-
|
|
149
|
+
/**重置表单 */
|
|
150
|
+
reset() {
|
|
151
|
+
this.isSubmitted = false;
|
|
152
|
+
}
|
|
153
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: EditFieldComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FieldsDataService }, { token: i3.ToasterService }, { token: i4.LocationBackService }, { token: i5.LocalizationService }, { token: i6.ActivatedRoute }, { token: i4.UpdateListService }, { token: i4.DigniteValidatorsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
154
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.5", type: EditFieldComponent, selector: "cms-edit-field", providers: [
|
|
98
155
|
{
|
|
99
156
|
provide: EXTENSIONS_IDENTIFIER,
|
|
100
157
|
useValue: ECmsComponent.FieldsEdit,
|
|
101
158
|
},
|
|
102
|
-
], viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }], ngImport: i0, template: "<
|
|
159
|
+
], viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }], ngImport: i0, template: "<abp-page [title]=\"'Cms::EditField' | abpLocalization\" [toolbar]=\"true\">\r\n <form [formGroup]=\"formEntity\" [class.was-validated]=\"formValidation\" (submit)=\"save()\">\r\n <button form-type=\"submit\" style=\"display: none;\" #submitclick></button>\r\n @if(fieldDetail){\r\n <cms-create-or-edit-field [selected]=\"fieldDetail\" [service]=\"_service\" [form]=\"formEntity\"></cms-create-or-edit-field>\r\n }\r\n </form>\r\n</abp-page>", styles: [""], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "component", type: i8.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i9.CreateOrEditFieldComponent, selector: "cms-create-or-edit-field", inputs: ["selected", "service", "form"] }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
103
160
|
}
|
|
104
161
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: EditFieldComponent, decorators: [{
|
|
105
162
|
type: Component,
|
|
@@ -108,9 +165,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
108
165
|
provide: EXTENSIONS_IDENTIFIER,
|
|
109
166
|
useValue: ECmsComponent.FieldsEdit,
|
|
110
167
|
},
|
|
111
|
-
], template: "<
|
|
112
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.
|
|
168
|
+
], template: "<abp-page [title]=\"'Cms::EditField' | abpLocalization\" [toolbar]=\"true\">\r\n <form [formGroup]=\"formEntity\" [class.was-validated]=\"formValidation\" (submit)=\"save()\">\r\n <button form-type=\"submit\" style=\"display: none;\" #submitclick></button>\r\n @if(fieldDetail){\r\n <cms-create-or-edit-field [selected]=\"fieldDetail\" [service]=\"_service\" [form]=\"formEntity\"></cms-create-or-edit-field>\r\n }\r\n </form>\r\n</abp-page>" }]
|
|
169
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.FieldsDataService }, { type: i3.ToasterService }, { type: i4.LocationBackService }, { type: i5.LocalizationService }, { type: i6.ActivatedRoute }, { type: i4.UpdateListService }, { type: i4.DigniteValidatorsService }], propDecorators: { submitclick: [{
|
|
113
170
|
type: ViewChild,
|
|
114
171
|
args: ['submitclick', { static: true }]
|
|
115
172
|
}] } });
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL2ZpZWxkcy9lZGl0LWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Ntcy9zcmMvbGliL2NvbXBvbmVudHMvYWRtaW4vZmllbGRzL2VkaXQtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxP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USxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUVqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNsQyxJQUFJLENBQUMsa0JBQWtCO2FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQzthQUMzQixJQUFJLENBQ0gsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQXBGVSxrQkFBa0I7a0dBQWxCLGtCQUFrQix5Q0FQbEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUscUJBQXFCO2dCQUM5QixRQUFRLEVBQUUsYUFBYSxDQUFDLFVBQVU7YUFDbkM7U0FDRixvSkN4QkgsNnVCQWFPOzsyRkRhTSxrQkFBa0I7a0JBWDlCLFNBQVM7K0JBQ0UsZ0JBQWdCLGFBR2Y7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxVQUFVO3lCQUNuQztxQkFDRjttU0FpQzJDLFdBQVc7c0JBQXRELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVYVEVOU0lPTlNfSURFTlRJRklFUiB9IGZyb20gJ0BhYnAvbmcuY29tcG9uZW50cy9leHRlbnNpYmxlJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xuaW1wb3J0IHsgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBGaWVsZEFic3RyYWN0c1NlcnZpY2UsIENtc0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFQ21zQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgVXBkYXRlTGlzdFNlcnZpY2UgfSBmcm9tICdAZGlnbml0ZS1uZy9leHBhbmQuY29yZSc7XG5pbXBvcnQgeyBDcmVhdGVPclVwZGF0ZUZpZWxkSW5wdXRCYXNlIH0gZnJvbSAnLi9jcmVhdGUtb3ItdXBkYXRlLWZpZWxkLWlucHV0LWJhc2UnO1xuaW1wb3J0IHsgVmFsaWRhdG9yc1NlcnZpY2UgfSBmcm9tICdAZGlnbml0ZS1uZy9leHBhbmQuY29yZSc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmllbGRBZG1pblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wcm94eS9kaWduaXRlL2Ntcy9hZG1pbi9maWVsZHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbXMtZWRpdC1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdC1maWVsZC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBFWFRFTlNJT05TX0lERU5USUZJRVIsXG4gICAgICB1c2VWYWx1ZTogRUNtc0NvbXBvbmVudC5GaWVsZHNFZGl0LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHB1YmxpYyBfRmllbGRBYnN0cmFjdHNTZXJ2aWNlOiBGaWVsZEFic3RyYWN0c1NlcnZpY2UsXG4gICAgcHVibGljIF9GaWVsZEFkbWluU2VydmljZTogRmllbGRBZG1pblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSB0b2FzdGVyOiBUb2FzdGVyU2VydmljZSxcbiAgICBwdWJsaWMgX2xvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwdWJsaWMgX0xvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgcHVibGljIF9DbXNBcGlTZXJ2aWNlOiBDbXNBcGlTZXJ2aWNlXG4gICkge31cbiAgcHJpdmF0ZSBfVXBkYXRlTGlzdFNlcnZpY2UgPSBpbmplY3QoVXBkYXRlTGlzdFNlcnZpY2UpO1xuICBwcml2YXRlIF9WYWxpZGF0b3JzU2VydmljZSA9IGluamVjdChWYWxpZGF0b3JzU2VydmljZSk7XG4gIC8qKuihqOWNleWunuS9kyAqL1xuICBuZXdFbnRpdHk6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcblxuICAvKirlrZfmrrVpZCAqL1xuICBmaWVsZElkOiBzdHJpbmcgPSAnJztcblxuICAvKirlrZfmrrXor6bmg4UgKi9cbiAgZmllbGREZXRhaWxzOiBhbnk7XG5cbiAgaXNTdWJtaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoq6KGo5Y2V6aqM6K+B54q25oCBXG4gICAqIHtcbiAgICogIHRpdGxlOnRydWUsXG4gICAqIH1cbiAgICovXG4gIGZvcm1WYWxpZGF0aW9uOiBhbnkgPSAnJztcblxuICAvKirojrflj5bmj5DkuqTmjInpkq7mm7/ouqvvvIznlKjkuo7nnJ/lrp7op6blj5HooajljZXmj5DkuqQgKi9cbiAgQFZpZXdDaGlsZCgnc3VibWl0Y2xpY2snLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWJtaXRjbGljazogRWxlbWVudFJlZjtcblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBfZmllbGRJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmlkO1xuICAgIGlmIChfZmllbGRJZCkge1xuICAgICAgdGhpcy5maWVsZElkID0gX2ZpZWxkSWQ7XG4gICAgICB0aGlzLm5ld0VudGl0eSA9IHRoaXMuZmIuZ3JvdXAobmV3IENyZWF0ZU9yVXBkYXRlRmllbGRJbnB1dEJhc2UoKSk7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5fRmllbGRBYnN0cmFjdHNTZXJ2aWNlLmdldEZyb21Db250cm9sTGlzdCgpLCB0aGlzLmdldEZpZWxkRWRpdCgpXSk7XG4gICAgICB0aGlzLm5ld0VudGl0eS5wYXRjaFZhbHVlKHtcbiAgICAgICAgLi4udGhpcy5maWVsZERldGFpbHMsXG4gICAgICAgIGZvcm1Db25maWd1cmF0aW9uOiB0aGlzLmZpZWxkRGV0YWlscy5mb3JtQ29uZmlndXJhdGlvbixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKuiOt+WPluWtl+auteivpuaDhSAqL1xuICBnZXRGaWVsZEVkaXQoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX0ZpZWxkQWRtaW5TZXJ2aWNlLmdldCh0aGlzLmZpZWxkSWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICByZXMuZ3JvdXBJZCA9IHJlcy5ncm91cElkID8gcmVzLmdyb3VwSWQgOiAnJztcbiAgICAgICAgdGhpcy5maWVsZERldGFpbHMgPSByZXM7XG4gICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIFxuXG4gIC8qKuinpuWPkeaPkOS6pOaMiemSriAqL1xuICBzdWJtaXRjbGlja0J0bigpIHtcbiAgICB0aGlzLnN1Ym1pdGNsaWNrLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIC8qKuS/neWtmOihqOWNlSAqL1xuICBzYXZlKCkge1xuICAgIHRoaXMuZm9ybVZhbGlkYXRpb24gPSB0aGlzLl9WYWxpZGF0b3JzU2VydmljZS5nZXRGb3JtVmFsaWRhdGlvblN0YXR1cyh0aGlzLm5ld0VudGl0eSk7XG4gICAgaWYgKHRoaXMuX1ZhbGlkYXRvcnNTZXJ2aWNlLmlzQ2hlY2tGb3JtKHRoaXMuZm9ybVZhbGlkYXRpb24sICdDbXMnKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzU3VibWl0KSByZXR1cm47XG4gICAgdGhpcy5pc1N1Ym1pdCA9IHRydWU7XG4gICAgbGV0IGlucHV0ID0gdGhpcy5uZXdFbnRpdHkudmFsdWU7XG5cbiAgICBpZiAoIXRoaXMubmV3RW50aXR5LnZhbGlkKSByZXR1cm47XG4gICAgdGhpcy5fRmllbGRBZG1pblNlcnZpY2VcbiAgICAgIC51cGRhdGUodGhpcy5maWVsZElkLCBpbnB1dClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYEFicFVpOjpTYXZlZFN1Y2Nlc3NmdWxseWApKTtcbiAgICAgICAgdGhpcy5fbG9jYXRpb24uYmFjaygpO1xuICAgICAgICB0aGlzLl9VcGRhdGVMaXN0U2VydmljZS51cGRhdGVMaXN0KCk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJyb3cgZy0zIG5lZWRzLXZhbGlkYXRpb25cIiBbZm9ybUdyb3VwXT1cIm5ld0VudGl0eVwiICBbY2xhc3NdPVwieyd3YXMtdmFsaWRhdGVkJzpmb3JtVmFsaWRhdGlvbn1cIiAobmdTdWJtaXQpPVwic2F2ZSgpXCI+XG4gICAgPGFicC1wYWdlIFt0aXRsZV09XCInQ21zOjpFZGl0RmllbGQnIHwgYWJwTG9jYWxpemF0aW9uXCIgW3Rvb2xiYXJdPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3JlYXRlLWZpZWxkLXBhZ2VcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAjc3VibWl0Y2xpY2s+PC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5ld0VudGl0eSYmZmllbGREZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y21zLWNyZWF0ZS1vci1lZGl0LWZpZWxkICBbc2VsZWN0ZWRdPVwiZmllbGREZXRhaWxzXCIgIFtFbnRpdHldPVwibmV3RW50aXR5XCI+PC9jbXMtY3JlYXRlLW9yLWVkaXQtZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvYWJwLXBhZ2U+XG48L2Zvcm0+Il19
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL2ZpZWxkcy9lZGl0LWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Ntcy9zcmMvbGliL2NvbXBvbmVudHMvYWRtaW4vZmllbGRzL2VkaXQtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUEwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQix3QkFBd0IsR0FDekIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFhN0UsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUNVLEVBQWUsRUFDaEIsUUFBMkIsRUFDMUIsT0FBdUIsRUFDeEIsb0JBQXlDLEVBQ3pDLG9CQUF5QyxFQUN4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QUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM5RCxJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO2dCQUNwRixvQ0FBb0M7Z0JBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7b0JBQy9CLEdBQUcsRUFBRSxtQkFBbUI7b0JBQ3hCLFNBQVMsRUFBRSxPQUFPO2lCQUNuQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsVUFBVTtJQUNWLEtBQUs7UUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDOzhHQXZKVSxrQkFBa0I7a0dBQWxCLGtCQUFrQix5Q0FQbEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUscUJBQXFCO2dCQUM5QixRQUFRLEVBQUUsYUFBYSxDQUFDLFVBQVU7YUFDbkM7U0FDRixvSkN6Qkgsa2VBT1c7OzJGRG9CRSxrQkFBa0I7a0JBWDlCLFNBQVM7K0JBQ0UsZ0JBQWdCLGFBR2Y7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxVQUFVO3lCQUNuQztxQkFDRjtxVEF5RDJDLFdBQVc7c0JBQXRELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cclxuaW1wb3J0IHsgRVhURU5TSU9OU19JREVOVElGSUVSIH0gZnJvbSAnQGFicC9uZy5jb21wb25lbnRzL2V4dGVuc2libGUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVDbXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtcclxuICBMb2NhdGlvbkJhY2tTZXJ2aWNlLFxyXG4gIFVwZGF0ZUxpc3RTZXJ2aWNlLFxyXG4gIERpZ25pdGVWYWxpZGF0b3JzU2VydmljZSxcclxufSBmcm9tICdAZGlnbml0ZS1uZy9leHBhbmQuY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkc0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmllbGRzLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpZWxkc0Zvcm1Db25maWcsIGZpZWxkVG9Gb3JtTGFiZWxNYXAgfSBmcm9tICcuL2ZpZWxkcy1mb3JtLWNvbmZpZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Ntcy1lZGl0LWZpZWxkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdC1maWVsZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2VkaXQtZmllbGQuY29tcG9uZW50LnNjc3MnLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBFWFRFTlNJT05TX0lERU5USUZJRVIsXHJcbiAgICAgIHVzZVZhbHVlOiBFQ21zQ29tcG9uZW50LkZpZWxkc0VkaXQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0RmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwdWJsaWMgX3NlcnZpY2U6IEZpZWxkc0RhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdGVyOiBUb2FzdGVyU2VydmljZSxcclxuICAgIHB1YmxpYyBfTG9jYXRpb25CYWNrU2VydmljZTogTG9jYXRpb25CYWNrU2VydmljZSxcclxuICAgIHB1YmxpYyBfTG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBfVXBkYXRlTGlzdFNlcnZpY2U6IFVwZGF0ZUxpc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfRGlnbml0ZVZhbGlkYXRvcnNTZXJ2aWNlOiBEaWduaXRlVmFsaWRhdG9yc1NlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vQ2FsbGVkIGFmdGVyIHRoZSBjb25zdHJ1Y3RvciwgaW5pdGlhbGl6aW5nIGlucHV0IHByb3BlcnRpZXMsIGFuZCB0aGUgZmlyc3QgY2FsbCB0byBuZ09uQ2hhbmdlcy5cclxuICAgIC8vQWRkICdpbXBsZW1lbnRzIE9uSW5pdCcgdG8gdGhlIGNsYXNzLlxyXG4gICAgY29uc3QgeyBpZCB9ID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXM7XHJcbiAgICB0aGlzLmZvcm1FbnRpdHkgPSB0aGlzLmZiLmdyb3VwKG5ldyBGaWVsZHNGb3JtQ29uZmlnKCkpO1xyXG4gICAgYXdhaXQgdGhpcy5nZXRGaWVsZERldGFpbHMoaWQpO1xyXG4gICAgaWYgKHRoaXMuZmllbGREZXRhaWwpIHtcclxuICAgICAgdGhpcy5mb3JtRW50aXR5LnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIC4uLnRoaXMuZmllbGREZXRhaWwsXHJcbiAgICAgICAgZ3JvdXBJZDogdGhpcy5maWVsZERldGFpbC5ncm91cElkIHx8ICcnLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKuiOt+WPluWtl+auteivpuaDhSAqL1xyXG4gIGdldEZpZWxkRGV0YWlscyhpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLl9zZXJ2aWNlLmdldEZpZWxkRGV0YWlsKGlkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgIHRoaXMuZmllbGREZXRhaWwgPSByZXM7XHJcbiAgICAgICAgICByZXNvbHZlKHJlcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgcmVzb2x2ZSgnJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoq5a2X5q616K+m5oOFICovXHJcbiAgZmllbGREZXRhaWw6IGFueSA9ICcnO1xyXG5cclxuICAvKlxyXG4gIC8qKuihqOWNleWunuS9kyAqL1xyXG4gIGZvcm1FbnRpdHk6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoq6KGo5Y2V5piv5ZCm6Kem5Y+R6aqM6K+BICovXHJcbiAgZm9ybVZhbGlkYXRpb24gPSBmYWxzZTtcclxuXHJcbiAgLyoq5piv5ZCm5o+Q5LqkICovXHJcbiAgaXNTdWJtaXR0ZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoq6I635Y+W5o+Q5Lqk5oyJ6ZKu5pu/6Lqr77yM55So5LqO55yf5a6e6Kem5Y+R6KGo5Y2V5o+Q5LqkICovXHJcbiAgQFZpZXdDaGlsZCgnc3VibWl0Y2xpY2snLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdWJtaXRjbGljazogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoq5a2X5q615YiG57uE5o6n5Lu2ICovXHJcbiAgZ2V0IGdyb3VwSWRJbnB1dCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1FbnRpdHk/LmdldCgnZ3JvdXBJZCcpIGFzIEZvcm1Db250cm9sO1xyXG4gIH1cclxuIFxyXG4gIC8vIOiOt+WPlumUmeivr+S/oeaBr1xyXG4gIGdldEVycm9yTWVzc2FnZShlcnJvcjogYW55LG1hcDphbnkpOiBzdHJpbmcge1xyXG4gICAgLy8g6I635Y+W5pys5Zyw5YyW5qCH562+XHJcbiAgICBjb25zdCBnZXRMb2NhbGl6ZWRMYWJlbCA9IChwYXRoOiBzdHJpbmcpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChtYXBbcGF0aCBhcyBrZXlvZiB0eXBlb2YgbWFwXSk7XHJcbiAgICB9O1xyXG4gIFxyXG4gICAgLy8g5qC85byP5YyW5pWw57uE57Si5byVXHJcbiAgICBjb25zdCBmb3JtYXRBcnJheUluZGV4ID0gKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICBjb25zdCByZWdleCA9IC9cXFtbMC05XStcXF0vZztcclxuICAgICAgY29uc3QgaW5kZXhNYXRjaCA9IGl0ZW0ubWF0Y2gocmVnZXgpO1xyXG4gICAgICBjb25zdCBbYmFzZVBhdGhdID0gaXRlbS5zcGxpdChyZWdleCk7XHJcbiAgICAgIHJldHVybiBnZXRMb2NhbGl6ZWRMYWJlbChiYXNlUGF0aCkgKyAoaW5kZXhNYXRjaCA/IGluZGV4TWF0Y2hbMF0gOiAnJyk7XHJcbiAgICB9O1xyXG4gIFxyXG4gICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xyXG4gICAgLy8g5aaC5p6c6ZSZ6K+v6Lev5b6E5YyF5ZCrZm9ybUNvbmZpZ3VyYXRpb25cclxuICAgIGlmIChlcnJvci5wYXRoLmluY2x1ZGVzKCdmb3JtQ29uZmlndXJhdGlvbicpKSB7XHJcbiAgICAgIC8vIOWwhumUmeivr+i3r+W+hOS4reeahGZvcm1Db25maWd1cmF0aW9uLeabv+aNouaOie+8jOW5tuaMiS3liIblibJcclxuICAgICAgY29uc3QgcGF0aFBhcnRzID0gZXJyb3IucGF0aC5yZXBsYWNlQWxsKCdmb3JtQ29uZmlndXJhdGlvbi0nLCAnJykuc3BsaXQoJy0nKTtcclxuICAgICAgLy8g5a+55YiG5Ymy5ZCO55qE6Lev5b6E6L+b6KGM5qC85byP5YyWXHJcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFBhcnRzID0gcGF0aFBhcnRzLm1hcCgocGFydCwgaW5kZXgpID0+IHtcclxuICAgICAgICAvLyDlpoLmnpzmmK/mnIDlkI7kuIDkuKrot6/lvoTkuJTkuI3mmK/nrKzkuIDkuKrot6/lvoRcclxuICAgICAgICBpZiAoaW5kZXggPT09IHBhdGhQYXJ0cy5sZW5ndGggLSAxICYmIGluZGV4ID4gMCkge1xyXG4gICAgICAgICAgLy8g6I635Y+W5YmN5LiA5Liq6Lev5b6EXHJcbiAgICAgICAgICBjb25zdCBwcmV2UGFydCA9IHBhdGhQYXJ0c1tpbmRleCAtIDFdO1xyXG4gICAgICAgICAgLy8g5bCG5YmN5LiA5Liq6Lev5b6E5oyJ5pWw57uE57Si5byV5YiG5YmyXHJcbiAgICAgICAgICBjb25zdCBbcHJldkJhc2VQYXRoXSA9IHByZXZQYXJ0LnNwbGl0KC9cXFtbMC05XStcXF0vKTtcclxuICAgICAgICAgIC8vIOWwhuW9k+WJjei3r+W+hOaMieaVsOe7hOe0ouW8leWIhuWJslxyXG4gICAgICAgICAgY29uc3QgW2N1cnJlbnRCYXNlUGF0aF0gPSBwYXJ0LnNwbGl0KC9cXFtbMC05XStcXF0vKTtcclxuICAgICAgICAgIC8vIOe7hOWQiOWJjeS4gOS4qui3r+W+hOWSjOW9k+WJjei3r+W+hFxyXG4gICAgICAgICAgY29uc3QgY29tYmluZWRLZXkgPSBgJHtwcmV2QmFzZVBhdGh9LSR7Y3VycmVudEJhc2VQYXRofWA7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIOWmguaenG1hcOS4reWtmOWcqOe7hOWQiOWQjueahOi3r+W+hO+8jOWImei/lOWbnuacrOWcsOWMluagh+etvu+8jOWQpuWImei/lOWbnuagvOW8j+WMluWQjueahOaVsOe7hOe0ouW8lVxyXG4gICAgICAgICAgcmV0dXJuIG1hcFtjb21iaW5lZEtleSBhcyBrZXlvZiB0eXBlb2YgbWFwXVxyXG4gICAgICAgICAgICA/IGdldExvY2FsaXplZExhYmVsKGNvbWJpbmVkS2V5KVxyXG4gICAgICAgICAgICA6IGZvcm1hdEFycmF5SW5kZXgocGFydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIOWQpuWImei/lOWbnuagvOW8j+WMluWQjueahOaVsOe7hOe0ouW8lVxyXG4gICAgICAgIHJldHVybiBmb3JtYXRBcnJheUluZGV4KHBhcnQpO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc29sZS5sb2coZm9ybWF0dGVkUGFydHMsICdmb3JtYXR0ZWRQYXJ0cycscGF0aFBhcnRzKTtcclxuICAgICAgLy8g5bCG5qC85byP5YyW5ZCO55qE6Lev5b6E55SoLei/nuaOpei1t+adpVxyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXR0ZWRQYXJ0cy5qb2luKCctJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDlkKbliJnov5Tlm57mnKzlnLDljJbmoIfnrb5cclxuICAgICAgZXJyb3JNZXNzYWdlID0gZ2V0TG9jYWxpemVkTGFiZWwoZXJyb3IucGF0aCk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvLyDmt7vliqDplJnor6/kv6Hmga9cclxuICAgIGVycm9yTWVzc2FnZSA9IGAke2Vycm9yTWVzc2FnZX0gJHt0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0FicFZhbGlkYXRpb246OlRoaXNGaWVsZElzTm90VmFsaWQuJyl9YDtcclxuICAgIC8vIOaYvuekuuitpuWRiuS/oeaBr1xyXG4gICAgdGhpcy50b2FzdGVyLndhcm4oZXJyb3JNZXNzYWdlKTtcclxuICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgfVxyXG5cclxuICAvKirmj5DkuqTooajljZUgKi9cclxuICBzYXZlKCkge1xyXG4gICAgY29uc29sZS5sb2codGhpcy5mb3JtRW50aXR5LnZhbHVlLCAn5o+Q5Lqk6KGo5Y2VJywgdGhpcy5mb3JtRW50aXR5KTtcclxuXHJcbiAgICB0aGlzLmZvcm1WYWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgIGlmICghdGhpcy5mb3JtRW50aXR5LnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX0RpZ25pdGVWYWxpZGF0b3JzU2VydmljZS5nZXRFcnJvck1lc3NhZ2Uoe1xyXG4gICAgICAgIGZvcm06dGhpcy5mb3JtRW50aXR5LFxyXG4gICAgICAgIG1hcDpmaWVsZFRvRm9ybUxhYmVsTWFwXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1N1Ym1pdHRlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5pc1N1Ym1pdHRlZCA9IHRydWU7XHJcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZm9ybUVudGl0eS52YWx1ZTtcclxuICAgIHRoaXMuX3NlcnZpY2UudXBkYXRlRmllbGQodGhpcy5maWVsZERldGFpbC5pZCwgaW5wdXQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLl9Mb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoYEFicFVpOjpTYXZlZFN1Y2Nlc3NmdWxseWApKTtcclxuICAgICAgICAvLyB0aGlzLl9Mb2NhdGlvbkJhY2tTZXJ2aWNlLmJhY2soKTtcclxuICAgICAgICB0aGlzLl9Mb2NhdGlvbkJhY2tTZXJ2aWNlLmJhY2tUbyh7XHJcbiAgICAgICAgICB1cmw6IGAvY21zL2FkbWluL2ZpZWxkc2AsXHJcbiAgICAgICAgICByZXBsZW5pc2g6ICcvZWRpdCcsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fVXBkYXRlTGlzdFNlcnZpY2UudXBkYXRlTGlzdCgpO1xyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKirph43nva7ooajljZUgKi9cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPGFicC1wYWdlIFt0aXRsZV09XCInQ21zOjpFZGl0RmllbGQnIHwgYWJwTG9jYWxpemF0aW9uXCIgW3Rvb2xiYXJdPVwidHJ1ZVwiPlxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtRW50aXR5XCIgW2NsYXNzLndhcy12YWxpZGF0ZWRdPVwiZm9ybVZhbGlkYXRpb25cIiAoc3VibWl0KT1cInNhdmUoKVwiPlxyXG4gICAgICAgIDxidXR0b24gZm9ybS10eXBlPVwic3VibWl0XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiICNzdWJtaXRjbGljaz48L2J1dHRvbj5cclxuICAgICAgICBAaWYoZmllbGREZXRhaWwpe1xyXG4gICAgICAgICAgICA8Y21zLWNyZWF0ZS1vci1lZGl0LWZpZWxkICBbc2VsZWN0ZWRdPVwiZmllbGREZXRhaWxcIiBbc2VydmljZV09XCJfc2VydmljZVwiIFtmb3JtXT1cImZvcm1FbnRpdHlcIj48L2Ntcy1jcmVhdGUtb3ItZWRpdC1maWVsZD5cclxuICAgICAgICB9XHJcbiAgICA8L2Zvcm0+XHJcbjwvYWJwLXBhZ2U+Il19
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { FormGroup, Validators } from "@angular/forms";
|
|
2
|
+
export class FieldsFormConfig {
|
|
3
|
+
constructor() {
|
|
4
|
+
/**分组id */
|
|
5
|
+
this.groupId = [''];
|
|
6
|
+
/**字段名称 Display name of this field */
|
|
7
|
+
this.displayName = ['', [Validators.required]];
|
|
8
|
+
/**字段唯一名称 Unique Name*/
|
|
9
|
+
this.name = ['', [Validators.required]];
|
|
10
|
+
/**描述 说明 */
|
|
11
|
+
this.description = ['', []];
|
|
12
|
+
/**FieldType字段类型 表单控件名称 */
|
|
13
|
+
this.formControlName = ['', [Validators.required]];
|
|
14
|
+
/**动态表单配置 */
|
|
15
|
+
this.formConfiguration = new FormGroup({});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 字段名称与表单控件名称映射
|
|
20
|
+
*/
|
|
21
|
+
// export enum fieldToFormLabelMap{
|
|
22
|
+
// /**分组id */
|
|
23
|
+
// groupId = 'Cms::FieldGroup',
|
|
24
|
+
// displayName = 'AbpDynamicForm::FieldDisplayName',
|
|
25
|
+
// name = 'AbpDynamicForm::FieldName',
|
|
26
|
+
// description='Cms::Description',
|
|
27
|
+
// // Text='AbpDynamicForm::SelectListItemText',
|
|
28
|
+
// // Value='AbpDynamicForm::SelectListItemValue',
|
|
29
|
+
// 'Select.Options'="AbpDynamicForm::SelectListItem",
|
|
30
|
+
// 'Select.Options-Text'="AbpDynamicForm::SelectListItemText",
|
|
31
|
+
// 'Select.Options-Value'="AbpDynamicForm::SelectListItemValue",
|
|
32
|
+
// }
|
|
33
|
+
export const fieldToFormLabelMap = {
|
|
34
|
+
/**分组id */
|
|
35
|
+
groupId: 'Cms::FieldGroup',
|
|
36
|
+
displayName: 'AbpDynamicForm::FieldDisplayName',
|
|
37
|
+
name: 'AbpDynamicForm::FieldName',
|
|
38
|
+
description: 'Cms::Description',
|
|
39
|
+
'Select.Options': "AbpDynamicForm::SelectListItem",
|
|
40
|
+
'Select.Options-Text': "AbpDynamicForm::SelectListItemText",
|
|
41
|
+
'Select.Options-Value': "AbpDynamicForm::SelectListItemValue",
|
|
42
|
+
"TableColumns": 'AbpDynamicForm::SelectListItem',
|
|
43
|
+
"TableColumns-displayName": 'Cms::TableColumnDisplayName',
|
|
44
|
+
"TableColumns-name": 'Cms::TableColumnName',
|
|
45
|
+
"TableColumns-formControlName": 'Cms::TableColumnForm',
|
|
46
|
+
"MatrixBlockTypes": "Cms::MatrixBlockType",
|
|
47
|
+
"fields": 'Cms::Fields',
|
|
48
|
+
"MatrixBlockTypes-fields-displayName": 'AbpDynamicForm::FieldDisplayName',
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLWZvcm0tY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY21zL3NyYy9saWIvY29tcG9uZW50cy9hZG1pbi9maWVsZHMvZmllbGRzLWZvcm0tY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUNJLFVBQVU7UUFDVixZQUFPLEdBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0IscUNBQXFDO1FBQ3JDLGdCQUFXLEdBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFeEQsdUJBQXVCO1FBQ3ZCLFNBQUksR0FBaUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUVqRCxXQUFXO1FBQ1gsZ0JBQVcsR0FBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckMsMEJBQTBCO1FBQzFCLG9CQUFlLEdBQWlCLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFNUQsWUFBWTtRQUNaLHNCQUFpQixHQUEwQixJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVqRSxDQUFDO0NBQUE7QUFFRDs7R0FFRztBQUNILG1DQUFtQztBQUNuQyxpQkFBaUI7QUFDakIsbUNBQW1DO0FBQ25DLHdEQUF3RDtBQUN4RCwwQ0FBMEM7QUFDMUMsc0NBQXNDO0FBQ3RDLG9EQUFvRDtBQUNwRCxzREFBc0Q7QUFDdEQseURBQXlEO0FBQ3pELGtFQUFrRTtBQUNsRSxvRUFBb0U7QUFFcEUsSUFBSTtBQUNKLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFLO0lBQ2pDLFVBQVU7SUFDVixPQUFPLEVBQUcsaUJBQWlCO0lBQzNCLFdBQVcsRUFBRyxrQ0FBa0M7SUFDaEQsSUFBSSxFQUFHLDJCQUEyQjtJQUNsQyxXQUFXLEVBQUMsa0JBQWtCO0lBQzlCLGdCQUFnQixFQUFDLGdDQUFnQztJQUNqRCxxQkFBcUIsRUFBQyxvQ0FBb0M7SUFDMUQsc0JBQXNCLEVBQUMscUNBQXFDO0lBQzVELGNBQWMsRUFBQyxnQ0FBZ0M7SUFDL0MsMEJBQTBCLEVBQUMsNkJBQTZCO0lBQ3hELG1CQUFtQixFQUFDLHNCQUFzQjtJQUMxQyw4QkFBOEIsRUFBQyxzQkFBc0I7SUFDckQsa0JBQWtCLEVBQUMsc0JBQXNCO0lBQ3pDLFFBQVEsRUFBQyxhQUFhO0lBQ3RCLHFDQUFxQyxFQUFDLGtDQUFrQztDQUMzRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRmllbGRzRm9ybUNvbmZpZyB7XHJcbiAgICAvKirliIbnu4RpZCAqL1xyXG4gICAgZ3JvdXBJZDogVmFsaWRhdG9yc1tdID0gWycnXTtcclxuXHJcbiAgICAvKirlrZfmrrXlkI3np7AgRGlzcGxheSBuYW1lIG9mIHRoaXMgZmllbGQgKi9cclxuICAgIGRpc3BsYXlOYW1lOiBWYWxpZGF0b3JzW10gPSBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV07XHJcblxyXG4gICAgLyoq5a2X5q615ZSv5LiA5ZCN56ewIFVuaXF1ZSBOYW1lKi9cclxuICAgIG5hbWU6IFZhbGlkYXRvcnNbXSA9IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXTtcclxuXHJcbiAgICAvKirmj4/ov7Ag6K+05piOICovXHJcbiAgICBkZXNjcmlwdGlvbjogVmFsaWRhdG9yc1tdID0gWycnLCBbXV07XHJcblxyXG4gICAgLyoqRmllbGRUeXBl5a2X5q6157G75Z6LIOihqOWNleaOp+S7tuWQjeensCAqL1xyXG4gICAgZm9ybUNvbnRyb2xOYW1lOiBWYWxpZGF0b3JzW10gPSBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV07XHJcblxyXG4gICAgLyoq5Yqo5oCB6KGo5Y2V6YWN572uICovXHJcbiAgICBmb3JtQ29uZmlndXJhdGlvbjogRm9ybUdyb3VwIHwgdW5kZWZpbmVkID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG59XHJcblxyXG4vKipcclxuICog5a2X5q615ZCN56ew5LiO6KGo5Y2V5o6n5Lu25ZCN56ew5pig5bCEXHJcbiAqL1xyXG4vLyBleHBvcnQgZW51bSBmaWVsZFRvRm9ybUxhYmVsTWFwe1xyXG4vLyAgICAgLyoq5YiG57uEaWQgKi9cclxuLy8gICAgIGdyb3VwSWQgPSAnQ21zOjpGaWVsZEdyb3VwJyxcclxuLy8gICAgIGRpc3BsYXlOYW1lID0gJ0FicER5bmFtaWNGb3JtOjpGaWVsZERpc3BsYXlOYW1lJyxcclxuLy8gICAgIG5hbWUgPSAnQWJwRHluYW1pY0Zvcm06OkZpZWxkTmFtZScsXHJcbi8vICAgICBkZXNjcmlwdGlvbj0nQ21zOjpEZXNjcmlwdGlvbicsXHJcbi8vICAgICAvLyBUZXh0PSdBYnBEeW5hbWljRm9ybTo6U2VsZWN0TGlzdEl0ZW1UZXh0JyxcclxuLy8gICAgIC8vIFZhbHVlPSdBYnBEeW5hbWljRm9ybTo6U2VsZWN0TGlzdEl0ZW1WYWx1ZScsXHJcbi8vICAgICAnU2VsZWN0Lk9wdGlvbnMnPVwiQWJwRHluYW1pY0Zvcm06OlNlbGVjdExpc3RJdGVtXCIsXHJcbi8vICAgICAnU2VsZWN0Lk9wdGlvbnMtVGV4dCc9XCJBYnBEeW5hbWljRm9ybTo6U2VsZWN0TGlzdEl0ZW1UZXh0XCIsXHJcbi8vICAgICAnU2VsZWN0Lk9wdGlvbnMtVmFsdWUnPVwiQWJwRHluYW1pY0Zvcm06OlNlbGVjdExpc3RJdGVtVmFsdWVcIixcclxuICAgIFxyXG4vLyB9XHJcbmV4cG9ydCBjb25zdCBmaWVsZFRvRm9ybUxhYmVsTWFwOmFueT17XHJcbiAgICAvKirliIbnu4RpZCAqL1xyXG4gICAgZ3JvdXBJZCA6ICdDbXM6OkZpZWxkR3JvdXAnLFxyXG4gICAgZGlzcGxheU5hbWUgOiAnQWJwRHluYW1pY0Zvcm06OkZpZWxkRGlzcGxheU5hbWUnLFxyXG4gICAgbmFtZSA6ICdBYnBEeW5hbWljRm9ybTo6RmllbGROYW1lJyxcclxuICAgIGRlc2NyaXB0aW9uOidDbXM6OkRlc2NyaXB0aW9uJyxcclxuICAgICdTZWxlY3QuT3B0aW9ucyc6XCJBYnBEeW5hbWljRm9ybTo6U2VsZWN0TGlzdEl0ZW1cIixcclxuICAgICdTZWxlY3QuT3B0aW9ucy1UZXh0JzpcIkFicER5bmFtaWNGb3JtOjpTZWxlY3RMaXN0SXRlbVRleHRcIixcclxuICAgICdTZWxlY3QuT3B0aW9ucy1WYWx1ZSc6XCJBYnBEeW5hbWljRm9ybTo6U2VsZWN0TGlzdEl0ZW1WYWx1ZVwiLFxyXG4gICAgXCJUYWJsZUNvbHVtbnNcIjonQWJwRHluYW1pY0Zvcm06OlNlbGVjdExpc3RJdGVtJyxcclxuICAgIFwiVGFibGVDb2x1bW5zLWRpc3BsYXlOYW1lXCI6J0Ntczo6VGFibGVDb2x1bW5EaXNwbGF5TmFtZScsXHJcbiAgICBcIlRhYmxlQ29sdW1ucy1uYW1lXCI6J0Ntczo6VGFibGVDb2x1bW5OYW1lJyxcclxuICAgIFwiVGFibGVDb2x1bW5zLWZvcm1Db250cm9sTmFtZVwiOidDbXM6OlRhYmxlQ29sdW1uRm9ybScsXHJcbiAgICBcIk1hdHJpeEJsb2NrVHlwZXNcIjpcIkNtczo6TWF0cml4QmxvY2tUeXBlXCIsXHJcbiAgICBcImZpZWxkc1wiOidDbXM6OkZpZWxkcycsXHJcbiAgICBcIk1hdHJpeEJsb2NrVHlwZXMtZmllbGRzLWRpc3BsYXlOYW1lXCI6J0FicER5bmFtaWNGb3JtOjpGaWVsZERpc3BsYXlOYW1lJyxcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-inferrable-types */
|
|
2
|
+
/* eslint-disable @angular-eslint/component-selector */
|
|
3
|
+
import { Component, ElementRef, EventEmitter, Output, ViewChild } from '@angular/core';
|
|
4
|
+
import { FieldsDataService } from '../../../services/fields-data.service';
|
|
5
|
+
import { FormBuilder, Validators } from '@angular/forms';
|
|
6
|
+
import { ConfirmationService, ToasterService } from '@abp/ng.theme.shared';
|
|
7
|
+
import { LocalizationService } from '@abp/ng.core';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/forms";
|
|
10
|
+
import * as i2 from "../../../services/fields-data.service";
|
|
11
|
+
import * as i3 from "@abp/ng.theme.shared";
|
|
12
|
+
import * as i4 from "@abp/ng.core";
|
|
13
|
+
import * as i5 from "@angular/common";
|
|
14
|
+
import * as i6 from "@ngx-validate/core";
|
|
15
|
+
export class FieldsGroupComponent {
|
|
16
|
+
constructor(fb, _service, confirmation, _LocalizationService, toaster) {
|
|
17
|
+
this.fb = fb;
|
|
18
|
+
this._service = _service;
|
|
19
|
+
this.confirmation = confirmation;
|
|
20
|
+
this._LocalizationService = _LocalizationService;
|
|
21
|
+
this.toaster = toaster;
|
|
22
|
+
/**
|
|
23
|
+
* 选择的字段分组id
|
|
24
|
+
*/
|
|
25
|
+
this.selectedGroupId = '';
|
|
26
|
+
/**模态框是否开启状态 */
|
|
27
|
+
this.modalOpen = false;
|
|
28
|
+
/**模态框是否在忙碌状态 */
|
|
29
|
+
this.modalBusy = false;
|
|
30
|
+
/**存储将要修改的值 */
|
|
31
|
+
this.selected = '';
|
|
32
|
+
/**表单是否触发验证 */
|
|
33
|
+
this.formValidation = false;
|
|
34
|
+
/**点击分组回调 */
|
|
35
|
+
this.OnGroupClickBack = new EventEmitter();
|
|
36
|
+
}
|
|
37
|
+
/**选择分组 */
|
|
38
|
+
groupChangeBtn(groupId = '') {
|
|
39
|
+
this.selectedGroupId = groupId;
|
|
40
|
+
this.OnGroupClickBack.emit(groupId);
|
|
41
|
+
}
|
|
42
|
+
/**模态框状态改变 */
|
|
43
|
+
modalVisibleChange(event) {
|
|
44
|
+
if (!event) {
|
|
45
|
+
this.modalOpen = event;
|
|
46
|
+
this.modalBusy = false;
|
|
47
|
+
this.formValidation = false;
|
|
48
|
+
this.selected = '';
|
|
49
|
+
this.groupForm = undefined;
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* 创建分组按钮
|
|
55
|
+
*/
|
|
56
|
+
createGroupBtn() {
|
|
57
|
+
this.modalOpen = true;
|
|
58
|
+
this.groupForm = this.fb.group({
|
|
59
|
+
name: ['', Validators.required],
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**编辑分组按钮 */
|
|
63
|
+
editGroupBtn(name) {
|
|
64
|
+
this.modalOpen = true;
|
|
65
|
+
this.selected = name;
|
|
66
|
+
this.groupForm = this.fb.group({
|
|
67
|
+
name: [name, Validators.required],
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**表单提交 */
|
|
71
|
+
save() {
|
|
72
|
+
this.formValidation = true;
|
|
73
|
+
if (!this.groupForm?.valid) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this.modalBusy = true;
|
|
77
|
+
if (this.selected) {
|
|
78
|
+
// this.
|
|
79
|
+
this._service.updateFieldGroup(this.selectedGroupId, this.groupForm.value).subscribe({
|
|
80
|
+
next: () => {
|
|
81
|
+
this.toaster.success(this._LocalizationService.instant(`AbpUi::SavedSuccessfully`));
|
|
82
|
+
this.modalVisibleChange(false);
|
|
83
|
+
this._service.getfieldGroups(true);
|
|
84
|
+
},
|
|
85
|
+
error: e => console.error(e),
|
|
86
|
+
complete: () => console.info('complete'),
|
|
87
|
+
});
|
|
88
|
+
// .subscribe(() => {
|
|
89
|
+
// this.toaster.success(this._LocalizationService.instant(`AbpUi::SavedSuccessfully`));
|
|
90
|
+
// this.modalVisibleChange(false);
|
|
91
|
+
// this._service.getfieldGroups(true);
|
|
92
|
+
// });
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
this._service.createFieldGroup(this.groupForm.value).subscribe(async (res) => {
|
|
96
|
+
this.toaster.success(this._LocalizationService.instant(`AbpUi::SavedSuccessfully`));
|
|
97
|
+
this.modalVisibleChange(false);
|
|
98
|
+
await this._service.getfieldGroups(true);
|
|
99
|
+
this.groupChangeBtn(res.id);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**删除分组 */
|
|
103
|
+
deleteGroupBtn(fieldGroupitem) {
|
|
104
|
+
this.confirmation
|
|
105
|
+
.warn(fieldGroupitem.name, this._LocalizationService.instant(`AbpUi::ItemWillBeDeletedMessage`))
|
|
106
|
+
.subscribe((status) => {
|
|
107
|
+
if (status == 'confirm') {
|
|
108
|
+
this._service.deleteFieldGroup(fieldGroupitem.id).subscribe(async () => {
|
|
109
|
+
this.toaster.success(this._LocalizationService.instant(`AbpUi::DeletedSuccessfully`));
|
|
110
|
+
await this._service.getfieldGroups(true);
|
|
111
|
+
this.groupChangeBtn();
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FieldsGroupComponent, deps: [{ token: i1.FormBuilder }, { token: i2.FieldsDataService }, { token: i3.ConfirmationService }, { token: i4.LocalizationService }, { token: i3.ToasterService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
117
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: FieldsGroupComponent, selector: "cms-fields-group", outputs: { OnGroupClickBack: "OnGroupClickBack" }, viewQueries: [{ propertyName: "ModalFormSubmit", first: true, predicate: ["ModalFormSubmit"], descendants: true }], ngImport: i0, template: "<div class=\"card h-100 mb-0\" >\r\n <div class=\"card-header px-2 py-sm-2 d-flex justify-content-between align-items-center\">\r\n <h6 class=\"h6 mb-0\">{{'Cms::FieldGroup' | abpLocalization}}</h6>\r\n <button type=\"button\" class=\"btn btn-link btn-sm ms-2\" (click.stop)=\"createGroupBtn()\"><i class=\"fas fa-plus-circle\"\r\n aria-hidden=\"true\"></i></button>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"container-height overflow-auto\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-item-action \" [class.active]=\"selectedGroupId===''\" (click)=\"groupChangeBtn()\">{{'Cms::AllFields' | abpLocalization}}</li>\r\n <ng-container *ngFor=\"let item of _service.fieldGroupsList\">\r\n <li class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center\"\r\n [class.active]=\"selectedGroupId===item.id\" (click)=\"groupChangeBtn(item.id)\">\r\n <div>{{item.name}}</div>\r\n <div *ngIf=\"selectedGroupId===item.id\">\r\n <i class=\"fas fa-trash px-1\" role=\"button\" (click.stop)=\"deleteGroupBtn(item)\"></i>\r\n <i class=\"fas fa-edit px-1\" role=\"button\" (click.stop)=\"editGroupBtn(item.name)\"></i>\r\n </div>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<abp-modal [(visible)]=\"modalOpen\" [busy]=\"modalBusy\" (visibleChange)=\"modalVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>{{(selected?'AbpUi::Edit':'Cms::New') | abpLocalization}}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <ng-template #loaderRef>\r\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\r\n </ng-template>\r\n <form *ngIf=\"groupForm; else loaderRef\" [formGroup]=\"groupForm\" [class]=\"{'was-validated':formValidation}\" (submit)=\"save()\">\r\n <div class=\"mb-3\">\r\n <label for=\"exampleFormControlInput1\" class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleFormControlInput1\" formControlName=\"name\"\r\n placeholder=\"\">\r\n </div>\r\n <button type=\"submit\" #ModalFormSubmit style=\"display: none\"></button>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"createForm?.invalid\" [loading]=\"modalBusy\" (click)=\"ModalFormSubmit?.nativeElement?.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.StopPropagationDirective, selector: "[click.stop]", outputs: ["click.stop"] }, { kind: "directive", type: i6.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i6.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i3.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "directive", type: i3.ModalCloseDirective, selector: "[abpClose]" }, { kind: "pipe", type: i4.LocalizationPipe, name: "abpLocalization" }] }); }
|
|
118
|
+
}
|
|
119
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: FieldsGroupComponent, decorators: [{
|
|
120
|
+
type: Component,
|
|
121
|
+
args: [{ selector: 'cms-fields-group', template: "<div class=\"card h-100 mb-0\" >\r\n <div class=\"card-header px-2 py-sm-2 d-flex justify-content-between align-items-center\">\r\n <h6 class=\"h6 mb-0\">{{'Cms::FieldGroup' | abpLocalization}}</h6>\r\n <button type=\"button\" class=\"btn btn-link btn-sm ms-2\" (click.stop)=\"createGroupBtn()\"><i class=\"fas fa-plus-circle\"\r\n aria-hidden=\"true\"></i></button>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"container-height overflow-auto\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item list-group-item-action \" [class.active]=\"selectedGroupId===''\" (click)=\"groupChangeBtn()\">{{'Cms::AllFields' | abpLocalization}}</li>\r\n <ng-container *ngFor=\"let item of _service.fieldGroupsList\">\r\n <li class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center\"\r\n [class.active]=\"selectedGroupId===item.id\" (click)=\"groupChangeBtn(item.id)\">\r\n <div>{{item.name}}</div>\r\n <div *ngIf=\"selectedGroupId===item.id\">\r\n <i class=\"fas fa-trash px-1\" role=\"button\" (click.stop)=\"deleteGroupBtn(item)\"></i>\r\n <i class=\"fas fa-edit px-1\" role=\"button\" (click.stop)=\"editGroupBtn(item.name)\"></i>\r\n </div>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<abp-modal [(visible)]=\"modalOpen\" [busy]=\"modalBusy\" (visibleChange)=\"modalVisibleChange($event)\">\r\n <ng-template #abpHeader>\r\n <h3>{{(selected?'AbpUi::Edit':'Cms::New') | abpLocalization}}</h3>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <ng-template #loaderRef>\r\n <div class=\"text-center\"><i class=\"fa fa-pulse fa-spinner\" aria-hidden=\"true\"></i></div>\r\n </ng-template>\r\n <form *ngIf=\"groupForm; else loaderRef\" [formGroup]=\"groupForm\" [class]=\"{'was-validated':formValidation}\" (submit)=\"save()\">\r\n <div class=\"mb-3\">\r\n <label for=\"exampleFormControlInput1\" class=\"form-label\">{{'Cms::Name' | abpLocalization}}</label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleFormControlInput1\" formControlName=\"name\"\r\n placeholder=\"\">\r\n </div>\r\n <button type=\"submit\" #ModalFormSubmit style=\"display: none\"></button>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" abpClose>{{'AbpUi::Close' | abpLocalization}}</button>\r\n <abp-button iconClass=\"fa fa-check\" [disabled]=\"createForm?.invalid\" [loading]=\"modalBusy\" (click)=\"ModalFormSubmit?.nativeElement?.click()\">{{'AbpUi::Save' | abpLocalization}}</abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
|
|
122
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.FieldsDataService }, { type: i3.ConfirmationService }, { type: i4.LocalizationService }, { type: i3.ToasterService }], propDecorators: { ModalFormSubmit: [{
|
|
123
|
+
type: ViewChild,
|
|
124
|
+
args: ['ModalFormSubmit', { static: false }]
|
|
125
|
+
}], OnGroupClickBack: [{
|
|
126
|
+
type: Output
|
|
127
|
+
}] } });
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Ntcy9zcmMvbGliL2NvbXBvbmVudHMvYWRtaW4vZmllbGRzL2ZpZWxkcy1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jbXMvc3JjL2xpYi9jb21wb25lbnRzL2FkbWluL2ZpZWxkcy9maWVsZHMtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkRBQTJEO0FBQzNELHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBZ0IsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7OztBQU9uRCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQ1UsRUFBZSxFQUNoQixRQUEyQixFQUMxQixZQUFpQyxFQUNsQyxvQkFBeUMsRUFDeEMsT0FBdUI7UUFKdkIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFtQjtRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDbEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN4QyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUdqQzs7V0FFRztRQUNILG9CQUFlLEdBQVcsRUFBRSxDQUFDO1FBQzdCLGVBQWU7UUFDZixjQUFTLEdBQVksS0FB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cEhVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLCtOQ2JqQyw4L0ZBaURBOzsyRkRwQ2Esb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQjtpTkE4QnFCLGVBQWU7c0JBQS9ELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUdyQyxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW5mZXJyYWJsZS10eXBlcyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWVsZHNEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpZWxkcy1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2UsIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY21zLWZpZWxkcy1ncm91cCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpZWxkcy1ncm91cC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2ZpZWxkcy1ncm91cC5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWVsZHNHcm91cENvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHB1YmxpYyBfc2VydmljZTogRmllbGRzRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBfTG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RlcjogVG9hc3RlclNlcnZpY2UsXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiDpgInmi6nnmoTlrZfmrrXliIbnu4RpZFxyXG4gICAqL1xyXG4gIHNlbGVjdGVkR3JvdXBJZDogc3RyaW5nID0gJyc7XHJcbiAgLyoq5qih5oCB5qGG5piv5ZCm5byA5ZCv54q25oCBICovXHJcbiAgbW9kYWxPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoq5qih5oCB5qGG5piv5ZCm5Zyo5b+Z56KM54q25oCBICovXHJcbiAgbW9kYWxCdXN5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoq5a2Y5YKo5bCG6KaB5L+u5pS555qE5YC8ICovXHJcbiAgc2VsZWN0ZWQ6IHN0cmluZyA9ICcnO1xyXG4gIC8qKuWtl+auteWIhue7hOihqOWNlSAqL1xyXG4gIGdyb3VwRm9ybTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKirooajljZXmmK/lkKbop6blj5Hpqozor4EgKi9cclxuICBmb3JtVmFsaWRhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKirmqKHmgIHmoYYt6KGo5Y2VLS3mjqfku7bmqKHmnb8t5Yqo5oCB6LWL5YC86KGo5Y2V5o6n5Lu2ICovXHJcbiAgQFZpZXdDaGlsZCgnTW9kYWxGb3JtU3VibWl0JywgeyBzdGF0aWM6IGZhbHNlIH0pIE1vZGFsRm9ybVN1Ym1pdDogRWxlbWVudFJlZjtcclxuXHJcbiAgLyoq54K55Ye75YiG57uE5Zue6LCDICovXHJcbiAgQE91dHB1dCgpIE9uR3JvdXBDbGlja0JhY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKumAieaLqeWIhue7hCAqL1xyXG4gIGdyb3VwQ2hhbmdlQnRuKGdyb3VwSWQgPSAnJykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwSWQgPSBncm91cElkO1xyXG4gICAgdGhpcy5Pbkdyb3VwQ2xpY2tCYWNrLmVtaXQoZ3JvdXBJZCk7XHJcbiAgfVxyXG5cclxuICAvKirmqKHmgIHmoYbnirbmgIHmlLnlj5ggKi9cclxuICBtb2RhbFZpc2libGVDaGFuZ2UoZXZlbnQpIHtcclxuICAgIGlmICghZXZlbnQpIHtcclxuICAgICAgdGhpcy5tb2RhbE9wZW4gPSBldmVudDtcclxuICAgICAgdGhpcy5tb2RhbEJ1c3kgPSBmYWxzZTtcclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkID0gJyc7XHJcbiAgICAgIHRoaXMuZ3JvdXBGb3JtID0gdW5kZWZpbmVkO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDliJvlu7rliIbnu4TmjInpkq5cclxuICAgKi9cclxuICBjcmVhdGVHcm91cEJ0bigpIHtcclxuICAgIHRoaXMubW9kYWxPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuZ3JvdXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoq57yW6L6R5YiG57uE5oyJ6ZKuICovXHJcbiAgZWRpdEdyb3VwQnRuKG5hbWUpIHtcclxuICAgIHRoaXMubW9kYWxPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWQgPSBuYW1lO1xyXG4gICAgdGhpcy5ncm91cEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgbmFtZTogW25hbWUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKirooajljZXmj5DkuqQgKi9cclxuICBzYXZlKCkge1xyXG4gICAgdGhpcy5mb3JtVmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBGb3JtPy52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vZGFsQnVzeSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICAvLyB0aGlzLlxyXG4gICAgICB0aGlzLl9zZXJ2aWNlLnVwZGF0ZUZpZWxkR3JvdXAodGhpcy5zZWxlY3RlZEdyb3VwSWQsIHRoaXMuZ3JvdXBGb3JtLnZhbHVlKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQWJwVWk6OlNhdmVkU3VjY2Vzc2Z1bGx5YCkpO1xyXG4gICAgICAgICAgdGhpcy5tb2RhbFZpc2libGVDaGFuZ2UoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5fc2VydmljZS5nZXRmaWVsZEdyb3Vwcyh0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBlID0+IGNvbnNvbGUuZXJyb3IoZSksXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IGNvbnNvbGUuaW5mbygnY29tcGxldGUnKSxcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQWJwVWk6OlNhdmVkU3VjY2Vzc2Z1bGx5YCkpO1xyXG4gICAgICAvLyAgIHRoaXMubW9kYWxWaXNpYmxlQ2hhbmdlKGZhbHNlKTtcclxuICAgICAgLy8gICB0aGlzLl9zZXJ2aWNlLmdldGZpZWxkR3JvdXBzKHRydWUpO1xyXG4gICAgICAvLyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2VydmljZS5jcmVhdGVGaWVsZEdyb3VwKHRoaXMuZ3JvdXBGb3JtLnZhbHVlKS5zdWJzY3JpYmUoYXN5bmMgcmVzID0+IHtcclxuICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5fTG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KGBBYnBVaTo6U2F2ZWRTdWNjZXNzZnVsbHlgKSk7XHJcbiAgICAgIHRoaXMubW9kYWxWaXNpYmxlQ2hhbmdlKGZhbHNlKTtcclxuICAgICAgYXdhaXQgdGhpcy5fc2VydmljZS5nZXRmaWVsZEdyb3Vwcyh0cnVlKTtcclxuICAgICAgdGhpcy5ncm91cENoYW5nZUJ0bihyZXMuaWQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKirliKDpmaTliIbnu4QgKi9cclxuICBkZWxldGVHcm91cEJ0bihmaWVsZEdyb3VwaXRlbTogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblxyXG4gICAgICAud2FybihcclxuICAgICAgICBmaWVsZEdyb3VwaXRlbS5uYW1lLFxyXG4gICAgICAgIHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQWJwVWk6Okl0ZW1XaWxsQmVEZWxldGVkTWVzc2FnZWApLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHN0YXR1czogQ29uZmlybWF0aW9uLlN0YXR1cykgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT0gJ2NvbmZpcm0nKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlLmRlbGV0ZUZpZWxkR3JvdXAoZmllbGRHcm91cGl0ZW0uaWQpLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMuX0xvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudChgQWJwVWk6OkRlbGV0ZWRTdWNjZXNzZnVsbHlgKSk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlcnZpY2UuZ2V0ZmllbGRHcm91cHModHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBDaGFuZ2VCdG4oKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkIGgtMTAwIG1iLTBcIiA+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcHgtMiBweS1zbS0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8aDYgY2xhc3M9XCJoNiBtYi0wXCI+e3snQ21zOjpGaWVsZEdyb3VwJyB8IGFicExvY2FsaXphdGlvbn19PC9oNj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gbXMtMlwiIChjbGljay5zdG9wKT1cImNyZWF0ZUdyb3VwQnRuKClcIj48aSBjbGFzcz1cImZhcyBmYS1wbHVzLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1oZWlnaHQgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uIFwiIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRHcm91cElkPT09JydcIiAgKGNsaWNrKT1cImdyb3VwQ2hhbmdlQnRuKClcIj57eydDbXM6OkFsbEZpZWxkcycgfCBhYnBMb2NhbGl6YXRpb259fTwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9zZXJ2aWNlLmZpZWxkR3JvdXBzTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkR3JvdXBJZD09PWl0ZW0uaWRcIiAoY2xpY2spPVwiZ3JvdXBDaGFuZ2VCdG4oaXRlbS5pZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57e2l0ZW0ubmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEdyb3VwSWQ9PT1pdGVtLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaCBweC0xXCIgcm9sZT1cImJ1dHRvblwiIChjbGljay5zdG9wKT1cImRlbGV0ZUdyb3VwQnRuKGl0ZW0pXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZWRpdCBweC0xXCIgcm9sZT1cImJ1dHRvblwiIChjbGljay5zdG9wKT1cImVkaXRHcm91cEJ0bihpdGVtLm5hbWUpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuPGFicC1tb2RhbCBbKHZpc2libGUpXT1cIm1vZGFsT3BlblwiIFtidXN5XT1cIm1vZGFsQnVzeVwiICh2aXNpYmxlQ2hhbmdlKT1cIm1vZGFsVmlzaWJsZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cclxuICAgICAgICA8aDM+e3soc2VsZWN0ZWQ/J0FicFVpOjpFZGl0JzonQ21zOjpOZXcnKSB8IGFicExvY2FsaXphdGlvbn19PC9oMz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkZXJSZWY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxpIGNsYXNzPVwiZmEgZmEtcHVsc2UgZmEtc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxmb3JtICpuZ0lmPVwiZ3JvdXBGb3JtOyBlbHNlIGxvYWRlclJlZlwiIFtmb3JtR3JvdXBdPVwiZ3JvdXBGb3JtXCIgW2NsYXNzXT1cInsnd2FzLXZhbGlkYXRlZCc6Zm9ybVZhbGlkYXRpb259XCIgKHN1Ym1pdCk9XCJzYXZlKClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleGFtcGxlRm9ybUNvbnRyb2xJbnB1dDFcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj57eydDbXM6Ok5hbWUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImV4YW1wbGVGb3JtQ29udHJvbElucHV0MVwiIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAjTW9kYWxGb3JtU3VibWl0IHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGFicENsb3NlPnt7J0FicFVpOjpDbG9zZScgfCBhYnBMb2NhbGl6YXRpb259fTwvYnV0dG9uPlxyXG4gICAgICAgIDxhYnAtYnV0dG9uIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgW2Rpc2FibGVkXT1cImNyZWF0ZUZvcm0/LmludmFsaWRcIiBbbG9hZGluZ109XCJtb2RhbEJ1c3lcIiAoY2xpY2spPVwiTW9kYWxGb3JtU3VibWl0Py5uYXRpdmVFbGVtZW50Py5jbGljaygpXCI+e3snQWJwVWk6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9ufX08L2FicC1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2FicC1tb2RhbD5cclxuIl19
|