mirror of
https://github.com/johndoe6345789/low-code-react-app-b.git
synced 2026-04-25 14:14:57 +00:00
57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
import { ComponentNode } from '@/types/project'
|
|
|
|
export const createComponentNode = (
|
|
overrides: Partial<ComponentNode> = {}
|
|
): ComponentNode => ({
|
|
id: `node-${Date.now()}`,
|
|
type: 'Box',
|
|
name: 'NewComponent',
|
|
props: {},
|
|
children: [],
|
|
...overrides,
|
|
})
|
|
|
|
export const findNodeById = (
|
|
nodes: ComponentNode[],
|
|
id: string
|
|
): ComponentNode | null => {
|
|
for (const node of nodes) {
|
|
if (node.id === id) return node
|
|
const found = findNodeById(node.children, id)
|
|
if (found) return found
|
|
}
|
|
return null
|
|
}
|
|
|
|
export const addChildNode = (
|
|
nodes: ComponentNode[],
|
|
parentId: string,
|
|
childNode: ComponentNode
|
|
): ComponentNode[] =>
|
|
nodes.map((node) => {
|
|
if (node.id === parentId) {
|
|
return { ...node, children: [...node.children, childNode] }
|
|
}
|
|
return { ...node, children: addChildNode(node.children, parentId, childNode) }
|
|
})
|
|
|
|
export const deleteNodeFromTree = (
|
|
nodes: ComponentNode[],
|
|
nodeId: string
|
|
): ComponentNode[] =>
|
|
nodes
|
|
.filter((node) => node.id !== nodeId)
|
|
.map((node) => ({ ...node, children: deleteNodeFromTree(node.children, nodeId) }))
|
|
|
|
export const updateNodeInTree = (
|
|
nodes: ComponentNode[],
|
|
nodeId: string,
|
|
updates: Partial<ComponentNode>
|
|
): ComponentNode[] =>
|
|
nodes.map((node) => {
|
|
if (node.id === nodeId) {
|
|
return { ...node, ...updates }
|
|
}
|
|
return { ...node, children: updateNodeInTree(node.children, nodeId, updates) }
|
|
})
|