diff --git a/frontend/src/views/social/VocabLessonView.vue b/frontend/src/views/social/VocabLessonView.vue index e902640..3108d74 100644 --- a/frontend/src/views/social/VocabLessonView.vue +++ b/frontend/src/views/social/VocabLessonView.vue @@ -412,7 +412,9 @@ export default { console.error('Fehler in importantVocab computed property:', e); return []; } - }, + } + }, + methods: { _extractVocabFromExercises(exercises) { // Sicherstellen, dass exercises ein Array ist if (!exercises) { @@ -420,17 +422,32 @@ export default { return []; } - // Konvertiere zu Array falls nötig + // Konvertiere Vue Proxy oder Objekt zu Array let exercisesArray = exercises; - if (!Array.isArray(exercises)) { - console.warn('[_extractVocabFromExercises] exercises ist kein Array, versuche zu konvertieren:', exercises); - // Falls es ein Objekt mit length ist, versuche es zu konvertieren - if (typeof exercises === 'object' && exercises.length !== undefined) { + + // Prüfe ob es bereits ein Array ist (auch Vue Proxy-Arrays) + const isArrayLike = exercises.length !== undefined && typeof exercises.length === 'number'; + + if (!Array.isArray(exercises) && isArrayLike) { + console.log('[_extractVocabFromExercises] exercises ist kein Array, aber array-like, konvertiere...'); + // Versuche Array.from (funktioniert mit iterierbaren Objekten und Array-like Objekten) + try { exercisesArray = Array.from(exercises); - } else { - console.error('[_extractVocabFromExercises] Kann exercises nicht zu Array konvertieren:', exercises); - return []; + } catch (e) { + // Fallback: Manuelle Konvertierung + try { + exercisesArray = []; + for (let i = 0; i < exercises.length; i++) { + exercisesArray.push(exercises[i]); + } + } catch (e2) { + console.error('[_extractVocabFromExercises] Kann exercises nicht zu Array konvertieren:', exercises, e2); + return []; + } } + } else if (!Array.isArray(exercises)) { + console.error('[_extractVocabFromExercises] exercises ist weder Array noch array-like:', exercises); + return []; } const vocabMap = new Map(); @@ -507,14 +524,12 @@ export default { } catch (e) { console.warn('Fehler beim Extrahieren von Vokabeln aus Übung:', e, exercise); } - }); + }); const result = Array.from(vocabMap.values()); console.log(`[_extractVocabFromExercises] Ergebnis:`, result.length, 'Vokabeln'); return result; - } - }, - watch: { + }, courseId(newVal, oldVal) { if (newVal !== oldVal) { // Reset Flags beim Kurswechsel