refactor(frontend): PdfViewer und FileBrowser aufteilen, Tests dazu

FileBrowser 1177 -> 712 Zeilen, PdfViewer 1193 -> 848. Herausgeloest
wurde, was fuer sich zusammenhaengt:

  hooks/useUploads            Warteschlange, Ordnerbaeume, Ablage
  components/files/           Werkzeugleiste, Dialoge, Menues, Reihenfolge
  components/pdf/             Werkzeugleiste, Zoomstufen, Seitenmasse, Suche
  src/format.ts               formatBytes -- lag in einer *Seite*

Dabei gefundene und behobene Fehler:

* Ordner-Upload haengte Fortschritt und Fehler an die falsche Zeile,
  sobald in einem Ordner Dateien *nach* einem Unterordner lagen: Die
  Zeilen standen in Fundreihenfolge, hochgeladen wurde nach Ordnern
  gruppiert, und ein mitlaufender Zaehler verband beides falsch.
* formatBytes gab es zweimal, zeichengleich (Dateibrowser + Admin).
* Beide Sortierungen liefen bei *jedem* Bild -- der Rahmen beim Ziehen
  ist eines je Mausbewegung. Jetzt gemerkt.
* Die Suche im PDF las bei jedem Tastendruck den Text aller Seiten neu.
  Jetzt 160 ms Wartezeit; "Searching..." bleibt auch bei einem Fehler
  nicht mehr stehen.
* Seitenmasse werden in Buendeln statt streng nacheinander geholt.

Pruefinfrastruktur: vitest stand auf 'jsdom', ohne dass jsdom je
installiert war -- "npm test" brach ab, bevor es etwas ausfuehrte. Jetzt
'node' und 32 Tests fuer die herausgeloesten reinen Funktionen. Das
Abbild baut nur noch mit gruenen Tests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Opus 5 committed 2026-09-08 22:23:21 +02:00
1 parent 8e27c703d2
commit ea90f43e77
28 files changed
+1904 -1260

No files matched your search

+8 -1
View File
@@ -137,7 +137,14 @@ export default defineConfig({
},
},
test: {
environment: 'jsdom',
// **node, nicht jsdom.** Die Einstellung stand auf 'jsdom', ohne dass
// jsdom je installiert war – `npm test` brach deshalb ab, bevor es
// irgendetwas ausführte. Geprüft wird hier, was sich ohne Browser prüfen
// lässt: Reihenfolgen, Zoomstufen, Suche im Text, Einheiten.
//
// Wer eine Komponente prüfen will, schreibt `// @vitest-environment jsdom`
// an den Anfang seiner Datei und nimmt jsdom in die devDependencies auf.
environment: 'node',
globals: true,
setupFiles: './src/test-setup.ts',
},