import { useLocale, useSiteData } from 'dumi'; import { noop } from 'lodash-es'; import React, { useState } from 'react'; import SplitPane from 'react-split-pane'; import ClientOnly from '../../common/ClientOnly'; import InViewSuspense from '../../common/InViewSuspense'; import type { ExampleTopic } from '../../types'; import { NotFound } from '../404'; import CodeHeader from '../CodePreview/CodeHeader'; import { ic } from '../hooks'; import { getDemoInfo } from './utils'; const CodeEditor = React.lazy(() => import('../CodeEditor')); const CodePreview = React.lazy(() => import('../CodePreview')); type CodeRunnerProps = { isPlayground?: boolean; topic: string; example: string; demo: string; exampleTopics: ExampleTopic[]; size?: number; replaceId?: string; notFound?: React.ReactElement; }; /** * 代码编辑器 + 代码预览区域 */ const CodeRunner: React.FC = ({ exampleTopics, topic, example, demo, size, replaceId, isPlayground, notFound = , }) => { const demoInfo = getDemoInfo(exampleTopics, topic, example, demo); // 找不到,啥也别干了,404 页面 if (!demoInfo) return notFound; const { title, source, relativePath } = demoInfo; const { themeConfig } = useSiteData(); const { githubUrl, playground } = themeConfig; const [error, setError] = useState(); const [isFullScreen, setFullscreen] = useState(false); const locale = useLocale(); const header = ; const exampleId = `${topic}_${example}_${demo}`; return ( {/* @ts-ignore */} {/* 代码预览区域 */} {/* 代码编辑区域 */} ); }; export default CodeRunner;