@alauda-fe/crd-form 0.0.1
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/alauda-fe-crd-form.mjs +5 -0
- package/esm2022/lib/abstract/base-array.mjs +117 -0
- package/esm2022/lib/crd-form/component.mjs +334 -0
- package/esm2022/lib/crd-form/helper.mjs +32 -0
- package/esm2022/lib/crd-form.module.mjs +117 -0
- package/esm2022/lib/field-controls/expressions/expression-core.mjs +2 -0
- package/esm2022/lib/field-controls/expressions/props-expression.mjs +58 -0
- package/esm2022/lib/field-controls/form-item.component.mjs +121 -0
- package/esm2022/lib/field-controls/index.mjs +8 -0
- package/esm2022/lib/field-controls/module.mjs +141 -0
- package/esm2022/lib/field-controls/operand-advanced-field-group.component.mjs +80 -0
- package/esm2022/lib/field-controls/operand-array-field-group.component.mjs +112 -0
- package/esm2022/lib/field-controls/operand-field-group.component.mjs +98 -0
- package/esm2022/lib/field-controls/operand-field.component.mjs +870 -0
- package/esm2022/lib/field-controls/widgets/array-table/component.mjs +109 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/component.mjs +116 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/create/component.mjs +211 -0
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/type.mjs +2 -0
- package/esm2022/lib/field-controls/widgets/index.mjs +8 -0
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/component.mjs +169 -0
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/util.mjs +40 -0
- package/esm2022/lib/field-controls/widgets/link/component.mjs +68 -0
- package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs +524 -0
- package/esm2022/lib/field-controls/widgets/utils.mjs +73 -0
- package/esm2022/lib/field-controls/widgets/yaml-editor/yaml-editor.component.mjs +94 -0
- package/esm2022/lib/field-widgets/htpasswd/component.mjs +35 -0
- package/esm2022/lib/field-widgets/htpasswd/form.mjs +171 -0
- package/esm2022/lib/field-widgets/htpasswd/index.mjs +4 -0
- package/esm2022/lib/field-widgets/htpasswd/module.mjs +54 -0
- package/esm2022/lib/field-widgets/index.mjs +2 -0
- package/esm2022/lib/remote-widgets/constants.mjs +4 -0
- package/esm2022/lib/remote-widgets/index.mjs +4 -0
- package/esm2022/lib/remote-widgets/remote-widget.service.mjs +42 -0
- package/esm2022/lib/remote-widgets/token.mjs +7 -0
- package/esm2022/lib/spec-descriptors/capability/capability.component.mjs +139 -0
- package/esm2022/lib/spec-descriptors/capability-list/capability-list.component.mjs +189 -0
- package/esm2022/lib/spec-descriptors/index.mjs +4 -0
- package/esm2022/lib/spec-descriptors/util.mjs +13 -0
- package/esm2022/lib/types/index.mjs +73 -0
- package/esm2022/lib/utils/capability.mjs +295 -0
- package/esm2022/lib/utils/constant.mjs +22 -0
- package/esm2022/lib/utils/directives.mjs +19 -0
- package/esm2022/lib/utils/helper.mjs +201 -0
- package/esm2022/lib/utils/index.mjs +7 -0
- package/esm2022/lib/utils/service-model.mjs +12 -0
- package/esm2022/lib/utils/util.mjs +310 -0
- package/esm2022/public-api.mjs +13 -0
- package/index.d.ts +5 -0
- package/lib/abstract/base-array.d.ts +31 -0
- package/lib/crd-form/component.d.ts +61 -0
- package/lib/crd-form/helper.d.ts +7 -0
- package/lib/crd-form.module.d.ts +16 -0
- package/lib/field-controls/expressions/expression-core.d.ts +6 -0
- package/lib/field-controls/expressions/props-expression.d.ts +36 -0
- package/lib/field-controls/form-item.component.d.ts +11 -0
- package/lib/field-controls/index.d.ts +7 -0
- package/lib/field-controls/module.d.ts +23 -0
- package/lib/field-controls/operand-advanced-field-group.component.d.ts +16 -0
- package/lib/field-controls/operand-array-field-group.component.d.ts +8 -0
- package/lib/field-controls/operand-field-group.component.d.ts +24 -0
- package/lib/field-controls/operand-field.component.d.ts +110 -0
- package/lib/field-controls/widgets/array-table/component.d.ts +8 -0
- package/lib/field-controls/widgets/basic-auth-secret/component.d.ts +26 -0
- package/lib/field-controls/widgets/basic-auth-secret/create/component.d.ts +45 -0
- package/lib/field-controls/widgets/basic-auth-secret/type.d.ts +11 -0
- package/lib/field-controls/widgets/index.d.ts +7 -0
- package/lib/field-controls/widgets/k8s-resource-prefix/component.d.ts +35 -0
- package/lib/field-controls/widgets/k8s-resource-prefix/util.d.ts +3 -0
- package/lib/field-controls/widgets/link/component.d.ts +20 -0
- package/lib/field-controls/widgets/resource-requirements/resource-requirements.component.d.ts +88 -0
- package/lib/field-controls/widgets/utils.d.ts +17 -0
- package/lib/field-controls/widgets/yaml-editor/yaml-editor.component.d.ts +36 -0
- package/lib/field-widgets/htpasswd/component.d.ts +9 -0
- package/lib/field-widgets/htpasswd/form.d.ts +32 -0
- package/lib/field-widgets/htpasswd/index.d.ts +3 -0
- package/lib/field-widgets/htpasswd/module.d.ts +13 -0
- package/lib/field-widgets/index.d.ts +1 -0
- package/lib/remote-widgets/constants.d.ts +3 -0
- package/lib/remote-widgets/index.d.ts +3 -0
- package/lib/remote-widgets/remote-widget.service.d.ts +28 -0
- package/lib/remote-widgets/token.d.ts +3 -0
- package/lib/spec-descriptors/capability/capability.component.d.ts +20 -0
- package/lib/spec-descriptors/capability-list/capability-list.component.d.ts +34 -0
- package/lib/spec-descriptors/index.d.ts +3 -0
- package/lib/spec-descriptors/util.d.ts +4 -0
- package/lib/types/index.d.ts +122 -0
- package/lib/utils/capability.d.ts +54 -0
- package/lib/utils/constant.d.ts +12 -0
- package/lib/utils/directives.d.ts +9 -0
- package/lib/utils/helper.d.ts +61 -0
- package/lib/utils/index.d.ts +6 -0
- package/lib/utils/service-model.d.ts +44 -0
- package/lib/utils/util.d.ts +48 -0
- package/package.json +30 -0
- package/public-api.d.ts +9 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhdWRhLWZlLWNyZC1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9jcmQtZm9ybS9zcmMvYWxhdWRhLWZlLWNyZC1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Directive, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
+
import { last } from 'lodash-es';
|
|
3
|
+
import { CrdFormComponent } from '../crd-form/component';
|
|
4
|
+
import { Validations, } from '../types';
|
|
5
|
+
import { getFieldDisplayName, getFormData, modifyArrayFieldPathIndex, } from '../utils';
|
|
6
|
+
import { isFolded, repairFieldChildPathByCorrectIndex } from '../utils/helper';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../crd-form/component";
|
|
9
|
+
export class BaseOperandFiledArrayComponent {
|
|
10
|
+
get expanded() {
|
|
11
|
+
return this._expanded ?? !isFolded(this.arrayFieldGroup);
|
|
12
|
+
}
|
|
13
|
+
set expanded(expanded) {
|
|
14
|
+
this._expanded = expanded;
|
|
15
|
+
}
|
|
16
|
+
constructor(crdForm) {
|
|
17
|
+
this.crdForm = crdForm;
|
|
18
|
+
this.readonly = false;
|
|
19
|
+
this.valueChange = new EventEmitter();
|
|
20
|
+
this.itemRemove = new EventEmitter();
|
|
21
|
+
this.getFieldDisplayName = getFieldDisplayName;
|
|
22
|
+
}
|
|
23
|
+
ngOnChanges({ arrayFieldGroup, formDataState }) {
|
|
24
|
+
if (!this.basicArrayFieldTemplate &&
|
|
25
|
+
arrayFieldGroup.currentValue?.fieldLists?.length > 0) {
|
|
26
|
+
this.basicArrayFieldTemplate = last(arrayFieldGroup.currentValue.fieldLists);
|
|
27
|
+
}
|
|
28
|
+
if (formDataState?.currentValue && formDataState?.previousValue) {
|
|
29
|
+
const currValue = getFormData(formDataState.currentValue, this.arrayFieldGroup.path);
|
|
30
|
+
const arrayFieldLength = this.arrayFieldGroup.fieldLists?.length;
|
|
31
|
+
if (currValue?.size > arrayFieldLength) {
|
|
32
|
+
Array.from({ length: currValue.size - arrayFieldLength }).forEach(() => {
|
|
33
|
+
this.addItem();
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
fieldValueChange(e) {
|
|
39
|
+
this.valueChange.emit(e);
|
|
40
|
+
}
|
|
41
|
+
addItem() {
|
|
42
|
+
const newFields = this.basicArrayFieldTemplate.map(field => {
|
|
43
|
+
const toPath = modifyArrayFieldPathIndex(field.path, () => this.arrayFieldGroup.fieldLists.length);
|
|
44
|
+
return {
|
|
45
|
+
...repairFieldChildPathByCorrectIndex(field, field.path, toPath),
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
this.arrayFieldGroup.fieldLists = [
|
|
49
|
+
...this.arrayFieldGroup.fieldLists,
|
|
50
|
+
newFields,
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
removeItem(index) {
|
|
54
|
+
const groupToRemove = this.arrayFieldGroup.fieldLists[index];
|
|
55
|
+
const groupUntouched = this.arrayFieldGroup.fieldLists.filter((_, idx) => idx < index);
|
|
56
|
+
const groupToLeftShift = this.arrayFieldGroup.fieldLists.filter((_, idx) => idx > index);
|
|
57
|
+
const leftShiftedGroups = groupToLeftShift.map(group => group.map(field => {
|
|
58
|
+
const toPath = modifyArrayFieldPathIndex(field.path, idx => idx - 1);
|
|
59
|
+
return {
|
|
60
|
+
...repairFieldChildPathByCorrectIndex(field, field.path, toPath),
|
|
61
|
+
};
|
|
62
|
+
}));
|
|
63
|
+
this.arrayFieldGroup.fieldLists = [...groupUntouched, ...leftShiftedGroups];
|
|
64
|
+
const [match, formDataPathToRemove] =
|
|
65
|
+
// eslint-disable-next-line regexp/strict
|
|
66
|
+
/^(.*\[\d+]).*$/.exec(groupToRemove?.[0].path) || [];
|
|
67
|
+
if (match) {
|
|
68
|
+
this.itemRemove.next(formDataPathToRemove);
|
|
69
|
+
}
|
|
70
|
+
this.crdForm.controlMap.forEach((_, key) => {
|
|
71
|
+
if (key.startsWith(`${this.arrayFieldGroup.path}[${this.arrayFieldGroup.fieldLists.length}]`)) {
|
|
72
|
+
this.crdForm.controlMap.delete(key);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
this.crdForm.refreshValidation();
|
|
76
|
+
this.deleteFormData(`${this.arrayFieldGroup.path}[${index}]`);
|
|
77
|
+
}
|
|
78
|
+
deleteFormData(path) {
|
|
79
|
+
this.valueChange.next({
|
|
80
|
+
field: {
|
|
81
|
+
...this.arrayFieldGroup,
|
|
82
|
+
path,
|
|
83
|
+
},
|
|
84
|
+
data: null,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
fieldIsRequired(field) {
|
|
88
|
+
return (field?.required ||
|
|
89
|
+
Object.keys(field?.validations || {})?.includes(Validations.required));
|
|
90
|
+
}
|
|
91
|
+
get columnFields() {
|
|
92
|
+
return this.basicArrayFieldTemplate;
|
|
93
|
+
}
|
|
94
|
+
trackByFn(index) {
|
|
95
|
+
return index;
|
|
96
|
+
}
|
|
97
|
+
static { this.ɵfac = function BaseOperandFiledArrayComponent_Factory(t) { return new (t || BaseOperandFiledArrayComponent)(i0.ɵɵdirectiveInject(i1.CrdFormComponent)); }; }
|
|
98
|
+
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: BaseOperandFiledArrayComponent, inputs: { arrayFieldGroup: "arrayFieldGroup", formDataState: "formDataState", formErrors: "formErrors", isArrayTable: "isArrayTable", readonly: "readonly" }, outputs: { valueChange: "valueChange", itemRemove: "itemRemove" }, features: [i0.ɵɵNgOnChangesFeature] }); }
|
|
99
|
+
}
|
|
100
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseOperandFiledArrayComponent, [{
|
|
101
|
+
type: Directive
|
|
102
|
+
}], () => [{ type: i1.CrdFormComponent }], { arrayFieldGroup: [{
|
|
103
|
+
type: Input
|
|
104
|
+
}], formDataState: [{
|
|
105
|
+
type: Input
|
|
106
|
+
}], formErrors: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], isArrayTable: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}], readonly: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], valueChange: [{
|
|
113
|
+
type: Output
|
|
114
|
+
}], itemRemove: [{
|
|
115
|
+
type: Output
|
|
116
|
+
}] }); })();
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hcnJheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3JkLWZvcm0vc3JjL2xpYi9hYnN0cmFjdC9iYXNlLWFycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBTUwsV0FBVyxHQUNaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLHlCQUF5QixHQUMxQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsUUFBUSxFQUFFLGtDQUFrQyxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUcvRSxNQUFNLE9BQU8sOEJBQThCO0lBWXpDLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLFFBQWlCO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzVCLENBQUM7SUFNRCxZQUE0QixPQUF5QjtRQUF6QixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQW5CNUMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVoQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFjMUMsd0JBQW1CLEdBQUcsbUJBQW1CLENBQUM7SUFFYyxDQUFDO0lBRXpELFdBQVcsQ0FBQyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWlCO1FBQzNELElB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QUFLLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQ3RFLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzsrRkF2SVUsOEJBQThCO29FQUE5Qiw4QkFBOEI7O2lGQUE5Qiw4QkFBOEI7Y0FEMUMsU0FBUztpREFFQyxlQUFlO2tCQUF2QixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUVJLFdBQVc7a0JBQXBCLE1BQU07WUFDRyxVQUFVO2tCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBsYXN0IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgQ3JkRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2NyZC1mb3JtL2NvbXBvbmVudCc7XG5pbXBvcnQge1xuICBGaWVsZFZhbHVlQ2hhbmdlRXZlbnQsXG4gIEZvcm1EYXRhU3RhdGUsXG4gIEZvcm1FcnJvcnMsXG4gIE9wZXJhbmRBcnJheUZpZWxkR3JvdXAsXG4gIE9wZXJhbmRGaWVsZCxcbiAgVmFsaWRhdGlvbnMsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIGdldEZpZWxkRGlzcGxheU5hbWUsXG4gIGdldEZvcm1EYXRhLFxuICBtb2RpZnlBcnJheUZpZWxkUGF0aEluZGV4LFxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBpc0ZvbGRlZCwgcmVwYWlyRmllbGRDaGlsZFBhdGhCeUNvcnJlY3RJbmRleCB9IGZyb20gJy4uL3V0aWxzL2hlbHBlcic7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIEJhc2VPcGVyYW5kRmlsZWRBcnJheUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGFycmF5RmllbGRHcm91cDogT3BlcmFuZEFycmF5RmllbGRHcm91cDtcbiAgQElucHV0KCkgZm9ybURhdGFTdGF0ZTogRm9ybURhdGFTdGF0ZTtcbiAgQElucHV0KCkgZm9ybUVycm9yczogRm9ybUVycm9ycztcbiAgQElucHV0KCkgaXNBcnJheVRhYmxlOiBib29sZWFuO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGl0ZW1SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBfZXhwYW5kZWQ6IGJvb2xlYW47XG5cbiAgZ2V0IGV4cGFuZGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9leHBhbmRlZCA/PyAhaXNGb2xkZWQodGhpcy5hcnJheUZpZWxkR3JvdXApO1xuICB9XG5cbiAgc2V0IGV4cGFuZGVkKGV4cGFuZGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZXhwYW5kZWQgPSBleHBhbmRlZDtcbiAgfVxuXG4gIGJhc2ljQXJyYXlGaWVsZFRlbXBsYXRlOiBPcGVyYW5kRmllbGRbXTtcblxuICBnZXRGaWVsZERpc3BsYXlOYW1lID0gZ2V0RmllbGREaXNwbGF5TmFtZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY3JkRm9ybTogQ3JkRm9ybUNvbXBvbmVudCkge31cblxuICBuZ09uQ2hhbmdlcyh7IGFycmF5RmllbGRHcm91cCwgZm9ybURhdGFTdGF0ZSB9OiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuYmFzaWNBcnJheUZpZWxkVGVtcGxhdGUgJiZcbiAgICAgIGFycmF5RmllbGRHcm91cC5jdXJyZW50VmFsdWU/LmZpZWxkTGlzdHM/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuYmFzaWNBcnJheUZpZWxkVGVtcGxhdGUgPSBsYXN0KFxuICAgICAgICBhcnJheUZpZWxkR3JvdXAuY3VycmVudFZhbHVlLmZpZWxkTGlzdHMsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZm9ybURhdGFTdGF0ZT8uY3VycmVudFZhbHVlICYmIGZvcm1EYXRhU3RhdGU/LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIGNvbnN0IGN1cnJWYWx1ZSA9IGdldEZvcm1EYXRhKFxuICAgICAgICBmb3JtRGF0YVN0YXRlLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgdGhpcy5hcnJheUZpZWxkR3JvdXAucGF0aCxcbiAgICAgICk7XG4gICAgICBjb25zdCBhcnJheUZpZWxkTGVuZ3RoID0gdGhpcy5hcnJheUZpZWxkR3JvdXAuZmllbGRMaXN0cz8ubGVuZ3RoO1xuICAgICAgaWYgKGN1cnJWYWx1ZT8uc2l6ZSA+IGFycmF5RmllbGRMZW5ndGgpIHtcbiAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogY3VyclZhbHVlLnNpemUgLSBhcnJheUZpZWxkTGVuZ3RoIH0pLmZvckVhY2goXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRJdGVtKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaWVsZFZhbHVlQ2hhbmdlKGU6IEZpZWxkVmFsdWVDaGFuZ2VFdmVudCkge1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChlKTtcbiAgfVxuXG4gIGFkZEl0ZW0oKSB7XG4gICAgY29uc3QgbmV3RmllbGRzID0gdGhpcy5iYXNpY0FycmF5RmllbGRUZW1wbGF0ZS5tYXAoZmllbGQgPT4ge1xuICAgICAgY29uc3QgdG9QYXRoID0gbW9kaWZ5QXJyYXlGaWVsZFBhdGhJbmRleChcbiAgICAgICAgZmllbGQucGF0aCxcbiAgICAgICAgKCkgPT4gdGhpcy5hcnJheUZpZWxkR3JvdXAuZmllbGRMaXN0cy5sZW5ndGgsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucmVwYWlyRmllbGRDaGlsZFBhdGhCeUNvcnJlY3RJbmRleChmaWVsZCwgZmllbGQucGF0aCwgdG9QYXRoKSxcbiAgICAgIH0gYXMgT3BlcmFuZEZpZWxkO1xuICAgIH0pO1xuICAgIHRoaXMuYXJyYXlGaWVsZEdyb3VwLmZpZWxkTGlzdHMgPSBbXG4gICAgICAuLi50aGlzLmFycmF5RmllbGRHcm91cC5maWVsZExpc3RzLFxuICAgICAgbmV3RmllbGRzLFxuICAgIF07XG4gIH1cblxuICByZW1vdmVJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBncm91cFRvUmVtb3ZlID0gdGhpcy5hcnJheUZpZWxkR3JvdXAuZmllbGRMaXN0c1tpbmRleF07XG4gICAgY29uc3QgZ3JvdXBVbnRvdWNoZWQgPSB0aGlzLmFycmF5RmllbGRHcm91cC5maWVsZExpc3RzLmZpbHRlcihcbiAgICAgIChfLCBpZHgpID0+IGlkeCA8IGluZGV4LFxuICAgICk7XG4gICAgY29uc3QgZ3JvdXBUb0xlZnRTaGlmdCA9IHRoaXMuYXJyYXlGaWVsZEdyb3VwLmZpZWxkTGlzdHMuZmlsdGVyKFxuICAgICAgKF8sIGlkeCkgPT4gaWR4ID4gaW5kZXgsXG4gICAgKTtcblxuICAgIGNvbnN0IGxlZnRTaGlmdGVkR3JvdXBzID0gZ3JvdXBUb0xlZnRTaGlmdC5tYXAoZ3JvdXAgPT5cbiAgICAgIGdyb3VwLm1hcChmaWVsZCA9PiB7XG4gICAgICAgIGNvbnN0IHRvUGF0aCA9IG1vZGlmeUFycmF5RmllbGRQYXRoSW5kZXgoZmllbGQucGF0aCwgaWR4ID0+IGlkeCAtIDEpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJlcGFpckZpZWxkQ2hpbGRQYXRoQnlDb3JyZWN0SW5kZXgoZmllbGQsIGZpZWxkLnBhdGgsIHRvUGF0aCksXG4gICAgICAgIH0gYXMgT3BlcmFuZEZpZWxkO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuYXJyYXlGaWVsZEdyb3VwLmZpZWxkTGlzdHMgPSBbLi4uZ3JvdXBVbnRvdWNoZWQsIC4uLmxlZnRTaGlmdGVkR3JvdXBzXTtcblxuICAgIGNvbnN0IFttYXRjaCwgZm9ybURhdGFQYXRoVG9SZW1vdmVdID1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG4gICAgICAvXiguKlxcW1xcZCtdKS4qJC8uZXhlYyhncm91cFRvUmVtb3ZlPy5bMF0ucGF0aCkgfHwgW107XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB0aGlzLml0ZW1SZW1vdmUubmV4dChmb3JtRGF0YVBhdGhUb1JlbW92ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jcmRGb3JtLmNvbnRyb2xNYXAuZm9yRWFjaCgoXywga2V5KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGtleS5zdGFydHNXaXRoKFxuICAgICAgICAgIGAke3RoaXMuYXJyYXlGaWVsZEdyb3VwLnBhdGh9WyR7dGhpcy5hcnJheUZpZWxkR3JvdXAuZmllbGRMaXN0cy5sZW5ndGh9XWAsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNyZEZvcm0uY29udHJvbE1hcC5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNyZEZvcm0ucmVmcmVzaFZhbGlkYXRpb24oKTtcblxuICAgIHRoaXMuZGVsZXRlRm9ybURhdGEoYCR7dGhpcy5hcnJheUZpZWxkR3JvdXAucGF0aH1bJHtpbmRleH1dYCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUZvcm1EYXRhKHBhdGg6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWVDaGFuZ2UubmV4dCh7XG4gICAgICBmaWVsZDoge1xuICAgICAgICAuLi50aGlzLmFycmF5RmllbGRHcm91cCxcbiAgICAgICAgcGF0aCxcbiAgICAgIH0sXG4gICAgICBkYXRhOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgZmllbGRJc1JlcXVpcmVkKGZpZWxkOiBPcGVyYW5kRmllbGQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgZmllbGQ/LnJlcXVpcmVkIHx8XG4gICAgICBPYmplY3Qua2V5cyhmaWVsZD8udmFsaWRhdGlvbnMgfHwge30pPy5pbmNsdWRlcyhWYWxpZGF0aW9ucy5yZXF1aXJlZClcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNvbHVtbkZpZWxkcygpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNpY0FycmF5RmllbGRUZW1wbGF0ZTtcbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { LabelPosition } from '@alauda/ui';
|
|
3
|
+
import { ObservableInput, } from '@alauda-fe/common';
|
|
4
|
+
import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Output, QueryList, ViewChild, } from '@angular/core';
|
|
5
|
+
import { NgForm } from '@angular/forms';
|
|
6
|
+
import { List, Map as $Map, fromJS } from 'immutable';
|
|
7
|
+
import { flattenDeep, fromPairs, isEmpty, uniq } from 'lodash-es';
|
|
8
|
+
import { Observable } from 'rxjs';
|
|
9
|
+
import { RemoteWidgetsService } from '../remote-widgets';
|
|
10
|
+
import { SpecCapability, } from '../types';
|
|
11
|
+
import { CrdFormCustomDescriptionDirective, parseArrayPath, SCHEMA_PATH, createCapabilityField, normalizePath, pathToArray, getCustomDescription, getOperandPath, getPathFromTagPath, getFieldsByPath, fieldShouldReveal, getDefaultValue, } from '../utils';
|
|
12
|
+
import { differPathsTag, getAllOtherTagPath, matchValueAgainstOneOf, } from './helper';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "../remote-widgets";
|
|
15
|
+
const _c0 = ["form"];
|
|
16
|
+
function CrdFormComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
17
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
18
|
+
i0.ɵɵelementContainerStart(0);
|
|
19
|
+
i0.ɵɵelementStart(1, "acl-operand-field", 4);
|
|
20
|
+
i0.ɵɵpipe(2, "pure");
|
|
21
|
+
i0.ɵɵpipe(3, "async");
|
|
22
|
+
i0.ɵɵlistener("valueChange", function CrdFormComponent_ng_container_2_Template_acl_operand_field_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.fieldValueChange($event)); });
|
|
23
|
+
i0.ɵɵelementEnd();
|
|
24
|
+
i0.ɵɵelementContainerEnd();
|
|
25
|
+
} if (rf & 2) {
|
|
26
|
+
const field_r3 = ctx.$implicit;
|
|
27
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
28
|
+
i0.ɵɵadvance();
|
|
29
|
+
i0.ɵɵproperty("fields", ctx_r1.fields)("field", field_r3)("formDataState", ctx_r1.formDataState)("readonly", ctx_r1.readonly)("customDescription", i0.ɵɵpipeBind3(2, 6, ctx_r1.customDescriptions, ctx_r1.getCustomDescription, field_r3))("remoteModuleDefinition", i0.ɵɵpipeBind1(3, 10, ctx_r1.remoteModuleDefinition$));
|
|
30
|
+
} }
|
|
31
|
+
function CrdFormComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
33
|
+
i0.ɵɵelementContainerStart(0);
|
|
34
|
+
i0.ɵɵelementStart(1, "acl-operand-field-group", 5);
|
|
35
|
+
i0.ɵɵlistener("valueChange", function CrdFormComponent_ng_container_3_Template_acl_operand_field_group_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.fieldValueChange($event)); });
|
|
36
|
+
i0.ɵɵelementEnd();
|
|
37
|
+
i0.ɵɵelementContainerEnd();
|
|
38
|
+
} if (rf & 2) {
|
|
39
|
+
const group_r5 = ctx.$implicit;
|
|
40
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
41
|
+
i0.ɵɵadvance();
|
|
42
|
+
i0.ɵɵproperty("fields", ctx_r1.fields)("fieldGroup", group_r5)("formDataState", ctx_r1.formDataState)("formErrors", ctx_r1.formErrors)("readonly", ctx_r1.readonly)("customDescriptions", ctx_r1.customDescriptions);
|
|
43
|
+
} }
|
|
44
|
+
function CrdFormComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
46
|
+
i0.ɵɵelementContainerStart(0);
|
|
47
|
+
i0.ɵɵelementStart(1, "acl-operand-array-field-group", 6);
|
|
48
|
+
i0.ɵɵlistener("valueChange", function CrdFormComponent_ng_container_4_Template_acl_operand_array_field_group_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.fieldValueChange($event)); })("itemRemove", function CrdFormComponent_ng_container_4_Template_acl_operand_array_field_group_itemRemove_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.deleteFormData($event)); });
|
|
49
|
+
i0.ɵɵelementEnd();
|
|
50
|
+
i0.ɵɵelementContainerEnd();
|
|
51
|
+
} if (rf & 2) {
|
|
52
|
+
const group_r7 = ctx.$implicit;
|
|
53
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
54
|
+
i0.ɵɵadvance();
|
|
55
|
+
i0.ɵɵproperty("arrayFieldGroup", group_r7)("formDataState", ctx_r1.formDataState)("readonly", ctx_r1.readonly);
|
|
56
|
+
} }
|
|
57
|
+
function CrdFormComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
59
|
+
i0.ɵɵelementContainerStart(0);
|
|
60
|
+
i0.ɵɵelementStart(1, "acl-operand-advanced-field-group", 7);
|
|
61
|
+
i0.ɵɵlistener("valueChange", function CrdFormComponent_ng_container_5_Template_acl_operand_advanced_field_group_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.fieldValueChange($event)); });
|
|
62
|
+
i0.ɵɵelementEnd();
|
|
63
|
+
i0.ɵɵelementContainerEnd();
|
|
64
|
+
} if (rf & 2) {
|
|
65
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
66
|
+
i0.ɵɵadvance();
|
|
67
|
+
i0.ɵɵproperty("fields", ctx_r1.fields)("fieldList", ctx_r1.advancedFields)("formDataState", ctx_r1.formDataState)("readonly", ctx_r1.readonly);
|
|
68
|
+
} }
|
|
69
|
+
export class CrdFormComponent {
|
|
70
|
+
constructor(rws) {
|
|
71
|
+
this.rws = rws;
|
|
72
|
+
this.debug = false;
|
|
73
|
+
this.openApiSchemaPath = SCHEMA_PATH;
|
|
74
|
+
this.readonly = false;
|
|
75
|
+
this.labelPosition = LabelPosition.Right;
|
|
76
|
+
this.formStateChange = new EventEmitter();
|
|
77
|
+
this.formSchemaChange = new EventEmitter();
|
|
78
|
+
this.formErrors = {};
|
|
79
|
+
// 一个全局的 controlMap,方便控制 field 主动校验。
|
|
80
|
+
// 该 controlMap 以及所有 field 里的 control 实例,都是为了数据追踪与错误同步(control.error -> crdForm error),本身不影响提交,由 crd-form 的 error 去阻塞提交。
|
|
81
|
+
this.controlMap = new Map();
|
|
82
|
+
this.remoteModuleDefinition$ = this.rws.remoteModule$;
|
|
83
|
+
this.getCustomDescription = getCustomDescription;
|
|
84
|
+
// 被隐藏起来的表单的路径集合
|
|
85
|
+
this.dirtyPathsSet = new Set();
|
|
86
|
+
}
|
|
87
|
+
ngOnChanges({ openApiSchema, descriptors, data }) {
|
|
88
|
+
if (openApiSchema?.currentValue || descriptors?.currentValue) {
|
|
89
|
+
this.setUpForm();
|
|
90
|
+
}
|
|
91
|
+
else if (data?.currentValue) {
|
|
92
|
+
this.formDataState = fromJS(data.currentValue);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
setUpForm() {
|
|
96
|
+
this.formDataState = fromJS(this.data || {});
|
|
97
|
+
const { normalFields, fieldGroups, arrayFieldGroups, advancedFields, descriptorFields, openApiFields, basicFields, } = createCapabilityField(this.descriptors || [], this.openApiSchema || {}, this.data, this.openApiSchemaPath);
|
|
98
|
+
this.fields = basicFields.filter(fieldShouldReveal);
|
|
99
|
+
if (this.debug) {
|
|
100
|
+
/* eslint-disable no-console */
|
|
101
|
+
console.info('openApiFields:', openApiFields);
|
|
102
|
+
console.info('descriptorFields:', descriptorFields);
|
|
103
|
+
console.info('basicFields:', basicFields);
|
|
104
|
+
console.info('normalFields', normalFields);
|
|
105
|
+
console.info('fieldGroups:', fieldGroups);
|
|
106
|
+
console.info('arrayFieldGroups:', arrayFieldGroups);
|
|
107
|
+
console.info('advancedFields:', advancedFields);
|
|
108
|
+
/* eslint-enable no-console */
|
|
109
|
+
}
|
|
110
|
+
this.normalFields = normalFields;
|
|
111
|
+
this.fieldGroups = fieldGroups;
|
|
112
|
+
this.arrayFieldGroups = arrayFieldGroups;
|
|
113
|
+
this.advancedFields = advancedFields;
|
|
114
|
+
this.formSchemaChange.emit({
|
|
115
|
+
openApiFields,
|
|
116
|
+
descriptorFields,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
fieldValueChange(event) {
|
|
120
|
+
let onceDirtyPathsSet = new Set();
|
|
121
|
+
// TODO: 待review确认后移除该开关
|
|
122
|
+
if (this.formContext?.gates?.includes('onceDirtyPathsSet')) {
|
|
123
|
+
const operandPath = getOperandPath(event.field);
|
|
124
|
+
// 如果表单被隐藏且这次change是因为直接改变了包含该路径的父路径的值(例如编辑yaml)
|
|
125
|
+
// 那就阻止此子路径值的change逻辑
|
|
126
|
+
if (this.dirtyPathsSet.has(operandPath) &&
|
|
127
|
+
this._lastUpdateField?.path &&
|
|
128
|
+
operandPath.startsWith(`${this._lastUpdateField.path}.`)) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
onceDirtyPathsSet = this.dirtyPathsSet;
|
|
134
|
+
}
|
|
135
|
+
const eventData = event.data;
|
|
136
|
+
if (event.field.capabilities.some(c => c.startsWith(SpecCapability.oneOf))) {
|
|
137
|
+
const { dirtyPaths, validPaths } = this.resolveExpiredPath(event.field, eventData);
|
|
138
|
+
dirtyPaths.forEach(path => {
|
|
139
|
+
this.dirtyPathsSet.add(normalizePath(path));
|
|
140
|
+
onceDirtyPathsSet.add(normalizePath(path));
|
|
141
|
+
});
|
|
142
|
+
validPaths.forEach(path => {
|
|
143
|
+
this.updateValidPathValue(path);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
const allOtherPaths = getAllOtherTagPath(this.fields, Array.from(onceDirtyPathsSet));
|
|
147
|
+
const removedPaths = uniq(
|
|
148
|
+
// 同一 path 可能有多个 tag,假设某个 tagged path 有效,则其对应 path 数据不应该删除
|
|
149
|
+
differPathsTag(Array.from(onceDirtyPathsSet), allOtherPaths).map(path => getPathFromTagPath(path))).filter(
|
|
150
|
+
// 只清空叶子结点,以适配 yaml 情况
|
|
151
|
+
path => !this.fields.some(field => {
|
|
152
|
+
const isParentPath = field.path.startsWith(`${path}.`);
|
|
153
|
+
if (isParentPath) {
|
|
154
|
+
// 该 field 亦为 dirty,不以为依据
|
|
155
|
+
return !onceDirtyPathsSet.has(field.path);
|
|
156
|
+
}
|
|
157
|
+
return false;
|
|
158
|
+
}));
|
|
159
|
+
if (eventData == null && !this.keepEmptyPath) {
|
|
160
|
+
if (!onceDirtyPathsSet.has(getOperandPath(event.field))) {
|
|
161
|
+
this.deleteFormData(event.field.path);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
this.updateFormData(event.field, eventData);
|
|
166
|
+
}
|
|
167
|
+
removedPaths.forEach(path => {
|
|
168
|
+
this.deleteFormData(path);
|
|
169
|
+
});
|
|
170
|
+
this.refreshValidation();
|
|
171
|
+
this.formStateChange.emit({
|
|
172
|
+
data: this.formDataState.toJS(),
|
|
173
|
+
errors: this.formErrors,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
deleteFormData(path) {
|
|
177
|
+
this.formDataState = this.formDataState.deleteIn(pathToArray(path));
|
|
178
|
+
this.controlMap.get(path)?.setValue(null);
|
|
179
|
+
this.formStateChange.emit({
|
|
180
|
+
data: this.formDataState.toJS(),
|
|
181
|
+
errors: this.formErrors,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
updateValidPathValue(path) {
|
|
185
|
+
// 如果有效路径是上一次的无效路径,则意味着该路径的值在上次被重置了,所以当该路径又需要显示给用户时应该使用默认值
|
|
186
|
+
const useDefault = this.dirtyPathsSet.has(normalizePath(path));
|
|
187
|
+
this.dirtyPathsSet.delete(normalizePath(path));
|
|
188
|
+
// 如果对一组表单都有依赖,那路径可能是这组表单的父路径,所以需要把所有子孙都找出来
|
|
189
|
+
const fields = getFieldsByPath(path, [
|
|
190
|
+
...this.normalFields,
|
|
191
|
+
...flattenDeep(this.fieldGroups.map(group => group.fieldList)),
|
|
192
|
+
...flattenDeep(this.arrayFieldGroups.map(arrayGroup => arrayGroup.fieldLists)),
|
|
193
|
+
...this.advancedFields,
|
|
194
|
+
]);
|
|
195
|
+
fields.forEach(field => {
|
|
196
|
+
// 理论上 oneof 只影响视图,但实际还会影响 formDataState,所以需要同步更新 formDataState
|
|
197
|
+
let value = this.controlMap.get(getOperandPath(field)).value;
|
|
198
|
+
if (!value && useDefault) {
|
|
199
|
+
value = getDefaultValue(field);
|
|
200
|
+
}
|
|
201
|
+
this.updateFormData(field, value);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
updateFormData(field, data) {
|
|
205
|
+
if (!field)
|
|
206
|
+
return;
|
|
207
|
+
const { match, index, pathBeforeIndex, pathAfterIndex } = parseArrayPath(field.path);
|
|
208
|
+
if (match && index === 0) {
|
|
209
|
+
this.formDataState = this.initializeFormDataArrayProperty(this.formDataState, pathBeforeIndex, pathAfterIndex, data);
|
|
210
|
+
}
|
|
211
|
+
this.formDataState = this.formDataState.setIn(pathToArray(field.path), data);
|
|
212
|
+
this._lastUpdateField = field;
|
|
213
|
+
}
|
|
214
|
+
refreshValidation() {
|
|
215
|
+
const errors = Array.from(this.controlMap).reduce((acc, [pathWithTag, control]) => {
|
|
216
|
+
if (this.dirtyPathsSet.has(pathWithTag)) {
|
|
217
|
+
return acc;
|
|
218
|
+
}
|
|
219
|
+
const path = getPathFromTagPath(pathWithTag);
|
|
220
|
+
acc[path] = isEmpty(control.errors) ? null : control.errors;
|
|
221
|
+
return acc;
|
|
222
|
+
}, {});
|
|
223
|
+
const result = fromPairs(Object.entries(errors ?? {}).filter(([_k, v]) => !!v));
|
|
224
|
+
this.formErrors = isEmpty(result) ? null : result;
|
|
225
|
+
}
|
|
226
|
+
// 当某个 field 发生数据变化,返回其相关 oneOf path 是否应该移除
|
|
227
|
+
// 仅当当前 field 中 oneOf 条件与当前数据不匹配,
|
|
228
|
+
resolveExpiredPath(field, currentValue) {
|
|
229
|
+
const { dirtyPaths, validPaths } = matchValueAgainstOneOf(field, currentValue);
|
|
230
|
+
const otherFieldStatus = this.fields
|
|
231
|
+
.filter(i => getOperandPath(i) !== getOperandPath(field))
|
|
232
|
+
.map(field => ({
|
|
233
|
+
path: getOperandPath(field),
|
|
234
|
+
result: matchValueAgainstOneOf(field, this.controlMap.get(getOperandPath(field))?.value),
|
|
235
|
+
}));
|
|
236
|
+
const newDirtyPaths = validPaths.filter(path => {
|
|
237
|
+
// 当前 valid path 在其他 field 中为 dirty,若该 field 本身也为 dirty 则忽略该影响,仍然判定为 valid,否则(该 field 有效)认定为 dirty
|
|
238
|
+
const fieldCandidates = otherFieldStatus.filter(status => status.result.dirtyPaths.includes(path));
|
|
239
|
+
return fieldCandidates.some(({ path }) => !otherFieldStatus.some(status => status.result.dirtyPaths.includes(path)));
|
|
240
|
+
});
|
|
241
|
+
return {
|
|
242
|
+
dirtyPaths: [...dirtyPaths, ...newDirtyPaths],
|
|
243
|
+
validPaths: validPaths.filter(path => !newDirtyPaths.includes(path)),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
initializeFormDataArrayProperty(state, pathBeforeIndex, pathAfterIndex, value) {
|
|
247
|
+
if (state.getIn([...pathToArray(pathBeforeIndex), 0])) {
|
|
248
|
+
return state;
|
|
249
|
+
}
|
|
250
|
+
const item = $Map({}).setIn(pathToArray(pathAfterIndex), value);
|
|
251
|
+
const list = List([item]);
|
|
252
|
+
return state.setIn(pathToArray(pathBeforeIndex), list);
|
|
253
|
+
}
|
|
254
|
+
submit() {
|
|
255
|
+
this.refreshValidation();
|
|
256
|
+
this.form.onSubmit(null);
|
|
257
|
+
}
|
|
258
|
+
static { this.ɵfac = function CrdFormComponent_Factory(t) { return new (t || CrdFormComponent)(i0.ɵɵdirectiveInject(i1.RemoteWidgetsService)); }; }
|
|
259
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CrdFormComponent, selectors: [["acl-crd-form"]], contentQueries: function CrdFormComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
|
|
260
|
+
i0.ɵɵcontentQuery(dirIndex, CrdFormCustomDescriptionDirective, 4);
|
|
261
|
+
} if (rf & 2) {
|
|
262
|
+
let _t;
|
|
263
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.customDescriptions = _t);
|
|
264
|
+
} }, viewQuery: function CrdFormComponent_Query(rf, ctx) { if (rf & 1) {
|
|
265
|
+
i0.ɵɵviewQuery(_c0, 7);
|
|
266
|
+
} if (rf & 2) {
|
|
267
|
+
let _t;
|
|
268
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.form = _t.first);
|
|
269
|
+
} }, inputs: { openApiSchema: "openApiSchema", descriptors: "descriptors", data: "data", debug: "debug", openApiSchemaPath: "openApiSchemaPath", readonly: "readonly", labelWidth: "labelWidth", labelPosition: "labelPosition", cluster: "cluster", namespace: "namespace", formContext: "formContext", keepEmptyPath: "keepEmptyPath", effectControlDefaultValue: "effectControlDefaultValue", uiContext: "uiContext", widgets: "widgets" }, outputs: { formStateChange: "formStateChange", formSchemaChange: "formSchemaChange" }, features: [i0.ɵɵNgOnChangesFeature], decls: 6, vars: 7, consts: [["form", "ngForm"], ["auiForm", "", 3, "aclScrollToFirstInvalid", "auiFormLabelPosition", "auiFormLabelWidth"], [4, "ngFor", "ngForOf"], [4, "ngIf"], [3, "valueChange", "fields", "field", "formDataState", "readonly", "customDescription", "remoteModuleDefinition"], [3, "valueChange", "fields", "fieldGroup", "formDataState", "formErrors", "readonly", "customDescriptions"], [3, "valueChange", "itemRemove", "arrayFieldGroup", "formDataState", "readonly"], [3, "valueChange", "fields", "fieldList", "formDataState", "readonly"]], template: function CrdFormComponent_Template(rf, ctx) { if (rf & 1) {
|
|
270
|
+
i0.ɵɵelementStart(0, "form", 1, 0);
|
|
271
|
+
i0.ɵɵtemplate(2, CrdFormComponent_ng_container_2_Template, 4, 12, "ng-container", 2)(3, CrdFormComponent_ng_container_3_Template, 2, 6, "ng-container", 2)(4, CrdFormComponent_ng_container_4_Template, 2, 3, "ng-container", 2)(5, CrdFormComponent_ng_container_5_Template, 2, 4, "ng-container", 3);
|
|
272
|
+
i0.ɵɵelementEnd();
|
|
273
|
+
} if (rf & 2) {
|
|
274
|
+
i0.ɵɵproperty("aclScrollToFirstInvalid", !!ctx.formErrors)("auiFormLabelPosition", ctx.labelPosition)("auiFormLabelWidth", ctx.labelWidth);
|
|
275
|
+
i0.ɵɵadvance(2);
|
|
276
|
+
i0.ɵɵproperty("ngForOf", ctx.normalFields);
|
|
277
|
+
i0.ɵɵadvance();
|
|
278
|
+
i0.ɵɵproperty("ngForOf", ctx.fieldGroups);
|
|
279
|
+
i0.ɵɵadvance();
|
|
280
|
+
i0.ɵɵproperty("ngForOf", ctx.arrayFieldGroups);
|
|
281
|
+
i0.ɵɵadvance();
|
|
282
|
+
i0.ɵɵproperty("ngIf", ctx.advancedFields == null ? null : ctx.advancedFields.length);
|
|
283
|
+
} }, styles: ["[_nghost-%COMP%]{width:100%}"], changeDetection: 0 }); }
|
|
284
|
+
}
|
|
285
|
+
__decorate([
|
|
286
|
+
ObservableInput(),
|
|
287
|
+
__metadata("design:type", Observable)
|
|
288
|
+
], CrdFormComponent.prototype, "formContext$", void 0);
|
|
289
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CrdFormComponent, [{
|
|
290
|
+
type: Component,
|
|
291
|
+
args: [{ selector: 'acl-crd-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n auiForm\n [aclScrollToFirstInvalid]=\"!!formErrors\"\n #form=\"ngForm\"\n [auiFormLabelPosition]=\"labelPosition\"\n [auiFormLabelWidth]=\"labelWidth\"\n>\n <!-- normal fields -->\n <ng-container *ngFor=\"let field of normalFields\">\n <acl-operand-field\n [fields]=\"fields\"\n [field]=\"field\"\n [formDataState]=\"formDataState\"\n [readonly]=\"readonly\"\n [customDescription]=\"\n customDescriptions | pure: getCustomDescription:field\n \"\n (valueChange)=\"fieldValueChange($event)\"\n [remoteModuleDefinition]=\"remoteModuleDefinition$ | async\"\n >\n </acl-operand-field>\n </ng-container>\n\n <!-- field groups \u517C\u5BB9\uFF0C\u9700\u8981\u4FDD\u7559-->\n <ng-container *ngFor=\"let group of fieldGroups\">\n <acl-operand-field-group\n [fields]=\"fields\"\n [fieldGroup]=\"group\"\n [formDataState]=\"formDataState\"\n [formErrors]=\"formErrors\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n [customDescriptions]=\"customDescriptions\"\n >\n </acl-operand-field-group>\n </ng-container>\n\n <!-- array field groups \u517C\u5BB9\uFF0C\u9700\u8981\u4FDD\u7559 -->\n <ng-container *ngFor=\"let group of arrayFieldGroups\">\n <acl-operand-array-field-group\n [arrayFieldGroup]=\"group\"\n [formDataState]=\"formDataState\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n (itemRemove)=\"deleteFormData($event)\"\n >\n </acl-operand-array-field-group>\n </ng-container>\n\n <!-- advanced fields -->\n <ng-container *ngIf=\"advancedFields?.length\">\n <acl-operand-advanced-field-group\n [fields]=\"fields\"\n [fieldList]=\"advancedFields\"\n [formDataState]=\"formDataState\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n ></acl-operand-advanced-field-group>\n </ng-container>\n</form>\n", styles: [":host{width:100%}\n"] }]
|
|
292
|
+
}], () => [{ type: i1.RemoteWidgetsService }], { openApiSchema: [{
|
|
293
|
+
type: Input
|
|
294
|
+
}], descriptors: [{
|
|
295
|
+
type: Input
|
|
296
|
+
}], data: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], debug: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], openApiSchemaPath: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], readonly: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], labelWidth: [{
|
|
305
|
+
type: Input
|
|
306
|
+
}], labelPosition: [{
|
|
307
|
+
type: Input
|
|
308
|
+
}], cluster: [{
|
|
309
|
+
type: Input
|
|
310
|
+
}], namespace: [{
|
|
311
|
+
type: Input
|
|
312
|
+
}], formContext: [{
|
|
313
|
+
type: Input
|
|
314
|
+
}], formContext$: [], keepEmptyPath: [{
|
|
315
|
+
type: Input
|
|
316
|
+
}], effectControlDefaultValue: [{
|
|
317
|
+
type: Input
|
|
318
|
+
}], uiContext: [{
|
|
319
|
+
type: Input
|
|
320
|
+
}], formStateChange: [{
|
|
321
|
+
type: Output
|
|
322
|
+
}], formSchemaChange: [{
|
|
323
|
+
type: Output
|
|
324
|
+
}], form: [{
|
|
325
|
+
type: ViewChild,
|
|
326
|
+
args: ['form', { static: true }]
|
|
327
|
+
}], customDescriptions: [{
|
|
328
|
+
type: ContentChildren,
|
|
329
|
+
args: [CrdFormCustomDescriptionDirective]
|
|
330
|
+
}], widgets: [{
|
|
331
|
+
type: Input
|
|
332
|
+
}] }); })();
|
|
333
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CrdFormComponent, { className: "CrdFormComponent", filePath: "lib/crd-form/component.ts", lineNumber: 64 }); })();
|
|
334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcmQtZm9ybS9zcmMvbGliL2NyZC1mb3JtL2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3JkLWZvcm0vc3JjL2xpYi9jcmQtZm9ybS90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFFTCxlQUFlLEdBRWhCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RCxPQUFPLEVBU0wsY0FBYyxHQUNmLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDTCxpQ0FBaUMsRUFDakMsY0FBYyxFQUNkLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsYUFBYSxFQUNiLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGVBQWUsR0FDaEIsTUFBTSxVQUFVLENBQUM7QUFFbEIs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QXpCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csVUFBVTtrQkFBbEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFFRyxPQUFPO2tCQUFmLEtBQUs7WUFDRyxTQUFTO2tCQUFqQixLQUFLO1lBRUcsV0FBVztrQkFBbkIsS0FBSztZQUNhLFlBQVksTUFFdEIsYUFBYTtrQkFBckIsS0FBSztZQUVHLHlCQUF5QjtrQkFBakMsS0FBSztZQUVHLFNBQVM7a0JBQWpCLEtBQUs7WUFFSSxlQUFlO2tCQUF4QixNQUFNO1lBRUcsZ0JBQWdCO2tCQUF6QixNQUFNO1lBR1AsSUFBSTtrQkFESCxTQUFTO21CQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFJbkMsa0JBQWtCO2tCQURqQixlQUFlO21CQUFDLGlDQUFpQztZQUlsRCxPQUFPO2tCQUROLEtBQUs7O2tGQWhDSyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYWJlbFBvc2l0aW9uIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQge1xuICBEaWN0aW9uYXJ5LFxuICBPYnNlcnZhYmxlSW5wdXQsXG4gIE9wZW5BUElWM1NjaGVtYU9iamVjdCxcbn0gZnJvbSAnQGFsYXVkYS1mZS9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBMaXN0LCBNYXAgYXMgJE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IGZsYXR0ZW5EZWVwLCBmcm9tUGFpcnMsIGlzRW1wdHksIHVuaXEgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBSZW1vdGVXaWRnZXRzU2VydmljZSB9IGZyb20gJy4uL3JlbW90ZS13aWRnZXRzJztcbmltcG9ydCB7XG4gIERlc2NyaXB0b3IsXG4gIEZpZWxkVmFsdWVDaGFuZ2VFdmVudCxcbiAgRm9ybURhdGFTdGF0ZSxcbiAgRm9ybUVycm9ycyxcbiAgRm9ybVN0YXRlLFxuICBPcGVyYW5kQXJyYXlGaWVsZEdyb3VwLFxuICBPcGVyYW5kRmllbGQsXG4gIE9wZXJhbmRGaWVsZEdyb3VwLFxuICBTcGVjQ2FwYWJpbGl0eSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgQ3JkRm9ybUN1c3RvbURlc2NyaXB0aW9uRGlyZWN0aXZlLFxuICBwYXJzZUFycmF5UGF0aCxcbiAgU0NIRU1BX1BBVEgsXG4gIGNyZWF0ZUNhcGFiaWxpdHlGaWVsZCxcbiAgbm9ybWFsaXplUGF0aCxcbiAgcGF0aFRvQXJyYXksXG4gIGdldEN1c3RvbURlc2NyaXB0aW9uLFxuICBnZXRPcGVyYW5kUGF0aCxcbiAgZ2V0UGF0aEZyb21UYWdQYXRoLFxuICBnZXRGaWVsZHNCeVBhdGgsXG4gIGZpZWxkU2hvdWxkUmV2ZWFsLFxuICBnZXREZWZhdWx0VmFsdWUsXG59IGZyb20gJy4uL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgZGlmZmVyUGF0aHNUYWcsXG4gIGdldEFsbE90aGVyVGFnUGF0aCxcbiAgbWF0Y2hWYWx1ZUFnYWluc3RPbmVPZixcbn0gZnJvbSAnLi9oZWxwZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtY3JkLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJ3RlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc3R5bGVzLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENyZEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBvcGVuQXBpU2NoZW1hOiBPcGVuQVBJVjNTY2hlbWFPYmplY3Q7XG4gIEBJbnB1dCgpIGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9yW107XG4gIEBJbnB1dCgpIGRhdGE6IHVua25vd247XG4gIEBJbnB1dCgpIGRlYnVnID0gZmFsc2U7XG4gIEBJbnB1dCgpIG9wZW5BcGlTY2hlbWFQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSA9IFNDSEVNQV9QQVRIO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBsYWJlbFdpZHRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhYmVsUG9zaXRpb246IExhYmVsUG9zaXRpb24gPSBMYWJlbFBvc2l0aW9uLlJpZ2h0O1xuXG4gIEBJbnB1dCgpIGNsdXN0ZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5hbWVzcGFjZT86IHN0cmluZztcblxuICBASW5wdXQoKSBmb3JtQ29udGV4dDogYW55O1xuICBAT2JzZXJ2YWJsZUlucHV0KCkgZm9ybUNvbnRleHQkOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgQElucHV0KCkga2VlcEVtcHR5UGF0aDogYm9vbGVhbjtcblxuICBASW5wdXQoKSBlZmZlY3RDb250cm9sRGVmYXVsdFZhbHVlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHVpQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgQE91dHB1dCgpIGZvcm1TdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybVN0YXRlPigpO1xuXG4gIEBPdXRwdXQoKSBmb3JtU2NoZW1hQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZm9ybScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGZvcm06IE5nRm9ybTtcblxuICBAQ29udGVudENoaWxkcmVuKENyZEZvcm1DdXN0b21EZXNjcmlwdGlvbkRpcmVjdGl2ZSlcbiAgY3VzdG9tRGVzY3JpcHRpb25zOiBRdWVyeUxpc3Q8Q3JkRm9ybUN1c3RvbURlc2NyaXB0aW9uRGlyZWN0aXZlPjtcblxuICBASW5wdXQoKVxuICB3aWRnZXRzOiBBcnJheTx7XG4gICAgZGVzY3JpcHRvcjogc3RyaW5nO1xuICAgIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxhbnk+O1xuICB9PjtcblxuICBmb3JtRGF0YVN0YXRlOiBGb3JtRGF0YVN0YXRlO1xuICBmb3JtRXJyb3JzOiBGb3JtRXJyb3JzID0ge307XG5cbiAgZmllbGRzOiBPcGVyYW5kRmllbGRbXTtcbiAgbm9ybWFsRmllbGRzOiBPcGVyYW5kRmllbGRbXTtcbiAgZmllbGRHcm91cHM6IE9wZXJhbmRGaWVsZEdyb3VwW107XG4gIGFycmF5RmllbGRHcm91cHM6IE9wZXJhbmRBcnJheUZpZWxkR3JvdXBbXTtcbiAgYWR2YW5jZWRGaWVsZHM6IE9wZXJhbmRGaWVsZFtdO1xuICBwcml2YXRlIF9sYXN0VXBkYXRlRmllbGQ6IE9wZXJhbmRGaWVsZDtcblxuICAvLyDkuIDkuKrlhajlsYDnmoQgY29udHJvbE1hcO+8jOaWueS+v+aOp+WItiBmaWVsZCDkuLvliqjmoKHpqozjgIJcbiAgLy8g6K+lIGNvbnRyb2xNYXAg5Lul5Y+K5omA5pyJIGZpZWxkIOmHjOeahCBjb250cm9sIOWunuS+i++8jOmDveaYr+S4uuS6huaVsOaNrui/vei4quS4jumUmeivr+WQjOatpe+8iGNvbnRyb2wuZXJyb3IgLT4gY3JkRm9ybSBlcnJvcu+8ie+8jOacrOi6q+S4jeW9seWTjeaPkOS6pO+8jOeUsSBjcmQtZm9ybSDnmoQgZXJyb3Ig5Y676Zi75aGe5o+Q5Lqk44CCXG4gIGNvbnRyb2xNYXAgPSBuZXcgTWFwPHN0cmluZywgQWJzdHJhY3RDb250cm9sPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcndzOiBSZW1vdGVXaWRnZXRzU2VydmljZSkge31cblxuICByZW1vdGVNb2R1bGVEZWZpbml0aW9uJCA9IHRoaXMucndzLnJlbW90ZU1vZHVsZSQ7XG5cbiAgbmdPbkNoYW5nZXMoeyBvcGVuQXBpU2NoZW1hLCBkZXNjcmlwdG9ycywgZGF0YSB9OiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKG9wZW5BcGlTY2hlbWE/LmN1cnJlbnRWYWx1ZSB8fCBkZXNjcmlwdG9ycz8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnNldFVwRm9ybSgpO1xuICAgIH0gZWxzZSBpZiAoZGF0YT8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhU3RhdGUgPSBmcm9tSlMoZGF0YS5jdXJyZW50VmFsdWUpIGFzIEZvcm1EYXRhU3RhdGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VzdG9tRGVzY3JpcHRpb24gPSBnZXRDdXN0b21EZXNjcmlwdGlvbjtcblxuICBwcml2YXRlIHNldFVwRm9ybSgpIHtcbiAgICB0aGlzLmZvcm1EYXRhU3RhdGUgPSBmcm9tSlModGhpcy5kYXRhIHx8IHt9KSBhcyBGb3JtRGF0YVN0YXRlO1xuXG4gICAgY29uc3Qge1xuICAgICAgbm9ybWFsRmllbGRzLFxuICAgICAgZmllbGRHcm91cHMsXG4gICAgICBhcnJheUZpZWxkR3JvdXBzLFxuICAgICAgYWR2YW5jZWRGaWVsZHMsXG4gICAgICBkZXNjcmlwdG9yRmllbGRzLFxuICAgICAgb3BlbkFwaUZpZWxkcyxcbiAgICAgIGJhc2ljRmllbGRzLFxuICAgIH0gPSBjcmVhdGVDYXBhYmlsaXR5RmllbGQoXG4gICAgICB0aGlzLmRlc2NyaXB0b3JzIHx8IFtdLFxuICAgICAgdGhpcy5vcGVuQXBpU2NoZW1hIHx8ICh7fSBhcyBPcGVuQVBJVjNTY2hlbWFPYmplY3QpLFxuICAgICAgdGhpcy5kYXRhLFxuICAgICAgdGhpcy5vcGVuQXBpU2NoZW1hUGF0aCxcbiAgICApO1xuXG4gICAgdGhpcy5maWVsZHMgPSBiYXNpY0ZpZWxkcy5maWx0ZXIoZmllbGRTaG91bGRSZXZlYWwpO1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSAgbm8tY29uc29sZSAqL1xuICAgICAgY29uc29sZS5pbmZvKCdvcGVuQXBpRmllbGRzOicsIG9wZW5BcGlGaWVsZHMpO1xuICAgICAgY29uc29sZS5pbmZvKCdkZXNjcmlwdG9yRmllbGRzOicsIGRlc2NyaXB0b3JGaWVsZHMpO1xuICAgICAgY29uc29sZS5pbmZvKCdiYXNpY0ZpZWxkczonLCBiYXNpY0ZpZWxkcyk7XG5cbiAgICAgIGNvbnNvbGUuaW5mbygnbm9ybWFsRmllbGRzJywgbm9ybWFsRmllbGRzKTtcblxuICAgICAgY29uc29sZS5pbmZvKCdmaWVsZEdyb3VwczonLCBmaWVsZEdyb3Vwcyk7XG4gICAgICBjb25zb2xlLmluZm8oJ2FycmF5RmllbGRHcm91cHM6JywgYXJyYXlGaWVsZEdyb3Vwcyk7XG4gICAgICBjb25zb2xlLmluZm8oJ2FkdmFuY2VkRmllbGRzOicsIGFkdmFuY2VkRmllbGRzKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuICAgIH1cblxuICAgIHRoaXMubm9ybWFsRmllbGRzID0gbm9ybWFsRmllbGRzO1xuICAgIHRoaXMuZmllbGRHcm91cHMgPSBmaWVsZEdyb3VwcztcbiAgICB0aGlzLmFycmF5RmllbGRHcm91cHMgPSBhcnJheUZpZWxkR3JvdXBzO1xuICAgIHRoaXMuYWR2YW5jZWRGaWVsZHMgPSBhZHZhbmNlZEZpZWxkcztcblxuICAgIHRoaXMuZm9ybVNjaGVtYUNoYW5nZS5lbWl0KHtcbiAgICAgIG9wZW5BcGlGaWVsZHMsXG4gICAgICBkZXNjcmlwdG9yRmllbGRzLFxuICAgIH0pO1xuICB9XG5cbiAgLy8g6KKr6ZqQ6JeP6LW35p2l55qE6KGo5Y2V55qE6Lev5b6E6ZuG5ZCIXG4gIGRpcnR5UGF0aHNTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmaWVsZFZhbHVlQ2hhbmdlKGV2ZW50OiBGaWVsZFZhbHVlQ2hhbmdlRXZlbnQpIHtcbiAgICBsZXQgb25jZURpcnR5UGF0aHNTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIC8vIFRPRE86IOW+hXJldmlld+ehruiupOWQjuenu+mZpOivpeW8gOWFs1xuICAgIGlmICgodGhpcy5mb3JtQ29udGV4dD8uZ2F0ZXMgYXMgc3RyaW5nW10pPy5pbmNsdWRlcygnb25jZURpcnR5UGF0aHNTZXQnKSkge1xuICAgICAgY29uc3Qgb3BlcmFuZFBhdGggPSBnZXRPcGVyYW5kUGF0aChldmVudC5maWVsZCk7XG4gICAgICAvLyDlpoLmnpzooajljZXooqvpmpDol4/kuJTov5nmrKFjaGFuZ2XmmK/lm6DkuLrnm7TmjqXmlLnlj5jkuobljIXlkKvor6Xot6/lvoTnmoTniLbot6/lvoTnmoTlgLzvvIjkvovlpoLnvJbovpF5YW1s77yJXG4gICAgICAvLyDpgqPlsLHpmLvmraLmraTlrZDot6/lvoTlgLznmoRjaGFuZ2XpgLvovpFcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kaXJ0eVBhdGhzU2V0LmhhcyhvcGVyYW5kUGF0aCkgJiZcbiAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZUZpZWxkPy5wYXRoICYmXG4gICAgICAgIG9wZXJhbmRQYXRoLnN0YXJ0c1dpdGgoYCR7dGhpcy5fbGFzdFVwZGF0ZUZpZWxkLnBhdGh9LmApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbmNlRGlydHlQYXRoc1NldCA9IHRoaXMuZGlydHlQYXRoc1NldDtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudERhdGEgPSBldmVudC5kYXRhO1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmZpZWxkLmNhcGFiaWxpdGllcy5zb21lKGMgPT4gYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5Lm9uZU9mKSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgZGlydHlQYXRocywgdmFsaWRQYXRocyB9ID0gdGhpcy5yZXNvbHZlRXhwaXJlZFBhdGgoXG4gICAgICAgIGV2ZW50LmZpZWxkLFxuICAgICAgICBldmVudERhdGEsXG4gICAgICApO1xuXG4gICAgICBkaXJ0eVBhdGhzLmZvckVhY2gocGF0aCA9PiB7XG4gICAgICAgIHRoaXMuZGlydHlQYXRoc1NldC5hZGQobm9ybWFsaXplUGF0aChwYXRoKSk7XG4gICAgICAgIG9uY2VEaXJ0eVBhdGhzU2V0LmFkZChub3JtYWxpemVQYXRoKHBhdGgpKTtcbiAgICAgIH0pO1xuXG4gICAgICB2YWxpZFBhdGhzLmZvckVhY2gocGF0aCA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsaWRQYXRoVmFsdWUocGF0aCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgYWxsT3RoZXJQYXRocyA9IGdldEFsbE90aGVyVGFnUGF0aChcbiAgICAgIHRoaXMuZmllbGRzLFxuICAgICAgQXJyYXkuZnJvbShvbmNlRGlydHlQYXRoc1NldCksXG4gICAgKTtcbiAgICBjb25zdCByZW1vdmVkUGF0aHMgPSB1bmlxKFxuICAgICAgLy8g5ZCM5LiAIHBhdGgg5Y+v6IO95pyJ5aSa5LiqIHRhZ++8jOWBh+iuvuafkOS4qiB0YWdnZWQgcGF0aCDmnInmlYjvvIzliJnlhbblr7nlupQgcGF0aCDmlbDmja7kuI3lupTor6XliKDpmaRcbiAgICAgIGRpZmZlclBhdGhzVGFnKEFycmF5LmZyb20ob25jZURpcnR5UGF0aHNTZXQpLCBhbGxPdGhlclBhdGhzKS5tYXAocGF0aCA9PlxuICAgICAgICBnZXRQYXRoRnJvbVRhZ1BhdGgocGF0aCksXG4gICAgICApLFxuICAgICkuZmlsdGVyKFxuICAgICAgLy8g5Y+q5riF56m65Y+25a2Q57uT54K577yM5Lul6YCC6YWNIHlhbWwg5oOF5Ya1XG4gICAgICBwYXRoID0+XG4gICAgICAgICF0aGlzLmZpZWxkcy5zb21lKGZpZWxkID0+IHtcbiAgICAgICAgICBjb25zdCBpc1BhcmVudFBhdGggPSBmaWVsZC5wYXRoLnN0YXJ0c1dpdGgoYCR7cGF0aH0uYCk7XG4gICAgICAgICAgaWYgKGlzUGFyZW50UGF0aCkge1xuICAgICAgICAgICAgLy8g6K+lIGZpZWxkIOS6puS4uiBkaXJ0ee+8jOS4jeS7peS4uuS+neaNrlxuICAgICAgICAgICAgcmV0dXJuICFvbmNlRGlydHlQYXRoc1NldC5oYXMoZmllbGQucGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSksXG4gICAgKTtcbiAgICBpZiAoZXZlbnREYXRhID09IG51bGwgJiYgIXRoaXMua2VlcEVtcHR5UGF0aCkge1xuICAgICAgaWYgKCFvbmNlRGlydHlQYXRoc1NldC5oYXMoZ2V0T3BlcmFuZFBhdGgoZXZlbnQuZmllbGQpKSkge1xuICAgICAgICB0aGlzLmRlbGV0ZUZvcm1EYXRhKGV2ZW50LmZpZWxkLnBhdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1EYXRhKGV2ZW50LmZpZWxkLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIHJlbW92ZWRQYXRocy5mb3JFYWNoKHBhdGggPT4ge1xuICAgICAgdGhpcy5kZWxldGVGb3JtRGF0YShwYXRoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZnJlc2hWYWxpZGF0aW9uKCk7XG4gICAgdGhpcy5mb3JtU3RhdGVDaGFuZ2UuZW1pdCh7XG4gICAgICBkYXRhOiB0aGlzLmZvcm1EYXRhU3RhdGUudG9KUygpLFxuICAgICAgZXJyb3JzOiB0aGlzLmZvcm1FcnJvcnMsXG4gICAgfSk7XG4gIH1cblxuICBkZWxldGVGb3JtRGF0YShwYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZvcm1EYXRhU3RhdGUgPSB0aGlzLmZvcm1EYXRhU3RhdGUuZGVsZXRlSW4ocGF0aFRvQXJyYXkocGF0aCkpO1xuICAgIHRoaXMuY29udHJvbE1hcC5nZXQocGF0aCk/LnNldFZhbHVlKG51bGwpO1xuXG4gICAgdGhpcy5mb3JtU3RhdGVDaGFuZ2UuZW1pdCh7XG4gICAgICBkYXRhOiB0aGlzLmZvcm1EYXRhU3RhdGUudG9KUygpLFxuICAgICAgZXJyb3JzOiB0aGlzLmZvcm1FcnJvcnMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbGlkUGF0aFZhbHVlKHBhdGg6IHN0cmluZykge1xuICAgIC8vIOWmguaenOacieaViOi3r+W+hOaYr+S4iuS4gOasoeeahOaXoOaViOi3r+W+hO+8jOWImeaEj+WRs+edgOivpei3r+W+hOeahOWAvOWcqOS4iuasoeiiq+mHjee9ruS6hu+8jOaJgOS7peW9k+ivpei3r+W+hOWPiOmcgOimgeaYvuekuue7meeUqOaIt+aXtuW6lOivpeS9v+eUqOm7mOiupOWAvFxuICAgIGNvbnN0IHVzZURlZmF1bHQgPSB0aGlzLmRpcnR5UGF0aHNTZXQuaGFzKG5vcm1hbGl6ZVBhdGgocGF0aCkpO1xuICAgIHRoaXMuZGlydHlQYXRoc1NldC5kZWxldGUobm9ybWFsaXplUGF0aChwYXRoKSk7XG4gICAgLy8g5aaC5p6c5a+55LiA57uE6KGo5Y2V6YO95pyJ5L6d6LWW77yM6YKj6Lev5b6E5Y+v6IO95piv6L+Z57uE6KGo5Y2V55qE54i26Lev5b6E77yM5omA5Lul6ZyA6KaB5oqK5omA5pyJ5a2Q5a2Z6YO95om+5Ye65p2lXG4gICAgY29uc3QgZmllbGRzID0gZ2V0RmllbGRzQnlQYXRoKHBhdGgsIFtcbiAgICAgIC4uLnRoaXMubm9ybWFsRmllbGRzLFxuICAgICAgLi4uZmxhdHRlbkRlZXAodGhpcy5maWVsZEdyb3Vwcy5tYXAoZ3JvdXAgPT4gZ3JvdXAuZmllbGRMaXN0KSksXG4gICAgICAuLi5mbGF0dGVuRGVlcChcbiAgICAgICAgdGhpcy5hcnJheUZpZWxkR3JvdXBzLm1hcChhcnJheUdyb3VwID0+IGFycmF5R3JvdXAuZmllbGRMaXN0cyksXG4gICAgICApLFxuICAgICAgLi4udGhpcy5hZHZhbmNlZEZpZWxkcyxcbiAgICBdKTtcbiAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAvLyDnkIborrrkuIogb25lb2Yg5Y+q5b2x5ZON6KeG5Zu+77yM5L2G5a6e6ZmF6L+Y5Lya5b2x5ZONIGZvcm1EYXRhU3RhdGXvvIzmiYDku6XpnIDopoHlkIzmraXmm7TmlrAgZm9ybURhdGFTdGF0ZVxuICAgICAgbGV0IHZhbHVlID0gdGhpcy5jb250cm9sTWFwLmdldChnZXRPcGVyYW5kUGF0aChmaWVsZCkpLnZhbHVlO1xuICAgICAgaWYgKCF2YWx1ZSAmJiB1c2VEZWZhdWx0KSB7XG4gICAgICAgIHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKGZpZWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlRm9ybURhdGEoZmllbGQsIHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybURhdGEoZmllbGQ6IE9wZXJhbmRGaWVsZCwgZGF0YTogdW5rbm93bikge1xuICAgIGlmICghZmllbGQpIHJldHVybjtcbiAgICBjb25zdCB7IG1hdGNoLCBpbmRleCwgcGF0aEJlZm9yZUluZGV4LCBwYXRoQWZ0ZXJJbmRleCB9ID0gcGFyc2VBcnJheVBhdGgoXG4gICAgICBmaWVsZC5wYXRoLFxuICAgICk7XG4gICAgaWYgKG1hdGNoICYmIGluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhU3RhdGUgPSB0aGlzLmluaXRpYWxpemVGb3JtRGF0YUFycmF5UHJvcGVydHkoXG4gICAgICAgIHRoaXMuZm9ybURhdGFTdGF0ZSxcbiAgICAgICAgcGF0aEJlZm9yZUluZGV4LFxuICAgICAgICBwYXRoQWZ0ZXJJbmRleCxcbiAgICAgICAgZGF0YSxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZm9ybURhdGFTdGF0ZSA9IHRoaXMuZm9ybURhdGFTdGF0ZS5zZXRJbihcbiAgICAgIHBhdGhUb0FycmF5KGZpZWxkLnBhdGgpLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHRoaXMuX2xhc3RVcGRhdGVGaWVsZCA9IGZpZWxkO1xuICB9XG5cbiAgcmVmcmVzaFZhbGlkYXRpb24oKSB7XG4gICAgY29uc3QgZXJyb3JzID0gQXJyYXkuZnJvbSh0aGlzLmNvbnRyb2xNYXApLnJlZHVjZShcbiAgICAgIChhY2MsIFtwYXRoV2l0aFRhZywgY29udHJvbF0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHlQYXRoc1NldC5oYXMocGF0aFdpdGhUYWcpKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXRoID0gZ2V0UGF0aEZyb21UYWdQYXRoKHBhdGhXaXRoVGFnKTtcbiAgICAgICAgYWNjW3BhdGhdID0gaXNFbXB0eShjb250cm9sLmVycm9ycykgPyBudWxsIDogY29udHJvbC5lcnJvcnM7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAge30gYXMgRGljdGlvbmFyeTxGb3JtRXJyb3JzPixcbiAgICApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGZyb21QYWlycyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKGVycm9ycyA/PyB7fSkuZmlsdGVyKChbX2ssIHZdKSA9PiAhIXYpLFxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1FcnJvcnMgPSBpc0VtcHR5KHJlc3VsdCkgPyBudWxsIDogcmVzdWx0O1xuICB9XG5cbiAgLy8g5b2T5p+Q5LiqIGZpZWxkIOWPkeeUn+aVsOaNruWPmOWMlu+8jOi/lOWbnuWFtuebuOWFsyBvbmVPZiBwYXRoIOaYr+WQpuW6lOivpeenu+mZpFxuICAvLyDku4XlvZPlvZPliY0gZmllbGQg5LitIG9uZU9mIOadoeS7tuS4juW9k+WJjeaVsOaNruS4jeWMuemFje+8jFxuICBwcml2YXRlIHJlc29sdmVFeHBpcmVkUGF0aChmaWVsZDogT3BlcmFuZEZpZWxkLCBjdXJyZW50VmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHsgZGlydHlQYXRocywgdmFsaWRQYXRocyB9ID0gbWF0Y2hWYWx1ZUFnYWluc3RPbmVPZihcbiAgICAgIGZpZWxkLFxuICAgICAgY3VycmVudFZhbHVlLFxuICAgICk7XG4gICAgY29uc3Qgb3RoZXJGaWVsZFN0YXR1cyA9IHRoaXMuZmllbGRzXG4gICAgICAuZmlsdGVyKGkgPT4gZ2V0T3BlcmFuZFBhdGgoaSkgIT09IGdldE9wZXJhbmRQYXRoKGZpZWxkKSlcbiAgICAgIC5tYXAoZmllbGQgPT4gKHtcbiAgICAgICAgcGF0aDogZ2V0T3BlcmFuZFBhdGgoZmllbGQpLFxuICAgICAgICByZXN1bHQ6IG1hdGNoVmFsdWVBZ2FpbnN0T25lT2YoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgdGhpcy5jb250cm9sTWFwLmdldChnZXRPcGVyYW5kUGF0aChmaWVsZCkpPy52YWx1ZSxcbiAgICAgICAgKSxcbiAgICAgIH0pKTtcblxuICAgIGNvbnN0IG5ld0RpcnR5UGF0aHMgPSB2YWxpZFBhdGhzLmZpbHRlcihwYXRoID0+IHtcbiAgICAgIC8vIOW9k+WJjSB2YWxpZCBwYXRoIOWcqOWFtuS7liBmaWVsZCDkuK3kuLogZGlydHnvvIzoi6Xor6UgZmllbGQg5pys6Lqr5Lmf5Li6IGRpcnR5IOWImeW/veeVpeivpeW9seWTje+8jOS7jeeEtuWIpOWumuS4uiB2YWxpZO+8jOWQpuWIme+8iOivpSBmaWVsZCDmnInmlYjvvInorqTlrprkuLogZGlydHlcbiAgICAgIGNvbnN0IGZpZWxkQ2FuZGlkYXRlcyA9IG90aGVyRmllbGRTdGF0dXMuZmlsdGVyKHN0YXR1cyA9PlxuICAgICAgICBzdGF0dXMucmVzdWx0LmRpcnR5UGF0aHMuaW5jbHVkZXMocGF0aCksXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZpZWxkQ2FuZGlkYXRlcy5zb21lKFxuICAgICAgICAoeyBwYXRoIH0pID0+XG4gICAgICAgICAgIW90aGVyRmllbGRTdGF0dXMuc29tZShzdGF0dXMgPT5cbiAgICAgICAgICAgIHN0YXR1cy5yZXN1bHQuZGlydHlQYXRocy5pbmNsdWRlcyhwYXRoKSxcbiAgICAgICAgICApLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgZGlydHlQYXRoczogWy4uLmRpcnR5UGF0aHMsIC4uLm5ld0RpcnR5UGF0aHNdLFxuICAgICAgdmFsaWRQYXRoczogdmFsaWRQYXRocy5maWx0ZXIocGF0aCA9PiAhbmV3RGlydHlQYXRocy5pbmNsdWRlcyhwYXRoKSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZvcm1EYXRhQXJyYXlQcm9wZXJ0eShcbiAgICBzdGF0ZTogRm9ybURhdGFTdGF0ZSxcbiAgICBwYXRoQmVmb3JlSW5kZXg6IHN0cmluZyxcbiAgICBwYXRoQWZ0ZXJJbmRleDogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICkge1xuICAgIGlmIChzdGF0ZS5nZXRJbihbLi4ucGF0aFRvQXJyYXkocGF0aEJlZm9yZUluZGV4KSwgMF0pKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSAkTWFwKHt9KS5zZXRJbihwYXRoVG9BcnJheShwYXRoQWZ0ZXJJbmRleCksIHZhbHVlKTtcbiAgICBjb25zdCBsaXN0ID0gTGlzdChbaXRlbV0pO1xuICAgIHJldHVybiBzdGF0ZS5zZXRJbihwYXRoVG9BcnJheShwYXRoQmVmb3JlSW5kZXgpLCBsaXN0KTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLnJlZnJlc2hWYWxpZGF0aW9uKCk7XG4gICAgdGhpcy5mb3JtLm9uU3VibWl0KG51bGwpO1xuICB9XG59XG4iLCI8Zm9ybVxuICBhdWlGb3JtXG4gIFthY2xTY3JvbGxUb0ZpcnN0SW52YWxpZF09XCIhIWZvcm1FcnJvcnNcIlxuICAjZm9ybT1cIm5nRm9ybVwiXG4gIFthdWlGb3JtTGFiZWxQb3NpdGlvbl09XCJsYWJlbFBvc2l0aW9uXCJcbiAgW2F1aUZvcm1MYWJlbFdpZHRoXT1cImxhYmVsV2lkdGhcIlxuPlxuICA8IS0tIG5vcm1hbCBmaWVsZHMgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIG5vcm1hbEZpZWxkc1wiPlxuICAgIDxhY2wtb3BlcmFuZC1maWVsZFxuICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgIFtjdXN0b21EZXNjcmlwdGlvbl09XCJcbiAgICAgICAgY3VzdG9tRGVzY3JpcHRpb25zIHwgcHVyZTogZ2V0Q3VzdG9tRGVzY3JpcHRpb246ZmllbGRcbiAgICAgIFwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiZmllbGRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIFtyZW1vdGVNb2R1bGVEZWZpbml0aW9uXT1cInJlbW90ZU1vZHVsZURlZmluaXRpb24kIHwgYXN5bmNcIlxuICAgID5cbiAgICA8L2FjbC1vcGVyYW5kLWZpZWxkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIGZpZWxkIGdyb3VwcyDlhbzlrrnvvIzpnIDopoHkv53nlZktLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZmllbGRHcm91cHNcIj5cbiAgICA8YWNsLW9wZXJhbmQtZmllbGQtZ3JvdXBcbiAgICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICAgIFtmaWVsZEdyb3VwXT1cImdyb3VwXCJcbiAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgW2Zvcm1FcnJvcnNdPVwiZm9ybUVycm9yc1wiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cImZpZWxkVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbY3VzdG9tRGVzY3JpcHRpb25zXT1cImN1c3RvbURlc2NyaXB0aW9uc1wiXG4gICAgPlxuICAgIDwvYWNsLW9wZXJhbmQtZmllbGQtZ3JvdXA+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gYXJyYXkgZmllbGQgZ3JvdXBzIOWFvOWuue+8jOmcgOimgeS/neeVmSAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgYXJyYXlGaWVsZEdyb3Vwc1wiPlxuICAgIDxhY2wtb3BlcmFuZC1hcnJheS1maWVsZC1ncm91cFxuICAgICAgW2FycmF5RmllbGRHcm91cF09XCJncm91cFwiXG4gICAgICBbZm9ybURhdGFTdGF0ZV09XCJmb3JtRGF0YVN0YXRlXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiZmllbGRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChpdGVtUmVtb3ZlKT1cImRlbGV0ZUZvcm1EYXRhKCRldmVudClcIlxuICAgID5cbiAgICA8L2FjbC1vcGVyYW5kLWFycmF5LWZpZWxkLWdyb3VwPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIGFkdmFuY2VkIGZpZWxkcyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFkdmFuY2VkRmllbGRzPy5sZW5ndGhcIj5cbiAgICA8YWNsLW9wZXJhbmQtYWR2YW5jZWQtZmllbGQtZ3JvdXBcbiAgICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICAgIFtmaWVsZExpc3RdPVwiYWR2YW5jZWRGaWVsZHNcIlxuICAgICAgW2Zvcm1EYXRhU3RhdGVdPVwiZm9ybURhdGFTdGF0ZVwiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cImZpZWxkVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPjwvYWNsLW9wZXJhbmQtYWR2YW5jZWQtZmllbGQtZ3JvdXA+XG4gIDwvbmctY29udGFpbmVyPlxuPC9mb3JtPlxuIl19
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { differenceBy } from 'lodash-es';
|
|
2
|
+
import { convertValue, getOneOfMap, getOperandPath, getPathFromTagPath, normalizePath, } from '../utils';
|
|
3
|
+
// 去除 others 和 paths 中主 path 相同的部分
|
|
4
|
+
export function differPathsTag(paths, others) {
|
|
5
|
+
return differenceBy(paths, others, pathWithTag => getPathFromTagPath(pathWithTag));
|
|
6
|
+
}
|
|
7
|
+
export function getAllOtherTagPath(fields, paths) {
|
|
8
|
+
return fields
|
|
9
|
+
.map(path => getOperandPath(path))
|
|
10
|
+
.filter(path => !paths.includes(path));
|
|
11
|
+
}
|
|
12
|
+
export function matchValueAgainstOneOf(field, currentValue) {
|
|
13
|
+
// oneOfMap 里应当为 tagged path
|
|
14
|
+
const oneOfMap = getOneOfMap(field);
|
|
15
|
+
// 使用两个 set 处理多条 OneOf 中存在公共 path 的情形
|
|
16
|
+
const dirtyPathSet = new Set();
|
|
17
|
+
const validPathSet = new Set();
|
|
18
|
+
Object.entries(oneOfMap).forEach(([value, paths]) => {
|
|
19
|
+
paths.forEach(path => {
|
|
20
|
+
(convertValue(value, field.type) === currentValue
|
|
21
|
+
? validPathSet
|
|
22
|
+
: dirtyPathSet).add(path);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
return {
|
|
26
|
+
dirtyPaths: Array.from(dirtyPathSet)
|
|
27
|
+
.filter(i => !validPathSet.has(i))
|
|
28
|
+
.map(path => normalizePath(path)),
|
|
29
|
+
validPaths: Array.from(validPathSet).map(path => normalizePath(path)),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcmQtZm9ybS9zcmMvbGliL2NyZC1mb3JtL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR3pDLE9BQU8sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxHQUNkLE1BQU0sVUFBVSxDQUFDO0FBRWxCLGtDQUFrQztBQUNsQyxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWUsRUFBRSxNQUFnQjtJQUM5RCxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQy9DLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFzQixFQUFFLEtBQWU7SUFDeEUsT0FBTyxNQUFNO1NBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBbUIsRUFBRSxZQUFpQjtJQUMzRSw0QkFBNEI7SUFDNUIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLHFDQUFxQztJQUNyQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQ2xELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkIsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxZQUFZO2dCQUMvQyxDQUFDLENBQUMsWUFBWTtnQkFDZCxDQUFDLENBQUMsWUFBWSxDQUNmLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU87UUFDTCxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDakMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaWZmZXJlbmNlQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQgeyBPcGVyYW5kRmllbGQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICBjb252ZXJ0VmFsdWUsXG4gIGdldE9uZU9mTWFwLFxuICBnZXRPcGVyYW5kUGF0aCxcbiAgZ2V0UGF0aEZyb21UYWdQYXRoLFxuICBub3JtYWxpemVQYXRoLFxufSBmcm9tICcuLi91dGlscyc7XG5cbi8vIOWOu+mZpCBvdGhlcnMg5ZKMIHBhdGhzIOS4reS4uyBwYXRoIOebuOWQjOeahOmDqOWIhlxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlclBhdGhzVGFnKHBhdGhzOiBzdHJpbmdbXSwgb3RoZXJzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gZGlmZmVyZW5jZUJ5KHBhdGhzLCBvdGhlcnMsIHBhdGhXaXRoVGFnID0+XG4gICAgZ2V0UGF0aEZyb21UYWdQYXRoKHBhdGhXaXRoVGFnKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbE90aGVyVGFnUGF0aChmaWVsZHM6IE9wZXJhbmRGaWVsZFtdLCBwYXRoczogc3RyaW5nW10pIHtcbiAgcmV0dXJuIGZpZWxkc1xuICAgIC5tYXAocGF0aCA9PiBnZXRPcGVyYW5kUGF0aChwYXRoKSlcbiAgICAuZmlsdGVyKHBhdGggPT4gIXBhdGhzLmluY2x1ZGVzKHBhdGgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoVmFsdWVBZ2FpbnN0T25lT2YoZmllbGQ6IE9wZXJhbmRGaWVsZCwgY3VycmVudFZhbHVlOiBhbnkpIHtcbiAgLy8gb25lT2ZNYXAg6YeM5bqU5b2T5Li6IHRhZ2dlZCBwYXRoXG4gIGNvbnN0IG9uZU9mTWFwID0gZ2V0T25lT2ZNYXAoZmllbGQpO1xuICAvLyDkvb/nlKjkuKTkuKogc2V0IOWkhOeQhuWkmuadoSBPbmVPZiDkuK3lrZjlnKjlhazlhbEgcGF0aCDnmoTmg4XlvaJcbiAgY29uc3QgZGlydHlQYXRoU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHZhbGlkUGF0aFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBPYmplY3QuZW50cmllcyhvbmVPZk1hcCkuZm9yRWFjaCgoW3ZhbHVlLCBwYXRoc10pID0+IHtcbiAgICBwYXRocy5mb3JFYWNoKHBhdGggPT4ge1xuICAgICAgKGNvbnZlcnRWYWx1ZSh2YWx1ZSwgZmllbGQudHlwZSkgPT09IGN1cnJlbnRWYWx1ZVxuICAgICAgICA/IHZhbGlkUGF0aFNldFxuICAgICAgICA6IGRpcnR5UGF0aFNldFxuICAgICAgKS5hZGQocGF0aCk7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGRpcnR5UGF0aHM6IEFycmF5LmZyb20oZGlydHlQYXRoU2V0KVxuICAgICAgLmZpbHRlcihpID0+ICF2YWxpZFBhdGhTZXQuaGFzKGkpKVxuICAgICAgLm1hcChwYXRoID0+IG5vcm1hbGl6ZVBhdGgocGF0aCkpLFxuICAgIHZhbGlkUGF0aHM6IEFycmF5LmZyb20odmFsaWRQYXRoU2V0KS5tYXAocGF0aCA9PiBub3JtYWxpemVQYXRoKHBhdGgpKSxcbiAgfTtcbn1cbiJdfQ==
|