packages/ide-toolbox/src/component/component.tsx (32 lines of code) (raw):

import React, {CSSProperties, useContext} from 'react'; const ComponentContext = React.createContext<{ componentClassName?: string | undefined; componentStyle?: CSSProperties | undefined; }>({}); export const useComponentContext = () => useContext(ComponentContext); interface ComponentProps { style?: CSSProperties | undefined; className?: string | undefined; categoryName?: string; name: string; children: JSX.Element | JSX.Element[]; defaultProps?: {}; subComponents?: JSX.Element | JSX.Element[]; docURL?: string; previewImagePath?: string; } export const Component: React.FC<ComponentProps> = ({ children, categoryName, name, className, style, }) => { return ( <ComponentContext.Provider value={{componentClassName: className, componentStyle: style}}> {getTransformedComponentChildren({ children, componentName: name, categoryName, })} </ComponentContext.Provider> ); }; interface GetTransformedComponentChildrenParams{ children: JSX.Element | JSX.Element[], componentName: string, categoryName?: string, } function getTransformedComponentChildren({ children, componentName, categoryName, }: GetTransformedComponentChildrenParams) { return React.Children.map(children, (child) => { return React.cloneElement(child, { categoryName, componentName, }); }); }