1
0
Fork 0
mirror of synced 2024-09-15 00:38:01 +12:00
budibase/packages/builder/src/builderStore/storeUtils.js

76 lines
1.9 KiB
JavaScript
Raw Normal View History

import { getBuiltin } from "components/userInterface/assetParsing/createProps"
2020-08-13 03:28:19 +12:00
import { uuid } from "./uuid"
2020-08-13 22:50:12 +12:00
import getNewComponentName from "./getNewComponentName"
export const getParent = (rootProps, child) => {
let parent
walkProps(rootProps, (props, breakWalk) => {
if (
props._children &&
(props._children.includes(child) ||
props._children.some(c => c._id === child))
) {
parent = props
breakWalk()
}
})
return parent
}
export const walkProps = (props, action, cancelToken = null) => {
cancelToken = cancelToken || { cancelled: false }
action(props, () => {
cancelToken.cancelled = true
})
if (props._children) {
for (let child of props._children) {
if (cancelToken.cancelled) return
walkProps(child, action, cancelToken)
}
}
2020-06-01 23:15:44 +12:00
}
2020-11-07 01:31:47 +13:00
export const generateNewIdsForComponent = (
component,
state,
changeName = true
) =>
walkProps(component, prop => {
prop._id = uuid()
if (changeName) prop._instanceName = getNewComponentName(prop, state)
2020-08-13 03:28:19 +12:00
})
export const getComponentDefinition = (state, name) =>
name.startsWith("##") ? getBuiltin(name) : state.components[name]
2020-10-18 06:20:06 +13:00
export const findChildComponentType = (node, typeToFind) => {
// Stop recursion if invalid props
if (!node || !typeToFind) {
return null
}
// Stop recursion if this element matches
if (node._component === typeToFind) {
return node
}
// Otherwise check if any children match
// Stop recursion if no valid children to process
const children = node._children || (node.props && node.props._children)
if (!children || !children.length) {
return null
}
// Recurse and check each child component
for (let child of children) {
const childResult = findChildComponentType(child, typeToFind)
if (childResult) {
return childResult
}
}
// If we reach here then no children were valid
return null
}