@alauda-fe/common
Version:
Alauda frontend team common codes.
92 lines • 11.3 kB
JavaScript
import { Directive, inject } from '@angular/core';
import { BaseResourceFormComponent } from 'ng-resource-form-util';
import { ValidateRowDuplicateService } from '../core/services/form-row-duplicate/form-row-duplicate.service';
import * as i0 from "@angular/core";
const missingKeyValidator = control => {
const [key, value] = control.value;
return value && !key ? { keyIsMissing: true } : null;
};
// 用以Form级别的键值映射对象的修改.
// 这个表单有些特别. 内部实现是以FormArray实现, 但对外暴露的是一个key->value对象.
export class BaseStringMapFormComponent extends BaseResourceFormComponent {
constructor() {
super(...arguments);
this.rowDupService = inject(ValidateRowDuplicateService);
}
createForm() {
return this.fb.array([]);
}
getDefaultFormModel() {
return [];
}
adaptResourceModel(resource) {
let newFormModel = Object.entries(resource || {});
if (newFormModel.length === 0) {
newFormModel = this.getDefaultFormModel();
}
return newFormModel;
}
adaptFormModel(formModel) {
return formModel
.filter(row => !!row[0])
.reduce((obj, [k, v]) => ({ ...obj, [k]: v }), {});
}
getOnFormArrayResizeFn() {
return () => this.createNewControl();
}
add(index = this.form.length) {
this.form.insert(index, this.getOnFormArrayResizeFn()());
this.cdr.markForCheck();
}
remove(index) {
this.form.removeAt(index);
this.cdr.markForCheck();
this.form.controls.forEach(c => c.updateValueAndValidity());
}
getPreviousKeys(index) {
return this.formModel
.slice(0, index)
.map(([key]) => key)
.filter(key => !!key);
}
getKeyValidators() {
return [];
}
getValueValidators() {
return [];
}
createNewControl() {
return this.fb.array([
['', this.getKeyValidators()],
['', this.getValueValidators()],
], [
missingKeyValidator,
(control) => {
if (control.controls[0].errors) {
return {
key: control.controls[0].errors,
};
}
if (control.controls[1].errors) {
return {
value: control.controls[1].errors,
};
}
return null;
},
this.rowDupService.createFormArrayValidator({
rowKeys: [{ key: ['0'] }],
formArray: this.form,
}),
]);
}
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵBaseStringMapFormComponent_BaseFactory; return function BaseStringMapFormComponent_Factory(t) { return (ɵBaseStringMapFormComponent_BaseFactory || (ɵBaseStringMapFormComponent_BaseFactory = i0.ɵɵgetInheritedFactory(BaseStringMapFormComponent)))(t || BaseStringMapFormComponent); }; })(); }
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: BaseStringMapFormComponent, standalone: true, features: [i0.ɵɵInheritDefinitionFeature] }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseStringMapFormComponent, [{
type: Directive,
args: [{
standalone: true,
}]
}], null, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zdHJpbmctbWFwLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2FycmF5LWZvcm0tdGFibGUvYmFzZS1zdHJpbmctbWFwLWZvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR2xFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDOztBQUk3RyxNQUFNLG1CQUFtQixHQUFnQixPQUFPLENBQUMsRUFBRTtJQUNqRCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbkMsT0FBTyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQsQ0FBQyxDQUFDO0FBRUYsc0JBQXNCO0FBQ3RCLHNEQUFzRDtBQUl0RCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEseUJBSS9DO0lBUEQ7O1FBUUUsa0JBQWEsR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztLQWtGckQ7SUFoRkMsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVRLG1CQUFtQjtRQUMxQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFUSxrQkFBa0IsQ0FBQyxRQUFtQjtRQUM3QyxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUss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RSxJQUFJLENBQUMsSUFBSTthQUNyQixDQUFDO1NBQ0gsQ0FDRixDQUFDO0lBQ0osQ0FBQzs0UUF0RlUsMEJBQTBCLFNBQTFCLDBCQUEwQjtvRUFBMUIsMEJBQTBCOztpRkFBMUIsMEJBQTBCO2NBSHRDLFNBQVM7ZUFBQztnQkFDVCxVQUFVLEVBQUUsSUFBSTthQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZVJlc291cmNlRm9ybUNvbXBvbmVudCB9IGZyb20gJ25nLXJlc291cmNlLWZvcm0tdXRpbCc7XG5cbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gJy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBWYWxpZGF0ZVJvd0R1cGxpY2F0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL3NlcnZpY2VzL2Zvcm0tcm93LWR1cGxpY2F0ZS9mb3JtLXJvdy1kdXBsaWNhdGUuc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIEtleVZhbHVlVHVwbGUgPSBbc3RyaW5nLCBzdHJpbmddO1xuXG5jb25zdCBtaXNzaW5nS2V5VmFsaWRhdG9yOiBWYWxpZGF0b3JGbiA9IGNvbnRyb2wgPT4ge1xuICBjb25zdCBba2V5LCB2YWx1ZV0gPSBjb250cm9sLnZhbHVlO1xuICByZXR1cm4gdmFsdWUgJiYgIWtleSA/IHsga2V5SXNNaXNzaW5nOiB0cnVlIH0gOiBudWxsO1xufTtcblxuLy8g55So5LulRm9ybee6p+WIq+eahOmUruWAvOaYoOWwhOWvueixoeeahOS/ruaUuS5cbi8vIOi/meS4quihqOWNleacieS6m+eJueWIqy4g5YaF6YOo5a6e546w5piv5LulRm9ybUFycmF55a6e546wLCDkvYblr7nlpJbmmrTpnLLnmoTmmK/kuIDkuKprZXktPnZhbHVl5a+56LGhLlxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEJhc2VTdHJpbmdNYXBGb3JtQ29tcG9uZW50IGV4dGVuZHMgQmFzZVJlc291cmNlRm9ybUNvbXBvbmVudDxcbiAgU3RyaW5nTWFwLFxuICBLZXlWYWx1ZVR1cGxlW10sXG4gIEZvcm1BcnJheVxuPiB7XG4gIHJvd0R1cFNlcnZpY2UgPSBpbmplY3QoVmFsaWRhdGVSb3dEdXBsaWNhdGVTZXJ2aWNlKTtcblxuICBjcmVhdGVGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZiLmFycmF5KFtdKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldERlZmF1bHRGb3JtTW9kZWwoKTogS2V5VmFsdWVUdXBsZVtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBvdmVycmlkZSBhZGFwdFJlc291cmNlTW9kZWwocmVzb3VyY2U6IFN0cmluZ01hcCkge1xuICAgIGxldCBuZXdGb3JtTW9kZWwgPSBPYmplY3QuZW50cmllcyhyZXNvdXJjZSB8fCB7fSk7XG4gICAgaWYgKG5ld0Zvcm1Nb2RlbC5sZW5ndGggPT09IDApIHtcbiAgICAgIG5ld0Zvcm1Nb2RlbCA9IHRoaXMuZ2V0RGVmYXVsdEZvcm1Nb2RlbCgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3Rm9ybU1vZGVsO1xuICB9XG5cbiAgb3ZlcnJpZGUgYWRhcHRGb3JtTW9kZWwoZm9ybU1vZGVsOiBLZXlWYWx1ZVR1cGxlW10pIHtcbiAgICByZXR1cm4gZm9ybU1vZGVsXG4gICAgICAuZmlsdGVyKHJvdyA9PiAhIXJvd1swXSlcbiAgICAgIC5yZWR1Y2UoKG9iaiwgW2ssIHZdKSA9PiAoeyAuLi5vYmosIFtrXTogdiB9KSwge30pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0T25Gb3JtQXJyYXlSZXNpemVGbigpIHtcbiAgICByZXR1cm4gKCkgPT4gdGhpcy5jcmVhdGVOZXdDb250cm9sKCk7XG4gIH1cblxuICBhZGQoaW5kZXggPSB0aGlzLmZvcm0ubGVuZ3RoKSB7XG4gICAgdGhpcy5mb3JtLmluc2VydChpbmRleCwgdGhpcy5nZXRPbkZvcm1BcnJheVJlc2l6ZUZuKCkoKSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZW1vdmUoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuZm9ybS5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLmZvckVhY2goYyA9PiBjLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UHJldmlvdXNLZXlzKGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtTW9kZWxcbiAgICAgIC5zbGljZSgwLCBpbmRleClcbiAgICAgIC5tYXAoKFtrZXldKSA9PiBrZXkpXG4gICAgICAuZmlsdGVyKGtleSA9PiAhIWtleSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0S2V5VmFsaWRhdG9ycygpOiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRWYWx1ZVZhbGlkYXRvcnMoKTogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3Q29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5mYi5hcnJheShcbiAgICAgIFtcbiAgICAgICAgWycnLCB0aGlzLmdldEtleVZhbGlkYXRvcnMoKV0sXG4gICAgICAgIFsnJywgdGhpcy5nZXRWYWx1ZVZhbGlkYXRvcnMoKV0sXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICBtaXNzaW5nS2V5VmFsaWRhdG9yLFxuICAgICAgICAoY29udHJvbDogRm9ybUFycmF5KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbnRyb2wuY29udHJvbHNbMF0uZXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBrZXk6IGNvbnRyb2wuY29udHJvbHNbMF0uZXJyb3JzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRyb2wuY29udHJvbHNbMV0uZXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWx1ZTogY29udHJvbC5jb250cm9sc1sxXS5lcnJvcnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5yb3dEdXBTZXJ2aWNlLmNyZWF0ZUZvcm1BcnJheVZhbGlkYXRvcih7XG4gICAgICAgICAgcm93S2V5czogW3sga2V5OiBbJzAnXSB9XSxcbiAgICAgICAgICBmb3JtQXJyYXk6IHRoaXMuZm9ybSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==