UNPKG

@ohayojp/form

Version:
150 lines (149 loc) 5.74 kB
import { Platform } from '@angular/cdk/platform'; import { ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChange, SimpleChanges } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { ACLService } from '@ohayojp/acl'; import { OhayoI18NService, OhayoLocaleService, LocaleData } from '@ohayojp/theme'; import { OhayoConfigService, OhayoSFConfig, BooleanInput } from '@ohayojp/util'; import { ErrorData } from './errors'; import { SFButton, SFLayout, SFValueChange } from './interface'; import { FormProperty } from './model/form.property'; import { FormPropertyFactory } from './model/form.property.factory'; import { SFSchema } from './schema/index'; import { SFUISchema } from './schema/ui'; import { TerminatorService } from './terminator.service'; import { SchemaValidatorFactory } from './validator.factory'; export declare function useFactory(schemaValidatorFactory: SchemaValidatorFactory, cogSrv: OhayoConfigService): FormPropertyFactory; export declare type SFMode = 'default' | 'search' | 'edit'; export declare class SFComponent implements OnInit, OnChanges, OnDestroy { private formPropertyFactory; private terminator; private dom; private cdr; private localeSrv; private aclSrv; private i18nSrv; private platform; static ngAcceptInputType_liveValidate: BooleanInput; static ngAcceptInputType_firstVisual: BooleanInput; static ngAcceptInputType_onlyVisual: BooleanInput; static ngAcceptInputType_compact: BooleanInput; static ngAcceptInputType_loading: BooleanInput; static ngAcceptInputType_disabled: BooleanInput; static ngAcceptInputType_noColon: BooleanInput; static ngAcceptInputType_cleanValue: BooleanInput; private unsubscribe$; private _renders; private _item; private _valid; private _defUi; readonly options: OhayoSFConfig; _inited: boolean; locale: LocaleData; rootProperty: FormProperty | null; _formData: {}; _btn: SFButton; _schema: SFSchema; _ui: SFUISchema; /** 表单布局,等同 `nzLayout`,默认:horizontal */ layout: SFLayout; /** JSON Schema */ schema: SFSchema; /** UI Schema */ ui: SFUISchema; /** 表单默认值 */ formData: {}; /** * 按钮 * - 值为 `null` 或 `undefined` 表示手动添加按钮,但保留容器 * - 值为 `none` 表示手动添加按钮,且不保留容器 * - 使用 `spanLabelFixed` 固定标签宽度时,若无 `render.class` 则默认为居中状态 */ button: SFButton | 'none'; /** * 是否实时校验,默认:`true` * - `true` 每一次都校验 * - `false` 提交时校验 */ liveValidate: boolean; /** 指定表单 `autocomplete` 值 */ autocomplete: 'on' | 'off'; /** 立即显示错误视觉 */ firstVisual: boolean; /** 是否只展示错误视觉不显示错误文本 */ onlyVisual: boolean; compact: boolean; /** 表单模式 */ set mode(value: SFMode); get mode(): SFMode; private _mode; /** * Whether to load status,when `true` reset button is disabled status, submit button is loading status */ loading: boolean; disabled: boolean; noColon: boolean; cleanValue: boolean; readonly formValueChange: EventEmitter<SFValueChange>; readonly formChange: EventEmitter<{}>; readonly formSubmit: EventEmitter<{}>; readonly formReset: EventEmitter<{}>; readonly formError: EventEmitter<ErrorData[]>; /** 表单校验状态 */ get valid(): boolean; /** 表单值 */ get value(): { [key: string]: any; }; /** * 根据路径获取表单元素属性 * @param path [路径](https://ohayojp.com/form/qa#path) */ getProperty(path: string): FormProperty | null; /** * 根据路径获取表单元素当前值 * @param path [路径](https://ohayojp.com/form/qa#path) */ getValue(path: string): any; /** * 根据路径设置某个表单元素属性值 * @param path [路径](https://ohayojp.com/form/qa#path) * @param value 新值 */ setValue(path: string, value: any): this; onSubmit(e: Event): void; constructor(formPropertyFactory: FormPropertyFactory, terminator: TerminatorService, dom: DomSanitizer, cdr: ChangeDetectorRef, localeSrv: OhayoLocaleService, aclSrv: ACLService, i18nSrv: OhayoI18NService, cogSrv: OhayoConfigService, platform: Platform); protected fanyi(key: string): string; private inheritUI; private coverProperty; private coverButtonProperty; ngOnInit(): void; ngOnChanges(changes: { [P in keyof this]?: SimpleChange; } & SimpleChanges): void; private attachCustomRender; validator(options?: { emitError?: boolean; onlyRoot?: boolean; }): this; /** * 刷新整个 Schema,当指定 `newSchema` 表示替换当前的 Schema * * 若希望对某个表单元素进行刷新请使用: * ``` * // 获取某个元素 * const statusProperty = this.sf.getProperty('/status')!; * // 重置 `schema` 或 `ui` 参数 * statusProperty.schema.enum = ['1', '2', '3']; * // 调用 `reset` 重置初始值 * statusProperty.widget.reset('2'); * ``` */ refreshSchema(newSchema?: SFSchema, newUI?: SFUISchema): this; /** * 重置表单 * @param [emit] 是否触发 `formReset` 事件,默认:`false` */ reset(emit?: boolean): this; private cleanRootSub; ngOnDestroy(): void; }