From 9b5e8c6b35e6b09657cf024f8892fa8b9883e767 Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Sat, 11 Apr 2026 12:53:47 +0200 Subject: [PATCH] Restructure upload flow: document first, then preview + naming Step 1 is now document selection (full width). After selecting a file, Step 2 shows a side-by-side layout with document preview (3/5 width, scrollable, with fullscreen modal) and session naming (2/5 width, with start button). Also adds PDF preview via blob URL before upload. Co-Authored-By: Claude Opus 4.6 (1M context) --- studio-v2/app/vocab-worksheet/page.tsx | 406 +++++++++++++++---------- 1 file changed, 243 insertions(+), 163 deletions(-) diff --git a/studio-v2/app/vocab-worksheet/page.tsx b/studio-v2/app/vocab-worksheet/page.tsx index 85ceeba..9c77c03 100644 --- a/studio-v2/app/vocab-worksheet/page.tsx +++ b/studio-v2/app/vocab-worksheet/page.tsx @@ -130,6 +130,7 @@ export default function VocabWorksheetPage() { // Direct file upload const [directFile, setDirectFile] = useState(null) const [directFilePreview, setDirectFilePreview] = useState(null) + const [showFullPreview, setShowFullPreview] = useState(false) const directFileInputRef = useRef(null) // PDF page selection state @@ -263,6 +264,7 @@ export default function VocabWorksheetPage() { setDirectFile(file) setSelectedDocumentId(null) + setSelectedMobileFile(null) if (file.type.startsWith('image/')) { const reader = new FileReader() @@ -270,6 +272,8 @@ export default function VocabWorksheetPage() { setDirectFilePreview(ev.target?.result as string) } reader.readAsDataURL(file) + } else if (file.type === 'application/pdf') { + setDirectFilePreview(URL.createObjectURL(file)) } else { setDirectFilePreview(null) } @@ -826,6 +830,7 @@ export default function VocabWorksheetPage() { setSelectedDocumentId(null) setDirectFile(null) setDirectFilePreview(null) + setShowFullPreview(false) setPdfPageCount(0) setSelectedPages([]) setPagesThumbnails([]) @@ -1219,19 +1224,19 @@ export default function VocabWorksheetPage() {
  1. 1 - Session benennen und Dokument (Bild oder PDF) auswaehlen + Dokument (Bild oder PDF) auswaehlen
  2. 2 - Bei PDFs: Seiten auswaehlen die verarbeitet werden sollen + Vorschau pruefen und Session benennen
  3. 3 - KI extrahiert automatisch Vokabeln (Englisch | Deutsch | Beispiel) + Bei PDFs: Seiten auswaehlen die verarbeitet werden sollen
  4. 4 - Vokabeln pruefen/korrigieren und Arbeitsblatt-Typ waehlen + KI extrahiert Vokabeln β€” pruefen, korrigieren, Arbeitsblatt-Typ waehlen
  5. 5 @@ -1240,174 +1245,215 @@ export default function VocabWorksheetPage() {
- {/* Two Column Layout */} -
- {/* Session Name */} -
-

- 1. Session benennen -

- { setSessionName(e.target.value); setError(null) }} - placeholder="z.B. Englisch Klasse 7 - Unit 3" - className={`w-full px-4 py-3 rounded-xl border ${glassInput} focus:outline-none focus:ring-2 focus:ring-purple-500`} - /> + {/* Step 1: Document Selection */} +
+

+ 1. Dokument auswaehlen +

+ + + +
+ {/* File Upload Button */} + + + {/* QR Code Upload Button */} +
- {/* Document Selection */} -
-

- 2. Dokument auswaehlen -

- - {/* Direct Upload */} - - - {/* Two upload options side by side */} -
- {/* File Upload Button */} -
- ) : ( -
- πŸ“ - Datei auswaehlen -
- )} - + {selectedMobileFile?.id === file.id && ( + + + + )} + + ))} +
+ + )} - {/* QR Code Upload Button */} -
- ) : ( -
- πŸ“± - Mit Handy scannen -
+ {selectedDocumentId === doc.id && ( + + + + )} + + ))} +
+ + )} +
+ + {/* Step 2: Preview + Session Name (shown when document selected) */} + {(directFile || selectedMobileFile || selectedDocumentId) && ( +
+ {/* Document Preview */} +
+
+

+ Vorschau +

+ +
+
+ {/* Image preview from file */} + {directFile?.type.startsWith('image/') && directFilePreview && ( + Vorschau )} - + {/* PDF preview from file */} + {directFile?.type === 'application/pdf' && directFilePreview && ( +