import { useEffect } from 'react'; import { EditorContext } from '../hooks'; import { getContentVariant, getRenderedComponent, isInEditor, refreshEditor } from '../util'; import { Comment } from './Comment'; import { EditableComponentProps } from './EditableComponent'; export type EditablePageProps = { children?: React.ReactNode; config: { componentMappings: { [key: string]: React.ComponentType; }; }; content?: any; isEditor?: boolean; renderArea?: ( props: T ) => React.ReactElement; renderComponent?: ( props: T ) => React.ReactElement; templateAnnotations?: Record; }; export const EditablePage = ({ children, config: { componentMappings }, content: originalContent, isEditor = isInEditor(), renderArea, renderComponent, templateAnnotations }: EditablePageProps) => { // should run once after html comments have been injected useEffect(() => { if (isEditor) { refreshEditor(); } }, [isEditor]); const content = getContentVariant(originalContent, templateAnnotations); let component = children ?? getRenderedComponent(content, componentMappings); if (isEditor) { component = ( {component} ); } return ( {component} ); };