@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
JavaScript
/**
* @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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