diff --git a/packages/ui/src/components/views/FilesView.tsx b/packages/ui/src/components/views/FilesView.tsx index 8097bc12..d3603d18 100644 --- a/packages/ui/src/components/views/FilesView.tsx +++ b/packages/ui/src/components/views/FilesView.tsx @@ -2322,10 +2322,14 @@ export const FilesView: React.FC = ({ mode = 'full' }) => { const canEdit = Boolean(selectedFile && !selectedFileIsOutsideWorkspace && !isSelectedImage && !isSelectedPdf && files.writeFile && fileContent.length <= MAX_VIEW_CHARS); const isMarkdown = Boolean(selectedFile?.path && isMarkdownFile(selectedFile.path)); const isJson = Boolean(selectedFile?.path && isJsonFile(selectedFile.path)); - const isHtml = Boolean(selectedFile?.path && isHtmlFile(selectedFile.path)); - const isDrawio = Boolean(selectedFile?.path && isDrawioFile(selectedFile.path)); - const isTextFile = Boolean(selectedFile && !isSelectedImage && !isSelectedPdf); - const canUseShikiFileView = isTextFile && !isMarkdown && !isDrawio && !(isHtml && htmlViewMode === 'preview'); + const isHtml = Boolean(selectedFile?.path && isHtmlFile(selectedFile.path)); + const isDrawio = Boolean(selectedFile?.path && isDrawioFile(selectedFile.path)); + const isTextFile = Boolean(selectedFile && !isSelectedImage && !isSelectedPdf); + const canUseShikiFileView = isTextFile && !isMarkdown && !isDrawio && !(isHtml && htmlViewMode === 'preview'); + const isEditingFile = (isMarkdown && mdViewMode === 'edit') + || (isHtml && htmlViewMode === 'edit') + || (isJson && jsonViewMode === 'text') + || (!isMarkdown && !isHtml && !isJson && textViewMode === 'edit'); const staticLanguageExtension = React.useMemo( () => (selectedFilePath ? languageByExtension(selectedFilePath) : null), [selectedFilePath], @@ -2369,8 +2373,7 @@ export const FilesView: React.FC = ({ mode = 'full' }) => { return; } - const defaultMode: TextViewMode = settingsDefaultFileViewerPreview ? 'view' : 'edit'; - setTextViewMode(textViewModeByPathRef.current[selectedPath] ?? defaultMode); + setTextViewMode(textViewModeByPathRef.current[selectedPath] ?? 'edit'); // Respect per-type localStorage preference when available, // falling back to the setting-derived default when nothing is stored. @@ -2395,7 +2398,7 @@ export const FilesView: React.FC = ({ mode = 'full' }) => { // Ignore localStorage errors } setHtmlViewMode(htmlViewModeByPathRef.current[selectedPath] ?? htmlDefault); - setDrawioViewMode(drawioViewModeByPathRef.current[selectedPath] ?? 'preview'); + setDrawioViewMode(drawioViewModeByPathRef.current[selectedPath] ?? (settingsDefaultFileViewerPreview ? 'preview' : 'edit')); let jsonDefault: 'tree' | 'text' = settingsDefaultFileViewerPreview ? 'tree' : 'text'; try { @@ -2559,25 +2562,28 @@ export const FilesView: React.FC = ({ mode = 'full' }) => { }, [htmlViewMode]); React.useEffect(() => { - const applyDefaultFileViewerMode = (enabled: boolean) => { - const textMode: TextViewMode = enabled ? 'view' : 'edit'; - const previewMode: PreviewViewMode = enabled ? 'preview' : 'edit'; - const nextJsonMode: 'tree' | 'text' = enabled ? 'tree' : 'text'; - - for (const path of openPaths) { - textViewModeByPathRef.current[path] = textMode; - if (isMarkdownFile(path)) { - mdViewModeByPathRef.current[path] = previewMode; - } - if (isHtmlFile(path)) { - htmlViewModeByPathRef.current[path] = previewMode; - } - } - - setTextViewMode(textMode); - setMdViewMode(previewMode); - setHtmlViewMode(previewMode); - setJsonViewMode(nextJsonMode); + const applyDefaultFileViewerMode = (enabled: boolean) => { + const previewMode: PreviewViewMode = enabled ? 'preview' : 'edit'; + const nextJsonMode: 'tree' | 'text' = enabled ? 'tree' : 'text'; + + for (const path of openPaths) { + textViewModeByPathRef.current[path] = 'edit'; + if (isMarkdownFile(path)) { + mdViewModeByPathRef.current[path] = previewMode; + } + if (isHtmlFile(path)) { + htmlViewModeByPathRef.current[path] = previewMode; + } + if (isDrawioFile(path)) { + drawioViewModeByPathRef.current[path] = previewMode; + } + } + + setTextViewMode('edit'); + setMdViewMode(previewMode); + setHtmlViewMode(previewMode); + setDrawioViewMode(previewMode); + setJsonViewMode(nextJsonMode); try { localStorage.setItem(MD_VIEWER_MODE_KEY, previewMode); @@ -3152,7 +3158,7 @@ export const FilesView: React.FC = ({ mode = 'full' }) => { return (
- {canEdit && textViewMode === 'edit' && ( + {canEdit && isEditingFile && ( <> {isSaving ? ( @@ -3733,10 +3739,6 @@ export const FilesView: React.FC = ({ mode = 'full' }) => {
{ - if (isMarkdown) return; - setIsFloatingToolbarOpen(true); - }} onMouseLeave={() => { if (toolbarDropdownOpenCountRef.current > 0) return; setIsFloatingToolbarOpen(false); @@ -3774,7 +3776,10 @@ export const FilesView: React.FC = ({ mode = 'full' }) => { ) : null} - + setIsFloatingToolbarOpen(true)} + >