diff --git a/frontend/src/components/ExercisePickerModal.jsx b/frontend/src/components/ExercisePickerModal.jsx index 9661100..0cda9dd 100644 --- a/frontend/src/components/ExercisePickerModal.jsx +++ b/frontend/src/components/ExercisePickerModal.jsx @@ -75,10 +75,13 @@ export default function ExercisePickerModal({ const usePlanningSearch = Boolean(planningContext?.unitId && Number(planningContext.unitId) > 0) - const effectivePickerQuery = useMemo( - () => [debouncedSearch, debouncedAi].filter(Boolean).join(' ').trim(), - [debouncedSearch, debouncedAi] - ) + /** Gemeinsamer Suchtext — in Planung nur ein Feld; in Bibliothek beide Felder kombiniert. */ + const effectivePickerQuery = useMemo(() => { + if (usePlanningSearch) { + return (debouncedSearch || debouncedAi).trim() + } + return [debouncedSearch, debouncedAi].filter(Boolean).join(' ').trim() + }, [usePlanningSearch, debouncedSearch, debouncedAi]) const { title: quickTitle, @@ -249,9 +252,7 @@ export default function ExercisePickerModal({ if (filters.skill_max_level) q.skill_max_level = n(filters.skill_max_level) if (filters.exclude_without_focus) q.exclude_without_focus = true if (filters.include_archived) q.include_archived = true - if (debouncedSearch) q.search = debouncedSearch - if (debouncedAi) q.ai_search = debouncedAi - if (!debouncedSearch && debouncedAi) q.search = debouncedAi + if (effectivePickerQuery) q.search = effectivePickerQuery if ( Array.isArray(exerciseKindAny) && exerciseKindAny.length > 0 @@ -259,7 +260,7 @@ export default function ExercisePickerModal({ q.exercise_kind_any = exerciseKindAny } return q - }, [filters, debouncedSearch, debouncedAi, exerciseKindAny]) + }, [filters, effectivePickerQuery, exerciseKindAny]) const reload = useCallback(async () => { if (!open || !catalogsReady) return @@ -345,8 +346,6 @@ export default function ExercisePickerModal({ usePlanningSearch, planningContext, effectivePickerQuery, - debouncedSearch, - debouncedAi, exerciseKindAny, ]) @@ -496,7 +495,13 @@ export default function ExercisePickerModal({ >

- {multiSelect ? 'Übungen auswählen' : 'Übung auswählen'} + {usePlanningSearch + ? multiSelect + ? 'Planungs-KI: Übungen vorschlagen' + : 'Planungs-KI: Übung vorschlagen' + : multiSelect + ? 'Übungen auswählen' + : 'Übung auswählen'}

) : null} + {!usePlanningSearch ? ( +

+ Bibliothekssuche (Volltext) — Planungs-KI mit + Kontext (Einheit, Plan, Anker) gibt es in der{' '} + Trainingseinheit bearbeiten, nach dem Speichern der Einheit. +

+ ) : null}
-
- - setSearchInput(e.target.value)} - autoComplete="off" - /> -
-
- - setAiSearchInput(e.target.value)} - autoComplete="off" - /> - {usePlanningSearch ? ( + {usePlanningSearch ? ( +
+ + { + const v = e.target.value + setSearchInput(v) + setAiSearchInput(v) + }} + autoComplete="off" + />

- Beide Felder bilden eine gemeinsame Planungs-Anfrage. + Leer lassen = nächste Übung aus Planungskontext. Mit Text = KI-Intent + Profil + Ranking.

- ) : null} -
+
+ ) : ( + <> +
+ + setSearchInput(e.target.value)} + autoComplete="off" + /> +
+
+ + setAiSearchInput(e.target.value)} + autoComplete="off" + /> +
+ + )}