import { Decorator, StoryContext } from "@storybook/react"; import React, { useMemo } from "react"; import { githubDark } from "@uiw/codemirror-theme-github"; import { langs } from "@uiw/codemirror-extensions-langs"; import { createPortal } from "react-dom"; import LiveEditor from "../../components/live-editor/LiveEditor"; import LiveContent from "./components/LiveContent/LiveContent"; import LiveEditorAction from "./components/LiveEditorAction/LiveEditorAction"; import styles from "./withLiveEdit.module.scss"; import useLiveEditorActions from "./hooks/useLiveEditorActions"; const withLiveEdit: Decorator = (Story, context: StoryContext) => { const { id, parameters, viewMode, moduleExport } = context; const { source: sourceParams, liveEdit: liveEditParams } = parameters.docs || {}; const canvasEditorContainer = useMemo(() => document.getElementById(id), [id]); const shouldAllowLiveEdit = viewMode === "docs" && liveEditParams?.isEnabled && !!canvasEditorContainer; const { code, isDirty, onChange, onCopyClick, isCopied, onFormatClick, onResetClick } = useLiveEditorActions( sourceParams?.originalSource ); if (!shouldAllowLiveEdit) { return ; } return ( <> {isDirty ? ( ) : ( )} {createPortal( <>
{isCopied ? "Copied" : "Copy"} Format Reset
, canvasEditorContainer )} ); }; export default withLiveEdit;