UNPKG

jjb-lc-designable

Version:

基于alibaba-designable源码二次封装的表单设计器。

222 lines (218 loc) 5.87 kB
import { ISchema } from 'jjb-lc-formily/json-schema' import { ReactionsSetter, DataSourceSetter, ValidatorSetter, } from 'jjb-lc-designable/formily-setters' import { FormItemSwitcher } from '../../common/FormItemSwitcher' import { AllSchemas } from '../../schemas' export const createComponentSchema = ( component: ISchema, decorator: ISchema ) => { return { 'component-group': component && { type: 'void', 'x-component': 'CollapseItem', 'x-reactions': { fulfill: { state: { visible: '{{!!$form.values["x-component"]}}', }, }, }, properties: { 'x-component-props': component, }, }, 'decorator-group': decorator && { type: 'void', 'x-component': 'CollapseItem', 'x-component-props': { defaultExpand: false }, 'x-reactions': { fulfill: { state: { visible: '{{!!$form.values["x-decorator"]}}', }, }, }, properties: { 'x-decorator-props': decorator, }, }, 'component-style-group': { type: 'void', 'x-component': 'CollapseItem', 'x-component-props': { defaultExpand: false }, 'x-reactions': { fulfill: { state: { visible: '{{!!$form.values["x-component"]}}', }, }, }, properties: { 'x-component-props.style': AllSchemas.CSSStyle, }, }, 'decorator-style-group': { type: 'void', 'x-component': 'CollapseItem', 'x-component-props': { defaultExpand: false }, 'x-reactions': { fulfill: { state: { visible: '{{!!$form.values["x-decorator"]}}', }, }, }, properties: { 'x-decorator-props.style': AllSchemas.CSSStyle, }, }, } } export const createFieldSchema = ( component?: ISchema, decorator: ISchema = AllSchemas.FormItem ): ISchema => { return { type: 'object', properties: { 'field-group': { type: 'void', 'x-component': 'CollapseItem', properties: { name: { type: 'string', 'x-decorator': 'FormItem', 'x-component': 'Input', }, title: { type: 'string', 'x-decorator': 'FormItem', 'x-component': 'Input', }, description: { type: 'string', 'x-decorator': 'FormItem', 'x-component': 'Input.TextArea', }, 'x-display': { type: 'string', enum: ['visible', 'hidden', 'none', ''], 'x-decorator': 'FormItem', 'x-component': 'Select', 'x-component-props': { defaultValue: 'visible', }, }, 'x-pattern': { type: 'string', enum: ['editable', 'disabled', 'readOnly', 'readPretty', ''], 'x-decorator': 'FormItem', 'x-component': 'Select', 'x-component-props': { defaultValue: 'editable', }, }, default: { 'x-decorator': 'FormItem', 'x-component': 'ValueInput', }, enum: { 'x-decorator': 'FormItem', 'x-component': DataSourceSetter, }, 'x-reactions': { 'x-decorator': 'FormItem', 'x-component': ReactionsSetter, }, 'x-validator': { type: 'array', 'x-component': ValidatorSetter, }, required: { type: 'boolean', 'x-decorator': 'FormItem', 'x-component': 'Switch', }, }, }, ...createComponentSchema(component, decorator), }, } } export const createVoidFieldSchema = ( component?: ISchema, decorator: ISchema = AllSchemas.FormItem ) => { return { type: 'object', properties: { 'field-group': { type: 'void', 'x-component': 'CollapseItem', properties: { name: { type: 'string', 'x-decorator': 'FormItem', 'x-component': 'Input', }, title: { type: 'string', 'x-decorator': 'FormItem', 'x-component': 'Input', 'x-reactions': { fulfill: { state: { hidden: '{{$form.values["x-decorator"] !== "FormItem"}}', }, }, }, }, description: { type: 'string', 'x-decorator': 'FormItem', 'x-component': 'Input.TextArea', 'x-reactions': { fulfill: { state: { hidden: '{{$form.values["x-decorator"] !== "FormItem"}}', }, }, }, }, 'x-display': { type: 'string', enum: ['visible', 'hidden', 'none', ''], 'x-decorator': 'FormItem', 'x-component': 'Select', 'x-component-props': { defaultValue: 'visible', }, }, 'x-pattern': { type: 'string', enum: ['editable', 'disabled', 'readOnly', 'readPretty', ''], 'x-decorator': 'FormItem', 'x-component': 'Select', 'x-component-props': { defaultValue: 'editable', }, }, 'x-reactions': { 'x-decorator': 'FormItem', 'x-component': ReactionsSetter, }, 'x-decorator': { type: 'string', 'x-decorator': 'FormItem', 'x-component': FormItemSwitcher, }, }, }, ...createComponentSchema(component, decorator), }, } }