forked from tsai/budibase
5 changed files with 103 additions and 44 deletions
@ -0,0 +1,62 @@ |
|||||
|
/** |
||||
|
* Finds a component instance by ID |
||||
|
*/ |
||||
|
export const findComponentById = (component, componentId) => { |
||||
|
if (!component || !componentId) { |
||||
|
return null |
||||
|
} |
||||
|
if (component._id === componentId) { |
||||
|
return component |
||||
|
} |
||||
|
if (!component._children?.length) { |
||||
|
return null |
||||
|
} |
||||
|
for (let child of component._children) { |
||||
|
const result = findComponentById(child, componentId) |
||||
|
if (result) { |
||||
|
return result |
||||
|
} |
||||
|
} |
||||
|
return null |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Finds the component path to a component |
||||
|
*/ |
||||
|
export const findComponentPathById = (component, componentId, path = []) => { |
||||
|
if (!component || !componentId) { |
||||
|
return null |
||||
|
} |
||||
|
path = [...path, component] |
||||
|
if (component._id === componentId) { |
||||
|
return path |
||||
|
} |
||||
|
if (!component._children?.length) { |
||||
|
return null |
||||
|
} |
||||
|
for (let child of component._children) { |
||||
|
const result = findComponentPathById(child, componentId, path) |
||||
|
if (result) { |
||||
|
return result |
||||
|
} |
||||
|
} |
||||
|
return null |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Finds all children instances of a certain component type of a given component |
||||
|
*/ |
||||
|
export const findChildrenByType = (component, type, children = []) => { |
||||
|
if (!component) { |
||||
|
return |
||||
|
} |
||||
|
if (component._component.endsWith(`/${type}`)) { |
||||
|
children.push(component) |
||||
|
} |
||||
|
if (!component._children?.length) { |
||||
|
return |
||||
|
} |
||||
|
component._children.forEach(child => { |
||||
|
findChildrenByType(child, type, children) |
||||
|
}) |
||||
|
} |
||||
Loading…
Reference in new issue