diff --git a/packages/core/src/storybook/decorators/withLiveEdit/withLiveEdit.tsx b/packages/core/src/storybook/decorators/withLiveEdit/withLiveEdit.tsx index 3315b93210..c784c33273 100644 --- a/packages/core/src/storybook/decorators/withLiveEdit/withLiveEdit.tsx +++ b/packages/core/src/storybook/decorators/withLiveEdit/withLiveEdit.tsx @@ -1,5 +1,5 @@ import { Decorator, Parameters as StorybookParameters } from "@storybook/react"; -import { useRef, useState } from "react"; +import { useMemo, useRef, useState } from "react"; import { vscodeDark } from "@uiw/codemirror-theme-vscode"; import { langs } from "@uiw/codemirror-extensions-langs"; import * as VibeComponents from "../../../components"; @@ -21,25 +21,24 @@ type Parameters = StorybookParameters & { }; }; -function getInitialCodeValue(code: string): string { +function getInitialCodeValue(code: string, shouldPrintError: boolean): string { try { return formatCode(code); } catch (e) { - console.error(e); + if (shouldPrintError) { + console.error(e); + } return code; } } const withLiveEdit: Decorator = (Story, { id, parameters, viewMode }: Parameters) => { const scope = { ...globalScope, ...parameters.docs?.liveEdit?.scope }; - const shouldAllowLiveEdit = viewMode === "docs" && parameters.docs?.liveEdit?.isEnabled; - - if (!shouldAllowLiveEdit) { - return ; - } + const canvasEditorContainer = useMemo(() => document.getElementById(id), [id]); + const shouldAllowLiveEdit = viewMode === "docs" && parameters.docs?.liveEdit?.isEnabled && !!canvasEditorContainer; const originalCode = useRef(extractCodeFromSource(parameters.docs.source?.originalSource) || ""); - const [code, setCode] = useState(getInitialCodeValue(originalCode.current)); + const [code, setCode] = useState(getInitialCodeValue(originalCode.current, shouldAllowLiveEdit)); const [dirty, setDirty] = useState(false); const handleChange = (newVal: string) => { @@ -47,6 +46,10 @@ const withLiveEdit: Decorator = (Story, { id, parameters, viewMode }: Parameters setDirty(true); }; + if (!shouldAllowLiveEdit) { + return ; + } + return ( <> {dirty ? ( @@ -59,24 +62,23 @@ const withLiveEdit: Decorator = (Story, { id, parameters, viewMode }: Parameters ) : ( )} - {document.getElementById(id) && - createPortal( - , - document.getElementById(id) - )} + {createPortal( + , + canvasEditorContainer + )} ); };