jjb-lc-designable
Version:
基于alibaba-designable源码二次封装的表单设计器。
29 lines (27 loc) • 841 B
text/typescript
import { AppendNodeEvent, TreeNode } from 'jjb-lc-designable/core'
import { useDesigner } from 'jjb-lc-designable/react'
import { matchComponent, matchChildComponent } from '../shared'
export const useDropTemplate = (
name: string,
getChildren: (source: TreeNode[]) => TreeNode[]
) => {
return useDesigner((designer) => {
return designer.subscribeTo(AppendNodeEvent, (event) => {
const { source, target } = event.data
if (Array.isArray(target)) return
if (!Array.isArray(source)) return
if (
matchComponent(
target,
(key) =>
key === name &&
source.every((child) => !matchChildComponent(child, name))
) &&
target.children.length === 0
) {
target.setChildren(...getChildren(source))
return false
}
})
})
}