@ohayojp/form
Version:
918 lines • 86.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: src/sf.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __decorate, __metadata } from "tslib";
import { Platform } from '@angular/cdk/platform';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Optional, Output, ViewEncapsulation, } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { ACLService } from '@ohayojp/acl';
import { OHAYO_I18N_TOKEN, OhayoLocaleService } from '@ohayojp/theme';
import { OhayoConfigService, deepCopy, InputBoolean } from '@ohayojp/util';
import { merge, Subject } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';
import { mergeConfig } from './config';
import { PropertyGroup } from './model/form.property';
import { FormPropertyFactory } from './model/form.property.factory';
import { TerminatorService } from './terminator.service';
import { di, resolveIfSchema, retrieveSchema } from './utils';
import { SchemaValidatorFactory } from './validator.factory';
import { WidgetFactory } from './widget.factory';
/**
* @param {?} schemaValidatorFactory
* @param {?} cogSrv
* @return {?}
*/
export function useFactory(schemaValidatorFactory, cogSrv) {
return new FormPropertyFactory(schemaValidatorFactory, cogSrv);
}
export class SFComponent {
/**
* @param {?} formPropertyFactory
* @param {?} terminator
* @param {?} dom
* @param {?} cdr
* @param {?} localeSrv
* @param {?} aclSrv
* @param {?} i18nSrv
* @param {?} cogSrv
* @param {?} platform
*/
constructor(formPropertyFactory, terminator, dom, cdr, localeSrv, aclSrv, i18nSrv, cogSrv, platform) {
this.formPropertyFactory = formPropertyFactory;
this.terminator = terminator;
this.dom = dom;
this.cdr = cdr;
this.localeSrv = localeSrv;
this.aclSrv = aclSrv;
this.i18nSrv = i18nSrv;
this.platform = platform;
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;
this.compact = 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.formValueChange = new EventEmitter();
this.formChange = new EventEmitter();
this.formSubmit = new EventEmitter();
this.formReset = new EventEmitter();
this.formError = new EventEmitter();
this.options = mergeConfig(cogSrv);
this.liveValidate = (/** @type {?} */ (this.options.liveValidate));
this.firstVisual = (/** @type {?} */ (this.options.firstVisual));
this.autocomplete = (/** @type {?} */ (this.options.autocomplete));
this.localeSrv.change.pipe(takeUntil(this.unsubscribe$)).subscribe((/**
* @return {?}
*/
() => {
this.locale = this.localeSrv.getData('sf');
if (this._inited) {
this.validator({ emitError: false, onlyRoot: false });
this.coverButtonProperty();
this.cdr.markForCheck();
}
}));
/** @type {?} */
const refSchemas = [
this.aclSrv ? this.aclSrv.change : null,
this.i18nSrv ? this.i18nSrv.change : null,
].filter((/**
* @param {?} o
* @return {?}
*/
o => o != null));
if (refSchemas.length > 0) {
merge(...((/** @type {?} */ (refSchemas))))
.pipe(filter((/**
* @return {?}
*/
() => this._inited)), takeUntil(this.unsubscribe$))
.subscribe((/**
* @template THIS
* @this {THIS}
* @return {THIS}
*/
() => this.refreshSchema()));
}
}
/**
* 表单模式
* @param {?} value
* @return {?}
*/
set mode(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;
}
/**
* @return {?}
*/
get mode() {
return this._mode;
}
// #endregion
/**
* 表单校验状态
* @return {?}
*/
get valid() {
return this._valid;
}
/**
* 表单值
* @return {?}
*/
get value() {
return this._item;
}
/**
* 根据路径获取表单元素属性
* @param {?} path [路径](https://ohayojp.com/form/qa#path)
* @return {?}
*/
getProperty(path) {
return (/** @type {?} */ (this.rootProperty)).searchProperty(path);
}
/**
* 根据路径获取表单元素当前值
* @param {?} path [路径](https://ohayojp.com/form/qa#path)
* @return {?}
*/
getValue(path) {
return (/** @type {?} */ (this.getProperty(path))).value;
}
/**
* 根据路径设置某个表单元素属性值
* @template THIS
* @this {THIS}
* @param {?} path [路径](https://ohayojp.com/form/qa#path)
* @param {?} value 新值
* @return {THIS}
*/
setValue(path, value) {
/** @type {?} */
const item = (/** @type {?} */ (this)).getProperty(path);
if (!item) {
throw new Error(`Invalid path: ${path}`);
}
item.resetValue(value, false);
return (/** @type {?} */ (this));
}
/**
* @param {?} e
* @return {?}
*/
onSubmit(e) {
e.preventDefault();
e.stopPropagation();
if (!this.liveValidate)
this.validator();
if (!this.valid)
return;
this.formSubmit.emit(this.value);
}
/**
* @protected
* @param {?} key
* @return {?}
*/
fanyi(key) {
return (this.i18nSrv ? this.i18nSrv.fanyi(key) : '') || key;
}
/**
* @private
* @param {?} ui
* @return {?}
*/
inheritUI(ui) {
['optionalHelp'].filter((/**
* @param {?} key
* @return {?}
*/
key => !!this._defUi[key])).forEach((/**
* @param {?} key
* @return {?}
*/
key => (ui[key] = Object.assign(Object.assign({}, this._defUi[key]), ui[key]))));
}
/**
* @private
* @return {?}
*/
coverProperty() {
/** @type {?} */
const isHorizontal = this.layout === 'horizontal';
/** @type {?} */
const _schema = deepCopy(this.schema);
const { definitions } = _schema;
/** @type {?} */
const inFn = (/**
* @param {?} schema
* @param {?} _parentSchema
* @param {?} uiSchema
* @param {?} parentUiSchema
* @param {?} uiRes
* @return {?}
*/
(schema, _parentSchema, uiSchema, parentUiSchema, uiRes) => {
if (!Array.isArray(schema.required))
schema.required = [];
Object.keys((/** @type {?} */ (schema.properties))).forEach((/**
* @param {?} key
* @return {?}
*/
key => {
/** @type {?} */
const uiKey = `$${key}`;
/** @type {?} */
const property = retrieveSchema((/** @type {?} */ ((/** @type {?} */ (schema.properties))[key])), definitions);
/** @type {?} */
const ui = (/** @type {?} */ (Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ widget: property.type }, (property.format && ((/** @type {?} */ (this.options.formatMap)))[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;
}
// 内联强制清理 `grid` 参数
if (this.layout === 'inline') {
delete ui.grid;
}
// 非水平布局强制清理 `spanLabelFixed` 值
if (this.layout !== 'horizontal') {
ui.spanLabelFixed = null;
}
// 当指定标签为固定宽度时无须指定 `spanLabel`,`spanControl`
if (ui.spanLabelFixed != null && ui.spanLabelFixed > 0) {
ui.spanLabel = null;
ui.spanControl = null;
}
if (ui.widget === 'date' && ui.end != null) {
/** @type {?} */
const dateEndProperty = (/** @type {?} */ (schema.properties))[ui.end];
if (dateEndProperty) {
dateEndProperty.ui = Object.assign(Object.assign({}, ((/** @type {?} */ (dateEndProperty.ui)))), { widget: ui.widget, hidden: true });
}
else {
ui.end = null;
}
}
this.inheritUI(ui);
if (ui.optionalHelp) {
if (typeof ui.optionalHelp === 'string') {
ui.optionalHelp = (/** @type {?} */ ({
text: ui.optionalHelp,
}));
}
/** @type {?} */
const oh = (ui.optionalHelp = Object.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 {?} */
const idx = (/** @type {?} */ (schema.required)).indexOf(key);
if (idx !== -1) {
(/** @type {?} */ (schema.required)).splice(idx, 1);
}
}
if (property.items) {
/** @type {?} */
const uiSchemaInArr = (uiSchema[uiKey] || {}).$items || {};
ui.$items = Object.assign(Object.assign(Object.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);
}
}));
});
if (this.ui == null)
this.ui = {};
this._defUi = Object.assign(Object.assign(Object.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;
}
// 内联强制清理 `grid` 参数
if (this.layout === 'inline') {
delete this._defUi.grid;
}
// root
this._ui = Object.assign({}, this._defUi);
inFn(_schema, _schema, this.ui, this.ui, this._ui);
// cond
resolveIfSchema(_schema, this._ui);
this._schema = _schema;
di(this._ui, 'cover schema & ui', this._ui, _schema);
}
/**
* @private
* @return {?}
*/
coverButtonProperty() {
this._btn = Object.assign(Object.assign(Object.assign({ render: { size: 'default' } }, this.locale), this.options.button), ((/** @type {?} */ (this.button))));
/** @type {?} */
const firstKey = Object.keys(this._ui).find((/**
* @param {?} w
* @return {?}
*/
w => w.startsWith('$')));
/** @type {?} */
const btnRender = (/** @type {?} */ (this._btn.render));
if (this.layout === 'horizontal') {
/** @type {?} */
const btnUi = firstKey ? this._ui[firstKey] : this._defUi;
if (!btnRender.grid) {
btnRender.grid = {
offset: btnUi.spanLabel,
span: btnUi.spanControl,
};
}
// fixed label
if (btnRender.spanLabelFixed == null) {
btnRender.spanLabelFixed = btnUi.spanLabelFixed;
}
// 固定标签宽度时,若不指定样式,则默认居中
if (!btnRender.class && typeof btnUi.spanLabelFixed === 'number' && btnUi.spanLabelFixed > 0) {
btnRender.class = 'text-center';
}
}
else {
btnRender.grid = {};
}
if (this._mode) {
this.mode = this._mode;
}
di(this._ui, 'button property', this._btn);
}
/**
* @return {?}
*/
ngOnInit() {
if (!this.platform.isBrowser) {
return;
}
this._inited = true;
this.validator();
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (Object.keys(changes).length === 1 && (changes.loading || changes.disabled)) {
this.cdr.detectChanges();
return;
}
this.refreshSchema();
}
/**
* \@internal
* @param {?} path
* @param {?} templateRef
* @return {?}
*/
_addTpl(path, templateRef) {
if (this._renders.has(path)) {
console.warn(`Duplicate definition "${path}" custom widget`);
return;
}
this._renders.set(path, templateRef);
this.attachCustomRender();
}
/**
* @private
* @return {?}
*/
attachCustomRender() {
this._renders.forEach((/**
* @param {?} tpl
* @param {?} path
* @return {?}
*/
(tpl, path) => {
/** @type {?} */
const property = (/** @type {?} */ (this.rootProperty)).searchProperty(path);
if (property == null) {
return;
}
property.ui._render = tpl;
}));
}
/**
* @template THIS
* @this {THIS}
* @param {?=} options
* @return {THIS}
*/
validator(options = { emitError: true, onlyRoot: true }) {
if (!(/** @type {?} */ (this)).platform.isBrowser) {
return (/** @type {?} */ (this));
}
/** @type {?} */
const fn = (/**
* @param {?} property
* @return {?}
*/
(property) => {
property._runValidation();
if (!(property instanceof PropertyGroup) || !property.properties)
return;
if (Array.isArray(property.properties)) {
property.properties.forEach((/**
* @param {?} p
* @return {?}
*/
p => fn(p)));
}
else {
Object.keys(property.properties).forEach((/**
* @param {?} key
* @return {?}
*/
key => fn(((/** @type {?} */ (property.properties)))[key])));
}
});
if (options.onlyRoot) {
(/** @type {?} */ ((/** @type {?} */ (this)).rootProperty))._runValidation();
}
else {
fn((/** @type {?} */ ((/** @type {?} */ (this)).rootProperty)));
}
/** @type {?} */
const 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,当指定 `newSchema` 表示替换当前的 Schema
*
* 若希望对某个表单元素进行刷新请使用:
* ```
* // 获取某个元素
* const statusProperty = this.sf.getProperty('/status')!;
* // 重置 `schema` 或 `ui` 参数
* statusProperty.schema.enum = ['1', '2', '3'];
* // 调用 `reset` 重置初始值
* statusProperty.widget.reset('2');
* ```
* @template THIS
* @this {THIS}
* @param {?=} newSchema
* @param {?=} newUI
* @return {THIS}
*/
refreshSchema(newSchema, newUI) {
if (!(/** @type {?} */ (this)).platform.isBrowser) {
return (/** @type {?} */ (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 = Object.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 {?} */
let isFirst = true;
(/** @type {?} */ (this)).rootProperty.valueChanges.subscribe((/**
* @param {?} res
* @return {?}
*/
res => {
(/** @type {?} */ (this))._item = Object.assign(Object.assign({}, ((/** @type {?} */ (this)).cleanValue ? null : (/** @type {?} */ (this)).formData)), res.value);
if (isFirst) {
isFirst = false;
return;
}
(/** @type {?} */ (this)).formChange.emit((/** @type {?} */ (this))._item);
(/** @type {?} */ (this)).formValueChange.emit({ value: (/** @type {?} */ (this))._item, path: res.path, pathValue: res.pathValue });
}));
(/** @type {?} */ (this)).rootProperty.errorsChanges.subscribe((/**
* @param {?} errors
* @return {?}
*/
errors => {
(/** @type {?} */ (this))._valid = !(errors && errors.length);
(/** @type {?} */ (this)).formError.emit((/** @type {?} */ (errors)));
(/** @type {?} */ (this)).cdr.detectChanges();
}));
return (/** @type {?} */ (this));
}
/**
* 重置表单
* @template THIS
* @this {THIS}
* @param {?=} emit
* @return {THIS}
*/
reset(emit = false) {
if (!(/** @type {?} */ (this)).platform.isBrowser) {
return (/** @type {?} */ (this));
}
(/** @type {?} */ ((/** @type {?} */ (this)).rootProperty)).resetValue((/** @type {?} */ (this)).formData, false);
Promise.resolve().then((/**
* @return {?}
*/
() => (/** @type {?} */ (this)).cdr.detectChanges()));
if (emit) {
(/** @type {?} */ (this)).formReset.emit((/** @type {?} */ (this)).value);
}
return (/** @type {?} */ (this));
}
/**
* @private
* @return {?}
*/
cleanRootSub() {
if (!this.rootProperty)
return;
this.rootProperty.errorsChanges.unsubscribe();
this.rootProperty.valueChanges.unsubscribe();
}
/**
* @return {?}
*/
ngOnDestroy() {
this.cleanRootSub();
this.terminator.destroy();
const { unsubscribe$ } = this;
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\n 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 >\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\n 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 >\n <i\n *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\"\n ></i>\n {{ _btn.submit }}\n </button>\n <button\n *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 >\n <i\n *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\"\n ></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,
deps: [SchemaValidatorFactory, OhayoConfigService],
},
TerminatorService,
],
host: {
'[class.sf]': 'true',
'[class.sf__inline]': `layout === 'inline'`,
'[class.sf__horizontal]': `layout === 'horizontal'`,
'[class.sf__search]': `mode === 'search'`,
'[class.sf__edit]': `mode === 'edit'`,
'[class.sf__no-error]': `onlyVisual`,
'[class.sf__no-colon]': `noColon`,
'[class.sf__compact]': `compact`,
},
preserveWhitespaces: false,
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
SFComponent.ctorParameters = () => [
{ type: FormPropertyFactory },
{ type: TerminatorService },
{ type: DomSanitizer },
{ type: ChangeDetectorRef },
{ type: OhayoLocaleService },
{ type: ACLService, decorators: [{ type: Optional }] },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [OHAYO_I18N_TOKEN,] }] },
{ type: OhayoConfigService },
{ type: Platform }
];
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 }],
compact: [{ type: Input }],
mode: [{ type: Input }],
loading: [{ type: Input }],
disabled: [{ type: Input }],
noColon: [{ type: Input }],
cleanValue: [{ type: Input }],
formValueChange: [{ type: Output }],
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, "compact", 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);
if (false) {
/** @type {?} */
SFComponent.ngAcceptInputType_liveValidate;
/** @type {?} */
SFComponent.ngAcceptInputType_firstVisual;
/** @type {?} */
SFComponent.ngAcceptInputType_onlyVisual;
/** @type {?} */
SFComponent.ngAcceptInputType_compact;
/** @type {?} */
SFComponent.ngAcceptInputType_loading;
/** @type {?} */
SFComponent.ngAcceptInputType_disabled;
/** @type {?} */
SFComponent.ngAcceptInputType_noColon;
/** @type {?} */
SFComponent.ngAcceptInputType_cleanValue;
/**
* @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 {?} */
SFComponent.prototype.options;
/** @type {?} */
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 {?} */
SFComponent.prototype.compact;
/**
* @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.formValueChange;
/** @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.dom;
/**
* @type {?}
* @private
*/
SFComponent.prototype.cdr;
/**
* @type {?}
* @private
*/
SFComponent.prototype.localeSrv;
/**
* @type {?}
* @private
*/
SFComponent.prototype.aclSrv;
/**
* @type {?}
* @private
*/
SFComponent.prototype.i18nSrv;
/**
* @type {?}
* @private
*/
SFComponent.prototype.platform;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2YuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0vIiwic291cmNlcyI6WyJzcmMvc2YuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFJTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFvQixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxrQkFBa0IsRUFBK0IsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RyxPQUFPLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHdkMsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFC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