UNPKG

@lxlib/form

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.1.

1,015 lines 85.8 kB
/** * @fileoverview added by tsickle * Generated from: src/sf.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __assign, __decorate, __metadata, __read, __spread } from "tslib"; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Optional, Output, ViewEncapsulation, } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { ACLService } from '@lxlib/acl'; import { LXLIB_I18N_TOKEN, LxlibLocaleService } from '@lxlib/theme'; import { deepCopy, InputBoolean } from '@lxlib/util'; import { merge, Subject } from 'rxjs'; import { filter, takeUntil } from 'rxjs/operators'; import { LxlibFormConfig } from './config'; import { PropertyGroup } from './model/form.property'; import { FormPropertyFactory } from './model/form.property.factory'; import { TerminatorService } from './terminator.service'; import { di, FORMATMAPS, resolveIf, retrieveSchema } from './utils'; import { SchemaValidatorFactory } from './validator.factory'; import { WidgetFactory } from './widget.factory'; /** * @param {?} schemaValidatorFactory * @param {?} options * @return {?} */ export function useFactory(schemaValidatorFactory, options) { return new FormPropertyFactory(schemaValidatorFactory, options); } var SFComponent = /** @class */ (function () { function SFComponent(formPropertyFactory, terminator, options, dom, cdr, localeSrv, aclSrv, i18nSrv) { var _this = this; this.formPropertyFactory = formPropertyFactory; this.terminator = terminator; this.options = options; this.dom = dom; this.cdr = cdr; this.localeSrv = localeSrv; this.aclSrv = aclSrv; this.i18nSrv = i18nSrv; this.unsubscribe$ = new Subject(); this._renders = new Map(); this._valid = true; this._inited = false; this.locale = {}; this.rootProperty = null; // #region fields /** * 表单布局,等同 `nzLayout`,默认:horizontal */ this.layout = 'horizontal'; /** * 按钮 * - 值为 `null` 或 `undefined` 表示手动添加按钮,但保留容器 * - 值为 `none` 表示手动添加按钮,且不保留容器 * - 使用 `spanLabelFixed` 固定标签宽度时,若无 `render.class` 则默认为居中状态 */ this.button = {}; /** * 是否实时校验,默认:`true` * - `true` 每一次都校验 * - `false` 提交时校验 */ this.liveValidate = true; /** * 立即显示错误视觉 */ this.firstVisual = true; /** * 是否只展示错误视觉不显示错误文本 */ this.onlyVisual = false; /** * Whether to load status,when `true` reset button is disabled status, submit button is loading status */ this.loading = false; this.disabled = false; this.noColon = false; this.cleanValue = false; /** * 数据变更时回调 */ this.formChange = new EventEmitter(); /** * 提交表单时回调 */ this.formSubmit = new EventEmitter(); /** * 重置表单时回调 */ this.formReset = new EventEmitter(); /** * 表单校验结果回调 */ this.formError = new EventEmitter(); this.liveValidate = (/** @type {?} */ (options.liveValidate)); this.firstVisual = (/** @type {?} */ (options.firstVisual)); this.autocomplete = (/** @type {?} */ (options.autocomplete)); this.localeSrv.change.pipe(takeUntil(this.unsubscribe$)).subscribe((/** * @return {?} */ function () { _this.locale = _this.localeSrv.getData('sf'); if (_this._inited) { _this.validator({ emitError: false, onlyRoot: false }); _this.coverButtonProperty(); _this.cdr.markForCheck(); } })); /** @type {?} */ var refSchemas = [ this.aclSrv ? this.aclSrv.change : null, this.i18nSrv ? this.i18nSrv.change : null, ].filter((/** * @param {?} o * @return {?} */ function (o) { return o != null; })); if (refSchemas.length > 0) { merge.apply(void 0, __spread(((/** @type {?} */ (refSchemas))))).pipe(filter((/** * @return {?} */ function () { return _this._inited; })), takeUntil(this.unsubscribe$)) .subscribe((/** * @template THIS * @this {THIS} * @return {THIS} */ function () { return _this.refreshSchema(); })); } } Object.defineProperty(SFComponent.prototype, "mode", { get: /** * @return {?} */ function () { return this._mode; }, /** 表单模式 */ set: /** * 表单模式 * @param {?} value * @return {?} */ function (value) { switch (value) { case 'search': this.layout = 'inline'; this.firstVisual = false; this.liveValidate = false; if (this._btn) { this._btn.submit = this._btn.search; } break; case 'edit': this.layout = 'horizontal'; this.firstVisual = false; this.liveValidate = true; if (this._btn) { this._btn.submit = this._btn.edit; } break; } this._mode = value; }, enumerable: true, configurable: true }); Object.defineProperty(SFComponent.prototype, "valid", { // #endregion /** 表单校验状态 */ get: // #endregion /** * 表单校验状态 * @return {?} */ function () { return this._valid; }, enumerable: true, configurable: true }); Object.defineProperty(SFComponent.prototype, "value", { /** 表单值 */ get: /** * 表单值 * @return {?} */ function () { return this._item; }, enumerable: true, configurable: true }); /** * 根据路径获取表单元素属性 * @param path [路径](https://ng-alain.com/form/qa#path) */ /** * 根据路径获取表单元素属性 * @param {?} path [路径](https://ng-alain.com/form/qa#path) * @return {?} */ SFComponent.prototype.getProperty = /** * 根据路径获取表单元素属性 * @param {?} path [路径](https://ng-alain.com/form/qa#path) * @return {?} */ function (path) { return (/** @type {?} */ (this.rootProperty)).searchProperty(path); }; /** * 根据路径获取表单元素当前值 * @param path [路径](https://ng-alain.com/form/qa#path) */ /** * 根据路径获取表单元素当前值 * @param {?} path [路径](https://ng-alain.com/form/qa#path) * @return {?} */ SFComponent.prototype.getValue = /** * 根据路径获取表单元素当前值 * @param {?} path [路径](https://ng-alain.com/form/qa#path) * @return {?} */ function (path) { return (/** @type {?} */ (this.getProperty(path))).value; }; /** * 根据路径设置某个表单元素属性值 * @param path [路径](https://ng-alain.com/form/qa#path) * @param value 新值 */ /** * 根据路径设置某个表单元素属性值 * @template THIS * @this {THIS} * @param {?} path [路径](https://ng-alain.com/form/qa#path) * @param {?} value 新值 * @return {THIS} */ SFComponent.prototype.setValue = /** * 根据路径设置某个表单元素属性值 * @template THIS * @this {THIS} * @param {?} path [路径](https://ng-alain.com/form/qa#path) * @param {?} value 新值 * @return {THIS} */ function (path, value) { /** @type {?} */ var item = (/** @type {?} */ (this)).getProperty(path); if (!item) { throw new Error("Invalid path: " + path); } item.resetValue(value, false); return (/** @type {?} */ (this)); }; /** * @param {?} e * @return {?} */ SFComponent.prototype.onSubmit = /** * @param {?} e * @return {?} */ function (e) { e.preventDefault(); e.stopPropagation(); if (!this.liveValidate) this.validator(); if (!this.valid) return; this.formSubmit.emit(this.value); }; /** * @protected * @param {?} key * @return {?} */ SFComponent.prototype.fanyi = /** * @protected * @param {?} key * @return {?} */ function (key) { return (this.i18nSrv ? this.i18nSrv.fanyi(key) : '') || key; }; /** * @private * @param {?} ui * @return {?} */ SFComponent.prototype.inheritUI = /** * @private * @param {?} ui * @return {?} */ function (ui) { var _this = this; ['optionalHelp'].filter((/** * @param {?} key * @return {?} */ function (key) { return !!_this._defUi[key]; })).forEach((/** * @param {?} key * @return {?} */ function (key) { return (ui[key] = __assign(__assign({}, _this._defUi[key]), ui[key])); })); }; /** * @private * @return {?} */ SFComponent.prototype.coverProperty = /** * @private * @return {?} */ function () { var _this = this; /** @type {?} */ var isHorizontal = this.layout === 'horizontal'; /** @type {?} */ var _schema = deepCopy(this.schema); var definitions = _schema.definitions; /** @type {?} */ var inFn = (/** * @param {?} schema * @param {?} _parentSchema * @param {?} uiSchema * @param {?} parentUiSchema * @param {?} uiRes * @return {?} */ function (schema, _parentSchema, uiSchema, parentUiSchema, uiRes) { if (!Array.isArray(schema.required)) schema.required = []; Object.keys((/** @type {?} */ (schema.properties))).forEach((/** * @param {?} key * @return {?} */ function (key) { /** @type {?} */ var uiKey = "$" + key; /** @type {?} */ var property = retrieveSchema((/** @type {?} */ ((/** @type {?} */ (schema.properties))[key])), definitions); /** @type {?} */ var ui = (/** @type {?} */ (__assign(__assign(__assign(__assign(__assign(__assign({ widget: property.type }, (property.format && ((/** @type {?} */ (FORMATMAPS)))[property.format])), (typeof property.ui === 'string' ? { widget: property.ui } : null)), (!property.format && !property.ui && Array.isArray(property.enum) && property.enum.length > 0 ? { widget: 'select' } : null)), _this._defUi), ((/** @type {?} */ (property.ui)))), uiSchema[uiKey]))); // 继承父节点布局属性 if (isHorizontal) { if (parentUiSchema.spanLabelFixed) { if (!ui.spanLabelFixed) { ui.spanLabelFixed = parentUiSchema.spanLabelFixed; } } else { if (!ui.spanLabel) ui.spanLabel = typeof parentUiSchema.spanLabel === 'undefined' ? 5 : parentUiSchema.spanLabel; if (!ui.spanControl) ui.spanControl = typeof parentUiSchema.spanControl === 'undefined' ? 19 : parentUiSchema.spanControl; if (!ui.offsetControl) ui.offsetControl = typeof parentUiSchema.offsetControl === 'undefined' ? null : parentUiSchema.offsetControl; } } else { ui.spanLabel = null; ui.spanControl = null; ui.offsetControl = null; } if (ui.widget === 'date' && ui.end != null) { /** @type {?} */ var dateEndProperty = (/** @type {?} */ (schema.properties))[ui.end]; if (dateEndProperty) { dateEndProperty.ui = __assign(__assign({}, ((/** @type {?} */ (dateEndProperty.ui)))), { hidden: true }); } else { ui.end = null; } } _this.inheritUI(ui); if (ui.optionalHelp) { if (typeof ui.optionalHelp === 'string') { ui.optionalHelp = (/** @type {?} */ ({ text: ui.optionalHelp, })); } /** @type {?} */ var oh = (ui.optionalHelp = __assign({ text: '', icon: 'question-circle', placement: 'top', trigger: 'hover', mouseEnterDelay: 0.15, mouseLeaveDelay: 0.1 }, ui.optionalHelp)); if (oh.i18n) { oh.text = _this.fanyi(oh.i18n); } if (!oh.text) { ui.optionalHelp = undefined; } } if (ui.i18n) { property.title = _this.fanyi(ui.i18n); } if (ui.descriptionI18n) { property.description = _this.fanyi(ui.descriptionI18n); } if (property.description) { property._description = _this.dom.bypassSecurityTrustHtml(property.description); } ui.hidden = typeof ui.hidden === 'boolean' ? ui.hidden : false; if (ui.hidden === false && ui.acl && _this.aclSrv && !_this.aclSrv.can(ui.acl)) { ui.hidden = true; } uiRes[uiKey] = ui; delete property.ui; if (ui.hidden === true) { /** @type {?} */ var idx = (/** @type {?} */ (schema.required)).indexOf(key); if (idx !== -1) { (/** @type {?} */ (schema.required)).splice(idx, 1); } } if (property.items) { /** @type {?} */ var uiSchemaInArr = (uiSchema[uiKey] || {}).$items || {}; ui.$items = __assign(__assign(__assign({}, ((/** @type {?} */ (property.items.ui)))), uiSchemaInArr[uiKey]), ui.$items); inFn(property.items, property.items, uiSchemaInArr, ui.$items, ui.$items); } if (property.properties && Object.keys(property.properties).length) { inFn(property, schema, uiSchema[uiKey] || {}, ui, ui); } })); }); /** @type {?} */ var inIfFn = (/** * @param {?} schema * @param {?} ui * @return {?} */ function (schema, ui) { Object.keys((/** @type {?} */ (schema.properties))).forEach((/** * @param {?} key * @return {?} */ function (key) { /** @type {?} */ var property = (/** @type {?} */ (schema.properties))[key]; /** @type {?} */ var uiKey = "$" + key; resolveIf(property, ui[uiKey]); if (property.items) { inIfFn(property.items, ui[uiKey].$items); } if (property.properties) { inIfFn(property, ui[uiKey]); } })); }); if (this.ui == null) this.ui = {}; this._defUi = __assign(__assign(__assign({ onlyVisual: this.options.onlyVisual, size: this.options.size, liveValidate: this.liveValidate, firstVisual: this.firstVisual }, this.options.ui), _schema.ui), this.ui['*']); if (this.onlyVisual === true) { this._defUi.onlyVisual = true; } // root this._ui = __assign({}, this._defUi); inFn(_schema, _schema, this.ui, this.ui, this._ui); // cond resolveIf(_schema, this._ui); inIfFn(_schema, this._ui); this._schema = _schema; di(this._ui, 'cover schema & ui', this._ui, _schema); }; /** * @private * @return {?} */ SFComponent.prototype.coverButtonProperty = /** * @private * @return {?} */ function () { this._btn = __assign(__assign(__assign({ render: { size: 'default' } }, this.locale), this.options.button), ((/** @type {?} */ (this.button)))); /** @type {?} */ var firstKey = Object.keys(this._ui).find((/** * @param {?} w * @return {?} */ function (w) { return w.startsWith('$'); })); if (this.layout === 'horizontal') { /** @type {?} */ var btnUi = firstKey ? this._ui[firstKey] : this._defUi; if (!(/** @type {?} */ (this._btn.render)).grid) { (/** @type {?} */ (this._btn.render)).grid = { offset: btnUi.spanLabel, span: btnUi.spanControl, }; } // fixed label if ((/** @type {?} */ (this._btn.render)).spanLabelFixed == null) { (/** @type {?} */ (this._btn.render)).spanLabelFixed = btnUi.spanLabelFixed; } // 固定标签宽度时,若不指定样式,则默认居中 if (!(/** @type {?} */ (this._btn.render)).class && typeof btnUi.spanLabelFixed === 'number' && btnUi.spanLabelFixed > 0) { (/** @type {?} */ (this._btn.render)).class = 'text-center'; } } else { (/** @type {?} */ (this._btn.render)).grid = {}; } if (this._mode) { this.mode = this._mode; } di(this._ui, 'button property', this._btn); }; /** * @return {?} */ SFComponent.prototype.ngOnInit = /** * @return {?} */ function () { this._inited = true; this.validator(); }; /** * @param {?} changes * @return {?} */ SFComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (Object.keys(changes).length === 1 && (changes.loading || changes.disabled)) { this.cdr.detectChanges(); return; } this.refreshSchema(); }; /** @internal */ /** * \@internal * @param {?} path * @param {?} templateRef * @return {?} */ SFComponent.prototype._addTpl = /** * \@internal * @param {?} path * @param {?} templateRef * @return {?} */ function (path, templateRef) { if (this._renders.has(path)) { console.warn("Duplicate definition \"" + path + "\" custom widget"); return; } this._renders.set(path, templateRef); this.attachCustomRender(); }; /** * @private * @return {?} */ SFComponent.prototype.attachCustomRender = /** * @private * @return {?} */ function () { var _this = this; this._renders.forEach((/** * @param {?} tpl * @param {?} path * @return {?} */ function (tpl, path) { /** @type {?} */ var property = (/** @type {?} */ (_this.rootProperty)).searchProperty(path); if (property == null) { return; } property.ui._render = tpl; })); }; /** * @template THIS * @this {THIS} * @param {?=} options * @return {THIS} */ SFComponent.prototype.validator = /** * @template THIS * @this {THIS} * @param {?=} options * @return {THIS} */ function (options) { if (options === void 0) { options = { emitError: true, onlyRoot: true }; } /** @type {?} */ var fn = (/** * @param {?} property * @return {?} */ function (property) { property._runValidation(); if (!(property instanceof PropertyGroup) || !property.properties) return; if (Array.isArray(property.properties)) { property.properties.forEach((/** * @param {?} p * @return {?} */ function (p) { return fn(p); })); } else { Object.keys(property.properties).forEach((/** * @param {?} key * @return {?} */ function (key) { return fn(((/** @type {?} */ (property.properties)))[key]); })); } }); if (options.onlyRoot) { (/** @type {?} */ ((/** @type {?} */ (this)).rootProperty))._runValidation(); } else { fn((/** @type {?} */ ((/** @type {?} */ (this)).rootProperty))); } /** @type {?} */ var errors = (/** @type {?} */ ((/** @type {?} */ (this)).rootProperty)).errors; (/** @type {?} */ (this))._valid = !(errors && errors.length); if (options.emitError && !(/** @type {?} */ (this))._valid) (/** @type {?} */ (this)).formError.emit((/** @type {?} */ (errors))); (/** @type {?} */ (this)).cdr.detectChanges(); return (/** @type {?} */ (this)); }; /** * 刷新 Schema,一般需要动态修改 Schema 某个值时可以方便调用 */ /** * 刷新 Schema,一般需要动态修改 Schema 某个值时可以方便调用 * @template THIS * @this {THIS} * @param {?=} newSchema * @param {?=} newUI * @return {THIS} */ SFComponent.prototype.refreshSchema = /** * 刷新 Schema,一般需要动态修改 Schema 某个值时可以方便调用 * @template THIS * @this {THIS} * @param {?=} newSchema * @param {?=} newUI * @return {THIS} */ function (newSchema, newUI) { var _this = this; if (newSchema) (/** @type {?} */ (this)).schema = newSchema; if (newUI) (/** @type {?} */ (this)).ui = newUI; if (!(/** @type {?} */ (this)).schema || typeof (/** @type {?} */ (this)).schema.properties === 'undefined') throw new Error("Invalid Schema"); if ((/** @type {?} */ (this)).schema.ui && typeof (/** @type {?} */ (this)).schema.ui === 'string') throw new Error("Don't support string with root ui property"); (/** @type {?} */ (this)).schema.type = 'object'; (/** @type {?} */ (this))._formData = __assign({}, (/** @type {?} */ (this)).formData); if ((/** @type {?} */ (this))._inited) (/** @type {?} */ (this)).terminator.destroy(); (/** @type {?} */ (this)).cleanRootSub(); (/** @type {?} */ (this)).coverProperty(); (/** @type {?} */ (this)).coverButtonProperty(); (/** @type {?} */ (this)).rootProperty = (/** @type {?} */ (this)).formPropertyFactory.createProperty((/** @type {?} */ (this))._schema, (/** @type {?} */ (this))._ui, (/** @type {?} */ (this)).formData); (/** @type {?} */ (this)).attachCustomRender(); (/** @type {?} */ (this)).cdr.detectChanges(); (/** @type {?} */ (this)).reset(); /** @type {?} */ var isFirst = true; (/** @type {?} */ (this)).rootProperty.valueChanges.subscribe((/** * @param {?} value * @return {?} */ function (value) { (/** @type {?} */ (_this))._item = __assign(__assign({}, ((/** @type {?} */ (_this)).cleanValue ? null : (/** @type {?} */ (_this)).formData)), value); if (isFirst) { isFirst = false; return; } (/** @type {?} */ (_this)).formChange.emit((/** @type {?} */ (_this))._item); })); (/** @type {?} */ (this)).rootProperty.errorsChanges.subscribe((/** * @param {?} errors * @return {?} */ function (errors) { (/** @type {?} */ (_this))._valid = !(errors && errors.length); (/** @type {?} */ (_this)).formError.emit((/** @type {?} */ (errors))); (/** @type {?} */ (_this)).cdr.detectChanges(); })); return (/** @type {?} */ (this)); }; /** * 重置表单 * @param [emit] 是否触发 `formReset` 事件,默认:`false` */ /** * 重置表单 * @template THIS * @this {THIS} * @param {?=} emit * @return {THIS} */ SFComponent.prototype.reset = /** * 重置表单 * @template THIS * @this {THIS} * @param {?=} emit * @return {THIS} */ function (emit) { var _this = this; if (emit === void 0) { emit = false; } (/** @type {?} */ ((/** @type {?} */ (this)).rootProperty)).resetValue((/** @type {?} */ (this)).formData, false); Promise.resolve().then((/** * @return {?} */ function () { return (/** @type {?} */ (_this)).cdr.detectChanges(); })); if (emit) { (/** @type {?} */ (this)).formReset.emit((/** @type {?} */ (this)).value); } return (/** @type {?} */ (this)); }; /** * @private * @return {?} */ SFComponent.prototype.cleanRootSub = /** * @private * @return {?} */ function () { if (!this.rootProperty) return; this.rootProperty.errorsChanges.unsubscribe(); this.rootProperty.valueChanges.unsubscribe(); }; /** * @return {?} */ SFComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.cleanRootSub(); this.terminator.destroy(); var unsubscribe$ = this.unsubscribe$; unsubscribe$.next(); unsubscribe$.complete(); }; SFComponent.decorators = [ { type: Component, args: [{ selector: 'sf, [sf]', exportAs: 'sf', template: "<ng-template #con>\n <ng-content></ng-content>\n</ng-template>\n<form nz-form [nzLayout]=\"layout\" (submit)=\"onSubmit($event)\" [attr.autocomplete]=\"autocomplete\">\n <sf-item [formProperty]=\"rootProperty\"></sf-item>\n <ng-container *ngIf=\"button !== 'none'; else con\">\n <nz-form-item [ngClass]=\"_btn.render!.class\" class=\"sf-btns\" [fixed-label]=\"_btn.render!.spanLabelFixed\">\n <div nz-col\n class=\"ant-form-item-control\"\n [nzSpan]=\"_btn.render!.grid!.span\"\n [nzOffset]=\"_btn.render!.grid!.offset\"\n [nzXs]=\"_btn.render!.grid!.xs\"\n [nzSm]=\"_btn.render!.grid!.sm\"\n [nzMd]=\"_btn.render!.grid!.md\"\n [nzLg]=\"_btn.render!.grid!.lg\"\n [nzXl]=\"_btn.render!.grid!.xl\"\n [nzXXl]=\"_btn.render!.grid!.xxl\">\n <div class=\"ant-form-item-control-input\">\n <div class=\"ant-form-item-control-input-content\">\n <ng-container *ngIf=\"button; else con\">\n <button type=\"submit\"\n nz-button\n data-type=\"submit\"\n [nzType]=\"_btn.submit_type\"\n [nzSize]=\"_btn.render!.size\"\n [nzLoading]=\"loading\"\n [disabled]=\"liveValidate && !valid\">\n <i *ngIf=\"_btn.submit_icon\"\n nz-icon\n [nzType]=\"_btn.submit_icon.type\"\n [nzTheme]=\"_btn.submit_icon.theme\"\n [nzTwotoneColor]=\"_btn.submit_icon.twoToneColor\"\n [nzIconfont]=\"_btn.submit_icon.iconfont\"></i>\n {{_btn.submit}}\n </button>\n <button *ngIf=\"_btn.reset\"\n type=\"button\"\n nz-button\n data-type=\"reset\"\n [nzType]=\"_btn.reset_type\"\n [nzSize]=\"_btn.render!.size\"\n [disabled]=\"loading\"\n (click)=\"reset(true)\">\n <i *ngIf=\"_btn.reset_icon\"\n nz-icon\n [nzType]=\"_btn.reset_icon.type\"\n [nzTheme]=\"_btn.reset_icon.theme\"\n [nzTwotoneColor]=\"_btn.reset_icon.twoToneColor\"\n [nzIconfont]=\"_btn.reset_icon.iconfont\"></i>\n {{_btn.reset}}\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n </nz-form-item>\n </ng-container>\n</form>\n", providers: [ WidgetFactory, { provide: FormPropertyFactory, useFactory: useFactory, deps: [SchemaValidatorFactory, LxlibFormConfig], }, TerminatorService, ], host: { '[class.sf]': 'true', '[class.sf__inline]': "layout === 'inline'", '[class.sf__search]': "mode === 'search'", '[class.sf__edit]': "mode === 'edit'", '[class.sf__no-error]': "onlyVisual", '[class.sf__no-colon]': "noColon", }, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None }] } ]; /** @nocollapse */ SFComponent.ctorParameters = function () { return [ { type: FormPropertyFactory }, { type: TerminatorService }, { type: LxlibFormConfig }, { type: DomSanitizer }, { type: ChangeDetectorRef }, { type: LxlibLocaleService }, { type: ACLService, decorators: [{ type: Optional }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [LXLIB_I18N_TOKEN,] }] } ]; }; SFComponent.propDecorators = { layout: [{ type: Input }], schema: [{ type: Input }], ui: [{ type: Input }], formData: [{ type: Input }], button: [{ type: Input }], liveValidate: [{ type: Input }], autocomplete: [{ type: Input }], firstVisual: [{ type: Input }], onlyVisual: [{ type: Input }], mode: [{ type: Input }], loading: [{ type: Input }], disabled: [{ type: Input }], noColon: [{ type: Input }], cleanValue: [{ type: Input }], formChange: [{ type: Output }], formSubmit: [{ type: Output }], formReset: [{ type: Output }], formError: [{ type: Output }] }; __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "liveValidate", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "firstVisual", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "onlyVisual", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "loading", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "disabled", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "noColon", void 0); __decorate([ InputBoolean(), __metadata("design:type", Object) ], SFComponent.prototype, "cleanValue", void 0); return SFComponent; }()); export { SFComponent }; if (false) { /** * @type {?} * @private */ SFComponent.prototype.unsubscribe$; /** * @type {?} * @private */ SFComponent.prototype._renders; /** * @type {?} * @private */ SFComponent.prototype._item; /** * @type {?} * @private */ SFComponent.prototype._valid; /** * @type {?} * @private */ SFComponent.prototype._defUi; /** * @type {?} * @private */ SFComponent.prototype._inited; /** @type {?} */ SFComponent.prototype.locale; /** @type {?} */ SFComponent.prototype.rootProperty; /** @type {?} */ SFComponent.prototype._formData; /** @type {?} */ SFComponent.prototype._btn; /** @type {?} */ SFComponent.prototype._schema; /** @type {?} */ SFComponent.prototype._ui; /** * 表单布局,等同 `nzLayout`,默认:horizontal * @type {?} */ SFComponent.prototype.layout; /** * JSON Schema * @type {?} */ SFComponent.prototype.schema; /** * UI Schema * @type {?} */ SFComponent.prototype.ui; /** * 表单默认值 * @type {?} */ SFComponent.prototype.formData; /** * 按钮 * - 值为 `null` 或 `undefined` 表示手动添加按钮,但保留容器 * - 值为 `none` 表示手动添加按钮,且不保留容器 * - 使用 `spanLabelFixed` 固定标签宽度时,若无 `render.class` 则默认为居中状态 * @type {?} */ SFComponent.prototype.button; /** * 是否实时校验,默认:`true` * - `true` 每一次都校验 * - `false` 提交时校验 * @type {?} */ SFComponent.prototype.liveValidate; /** * 指定表单 `autocomplete` 值 * @type {?} */ SFComponent.prototype.autocomplete; /** * 立即显示错误视觉 * @type {?} */ SFComponent.prototype.firstVisual; /** * 是否只展示错误视觉不显示错误文本 * @type {?} */ SFComponent.prototype.onlyVisual; /** * @type {?} * @private */ SFComponent.prototype._mode; /** * Whether to load status,when `true` reset button is disabled status, submit button is loading status * @type {?} */ SFComponent.prototype.loading; /** @type {?} */ SFComponent.prototype.disabled; /** @type {?} */ SFComponent.prototype.noColon; /** @type {?} */ SFComponent.prototype.cleanValue; /** * 数据变更时回调 * @type {?} */ SFComponent.prototype.formChange; /** * 提交表单时回调 * @type {?} */ SFComponent.prototype.formSubmit; /** * 重置表单时回调 * @type {?} */ SFComponent.prototype.formReset; /** * 表单校验结果回调 * @type {?} */ SFComponent.prototype.formError; /** * @type {?} * @private */ SFComponent.prototype.formPropertyFactory; /** * @type {?} * @private */ SFComponent.prototype.terminator; /** * @type {?} * @private */ SFComponent.prototype.options; /** * @type {?} * @private */ SFComponent.prototype.dom; /** * @type {?} * @private */ SFComponent.prototype.cdr; /** * @type {?} * @private */ SFComponent.prototype.localeSrv; /** * @type {?} * @private */ SFComponent.prototype.aclSrv; /** * @type {?} * @private */ SFComponent.prototype.i18nSrv; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2YuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGx4bGliL2Zvcm0vIiwic291cmNlcyI6WyJzcmMvc2YuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUlOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQW9CLGdCQUFnQixFQUFFLGtCQUFrQixFQUFjLE1BQU0sY0FBYyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJELE9BQU8sRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUczQyxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7QUFF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