From 087b63261012621329ad2bad2f71037cf93bbfce Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Tue, 9 Jan 2024 11:42:11 +0800 Subject: [PATCH] Optimize CodeEditor --- .../CodeEditor/FileSelector/index.tsx | 35 +++++++++------- .../ReactPlayground/CodeEditor/index.tsx | 6 ++- src/pages/OnlineEditor.tsx | 42 +------------------ 3 files changed, 26 insertions(+), 57 deletions(-) diff --git a/src/components/ReactPlayground/CodeEditor/FileSelector/index.tsx b/src/components/ReactPlayground/CodeEditor/FileSelector/index.tsx index 701075d..fd90ed9 100644 --- a/src/components/ReactPlayground/CodeEditor/FileSelector/index.tsx +++ b/src/components/ReactPlayground/CodeEditor/FileSelector/index.tsx @@ -120,14 +120,15 @@ const FileSelector: React.FC = ({ } useEffect(() => { - Object.keys(files).length && - setTabs( - Object.keys(files).filter( - (item) => - ![IMPORT_MAP_FILE_NAME, ENTRY_FILE_NAME].includes(item) && - !files[item].hidden - ) - ) + Object.keys(files).length + ? setTabs( + Object.keys(files).filter( + (item) => + ![IMPORT_MAP_FILE_NAME, ENTRY_FILE_NAME].includes(item) && + !files[item].hidden + ) + ) + : setTabs([]) }, [files]) return ( @@ -166,14 +167,16 @@ const FileSelector: React.FC = ({ -
- -
+ {files[IMPORT_MAP_FILE_NAME] && ( +
+ +
+ )} ) diff --git a/src/components/ReactPlayground/CodeEditor/index.tsx b/src/components/ReactPlayground/CodeEditor/index.tsx index 7c9f8e2..41c7d74 100644 --- a/src/components/ReactPlayground/CodeEditor/index.tsx +++ b/src/components/ReactPlayground/CodeEditor/index.tsx @@ -83,6 +83,9 @@ const CodeEditor: React.FC = ({ } const handleOnChangeFileContent = (code = '') => { + if (!files[onSelectedFileChange ? props.selectedFileName : selectedFileName]) { + return + } const clone = _.cloneDeep(files) clone[onSelectedFileChange ? props.selectedFileName : selectedFileName].value = code ?? '' onChangeFileContent?.( @@ -119,7 +122,8 @@ const CodeEditor: React.FC = ({ readonly || readonlyFiles?.includes( onSelectedFileChange ? props.selectedFileName : selectedFileName - ) + ) || + !files[onSelectedFileChange ? props.selectedFileName : selectedFileName] } onChange={handleOnChangeFileContent} /> diff --git a/src/pages/OnlineEditor.tsx b/src/pages/OnlineEditor.tsx index 342e781..b90d258 100644 --- a/src/pages/OnlineEditor.tsx +++ b/src/pages/OnlineEditor.tsx @@ -1,54 +1,16 @@ import React from 'react' import CodeEditor from '@/components/ReactPlayground/CodeEditor' -import { fileNameToLanguage } from '@/components/ReactPlayground/files' +import { initFiles } from '@/components/ReactPlayground/files' import { IFiles } from '@/components/ReactPlayground/shared' const OnlineEditor: React.FC = () => { - const [files, setFiles] = useState({ - ['App.tsx']: { - name: 'App.tsx', - language: fileNameToLanguage('App.tsx'), - value: 'const a = () => {}' - }, - ['App.css']: { - name: 'App.css', - language: fileNameToLanguage('App.css'), - value: '.title {}' - }, - cde: { - name: 'App.css', - language: fileNameToLanguage('App.css'), - value: '.title {}' - }, - def: { - name: 'App.css', - language: fileNameToLanguage('App.css'), - value: '.title {}' - }, - efg: { - name: 'App.css', - language: fileNameToLanguage('App.css'), - value: '.title {}' - }, - fgh: { - name: 'App.css', - language: fileNameToLanguage('App.css'), - value: '.title {}' - }, - ghi: { - name: 'App.css', - language: fileNameToLanguage('App.css'), - value: '.title {}' - } - }) + const [files, setFiles] = useState(initFiles) return ( <> setFiles(files)} onRemoveFile={(_, files) => setFiles(files)} onRenameFile={(_, __, files) => setFiles(files)}