diff --git a/frontend/src/components/FilePreview.tsx b/frontend/src/components/FilePreview.tsx index 302cd39..da4c1c9 100644 --- a/frontend/src/components/FilePreview.tsx +++ b/frontend/src/components/FilePreview.tsx @@ -53,7 +53,7 @@ type Kind = 'image' | 'pdf' | 'text' | 'video' | 'audio' | 'none' * 23.08.2026 die Endungen .mp3 und .mp4 nicht kannte. Ohne den Namen ließe * sich eine vorhandene MP3 also nie abspielen. */ -function kindOf(mime: string, name = ''): Kind { +export function kindOf(mime: string, name = ''): Kind { const m = (mime || '').toLowerCase() // SVG bleibt draußen: Der Server liefert sie nie inline aus, weil eine // SVG-Datei Skripte enthalten darf. diff --git a/frontend/src/pages/FileBrowser.tsx b/frontend/src/pages/FileBrowser.tsx index 0595cc4..44023e9 100644 --- a/frontend/src/pages/FileBrowser.tsx +++ b/frontend/src/pages/FileBrowser.tsx @@ -8,7 +8,7 @@ import Breadcrumb from '../components/Breadcrumb' import SearchBox from '../components/SearchBox' import PageHeader from '../components/PageHeader' import GridView, { ListView, useCoarsePointer } from '../components/FileViews' -import FilePreview, { canPreview } from '../components/FilePreview' +import FilePreview, { canPreview, kindOf } from '../components/FilePreview' import ContextMenu, { type MenuItem } from '../components/ContextMenu' import UploadQueue, { type UploadItem } from '../components/UploadQueue' import InputDialog from '../components/Dialog' @@ -339,9 +339,14 @@ export default function FileBrowser({ const sortedFolders = sortFolders(folders, sort) const sortedFiles = sortFiles(files, sort) - // Blättern in der Vorschau geht nur über das, was sich auch anzeigen lässt – - // sonst landet man mit dem Pfeil auf einer ZIP-Datei und sieht nichts. - const previewable = sortedFiles.filter(canPreview) + // Blättern in der Vorschau bleibt bei **einer** Art Datei: Wer Bilder + // durchsieht, will Bilder sehen und nicht mitten in der Reihe auf einem PDF + // landen, das ganz anders bedient wird (Seiten statt Dateien, eigene + // Zoomleiste). Solange nichts offen ist, zählt weiterhin alles Anzeigbare – + // sonst wäre die Liste leer, bevor sie gebraucht wird. + const previewKind = preview ? kindOf(preview.mime_type, preview.name) : null + const previewable = sortedFiles.filter(f => + canPreview(f) && (previewKind === null || kindOf(f.mime_type, f.name) === previewKind)) function stepPreview(delta: number) { if (!preview) return const i = previewable.findIndex(f => f.id === preview.id)