diff --git a/packages/ui/src/layouts/shared/files-tab/components/FileTableRow.vue b/packages/ui/src/layouts/shared/files-tab/components/FileTableRow.vue index 9384e3b2a0..05816710aa 100644 --- a/packages/ui/src/layouts/shared/files-tab/components/FileTableRow.vue +++ b/packages/ui/src/layouts/shared/files-tab/components/FileTableRow.vue @@ -118,11 +118,7 @@ import { defineMessages, useVIntl } from '#ui/composables/i18n' import { injectNotificationManager } from '#ui/providers/web-notifications' import { getFileExtensionIcon } from '#ui/utils/auto-icons' import { commonMessages } from '#ui/utils/common-messages' -import { - getFileExtension, - isEditableFile as isEditableFileExt, - isImageFile, -} from '#ui/utils/file-extensions' +import { canOpenInFileEditor, getFileExtension } from '#ui/utils/file-extensions' import { fileDragActive, @@ -303,8 +299,7 @@ const formattedCreationDate = computed(() => { const isEditableFile = computed(() => { if (props.type === 'file') { - const ext = fileExtension.value - return !props.name.includes('.') || isEditableFileExt(ext) || isImageFile(ext) + return canOpenInFileEditor(props.name) } return false }) diff --git a/packages/ui/src/layouts/shared/files-tab/layout.vue b/packages/ui/src/layouts/shared/files-tab/layout.vue index 55d94c34d2..75847b76eb 100644 --- a/packages/ui/src/layouts/shared/files-tab/layout.vue +++ b/packages/ui/src/layouts/shared/files-tab/layout.vue @@ -225,7 +225,7 @@ import { useVirtualScroll } from '#ui/composables/virtual-scroll' import { injectFilePicker } from '#ui/providers/file-picker' import { injectNotificationManager } from '#ui/providers/web-notifications' import { commonMessages } from '#ui/utils/common-messages' -import { getFileExtension } from '#ui/utils/file-extensions' +import { canOpenInFileEditor, getFileExtension } from '#ui/utils/file-extensions' import FileEditor from './components/editor/FileEditor.vue' import FileContextMenu from './components/FileContextMenu.vue' @@ -650,7 +650,7 @@ function handleItemHover(item: { type: string; path: string; name: string }) { : `${currentPath}/${item.name}` ctx.prefetchDirectory?.(navPath) }, 150) - } else { + } else if (canOpenInFileEditor(item.name)) { prefetchTimeout = setTimeout(() => { ctx.prefetchFile?.(item.path) }, 150) diff --git a/packages/ui/src/utils/file-extensions.ts b/packages/ui/src/utils/file-extensions.ts index 78b88c067a..16e4022170 100644 --- a/packages/ui/src/utils/file-extensions.ts +++ b/packages/ui/src/utils/file-extensions.ts @@ -89,6 +89,14 @@ export function isEditableFile(ext: string): boolean { return isCodeFile(ext) || isTextFile(ext) } +/** + * Check if a file can be opened in the file editor + */ +export function canOpenInFileEditor(filename: string): boolean { + const ext = getFileExtension(filename) + return !filename.includes('.') || isEditableFile(ext) || isImageFile(ext) +} + /** * Get Ace editor language mode for a file extension */