Optimize CodeEditor

This commit is contained in:
2024-01-09 11:42:11 +08:00
parent 3ec95ee8a4
commit 087b632610
3 changed files with 26 additions and 57 deletions

View File

@@ -120,14 +120,15 @@ const FileSelector: React.FC<FileSelectorProps> = ({
} }
useEffect(() => { useEffect(() => {
Object.keys(files).length && Object.keys(files).length
setTabs( ? setTabs(
Object.keys(files).filter( Object.keys(files).filter(
(item) => (item) =>
![IMPORT_MAP_FILE_NAME, ENTRY_FILE_NAME].includes(item) && ![IMPORT_MAP_FILE_NAME, ENTRY_FILE_NAME].includes(item) &&
!files[item].hidden !files[item].hidden
) )
) )
: setTabs([])
}, [files]) }, [files])
return ( return (
@@ -166,6 +167,7 @@ const FileSelector: React.FC<FileSelectorProps> = ({
</FlexBox> </FlexBox>
</HideScrollbar> </HideScrollbar>
</div> </div>
{files[IMPORT_MAP_FILE_NAME] && (
<div className={'sticky'}> <div className={'sticky'}>
<Item <Item
value={'Import Map'} value={'Import Map'}
@@ -174,6 +176,7 @@ const FileSelector: React.FC<FileSelectorProps> = ({
readonly readonly
/> />
</div> </div>
)}
</div> </div>
</> </>
) )

View File

@@ -83,6 +83,9 @@ const CodeEditor: React.FC<CodeEditorProps> = ({
} }
const handleOnChangeFileContent = (code = '') => { const handleOnChangeFileContent = (code = '') => {
if (!files[onSelectedFileChange ? props.selectedFileName : selectedFileName]) {
return
}
const clone = _.cloneDeep(files) const clone = _.cloneDeep(files)
clone[onSelectedFileChange ? props.selectedFileName : selectedFileName].value = code ?? '' clone[onSelectedFileChange ? props.selectedFileName : selectedFileName].value = code ?? ''
onChangeFileContent?.( onChangeFileContent?.(
@@ -119,7 +122,8 @@ const CodeEditor: React.FC<CodeEditorProps> = ({
readonly || readonly ||
readonlyFiles?.includes( readonlyFiles?.includes(
onSelectedFileChange ? props.selectedFileName : selectedFileName onSelectedFileChange ? props.selectedFileName : selectedFileName
) ) ||
!files[onSelectedFileChange ? props.selectedFileName : selectedFileName]
} }
onChange={handleOnChangeFileContent} onChange={handleOnChangeFileContent}
/> />

View File

@@ -1,54 +1,16 @@
import React from 'react' import React from 'react'
import CodeEditor from '@/components/ReactPlayground/CodeEditor' import CodeEditor from '@/components/ReactPlayground/CodeEditor'
import { fileNameToLanguage } from '@/components/ReactPlayground/files' import { initFiles } from '@/components/ReactPlayground/files'
import { IFiles } from '@/components/ReactPlayground/shared' import { IFiles } from '@/components/ReactPlayground/shared'
const OnlineEditor: React.FC = () => { const OnlineEditor: React.FC = () => {
const [files, setFiles] = useState<IFiles>({ const [files, setFiles] = useState<IFiles>(initFiles)
['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 {}'
}
})
return ( return (
<> <>
<CodeEditor <CodeEditor
files={files} files={files}
selectedFileName={'App.css'} selectedFileName={'App.css'}
notRemovable={['App.css', 'fgh']}
readonlyFiles={['App.tsx']}
onAddFile={(_, files) => setFiles(files)} onAddFile={(_, files) => setFiles(files)}
onRemoveFile={(_, files) => setFiles(files)} onRemoveFile={(_, files) => setFiles(files)}
onRenameFile={(_, __, files) => setFiles(files)} onRenameFile={(_, __, files) => setFiles(files)}