fix(files): scope preview defaults to previewable files
This commit is contained in:
@@ -2322,10 +2322,14 @@ export const FilesView: React.FC<FilesViewProps> = ({ 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<FilesViewProps> = ({ 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<FilesViewProps> = ({ 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<FilesViewProps> = ({ 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<FilesViewProps> = ({ mode = 'full' }) => {
|
||||
|
||||
return (
|
||||
<div className={wrapperCls}>
|
||||
{canEdit && textViewMode === 'edit' && (
|
||||
{canEdit && isEditingFile && (
|
||||
<>
|
||||
{isSaving ? (
|
||||
<span className="flex items-center gap-1 px-1 text-muted-foreground typography-meta">
|
||||
@@ -3733,10 +3739,6 @@ export const FilesView: React.FC<FilesViewProps> = ({ mode = 'full' }) => {
|
||||
<div
|
||||
ref={floatingToolbarRef}
|
||||
className="absolute right-3 top-3 z-30"
|
||||
onMouseEnter={() => {
|
||||
if (isMarkdown) return;
|
||||
setIsFloatingToolbarOpen(true);
|
||||
}}
|
||||
onMouseLeave={() => {
|
||||
if (toolbarDropdownOpenCountRef.current > 0) return;
|
||||
setIsFloatingToolbarOpen(false);
|
||||
@@ -3774,7 +3776,10 @@ export const FilesView: React.FC<FilesViewProps> = ({ mode = 'full' }) => {
|
||||
) : null}
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<span className="inline-flex">
|
||||
<span
|
||||
className="inline-flex"
|
||||
onMouseEnter={() => setIsFloatingToolbarOpen(true)}
|
||||
>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
|
||||
@@ -1484,8 +1484,8 @@ export const settingsDict = {
|
||||
'settings.openchamber.defaults.smallModel.useDefault': 'Use default small model',
|
||||
'settings.openchamber.defaults.smallModel.useDefaultAria': 'Use default small model',
|
||||
'settings.openchamber.defaults.smallModel.overrideModel': 'Override model',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': 'Open files in preview mode',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': 'Open files in preview mode',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': 'Open previewable files in preview mode',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': 'Open previewable files in preview mode',
|
||||
'settings.openchamber.defaults.option.default': 'Default',
|
||||
'settings.openchamber.defaults.option.defaultLowercase': 'default',
|
||||
'settings.openchamber.git.title': 'Git Preferences',
|
||||
|
||||
@@ -1451,8 +1451,8 @@ export const settingsDict = {
|
||||
"settings.openchamber.defaults.smallModel.useDefaultAria": "Usar el modelo pequeño predeterminado",
|
||||
"settings.openchamber.defaults.smallModel.overrideModel": "Modelo de anulación",
|
||||
"settings.openchamber.defaults.field.showDeletionDialog": "Mostrar diálogo de eliminación",
|
||||
"settings.openchamber.defaults.field.openFilesPreviewAria": "Abrir archivos en modo vista previa",
|
||||
"settings.openchamber.defaults.field.openFilesPreview": "Abrir archivos en modo vista previa",
|
||||
"settings.openchamber.defaults.field.openFilesPreviewAria": "Abrir archivos previsualizables en modo vista previa",
|
||||
"settings.openchamber.defaults.field.openFilesPreview": "Abrir archivos previsualizables en modo vista previa",
|
||||
"settings.openchamber.defaults.option.default": "Predeterminado",
|
||||
"settings.openchamber.defaults.option.defaultLowercase": "default",
|
||||
"settings.openchamber.git.title": "Preferencias de Git",
|
||||
|
||||
@@ -1376,8 +1376,8 @@ export const settingsDict = {
|
||||
'settings.openchamber.defaults.smallModel.useDefaultAria': 'Utiliser le petit modèle par défaut',
|
||||
'settings.openchamber.defaults.smallModel.overrideModel': 'Modèle de remplacement',
|
||||
'settings.openchamber.defaults.field.showDeletionDialog': 'Afficher la boîte de dialogue de suppression',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': 'Ouvrir les fichiers en mode aperçu',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': 'Ouvrir les fichiers en mode aperçu',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': 'Ouvrir les fichiers prévisualisables en mode aperçu',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': 'Ouvrir les fichiers prévisualisables en mode aperçu',
|
||||
'settings.openchamber.defaults.option.default': 'Défaut',
|
||||
'settings.openchamber.defaults.option.defaultLowercase': 'défaut',
|
||||
'settings.openchamber.git.title': 'Préférences Git',
|
||||
|
||||
@@ -1484,8 +1484,8 @@ export const settingsDict = {
|
||||
'settings.openchamber.defaults.smallModel.useDefaultAria': 'デフォルトの小型モデルを使用',
|
||||
'settings.openchamber.defaults.smallModel.overrideModel': '上書きモデル',
|
||||
'settings.openchamber.defaults.field.showDeletionDialog': '削除ダイアログを表示',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': 'ファイルをプレビューモードで開く',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': 'ファイルをプレビューモードで開く',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': 'プレビュー可能なファイルをプレビューモードで開く',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': 'プレビュー可能なファイルをプレビューモードで開く',
|
||||
'settings.openchamber.defaults.option.default': 'デフォルト',
|
||||
'settings.openchamber.defaults.option.defaultLowercase': 'デフォルト',
|
||||
'settings.openchamber.git.title': 'Git 設定',
|
||||
|
||||
@@ -1451,8 +1451,8 @@ export const settingsDict = {
|
||||
'settings.openchamber.defaults.smallModel.useDefaultAria': '기본 소형 모델 사용',
|
||||
'settings.openchamber.defaults.smallModel.overrideModel': '재정의 모델',
|
||||
'settings.openchamber.defaults.field.showDeletionDialog': '삭제 확인 대화상자 표시',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': '파일을 미리보기 모드로 열기',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': '파일을 미리보기 모드로 열기',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': '미리보기 가능한 파일을 미리보기 모드로 열기',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': '미리보기 가능한 파일을 미리보기 모드로 열기',
|
||||
'settings.openchamber.defaults.option.default': '기본값',
|
||||
'settings.openchamber.defaults.option.defaultLowercase': '기본값',
|
||||
'settings.openchamber.git.title': 'Git',
|
||||
|
||||
@@ -692,8 +692,8 @@ export const settingsDict = {
|
||||
'settings.openchamber.defaults.field.defaultAgent': 'Domyślny Agent',
|
||||
'settings.openchamber.defaults.field.defaultModel': 'Domyślny Model',
|
||||
'settings.openchamber.defaults.field.defaultThinking': 'Domyślne Myślenie',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': 'Otwieraj pliki w trybie podglądu',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': 'Otwieraj pliki w trybie podglądu',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': 'Otwieraj pliki z podglądem w trybie podglądu',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': 'Otwieraj pliki z podglądem w trybie podglądu',
|
||||
'settings.openchamber.defaults.field.showDeletionDialog': 'Pokaż dialog usuwania',
|
||||
'settings.openchamber.defaults.field.showDeletionDialogAria': 'Pokaż dialog usuwania',
|
||||
'settings.openchamber.defaults.smallModel.title': 'Mały model',
|
||||
|
||||
@@ -1451,8 +1451,8 @@ export const settingsDict = {
|
||||
"settings.openchamber.defaults.smallModel.useDefaultAria": "Usar o modelo pequeno padrão",
|
||||
"settings.openchamber.defaults.smallModel.overrideModel": "Modelo de substituição",
|
||||
"settings.openchamber.defaults.field.showDeletionDialog": "Mostrar diálogo de eliminación",
|
||||
"settings.openchamber.defaults.field.openFilesPreviewAria": "Abrir arquivos em modo prévia",
|
||||
"settings.openchamber.defaults.field.openFilesPreview": "Abrir arquivos em modo prévia",
|
||||
"settings.openchamber.defaults.field.openFilesPreviewAria": "Abrir arquivos com visualização em modo de prévia",
|
||||
"settings.openchamber.defaults.field.openFilesPreview": "Abrir arquivos com visualização em modo de prévia",
|
||||
"settings.openchamber.defaults.option.default": "Padrão",
|
||||
"settings.openchamber.defaults.option.defaultLowercase": "default",
|
||||
"settings.openchamber.git.title": "Preferencias de Git",
|
||||
|
||||
@@ -1451,8 +1451,8 @@ export const settingsDict = {
|
||||
"settings.openchamber.defaults.smallModel.useDefaultAria": "Використовувати типову малу модель",
|
||||
"settings.openchamber.defaults.smallModel.overrideModel": "Модель заміни",
|
||||
"settings.openchamber.defaults.field.showDeletionDialog": "Показати діалогове вікно видалення",
|
||||
"settings.openchamber.defaults.field.openFilesPreviewAria": "Відкривати файли в режимі попереднього перегляду",
|
||||
"settings.openchamber.defaults.field.openFilesPreview": "Відкривати файли в режимі попереднього перегляду",
|
||||
"settings.openchamber.defaults.field.openFilesPreviewAria": "Відкривати файли з підтримкою перегляду в режимі попереднього перегляду",
|
||||
"settings.openchamber.defaults.field.openFilesPreview": "Відкривати файли з підтримкою перегляду в режимі попереднього перегляду",
|
||||
"settings.openchamber.defaults.option.default": "За замовчуванням",
|
||||
"settings.openchamber.defaults.option.defaultLowercase": "за замовчуванням",
|
||||
"settings.openchamber.git.title": "Налаштування Git",
|
||||
|
||||
@@ -1451,8 +1451,8 @@ export const settingsDict = {
|
||||
'settings.openchamber.defaults.smallModel.useDefaultAria': '使用默认小模型',
|
||||
'settings.openchamber.defaults.smallModel.overrideModel': '覆盖模型',
|
||||
'settings.openchamber.defaults.field.showDeletionDialog': '显示删除对话框',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': '以预览模式打开文件',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': '以预览模式打开文件',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': '以预览模式打开可预览文件',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': '以预览模式打开可预览文件',
|
||||
'settings.openchamber.defaults.option.default': '默认',
|
||||
'settings.openchamber.defaults.option.defaultLowercase': '默认',
|
||||
'settings.openchamber.git.title': 'Git 偏好设置',
|
||||
|
||||
@@ -1362,8 +1362,8 @@
|
||||
'settings.openchamber.defaults.smallModel.useDefaultAria': '使用預設小模型',
|
||||
'settings.openchamber.defaults.smallModel.overrideModel': '覆寫模型',
|
||||
'settings.openchamber.defaults.field.showDeletionDialog': '顯示刪除對話方塊',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': '以預覽模式開啟檔案',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': '以預覽模式開啟檔案',
|
||||
'settings.openchamber.defaults.field.openFilesPreviewAria': '以預覽模式開啟可預覽檔案',
|
||||
'settings.openchamber.defaults.field.openFilesPreview': '以預覽模式開啟可預覽檔案',
|
||||
'settings.openchamber.defaults.option.default': '預設',
|
||||
'settings.openchamber.defaults.option.defaultLowercase': '預設',
|
||||
'settings.openchamber.git.title': 'Git 偏好設定',
|
||||
|
||||
Reference in New Issue
Block a user