UNPKG

jjb-lc-designable

Version:

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

54 lines 2.08 kB
import { isArr } from 'jjb-lc-designable/shared'; import { untracked } from 'jjb-lc-formily/reactive'; import { DEFAULT_DRIVERS, DEFAULT_EFFECTS, DEFAULT_SHORTCUTS } from './presets'; import { Engine, TreeNode } from './models'; import { mergeLocales } from './internals'; export const isBehaviorHost = val => val?.Behavior && isBehaviorList(val.Behavior); export const isBehaviorList = val => Array.isArray(val) && val.every(isBehavior); export const isBehavior = val => val?.name || val?.selector || val?.extends || val?.designerProps || val?.designerLocales; export const isResourceHost = val => val?.Resource && isResourceList(val.Resource); export const isResourceList = val => Array.isArray(val) && val.every(isResource); export const isResource = val => val?.node && !!val.node.isSourceNode && val.node instanceof TreeNode; export const createLocales = (...packages) => { const results = {}; packages.forEach(locales => { mergeLocales(results, locales); }); return results; }; export const createBehavior = (...behaviors) => { return behaviors.reduce((buf, behavior) => { if (isArr(behavior)) return buf.concat(createBehavior(...behavior)); const { selector } = behavior || {}; if (!selector) return buf; if (typeof selector === 'string') { behavior.selector = node => node.componentName === selector; } return buf.concat(behavior); }, []); }; export const createResource = (...sources) => { return sources.reduce((buf, source) => { return buf.concat({ ...source, node: new TreeNode({ componentName: '$$ResourceNode$$', isSourceNode: true, children: source.elements || [] }) }); }, []); }; export const createDesigner = (props = {}) => { const drivers = props.drivers || []; const effects = props.effects || []; const shortcuts = props.shortcuts || []; return untracked(() => new Engine({ ...props, effects: [...effects, ...DEFAULT_EFFECTS], drivers: [...drivers, ...DEFAULT_DRIVERS], shortcuts: [...shortcuts, ...DEFAULT_SHORTCUTS] })); };