@dignite-ng/expand.dynamic-form 3.1.1 → 3.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/form/tree/tree-config.component.mjs +39 -22
- package/esm2022/lib/components/form/tree/tree-control.component.mjs +4 -4
- package/esm2022/lib/components/form/tree/tree-search.component.mjs +9 -16
- package/esm2022/lib/components/form/tree/tree-view.component.mjs +2 -4
- package/fesm2022/dignite-ng-expand.dynamic-form.mjs +50 -42
- package/fesm2022/dignite-ng-expand.dynamic-form.mjs.map +1 -1
- package/lib/components/form/tree/tree-config.component.d.ts +4 -4
- package/lib/components/form/tree/tree-search.component.d.ts +2 -2
- package/lib/components/form/tree/tree-view.component.d.ts +2 -1
- package/package.json +1 -1
|
@@ -44,20 +44,13 @@ export class TreeSearchComponent {
|
|
|
44
44
|
const ValidatorsArray = [];
|
|
45
45
|
this.formConfiguration = this._fields.field.formConfiguration;
|
|
46
46
|
const isMultiple = this.formConfiguration['TreeView.Multiple'];
|
|
47
|
-
const selectValue = isMultiple ? [] :
|
|
47
|
+
const selectValue = isMultiple ? [] : null;
|
|
48
48
|
const treeOptions = this.formConfiguration['TreeView.Nodes'];
|
|
49
49
|
if (treeOptions?.length) {
|
|
50
|
-
for (const element of treeOptions) {
|
|
51
|
-
for (const key in element) {
|
|
52
|
-
const item = element[key];
|
|
53
|
-
const capitalizedKey = key.charAt(0).toUpperCase() + key.slice(1);
|
|
54
|
-
element[capitalizedKey] = item;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
50
|
this.nodes = this.convertTreeOptionsToNodes(treeOptions);
|
|
58
51
|
}
|
|
59
|
-
this._selected
|
|
60
|
-
const newControl = this.fb.control(
|
|
52
|
+
const initialValue = this._selected !== undefined ? this._selected : selectValue;
|
|
53
|
+
const newControl = this.fb.control(initialValue, ValidatorsArray);
|
|
61
54
|
this.extraProperties.setControl(this._fields.field.name, newControl);
|
|
62
55
|
resolve(true);
|
|
63
56
|
});
|
|
@@ -77,19 +70,19 @@ export class TreeSearchComponent {
|
|
|
77
70
|
}
|
|
78
71
|
}
|
|
79
72
|
ngOnDestroy() {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
if (this.extraProperties && this._fields?.field?.name) {
|
|
74
|
+
this.extraProperties.removeControl(this._fields.field.name);
|
|
75
|
+
}
|
|
83
76
|
}
|
|
84
77
|
onChange($event) {
|
|
85
78
|
console.log($event);
|
|
86
79
|
}
|
|
87
80
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: TreeSearchComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
88
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: TreeSearchComponent, selector: "df-tree-search", inputs: { fields: "fields", parentFiledName: "parentFiledName", selected: "selected", entity: "entity" }, viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }], ngImport: i0, template: "<form [formGroup]=\"_entity\">\r\n <div formGroupName=\"extraProperties\" class=\"selectcontrol\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" *ngIf=\"_fields.displayName\">{{ _fields.displayName }}</label>\r\n <!-- <ng-container *ngIf=\"formConfiguration['Select.Multiple']; else elseTemplate\">\r\n <nz-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch nzMode=\"multiple\" [nzPlaceHolder]=\"_fields.field.formConfiguration['Select.NullText']\"\r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" [nzDropdownClassName]=\"'dignite-form-select-dropdown'\">\r\n <nz-option *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options']\"\r\n [nzLabel]=\"item.Text\" [nzValue]=\"item.Value\"></nz-option>\r\n </nz-select>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <select class=\"form-select\" [multiple]=\"false\" [placeholder]=\"formConfiguration['Select.NullText']\" formControlName=\"{{_fields.field.name}}\" (change)=\"changeValue($event)\">\r\n <option [value]=\"''\">{{formConfiguration['Select.NullText']}}</option>\r\n <ng-container *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options'];let i =index\">\r\n <option [value]=\"item.Value\">{{item.Text}}</option>\r\n </ng-container>\r\n </select>\r\n </ng-template> -->\r\n <!-- <small class=\"form-text text-muted d-block\"\r\n *ngIf=\"_fields.field.description\">{{_fields.field.description}}</small> -->\r\n\r\n <nz-tree-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch [nzMultiple]=\"_fields?.field?.formConfiguration?.['TreeView.Multiple'] || false\" \r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" \r\n [nzDropdownClassName]=\"'dignite-form-select-dropdown'\" [nzNodes]=\"nodes\" \r\n nzDefaultExpandAll (ngModelChange)=\"onChange($event)\"></nz-tree-select>\r\n </div>\r\n\r\n </div>\r\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\r\n</form>", styles: ["::ng-deep .dignite-form-select.ant-select .ant-select-selector{
|
|
81
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: TreeSearchComponent, selector: "df-tree-search", inputs: { fields: "fields", parentFiledName: "parentFiledName", selected: "selected", entity: "entity" }, viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }], ngImport: i0, template: "<form [formGroup]=\"_entity\">\r\n <div formGroupName=\"extraProperties\" class=\"selectcontrol\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" *ngIf=\"_fields.displayName\">{{ _fields.displayName }}</label>\r\n <!-- <ng-container *ngIf=\"formConfiguration['Select.Multiple']; else elseTemplate\">\r\n <nz-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch nzMode=\"multiple\" [nzPlaceHolder]=\"_fields.field.formConfiguration['Select.NullText']\"\r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" [nzDropdownClassName]=\"'dignite-form-select-dropdown'\">\r\n <nz-option *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options']\"\r\n [nzLabel]=\"item.Text\" [nzValue]=\"item.Value\"></nz-option>\r\n </nz-select>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <select class=\"form-select\" [multiple]=\"false\" [placeholder]=\"formConfiguration['Select.NullText']\" formControlName=\"{{_fields.field.name}}\" (change)=\"changeValue($event)\">\r\n <option [value]=\"''\">{{formConfiguration['Select.NullText']}}</option>\r\n <ng-container *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options'];let i =index\">\r\n <option [value]=\"item.Value\">{{item.Text}}</option>\r\n </ng-container>\r\n </select>\r\n </ng-template> -->\r\n <!-- <small class=\"form-text text-muted d-block\"\r\n *ngIf=\"_fields.field.description\">{{_fields.field.description}}</small> -->\r\n\r\n <nz-tree-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch [nzMultiple]=\"_fields?.field?.formConfiguration?.['TreeView.Multiple'] || false\" \r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" \r\n [nzDropdownClassName]=\"'dignite-form-select-dropdown'\" [nzNodes]=\"nodes\" \r\n nzDefaultExpandAll (ngModelChange)=\"onChange($event)\"></nz-tree-select>\r\n </div>\r\n\r\n </div>\r\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\r\n</form>", styles: ["::ng-deep .dignite-form-select.ant-select .ant-select-selector{background:transparent!important;border:none!important;padding:.475rem 1.25rem!important;box-shadow:none!important;height:auto!important;display:flex!important;align-items:center!important}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-search{margin-inline-start:0!important;display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-search .ant-select-selection-search-input{background-color:transparent!important}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow .ant-select-selection-overflow-item{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow .ant-select-selection-overflow-item .ant-select-selection-item{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .anticon-search,::ng-deep .dignite-form-select.ant-select .anticon-down{display:none}::ng-deep .dignite-form-select.ant-select .ant-select-arrow,::ng-deep .dignite-form-select.ant-select .ant-select-clear{right:36px!important}::ng-deep .dignite-form-select.ant-select .ant-select{color:inherit!important}::ng-deep .dignite-form-select.ant-select .ant-select-selection-placeholder{color:inherit!important}::ng-deep .dignite-form-select.ant-select.ant-select-multiple .ant-select-selection-item{max-width:60%!important}::ng-deep .dignite-form-select-dropdown{max-height:256px;overflow-y:auto}::ng-deep .dignite-form-select-dropdown .ant-select-dropdown{background:var(--bs-light)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode{padding:4px 0}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode .ant-select-tree-node-content-wrapper{padding:5px 8px;border-radius:4px;transition:all .3s;color:var(--bs-body-color)}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode .ant-select-tree-node-content-wrapper:hover{background-color:var(--bs-primary)!important;color:var(--bs-white)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode.ant-select-tree-treenode-selected .ant-select-tree-node-content-wrapper{background-color:var(--lpx-brand)!important;color:var(--bs-white)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-checkbox{margin-right:8px}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i3.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i4.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckBoxChange"], exportAs: ["nzTreeSelect"] }] }); }
|
|
89
82
|
}
|
|
90
83
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: TreeSearchComponent, decorators: [{
|
|
91
84
|
type: Component,
|
|
92
|
-
args: [{ selector: 'df-tree-search', template: "<form [formGroup]=\"_entity\">\r\n <div formGroupName=\"extraProperties\" class=\"selectcontrol\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" *ngIf=\"_fields.displayName\">{{ _fields.displayName }}</label>\r\n <!-- <ng-container *ngIf=\"formConfiguration['Select.Multiple']; else elseTemplate\">\r\n <nz-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch nzMode=\"multiple\" [nzPlaceHolder]=\"_fields.field.formConfiguration['Select.NullText']\"\r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" [nzDropdownClassName]=\"'dignite-form-select-dropdown'\">\r\n <nz-option *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options']\"\r\n [nzLabel]=\"item.Text\" [nzValue]=\"item.Value\"></nz-option>\r\n </nz-select>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <select class=\"form-select\" [multiple]=\"false\" [placeholder]=\"formConfiguration['Select.NullText']\" formControlName=\"{{_fields.field.name}}\" (change)=\"changeValue($event)\">\r\n <option [value]=\"''\">{{formConfiguration['Select.NullText']}}</option>\r\n <ng-container *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options'];let i =index\">\r\n <option [value]=\"item.Value\">{{item.Text}}</option>\r\n </ng-container>\r\n </select>\r\n </ng-template> -->\r\n <!-- <small class=\"form-text text-muted d-block\"\r\n *ngIf=\"_fields.field.description\">{{_fields.field.description}}</small> -->\r\n\r\n <nz-tree-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch [nzMultiple]=\"_fields?.field?.formConfiguration?.['TreeView.Multiple'] || false\" \r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" \r\n [nzDropdownClassName]=\"'dignite-form-select-dropdown'\" [nzNodes]=\"nodes\" \r\n nzDefaultExpandAll (ngModelChange)=\"onChange($event)\"></nz-tree-select>\r\n </div>\r\n\r\n </div>\r\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\r\n</form>", styles: ["::ng-deep .dignite-form-select.ant-select .ant-select-selector{
|
|
85
|
+
args: [{ selector: 'df-tree-search', template: "<form [formGroup]=\"_entity\">\r\n <div formGroupName=\"extraProperties\" class=\"selectcontrol\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" *ngIf=\"_fields.displayName\">{{ _fields.displayName }}</label>\r\n <!-- <ng-container *ngIf=\"formConfiguration['Select.Multiple']; else elseTemplate\">\r\n <nz-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch nzMode=\"multiple\" [nzPlaceHolder]=\"_fields.field.formConfiguration['Select.NullText']\"\r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" [nzDropdownClassName]=\"'dignite-form-select-dropdown'\">\r\n <nz-option *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options']\"\r\n [nzLabel]=\"item.Text\" [nzValue]=\"item.Value\"></nz-option>\r\n </nz-select>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <select class=\"form-select\" [multiple]=\"false\" [placeholder]=\"formConfiguration['Select.NullText']\" formControlName=\"{{_fields.field.name}}\" (change)=\"changeValue($event)\">\r\n <option [value]=\"''\">{{formConfiguration['Select.NullText']}}</option>\r\n <ng-container *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options'];let i =index\">\r\n <option [value]=\"item.Value\">{{item.Text}}</option>\r\n </ng-container>\r\n </select>\r\n </ng-template> -->\r\n <!-- <small class=\"form-text text-muted d-block\"\r\n *ngIf=\"_fields.field.description\">{{_fields.field.description}}</small> -->\r\n\r\n <nz-tree-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch [nzMultiple]=\"_fields?.field?.formConfiguration?.['TreeView.Multiple'] || false\" \r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" \r\n [nzDropdownClassName]=\"'dignite-form-select-dropdown'\" [nzNodes]=\"nodes\" \r\n nzDefaultExpandAll (ngModelChange)=\"onChange($event)\"></nz-tree-select>\r\n </div>\r\n\r\n </div>\r\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\r\n</form>", styles: ["::ng-deep .dignite-form-select.ant-select .ant-select-selector{background:transparent!important;border:none!important;padding:.475rem 1.25rem!important;box-shadow:none!important;height:auto!important;display:flex!important;align-items:center!important}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-search{margin-inline-start:0!important;display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-search .ant-select-selection-search-input{background-color:transparent!important}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow .ant-select-selection-overflow-item{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow .ant-select-selection-overflow-item .ant-select-selection-item{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .anticon-search,::ng-deep .dignite-form-select.ant-select .anticon-down{display:none}::ng-deep .dignite-form-select.ant-select .ant-select-arrow,::ng-deep .dignite-form-select.ant-select .ant-select-clear{right:36px!important}::ng-deep .dignite-form-select.ant-select .ant-select{color:inherit!important}::ng-deep .dignite-form-select.ant-select .ant-select-selection-placeholder{color:inherit!important}::ng-deep .dignite-form-select.ant-select.ant-select-multiple .ant-select-selection-item{max-width:60%!important}::ng-deep .dignite-form-select-dropdown{max-height:256px;overflow-y:auto}::ng-deep .dignite-form-select-dropdown .ant-select-dropdown{background:var(--bs-light)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode{padding:4px 0}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode .ant-select-tree-node-content-wrapper{padding:5px 8px;border-radius:4px;transition:all .3s;color:var(--bs-body-color)}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode .ant-select-tree-node-content-wrapper:hover{background-color:var(--bs-primary)!important;color:var(--bs-white)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode.ant-select-tree-treenode-selected .ant-select-tree-node-content-wrapper{background-color:var(--lpx-brand)!important;color:var(--bs-white)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-checkbox{margin-right:8px}\n"] }]
|
|
93
86
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { fields: [{
|
|
94
87
|
type: Input
|
|
95
88
|
}], parentFiledName: [{
|
|
@@ -102,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
102
95
|
type: ViewChild,
|
|
103
96
|
args: ['submitclick', { static: true }]
|
|
104
97
|
}] } });
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBT3hELE1BQU0sT0FBTyxtQkFBbUI7SUFDL0IsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFFbEMsWUFBWTtRQUNaLFlBQU8sR0FBUSxFQUFFLENBQUM7UUErQlYsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBVXhDLHNCQUFpQixHQUFRLEVBQUUsQ0FBQztRQWdENUIsVUFBSyxHQUFVLEVBQUUsQ0FBQztJQTVGbUIsQ0FBQztJQUl0QyxJQUNXLE1BQU0sQ0FBQyxDQUFNO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFJRCxJQUNXLGVBQWUsQ0FBQyxDQUFNO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUdELElBQ1csUUFBUSxDQUFDLENBQU07UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUlELElBQ1csTUFB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Q0QsV0FBVyxDQUFDLEtBQUs7UUFDZixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDNUUsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBQ0QsV0FBVztRQUNULGdEQUFnRDtRQUNoRCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUtELFFBQVEsQ0FBQyxNQUFnQjtRQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RCLENBQUM7OEdBakdVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDBSQ1RoQyxtNEVBZ0NPOzsyRkR2Qk0sbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQjtnRkFVZixNQUFNO3NCQURoQixLQUFLO2dCQVFLLGVBQWU7c0JBRHpCLEtBQUs7Z0JBT0ssUUFBUTtzQkFEbEIsS0FBSztnQkFRSyxNQUFNO3NCQURoQixLQUFLO2dCQUtzQyxXQUFXO3NCQUF0RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkZi10cmVlLXNlYXJjaCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdHJlZS1zZWFyY2guY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlU2VhcmNoQ29tcG9uZW50IHtcclxuIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7fVxyXG5cclxuICAvKirlrZfmrrXphY3nva7liJfooaggKi9cclxuICBfZmllbGRzOiBhbnkgPSAnJztcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZmllbGRzKHY6IGFueSkge1xyXG4gICAgdGhpcy5fZmllbGRzID0gdjtcclxuICB9XHJcblxyXG4gIC8qKueItue6p+Wtl+auteWQjeensO+8jOeUqOS6juS4uuihqOWNleiuvue9ruaOp+S7tui1i+WAvCAqL1xyXG4gIF9wYXJlbnRGaWxlZE5hbWU6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgcGFyZW50RmlsZWROYW1lKHY6IGFueSkge1xyXG4gICAgdGhpcy5fcGFyZW50RmlsZWROYW1lID0gdjtcclxuICB9XHJcbiAgLyoq54i257qn5a2X5q615ZCN56ew77yM55So5LqO5Li66KGo5Y2V6K6+572u5o6n5Lu26LWL5YC8ICovXHJcbiAgX3NlbGVjdGVkOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkKHY6IGFueSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWQgPSB2O1xyXG4gIH1cclxuXHJcbiAgLyoq6KGo5Y2V5a6e5L2TICovXHJcbiAgX2VudGl0eTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBlbnRpdHkodjogYW55KSB7XHJcbiAgICB0aGlzLl9lbnRpdHkgPSB2O1xyXG4gICAgdGhpcy5kYXRhTG9hZGVkKCk7XHJcbiAgfVxyXG4gIEBWaWV3Q2hpbGQoJ3N1Ym1pdGNsaWNrJywgeyBzdGF0aWM6IHRydWUgfSkgc3VibWl0Y2xpY2s6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGdldCBleHRyYVByb3BlcnRpZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5Py5nZXQoJ2V4dHJhUHJvcGVydGllcycpIGFzIEZvcm1Hcm91cDtcclxuICB9XHJcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIC8qKuaVsOaNruWKoOi9veWujOaIkCAqL1xyXG4gIGFzeW5jIGRhdGFMb2FkZWQoKSB7XHJcbiAgICBpZiAodGhpcy5fZmllbGRzICYmIHRoaXMuX2VudGl0eSkge1xyXG4gICAgICBhd2FpdCB0aGlzLkFmdGVySW5pdCgpO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIOaJi+WKqOinpuWPkeWPmOabtOajgOa1i1xyXG4gICAgICB0aGlzLnN1Ym1pdGNsaWNrPy5uYXRpdmVFbGVtZW50Py5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybUNvbmZpZ3VyYXRpb246IGFueSA9ICcnO1xyXG4gIEFmdGVySW5pdCgpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0cykgPT4ge1xyXG4gICAgICBjb25zdCBWYWxpZGF0b3JzQXJyYXk6IGFueVtdID0gW107XHJcbiAgICAgIHRoaXMuZm9ybUNvbmZpZ3VyYXRpb24gPSB0aGlzLl9maWVsZHMuZmllbGQuZm9ybUNvbmZpZ3VyYXRpb247XHJcbiAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB0aGlzLmZvcm1Db25maWd1cmF0aW9uWydUcmVlVmlldy5NdWx0aXBsZSddO1xyXG4gICAgICBjb25zdCBzZWxlY3RWYWx1ZTogYW55ID0gaXNNdWx0aXBsZSA/IFtdIDogW107XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCB0cmVlT3B0aW9ucyA9IHRoaXMuZm9ybUNvbmZpZ3VyYXRpb25bJ1RyZWVWaWV3Lk5vZGVzJ107XHJcbiAgICAgIGlmICh0cmVlT3B0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRyZWVPcHRpb25zKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50W2tleV07XHJcbiAgICAgICAgICAgIGNvbnN0IGNhcGl0YWxpemVkS2V5ID0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICBlbGVtZW50W2NhcGl0YWxpemVkS2V5XSA9IGl0ZW07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubm9kZXMgPSB0aGlzLmNvbnZlcnRUcmVlT3B0aW9uc1RvTm9kZXModHJlZU9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLl9zZWxlY3RlZCA9IHNlbGVjdFZhbHVlO1xyXG4gICAgICBjb25zdCBuZXdDb250cm9sID0gdGhpcy5mYi5jb250cm9sKHRoaXMuX3NlbGVjdGVkLCBWYWxpZGF0b3JzQXJyYXkpO1xyXG4gICAgICB0aGlzLmV4dHJhUHJvcGVydGllcy5zZXRDb250cm9sKHRoaXMuX2ZpZWxkcy5maWVsZC5uYW1lLCBuZXdDb250cm9sKTtcclxuICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICBwcml2YXRlIGNvbnZlcnRUcmVlT3B0aW9uc1RvTm9kZXModHJlZU9wdGlvbnM6IGFueVtdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRyZWVPcHRpb25zLm1hcChvcHRpb24gPT4gKHtcclxuICAgICAgdGl0bGU6IG9wdGlvbi5UZXh0LFxyXG4gICAgICBrZXk6IG9wdGlvbi5WYWx1ZSxcclxuICAgICAgaXNMZWFmOiAhb3B0aW9uLkNoaWxkcmVuPy5sZW5ndGgsXHJcbiAgICAgIGNoaWxkcmVuOiBvcHRpb24uQ2hpbGRyZW4/Lmxlbmd0aCA/IHRoaXMuY29udmVydFRyZWVPcHRpb25zVG9Ob2RlcyhvcHRpb24uQ2hpbGRyZW4pIDogW11cclxuICAgIH0pKTtcclxuICB9XHJcbiAgY2hhbmdlVmFsdWUoZXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGVjdHZhbHVlID0gdGhpcy5leHRyYVByb3BlcnRpZXMuZ2V0KHRoaXMuX2ZpZWxkcy5maWVsZC5uYW1lKS52YWx1ZTtcclxuICAgIGlmIChzZWxlY3R2YWx1ZVswXSA9PT0gJycpIHtcclxuICAgICAgdGhpcy5leHRyYVByb3BlcnRpZXMuZ2V0KHRoaXMuX2ZpZWxkcy5maWVsZC5uYW1lKS5zZXRWYWx1ZShbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgLy9DYWxsZWQgb25jZSwgYmVmb3JlIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWQuXHJcbiAgICAvL0FkZCAnaW1wbGVtZW50cyBPbkRlc3Ryb3knIHRvIHRoZSBjbGFzcy5cclxuICAgIHRoaXMuZXh0cmFQcm9wZXJ0aWVzLnJlbW92ZUNvbnRyb2wodGhpcy5fZmllbGRzLmZpZWxkLm5hbWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIG5vZGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBvbkNoYW5nZSgkZXZlbnQ6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygkZXZlbnQpO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cIl9lbnRpdHlcIj5cclxuICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cImV4dHJhUHJvcGVydGllc1wiIGNsYXNzPVwic2VsZWN0Y29udHJvbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiAqbmdJZj1cIl9maWVsZHMuZGlzcGxheU5hbWVcIj57eyBfZmllbGRzLmRpc3BsYXlOYW1lIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUNvbmZpZ3VyYXRpb25bJ1NlbGVjdC5NdWx0aXBsZSddOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG56LXNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGRpZ25pdGUtZm9ybS1zZWxlY3RcIiBbbnpNYXhUYWdDb3VudF09XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICBuelNob3dTZWFyY2ggbnpNb2RlPVwibXVsdGlwbGVcIiBbbnpQbGFjZUhvbGRlcl09XCJfZmllbGRzLmZpZWxkLmZvcm1Db25maWd1cmF0aW9uWydTZWxlY3QuTnVsbFRleHQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwie3tfZmllbGRzLmZpZWxkLm5hbWV9fVwiIFtuekRyb3Bkb3duTWF0Y2hTZWxlY3RXaWR0aF09XCJ0cnVlXCIgW256RHJvcGRvd25DbGFzc05hbWVdPVwiJ2RpZ25pdGUtZm9ybS1zZWxlY3QtZHJvcGRvd24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG56LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfZmllbGRzPy5maWVsZD8uZm9ybUNvbmZpZ3VyYXRpb25bJ1NlbGVjdC5PcHRpb25zJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbnpMYWJlbF09XCJpdGVtLlRleHRcIiBbbnpWYWx1ZV09XCJpdGVtLlZhbHVlXCI+PC9uei1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L256LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZVRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW211bHRpcGxlXT1cImZhbHNlXCIgIFtwbGFjZWhvbGRlcl09XCJmb3JtQ29uZmlndXJhdGlvblsnU2VsZWN0Lk51bGxUZXh0J11cIiAgIGZvcm1Db250cm9sTmFtZT1cInt7X2ZpZWxkcy5maWVsZC5uYW1lfX1cIiAoY2hhbmdlKT1cImNoYW5nZVZhbHVlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCInJ1wiPnt7Zm9ybUNvbmZpZ3VyYXRpb25bJ1NlbGVjdC5OdWxsVGV4dCddfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9maWVsZHM/LmZpZWxkPy5mb3JtQ29uZmlndXJhdGlvblsnU2VsZWN0Lk9wdGlvbnMnXTtsZXQgaSA9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaXRlbS5WYWx1ZVwiPnt7aXRlbS5UZXh0fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPiAtLT5cclxuICAgICAgICAgICAgPCEtLSA8c21hbGwgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1tdXRlZCBkLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiX2ZpZWxkcy5maWVsZC5kZXNjcmlwdGlvblwiPnt7X2ZpZWxkcy5maWVsZC5kZXNjcmlwdGlvbn19PC9zbWFsbD4gLS0+XHJcblxyXG4gICAgICAgICAgICA8bnotdHJlZS1zZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBkaWduaXRlLWZvcm0tc2VsZWN0XCIgW256TWF4VGFnQ291bnRdPVwiMVwiXHJcbiAgICAgICAgICAgICAgICBuelNob3dTZWFyY2ggW256TXVsdGlwbGVdPVwiX2ZpZWxkcz8uZmllbGQ/LmZvcm1Db25maWd1cmF0aW9uPy5bJ1RyZWVWaWV3Lk11bHRpcGxlJ10gfHwgZmFsc2VcIiBcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7X2ZpZWxkcy5maWVsZC5uYW1lfX1cIiBbbnpEcm9wZG93bk1hdGNoU2VsZWN0V2lkdGhdPVwidHJ1ZVwiIFxyXG4gICAgICAgICAgICAgICAgW256RHJvcGRvd25DbGFzc05hbWVdPVwiJ2RpZ25pdGUtZm9ybS1zZWxlY3QtZHJvcGRvd24nXCIgW256Tm9kZXNdPVwibm9kZXNcIiBcclxuICAgICAgICAgICAgICAgIG56RGVmYXVsdEV4cGFuZEFsbCAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCI+PC9uei10cmVlLXNlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAjc3VibWl0Y2xpY2s+PC9idXR0b24+XHJcbjwvZm9ybT4iXX0=
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHluYW1pYy1mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL3RyZWUvdHJlZS1zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBT3hELE1BQU0sT0FBTyxtQkFBbUI7SUFDL0IsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFFbEMsWUFBWTtRQUNaLFlBQU8sR0FBUSxFQUFFLENBQUM7UUErQlYsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBVXhDLHNCQUFpQixHQUFRLEVBQUUsQ0FBQztRQXlDNUIsVUFBSyxHQUFVLEVBQUUsQ0FBQztJQXJGbUIsQ0FBQztJQUl0QyxJQUNXLE1BQU0sQ0FBQyxDQUFNO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFJRCxJQUNXLGVBQWUsQ0FBQyxDQUFNO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUdELElBQ1csUUFBUSxDQUFDLENBQU07UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUlELElBQ1csTUFB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QUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQztJQUNILENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBS0QsUUFBUSxDQUFDLE1BQWdCO1FBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQzs4R0ExRlUsbUJBQW1CO2tHQUFuQixtQkFBbUIsMFJDVGhDLG00RUFnQ087OzJGRHZCTSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsZ0JBQWdCO2dGQVVmLE1BQU07c0JBRGhCLEtBQUs7Z0JBUUssZUFBZTtzQkFEekIsS0FBSztnQkFPSyxRQUFRO3NCQURsQixLQUFLO2dCQVFLLE1BQU07c0JBRGhCLEtBQUs7Z0JBS3NDLFdBQVc7c0JBQXRELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZGYtdHJlZS1zZWFyY2gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RyZWUtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge31cclxuXHJcbiAgLyoq5a2X5q616YWN572u5YiX6KGoICovXHJcbiAgX2ZpZWxkczogYW55ID0gJyc7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGZpZWxkcyh2OiBhbnkpIHtcclxuICAgIHRoaXMuX2ZpZWxkcyA9IHY7XHJcbiAgfVxyXG5cclxuICAvKirniLbnuqflrZfmrrXlkI3np7DvvIznlKjkuo7kuLrooajljZXorr7nva7mjqfku7botYvlgLwgKi9cclxuICBfcGFyZW50RmlsZWROYW1lOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHBhcmVudEZpbGVkTmFtZSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3BhcmVudEZpbGVkTmFtZSA9IHY7XHJcbiAgfVxyXG4gIC8qKueItue6p+Wtl+auteWQjeensO+8jOeUqOS6juS4uuihqOWNleiuvue9ruaOp+S7tui1i+WAvCAqL1xyXG4gIF9zZWxlY3RlZDogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBzZWxlY3RlZCh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkID0gdjtcclxuICB9XHJcblxyXG4gIC8qKuihqOWNleWunuS9kyAqL1xyXG4gIF9lbnRpdHk6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZW50aXR5KHY6IGFueSkge1xyXG4gICAgdGhpcy5fZW50aXR5ID0gdjtcclxuICAgIHRoaXMuZGF0YUxvYWRlZCgpO1xyXG4gIH1cclxuICBAVmlld0NoaWxkKCdzdWJtaXRjbGljaycsIHsgc3RhdGljOiB0cnVlIH0pIHN1Ym1pdGNsaWNrOiBFbGVtZW50UmVmO1xyXG5cclxuICBnZXQgZXh0cmFQcm9wZXJ0aWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eT8uZ2V0KCdleHRyYVByb3BlcnRpZXMnKSBhcyBGb3JtR3JvdXA7XHJcbiAgfVxyXG4gIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICAvKirmlbDmja7liqDovb3lrozmiJAgKi9cclxuICBhc3luYyBkYXRhTG9hZGVkKCkge1xyXG4gICAgaWYgKHRoaXMuX2ZpZWxkcyAmJiB0aGlzLl9lbnRpdHkpIHtcclxuICAgICAgYXdhaXQgdGhpcy5BZnRlckluaXQoKTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyDmiYvliqjop6blj5Hlj5jmm7Tmo4DmtYtcclxuICAgICAgdGhpcy5zdWJtaXRjbGljaz8ubmF0aXZlRWxlbWVudD8uY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvcm1Db25maWd1cmF0aW9uOiBhbnkgPSAnJztcclxuICBBZnRlckluaXQoKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdHMpID0+IHtcclxuICAgICAgY29uc3QgVmFsaWRhdG9yc0FycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgICB0aGlzLmZvcm1Db25maWd1cmF0aW9uID0gdGhpcy5fZmllbGRzLmZpZWxkLmZvcm1Db25maWd1cmF0aW9uO1xyXG4gICAgICBjb25zdCBpc011bHRpcGxlID0gdGhpcy5mb3JtQ29uZmlndXJhdGlvblsnVHJlZVZpZXcuTXVsdGlwbGUnXTtcclxuICAgICAgY29uc3Qgc2VsZWN0VmFsdWU6IGFueSA9IGlzTXVsdGlwbGUgPyBbXSA6IG51bGw7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCB0cmVlT3B0aW9ucyA9IHRoaXMuZm9ybUNvbmZpZ3VyYXRpb25bJ1RyZWVWaWV3Lk5vZGVzJ107XHJcbiAgICAgIGlmICh0cmVlT3B0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5ub2RlcyA9IHRoaXMuY29udmVydFRyZWVPcHRpb25zVG9Ob2Rlcyh0cmVlT3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHRoaXMuX3NlbGVjdGVkICE9PSB1bmRlZmluZWQgPyB0aGlzLl9zZWxlY3RlZCA6IHNlbGVjdFZhbHVlO1xyXG4gICAgICBjb25zdCBuZXdDb250cm9sID0gdGhpcy5mYi5jb250cm9sKGluaXRpYWxWYWx1ZSwgVmFsaWRhdG9yc0FycmF5KTtcclxuICAgICAgdGhpcy5leHRyYVByb3BlcnRpZXMuc2V0Q29udHJvbCh0aGlzLl9maWVsZHMuZmllbGQubmFtZSwgbmV3Q29udHJvbCk7XHJcbiAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBjb252ZXJ0VHJlZU9wdGlvbnNUb05vZGVzKHRyZWVPcHRpb25zOiBhbnlbXSk6IGFueVtdIHtcclxuICAgIHJldHVybiB0cmVlT3B0aW9ucy5tYXAob3B0aW9uID0+ICh7XHJcbiAgICAgIHRpdGxlOiBvcHRpb24uVGV4dCxcclxuICAgICAga2V5OiBvcHRpb24uVmFsdWUsXHJcbiAgICAgIGlzTGVhZjogIW9wdGlvbi5DaGlsZHJlbj8ubGVuZ3RoLFxyXG4gICAgICBjaGlsZHJlbjogb3B0aW9uLkNoaWxkcmVuPy5sZW5ndGggPyB0aGlzLmNvbnZlcnRUcmVlT3B0aW9uc1RvTm9kZXMob3B0aW9uLkNoaWxkcmVuKSA6IFtdXHJcbiAgICB9KSk7XHJcbiAgfVxyXG4gIGNoYW5nZVZhbHVlKGV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3R2YWx1ZSA9IHRoaXMuZXh0cmFQcm9wZXJ0aWVzLmdldCh0aGlzLl9maWVsZHMuZmllbGQubmFtZSkudmFsdWU7XHJcbiAgICBpZiAoc2VsZWN0dmFsdWVbMF0gPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuZXh0cmFQcm9wZXJ0aWVzLmdldCh0aGlzLl9maWVsZHMuZmllbGQubmFtZSkuc2V0VmFsdWUoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmV4dHJhUHJvcGVydGllcyAmJiB0aGlzLl9maWVsZHM/LmZpZWxkPy5uYW1lKSB7XHJcbiAgICAgIHRoaXMuZXh0cmFQcm9wZXJ0aWVzLnJlbW92ZUNvbnRyb2wodGhpcy5fZmllbGRzLmZpZWxkLm5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG5vZGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBvbkNoYW5nZSgkZXZlbnQ6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygkZXZlbnQpO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cIl9lbnRpdHlcIj5cclxuICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cImV4dHJhUHJvcGVydGllc1wiIGNsYXNzPVwic2VsZWN0Y29udHJvbFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiAqbmdJZj1cIl9maWVsZHMuZGlzcGxheU5hbWVcIj57eyBfZmllbGRzLmRpc3BsYXlOYW1lIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUNvbmZpZ3VyYXRpb25bJ1NlbGVjdC5NdWx0aXBsZSddOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG56LXNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGRpZ25pdGUtZm9ybS1zZWxlY3RcIiBbbnpNYXhUYWdDb3VudF09XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICBuelNob3dTZWFyY2ggbnpNb2RlPVwibXVsdGlwbGVcIiBbbnpQbGFjZUhvbGRlcl09XCJfZmllbGRzLmZpZWxkLmZvcm1Db25maWd1cmF0aW9uWydTZWxlY3QuTnVsbFRleHQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwie3tfZmllbGRzLmZpZWxkLm5hbWV9fVwiIFtuekRyb3Bkb3duTWF0Y2hTZWxlY3RXaWR0aF09XCJ0cnVlXCIgW256RHJvcGRvd25DbGFzc05hbWVdPVwiJ2RpZ25pdGUtZm9ybS1zZWxlY3QtZHJvcGRvd24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG56LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfZmllbGRzPy5maWVsZD8uZm9ybUNvbmZpZ3VyYXRpb25bJ1NlbGVjdC5PcHRpb25zJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbnpMYWJlbF09XCJpdGVtLlRleHRcIiBbbnpWYWx1ZV09XCJpdGVtLlZhbHVlXCI+PC9uei1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L256LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZVRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW211bHRpcGxlXT1cImZhbHNlXCIgIFtwbGFjZWhvbGRlcl09XCJmb3JtQ29uZmlndXJhdGlvblsnU2VsZWN0Lk51bGxUZXh0J11cIiAgIGZvcm1Db250cm9sTmFtZT1cInt7X2ZpZWxkcy5maWVsZC5uYW1lfX1cIiAoY2hhbmdlKT1cImNoYW5nZVZhbHVlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCInJ1wiPnt7Zm9ybUNvbmZpZ3VyYXRpb25bJ1NlbGVjdC5OdWxsVGV4dCddfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9maWVsZHM/LmZpZWxkPy5mb3JtQ29uZmlndXJhdGlvblsnU2VsZWN0Lk9wdGlvbnMnXTtsZXQgaSA9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaXRlbS5WYWx1ZVwiPnt7aXRlbS5UZXh0fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPiAtLT5cclxuICAgICAgICAgICAgPCEtLSA8c21hbGwgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1tdXRlZCBkLWJsb2NrXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiX2ZpZWxkcy5maWVsZC5kZXNjcmlwdGlvblwiPnt7X2ZpZWxkcy5maWVsZC5kZXNjcmlwdGlvbn19PC9zbWFsbD4gLS0+XHJcblxyXG4gICAgICAgICAgICA8bnotdHJlZS1zZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBkaWduaXRlLWZvcm0tc2VsZWN0XCIgW256TWF4VGFnQ291bnRdPVwiMVwiXHJcbiAgICAgICAgICAgICAgICBuelNob3dTZWFyY2ggW256TXVsdGlwbGVdPVwiX2ZpZWxkcz8uZmllbGQ/LmZvcm1Db25maWd1cmF0aW9uPy5bJ1RyZWVWaWV3Lk11bHRpcGxlJ10gfHwgZmFsc2VcIiBcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7X2ZpZWxkcy5maWVsZC5uYW1lfX1cIiBbbnpEcm9wZG93bk1hdGNoU2VsZWN0V2lkdGhdPVwidHJ1ZVwiIFxyXG4gICAgICAgICAgICAgICAgW256RHJvcGRvd25DbGFzc05hbWVdPVwiJ2RpZ25pdGUtZm9ybS1zZWxlY3QtZHJvcGRvd24nXCIgW256Tm9kZXNdPVwibm9kZXNcIiBcclxuICAgICAgICAgICAgICAgIG56RGVmYXVsdEV4cGFuZEFsbCAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCI+PC9uei10cmVlLXNlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAjc3VibWl0Y2xpY2s+PC9idXR0b24+XHJcbjwvZm9ybT4iXX0=
|
|
@@ -15,10 +15,8 @@ export class TreeViewComponent {
|
|
|
15
15
|
this._value = v;
|
|
16
16
|
}
|
|
17
17
|
async ngAfterContentInit() {
|
|
18
|
-
//Called after ngOnInit when the component's or directive's content has been initialized.
|
|
19
|
-
//Add 'implements AfterContentInit' to the class.
|
|
20
18
|
const valueOptions = this._value;
|
|
21
|
-
if (this.type && valueOptions) {
|
|
19
|
+
if (this.type && valueOptions !== null && valueOptions !== undefined) {
|
|
22
20
|
const nodes = this.fields?.field?.formConfiguration?.['TreeView.Nodes'] || [];
|
|
23
21
|
const findNodeByValue = (nodeList, val) => {
|
|
24
22
|
for (const node of nodeList) {
|
|
@@ -59,4 +57,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImpor
|
|
|
59
57
|
}], value: [{
|
|
60
58
|
type: Input
|
|
61
59
|
}] } });
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2R5bmFtaWMtZm9ybS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS90cmVlL3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9keW5hbWljLWZvcm0vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vdHJlZS90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvQixNQUFNLGVBQWUsQ0FBQzs7O0FBT25FLE1BQU0sT0FBTyxpQkFBaUI7SUFMOUI7UUFNQyxXQUFXO1FBQ1YsY0FBUyxHQUFRLEVBQUUsQ0FBQztRQUVwQixhQUFhO1FBQ0osZUFBVSxHQUFHLEtBQUssQ0FBQztRQU81QixlQUFlO1FBQ2YsV0FBTSxHQUFRLEVBQUUsQ0FBQztLQWtDbEI7SUFqQ0MsSUFDVyxLQUFLLENBQUMsQ0FBTTtRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQjtRQUN0QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRWpDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlFLE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBZSxFQUFFLEdBQVEsRUFBTyxFQUFFO2dCQUN6RCxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssR0FBRzt3QkFBRSxPQUFPLElBQUksQ0FBQztvQkFDMUQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDbkMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDbkUsSUFBSSxLQUFLOzRCQUFFLE9BQU8sS0FBSyxDQUFDO29CQUMxQixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUM7WUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLENBQUM7WUFDekMsQ0FBQyxDQUFDO1lBRUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs4R0E5Q1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsMElDUjlCLDJPQVNDOzsyRkREWSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsY0FBYzs4QkFTZixVQUFVO3NCQUFsQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0ssS0FBSztzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBBZnRlckNvbnRlbnRJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RmLXRyZWUtdmlldycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RyZWUtdmlldy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAvKirlsZXnpLrliJnlhoXlrrkgKi9cclxuICBzaG93VmFsdWU6IGFueSA9ICcnO1xyXG5cclxuICAvKirmmK/lkKbmmL7npLrlho3liJfooaggKi9cclxuICBASW5wdXQoKSBzaG93SW5MaXN0ID0gZmFsc2U7XHJcbiAgLyoq6KGo5Y2V5a2X5q615pWw5o2uICovXHJcbiAgQElucHV0KCkgZmllbGRzOiBhbnk7XHJcblxyXG4gIC8qKuihqOWNleaOp+S7tuexu+WeiyAqL1xyXG4gIEBJbnB1dCgpIHR5cGU6IGFueTtcclxuXHJcbiAgLyoq6KGo5Y2V5o6n5Lu2VmFsdWUgKi9cclxuICBfdmFsdWU6IGFueSA9ICcnO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCB2YWx1ZSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gdjtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHZhbHVlT3B0aW9ucyA9IHRoaXMuX3ZhbHVlO1xyXG4gICBcclxuICAgIGlmICh0aGlzLnR5cGUgJiYgdmFsdWVPcHRpb25zICE9PSBudWxsICYmIHZhbHVlT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5maWVsZHM/LmZpZWxkPy5mb3JtQ29uZmlndXJhdGlvbj8uWydUcmVlVmlldy5Ob2RlcyddIHx8IFtdO1xyXG4gICAgICBjb25zdCBmaW5kTm9kZUJ5VmFsdWUgPSAobm9kZUxpc3Q6IGFueVtdLCB2YWw6IGFueSk6IGFueSA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVMaXN0KSB7XHJcbiAgICAgICAgICBpZiAobm9kZS52YWx1ZSA9PT0gdmFsIHx8IG5vZGUuVmFsdWUgPT09IHZhbCkgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiB8fCBub2RlLkNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE5vZGVCeVZhbHVlKG5vZGUuY2hpbGRyZW4gfHwgbm9kZS5DaGlsZHJlbiwgdmFsKTtcclxuICAgICAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgY29uc3QgZ2V0VGV4dEJ5VmFsdWUgPSAodmFsOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBub2RlID0gZmluZE5vZGVCeVZhbHVlKG5vZGVzLCB2YWwpO1xyXG4gICAgICAgIHJldHVybiBub2RlPy50ZXh0IHx8IG5vZGU/LlRleHQgfHwgdmFsO1xyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVPcHRpb25zKSkge1xyXG4gICAgICAgIHRoaXMuc2hvd1ZhbHVlID0gdmFsdWVPcHRpb25zLm1hcChnZXRUZXh0QnlWYWx1ZSkuam9pbignLCcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd1ZhbHVlID0gZ2V0VGV4dEJ5VmFsdWUodmFsdWVPcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJAaWYoc2hvd0luTGlzdCl7XHJcbnt7c2hvd1ZhbHVlfX1cclxufSBAZWxzZXtcclxuPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiAqbmdJZj1cImZpZWxkcy5kaXNwbGF5TmFtZVwiPnt7IGZpZWxkcy5kaXNwbGF5TmFtZSB9fTwvbGFiZWw+XHJcbiAgICA8ZGl2PlxyXG4gICAgICAgIHt7c2hvd1ZhbHVlfX1cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxufSJdfQ==
|
|
@@ -1514,28 +1514,13 @@ class TreeConfigComponent {
|
|
|
1514
1514
|
return this.formEntity?.get('formConfiguration');
|
|
1515
1515
|
}
|
|
1516
1516
|
get TreeOptions() {
|
|
1517
|
-
return this.formConfiguration
|
|
1517
|
+
return this.formConfiguration?.controls['TreeView.Nodes'];
|
|
1518
1518
|
}
|
|
1519
1519
|
async dataLoaded() {
|
|
1520
1520
|
if (this.formEntity && this._type) {
|
|
1521
1521
|
await this.AfterInit();
|
|
1522
1522
|
}
|
|
1523
1523
|
}
|
|
1524
|
-
/**增加选项 */
|
|
1525
|
-
// addTreeOptions() {
|
|
1526
|
-
// this.TreeOptions.push(
|
|
1527
|
-
// new FormGroup({
|
|
1528
|
-
// Text: new FormControl('', Validators.required),
|
|
1529
|
-
// Value: new FormControl('', Validators.required),
|
|
1530
|
-
// Selected: new FormControl(false),
|
|
1531
|
-
// Children: new FormArray([]),
|
|
1532
|
-
// }),
|
|
1533
|
-
// );
|
|
1534
|
-
// }
|
|
1535
|
-
// /**删除某个选项 */
|
|
1536
|
-
// deleteTreeOptions(index) {
|
|
1537
|
-
// this.TreeOptions.removeAt(index);
|
|
1538
|
-
// }
|
|
1539
1524
|
AfterInit() {
|
|
1540
1525
|
return new Promise(resolve => {
|
|
1541
1526
|
this.formEntity?.setControl('formConfiguration', this.fb.group(new TreeConfig()));
|
|
@@ -1582,10 +1567,12 @@ class TreeConfigComponent {
|
|
|
1582
1567
|
// }
|
|
1583
1568
|
/**字段标签input失去标点生成字段名字 */
|
|
1584
1569
|
disPlayNameInputBlur(event) {
|
|
1570
|
+
if (!this.nodeForm)
|
|
1571
|
+
return;
|
|
1585
1572
|
const value = event.target.value;
|
|
1586
1573
|
const pinyin = this.toPinyinService.get(value);
|
|
1587
1574
|
const nameInput = this.nodeForm.get('key');
|
|
1588
|
-
if (nameInput.value)
|
|
1575
|
+
if (!nameInput || nameInput.value)
|
|
1589
1576
|
return;
|
|
1590
1577
|
nameInput.patchValue(pinyin);
|
|
1591
1578
|
}
|
|
@@ -1600,9 +1587,6 @@ class TreeConfigComponent {
|
|
|
1600
1587
|
}
|
|
1601
1588
|
this.anExpandedNode = anExpandedNode;
|
|
1602
1589
|
}
|
|
1603
|
-
log(v) {
|
|
1604
|
-
console.log(v, '111111111');
|
|
1605
|
-
}
|
|
1606
1590
|
/**生成GUID */
|
|
1607
1591
|
generateGuid() {
|
|
1608
1592
|
return crypto.randomUUID();
|
|
@@ -1653,6 +1637,7 @@ class TreeConfigComponent {
|
|
|
1653
1637
|
createOrEditSave() {
|
|
1654
1638
|
const { value } = this.nodeForm;
|
|
1655
1639
|
const { selectTree, isCreateChild, nodes, anExpandedNode } = this;
|
|
1640
|
+
const isMultiple = this.formConfiguration.controls['TreeView.Multiple'];
|
|
1656
1641
|
if (selectTree) {
|
|
1657
1642
|
if (isCreateChild) {
|
|
1658
1643
|
// 创建子节点
|
|
@@ -1671,6 +1656,11 @@ class TreeConfigComponent {
|
|
|
1671
1656
|
// 创建根节点
|
|
1672
1657
|
nodes.push(value);
|
|
1673
1658
|
}
|
|
1659
|
+
// 单选模式下,如果当前节点被选中,清除其他节点的选中状态
|
|
1660
|
+
if (!isMultiple.value && value.isChecked) {
|
|
1661
|
+
this.clearAllChecked(nodes);
|
|
1662
|
+
this.setNodeCheckedOnly(nodes, value.key, true);
|
|
1663
|
+
}
|
|
1674
1664
|
this.nodes = [...nodes];
|
|
1675
1665
|
this.syncTreeOptionsFromNodes();
|
|
1676
1666
|
this.cdr.detectChanges();
|
|
@@ -1696,7 +1686,6 @@ class TreeConfigComponent {
|
|
|
1696
1686
|
for (const node of nodes) {
|
|
1697
1687
|
if (node.key === targetKey) {
|
|
1698
1688
|
node.title = updatedData.title;
|
|
1699
|
-
node.key = updatedData.key;
|
|
1700
1689
|
node.isChecked = updatedData.isChecked;
|
|
1701
1690
|
return true;
|
|
1702
1691
|
}
|
|
@@ -1774,10 +1763,38 @@ class TreeConfigComponent {
|
|
|
1774
1763
|
}
|
|
1775
1764
|
/**设置 */
|
|
1776
1765
|
toggleMultiple(event) {
|
|
1766
|
+
this.clearAllChecked(this.nodes);
|
|
1767
|
+
return;
|
|
1777
1768
|
const isMultiple = this.formConfiguration.controls['TreeView.Multiple'];
|
|
1778
1769
|
if (!isMultiple.value) {
|
|
1779
1770
|
this.clearAllChecked(this.nodes);
|
|
1780
1771
|
}
|
|
1772
|
+
else {
|
|
1773
|
+
this.applyMultipleLogic(this.nodes);
|
|
1774
|
+
}
|
|
1775
|
+
this.nodes = [...this.nodes];
|
|
1776
|
+
this.syncTreeOptionsFromNodes();
|
|
1777
|
+
this.cdr.detectChanges();
|
|
1778
|
+
}
|
|
1779
|
+
/**应用多选逻辑:选中的节点同时选中其所有子节点和父节点 */
|
|
1780
|
+
applyMultipleLogic(nodes) {
|
|
1781
|
+
const checkedKeys = [];
|
|
1782
|
+
this.collectCheckedKeys(nodes, checkedKeys);
|
|
1783
|
+
checkedKeys.forEach(key => {
|
|
1784
|
+
this.setNodeChecked(nodes, key, true);
|
|
1785
|
+
this.setParentNodesChecked(nodes, key);
|
|
1786
|
+
});
|
|
1787
|
+
}
|
|
1788
|
+
/**收集所有选中节点的key */
|
|
1789
|
+
collectCheckedKeys(nodes, result) {
|
|
1790
|
+
for (const node of nodes) {
|
|
1791
|
+
if (node.isChecked) {
|
|
1792
|
+
result.push(node.key);
|
|
1793
|
+
}
|
|
1794
|
+
if (node.children?.length) {
|
|
1795
|
+
this.collectCheckedKeys(node.children, result);
|
|
1796
|
+
}
|
|
1797
|
+
}
|
|
1781
1798
|
}
|
|
1782
1799
|
/**切换节点选中状态 */
|
|
1783
1800
|
toggleNodeChecked(event, node) {
|
|
@@ -2057,9 +2074,9 @@ class TreeControlComponent {
|
|
|
2057
2074
|
return result;
|
|
2058
2075
|
}
|
|
2059
2076
|
ngOnDestroy() {
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2077
|
+
if (this.extraProperties && this._fields?.field?.name) {
|
|
2078
|
+
this.extraProperties.removeControl(this._fields.field.name);
|
|
2079
|
+
}
|
|
2063
2080
|
}
|
|
2064
2081
|
/**点击展开树节点图标触发 */
|
|
2065
2082
|
nzExpandChange(event) {
|
|
@@ -2284,20 +2301,13 @@ class TreeSearchComponent {
|
|
|
2284
2301
|
const ValidatorsArray = [];
|
|
2285
2302
|
this.formConfiguration = this._fields.field.formConfiguration;
|
|
2286
2303
|
const isMultiple = this.formConfiguration['TreeView.Multiple'];
|
|
2287
|
-
const selectValue = isMultiple ? [] :
|
|
2304
|
+
const selectValue = isMultiple ? [] : null;
|
|
2288
2305
|
const treeOptions = this.formConfiguration['TreeView.Nodes'];
|
|
2289
2306
|
if (treeOptions?.length) {
|
|
2290
|
-
for (const element of treeOptions) {
|
|
2291
|
-
for (const key in element) {
|
|
2292
|
-
const item = element[key];
|
|
2293
|
-
const capitalizedKey = key.charAt(0).toUpperCase() + key.slice(1);
|
|
2294
|
-
element[capitalizedKey] = item;
|
|
2295
|
-
}
|
|
2296
|
-
}
|
|
2297
2307
|
this.nodes = this.convertTreeOptionsToNodes(treeOptions);
|
|
2298
2308
|
}
|
|
2299
|
-
this._selected
|
|
2300
|
-
const newControl = this.fb.control(
|
|
2309
|
+
const initialValue = this._selected !== undefined ? this._selected : selectValue;
|
|
2310
|
+
const newControl = this.fb.control(initialValue, ValidatorsArray);
|
|
2301
2311
|
this.extraProperties.setControl(this._fields.field.name, newControl);
|
|
2302
2312
|
resolve(true);
|
|
2303
2313
|
});
|
|
@@ -2317,19 +2327,19 @@ class TreeSearchComponent {
|
|
|
2317
2327
|
}
|
|
2318
2328
|
}
|
|
2319
2329
|
ngOnDestroy() {
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2330
|
+
if (this.extraProperties && this._fields?.field?.name) {
|
|
2331
|
+
this.extraProperties.removeControl(this._fields.field.name);
|
|
2332
|
+
}
|
|
2323
2333
|
}
|
|
2324
2334
|
onChange($event) {
|
|
2325
2335
|
console.log($event);
|
|
2326
2336
|
}
|
|
2327
2337
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: TreeSearchComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2328
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: TreeSearchComponent, selector: "df-tree-search", inputs: { fields: "fields", parentFiledName: "parentFiledName", selected: "selected", entity: "entity" }, viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }], ngImport: i0, template: "<form [formGroup]=\"_entity\">\r\n <div formGroupName=\"extraProperties\" class=\"selectcontrol\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" *ngIf=\"_fields.displayName\">{{ _fields.displayName }}</label>\r\n <!-- <ng-container *ngIf=\"formConfiguration['Select.Multiple']; else elseTemplate\">\r\n <nz-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch nzMode=\"multiple\" [nzPlaceHolder]=\"_fields.field.formConfiguration['Select.NullText']\"\r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" [nzDropdownClassName]=\"'dignite-form-select-dropdown'\">\r\n <nz-option *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options']\"\r\n [nzLabel]=\"item.Text\" [nzValue]=\"item.Value\"></nz-option>\r\n </nz-select>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <select class=\"form-select\" [multiple]=\"false\" [placeholder]=\"formConfiguration['Select.NullText']\" formControlName=\"{{_fields.field.name}}\" (change)=\"changeValue($event)\">\r\n <option [value]=\"''\">{{formConfiguration['Select.NullText']}}</option>\r\n <ng-container *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options'];let i =index\">\r\n <option [value]=\"item.Value\">{{item.Text}}</option>\r\n </ng-container>\r\n </select>\r\n </ng-template> -->\r\n <!-- <small class=\"form-text text-muted d-block\"\r\n *ngIf=\"_fields.field.description\">{{_fields.field.description}}</small> -->\r\n\r\n <nz-tree-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch [nzMultiple]=\"_fields?.field?.formConfiguration?.['TreeView.Multiple'] || false\" \r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" \r\n [nzDropdownClassName]=\"'dignite-form-select-dropdown'\" [nzNodes]=\"nodes\" \r\n nzDefaultExpandAll (ngModelChange)=\"onChange($event)\"></nz-tree-select>\r\n </div>\r\n\r\n </div>\r\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\r\n</form>", styles: ["::ng-deep .dignite-form-select.ant-select .ant-select-selector{
|
|
2338
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.5", type: TreeSearchComponent, selector: "df-tree-search", inputs: { fields: "fields", parentFiledName: "parentFiledName", selected: "selected", entity: "entity" }, viewQueries: [{ propertyName: "submitclick", first: true, predicate: ["submitclick"], descendants: true, static: true }], ngImport: i0, template: "<form [formGroup]=\"_entity\">\r\n <div formGroupName=\"extraProperties\" class=\"selectcontrol\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" *ngIf=\"_fields.displayName\">{{ _fields.displayName }}</label>\r\n <!-- <ng-container *ngIf=\"formConfiguration['Select.Multiple']; else elseTemplate\">\r\n <nz-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch nzMode=\"multiple\" [nzPlaceHolder]=\"_fields.field.formConfiguration['Select.NullText']\"\r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" [nzDropdownClassName]=\"'dignite-form-select-dropdown'\">\r\n <nz-option *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options']\"\r\n [nzLabel]=\"item.Text\" [nzValue]=\"item.Value\"></nz-option>\r\n </nz-select>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <select class=\"form-select\" [multiple]=\"false\" [placeholder]=\"formConfiguration['Select.NullText']\" formControlName=\"{{_fields.field.name}}\" (change)=\"changeValue($event)\">\r\n <option [value]=\"''\">{{formConfiguration['Select.NullText']}}</option>\r\n <ng-container *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options'];let i =index\">\r\n <option [value]=\"item.Value\">{{item.Text}}</option>\r\n </ng-container>\r\n </select>\r\n </ng-template> -->\r\n <!-- <small class=\"form-text text-muted d-block\"\r\n *ngIf=\"_fields.field.description\">{{_fields.field.description}}</small> -->\r\n\r\n <nz-tree-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch [nzMultiple]=\"_fields?.field?.formConfiguration?.['TreeView.Multiple'] || false\" \r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" \r\n [nzDropdownClassName]=\"'dignite-form-select-dropdown'\" [nzNodes]=\"nodes\" \r\n nzDefaultExpandAll (ngModelChange)=\"onChange($event)\"></nz-tree-select>\r\n </div>\r\n\r\n </div>\r\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\r\n</form>", styles: ["::ng-deep .dignite-form-select.ant-select .ant-select-selector{background:transparent!important;border:none!important;padding:.475rem 1.25rem!important;box-shadow:none!important;height:auto!important;display:flex!important;align-items:center!important}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-search{margin-inline-start:0!important;display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-search .ant-select-selection-search-input{background-color:transparent!important}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow .ant-select-selection-overflow-item{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow .ant-select-selection-overflow-item .ant-select-selection-item{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .anticon-search,::ng-deep .dignite-form-select.ant-select .anticon-down{display:none}::ng-deep .dignite-form-select.ant-select .ant-select-arrow,::ng-deep .dignite-form-select.ant-select .ant-select-clear{right:36px!important}::ng-deep .dignite-form-select.ant-select .ant-select{color:inherit!important}::ng-deep .dignite-form-select.ant-select .ant-select-selection-placeholder{color:inherit!important}::ng-deep .dignite-form-select.ant-select.ant-select-multiple .ant-select-selection-item{max-width:60%!important}::ng-deep .dignite-form-select-dropdown{max-height:256px;overflow-y:auto}::ng-deep .dignite-form-select-dropdown .ant-select-dropdown{background:var(--bs-light)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode{padding:4px 0}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode .ant-select-tree-node-content-wrapper{padding:5px 8px;border-radius:4px;transition:all .3s;color:var(--bs-body-color)}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode .ant-select-tree-node-content-wrapper:hover{background-color:var(--bs-primary)!important;color:var(--bs-white)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode.ant-select-tree-treenode-selected .ant-select-tree-node-content-wrapper{background-color:var(--lpx-brand)!important;color:var(--bs-white)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-checkbox{margin-right:8px}\n"], dependencies: [{ kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.ValidationGroupDirective, selector: "[formGroup],[formGroupName]", exportAs: ["validationGroup"] }, { kind: "directive", type: i3.ValidationDirective, selector: "[formControl],[formControlName]", exportAs: ["validationDirective"] }, { kind: "component", type: i4$2.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzPlacement", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckBoxChange"], exportAs: ["nzTreeSelect"] }] }); }
|
|
2329
2339
|
}
|
|
2330
2340
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: TreeSearchComponent, decorators: [{
|
|
2331
2341
|
type: Component,
|
|
2332
|
-
args: [{ selector: 'df-tree-search', template: "<form [formGroup]=\"_entity\">\r\n <div formGroupName=\"extraProperties\" class=\"selectcontrol\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" *ngIf=\"_fields.displayName\">{{ _fields.displayName }}</label>\r\n <!-- <ng-container *ngIf=\"formConfiguration['Select.Multiple']; else elseTemplate\">\r\n <nz-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch nzMode=\"multiple\" [nzPlaceHolder]=\"_fields.field.formConfiguration['Select.NullText']\"\r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" [nzDropdownClassName]=\"'dignite-form-select-dropdown'\">\r\n <nz-option *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options']\"\r\n [nzLabel]=\"item.Text\" [nzValue]=\"item.Value\"></nz-option>\r\n </nz-select>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <select class=\"form-select\" [multiple]=\"false\" [placeholder]=\"formConfiguration['Select.NullText']\" formControlName=\"{{_fields.field.name}}\" (change)=\"changeValue($event)\">\r\n <option [value]=\"''\">{{formConfiguration['Select.NullText']}}</option>\r\n <ng-container *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options'];let i =index\">\r\n <option [value]=\"item.Value\">{{item.Text}}</option>\r\n </ng-container>\r\n </select>\r\n </ng-template> -->\r\n <!-- <small class=\"form-text text-muted d-block\"\r\n *ngIf=\"_fields.field.description\">{{_fields.field.description}}</small> -->\r\n\r\n <nz-tree-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch [nzMultiple]=\"_fields?.field?.formConfiguration?.['TreeView.Multiple'] || false\" \r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" \r\n [nzDropdownClassName]=\"'dignite-form-select-dropdown'\" [nzNodes]=\"nodes\" \r\n nzDefaultExpandAll (ngModelChange)=\"onChange($event)\"></nz-tree-select>\r\n </div>\r\n\r\n </div>\r\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\r\n</form>", styles: ["::ng-deep .dignite-form-select.ant-select .ant-select-selector{
|
|
2342
|
+
args: [{ selector: 'df-tree-search', template: "<form [formGroup]=\"_entity\">\r\n <div formGroupName=\"extraProperties\" class=\"selectcontrol\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\" *ngIf=\"_fields.displayName\">{{ _fields.displayName }}</label>\r\n <!-- <ng-container *ngIf=\"formConfiguration['Select.Multiple']; else elseTemplate\">\r\n <nz-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch nzMode=\"multiple\" [nzPlaceHolder]=\"_fields.field.formConfiguration['Select.NullText']\"\r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" [nzDropdownClassName]=\"'dignite-form-select-dropdown'\">\r\n <nz-option *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options']\"\r\n [nzLabel]=\"item.Text\" [nzValue]=\"item.Value\"></nz-option>\r\n </nz-select>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <select class=\"form-select\" [multiple]=\"false\" [placeholder]=\"formConfiguration['Select.NullText']\" formControlName=\"{{_fields.field.name}}\" (change)=\"changeValue($event)\">\r\n <option [value]=\"''\">{{formConfiguration['Select.NullText']}}</option>\r\n <ng-container *ngFor=\"let item of _fields?.field?.formConfiguration['Select.Options'];let i =index\">\r\n <option [value]=\"item.Value\">{{item.Text}}</option>\r\n </ng-container>\r\n </select>\r\n </ng-template> -->\r\n <!-- <small class=\"form-text text-muted d-block\"\r\n *ngIf=\"_fields.field.description\">{{_fields.field.description}}</small> -->\r\n\r\n <nz-tree-select class=\"form-select dignite-form-select\" [nzMaxTagCount]=\"1\"\r\n nzShowSearch [nzMultiple]=\"_fields?.field?.formConfiguration?.['TreeView.Multiple'] || false\" \r\n formControlName=\"{{_fields.field.name}}\" [nzDropdownMatchSelectWidth]=\"true\" \r\n [nzDropdownClassName]=\"'dignite-form-select-dropdown'\" [nzNodes]=\"nodes\" \r\n nzDefaultExpandAll (ngModelChange)=\"onChange($event)\"></nz-tree-select>\r\n </div>\r\n\r\n </div>\r\n <button type=\"submit\" style=\"display: none;\" #submitclick></button>\r\n</form>", styles: ["::ng-deep .dignite-form-select.ant-select .ant-select-selector{background:transparent!important;border:none!important;padding:.475rem 1.25rem!important;box-shadow:none!important;height:auto!important;display:flex!important;align-items:center!important}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-search{margin-inline-start:0!important;display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-search .ant-select-selection-search-input{background-color:transparent!important}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow .ant-select-selection-overflow-item{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .ant-select-selector .ant-select-selection-overflow .ant-select-selection-overflow-item .ant-select-selection-item{display:flex;align-items:center}::ng-deep .dignite-form-select.ant-select .anticon-search,::ng-deep .dignite-form-select.ant-select .anticon-down{display:none}::ng-deep .dignite-form-select.ant-select .ant-select-arrow,::ng-deep .dignite-form-select.ant-select .ant-select-clear{right:36px!important}::ng-deep .dignite-form-select.ant-select .ant-select{color:inherit!important}::ng-deep .dignite-form-select.ant-select .ant-select-selection-placeholder{color:inherit!important}::ng-deep .dignite-form-select.ant-select.ant-select-multiple .ant-select-selection-item{max-width:60%!important}::ng-deep .dignite-form-select-dropdown{max-height:256px;overflow-y:auto}::ng-deep .dignite-form-select-dropdown .ant-select-dropdown{background:var(--bs-light)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode{padding:4px 0}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode .ant-select-tree-node-content-wrapper{padding:5px 8px;border-radius:4px;transition:all .3s;color:var(--bs-body-color)}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode .ant-select-tree-node-content-wrapper:hover{background-color:var(--bs-primary)!important;color:var(--bs-white)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-treenode.ant-select-tree-treenode-selected .ant-select-tree-node-content-wrapper{background-color:var(--lpx-brand)!important;color:var(--bs-white)!important}::ng-deep .dignite-form-select-dropdown .ant-select-tree .ant-select-tree-checkbox{margin-right:8px}\n"] }]
|
|
2333
2343
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { fields: [{
|
|
2334
2344
|
type: Input
|
|
2335
2345
|
}], parentFiledName: [{
|
|
@@ -2357,10 +2367,8 @@ class TreeViewComponent {
|
|
|
2357
2367
|
this._value = v;
|
|
2358
2368
|
}
|
|
2359
2369
|
async ngAfterContentInit() {
|
|
2360
|
-
//Called after ngOnInit when the component's or directive's content has been initialized.
|
|
2361
|
-
//Add 'implements AfterContentInit' to the class.
|
|
2362
2370
|
const valueOptions = this._value;
|
|
2363
|
-
if (this.type && valueOptions) {
|
|
2371
|
+
if (this.type && valueOptions !== null && valueOptions !== undefined) {
|
|
2364
2372
|
const nodes = this.fields?.field?.formConfiguration?.['TreeView.Nodes'] || [];
|
|
2365
2373
|
const findNodeByValue = (nodeList, val) => {
|
|
2366
2374
|
for (const node of nodeList) {
|