import React, { useEffect, useMemo, useState } from 'react' import FrameworkProgramsFilterBlock from './FrameworkProgramsFilterBlock' import { EMPTY_FRAMEWORK_IMPORT_FILTERS, filterFrameworkPrograms, frameworkProgramOptionLabel, frameworkSessionDurationLabel, } from '../../utils/frameworkProgramListHelpers' import { formatDurationDisplay } from '../../utils/trainingDurationUtils' /** * Modal: geplante Einheiten aus einem Trainingsrahmenprogramm (Blueprint-Slots) erzeugen. */ export default function TrainingPlanningFrameworkImportModal({ open, frameworkProgramsList, catalogFocusAreas = [], catalogTrainingTypes = [], catalogTargetGroups = [], fwImportProgramId, onProgramChange, fwImportLoading, fwImportDetail, fwImportSelectedSlots, onToggleSlot, fwImportSlotDates, onSlotDateChange, fwImportStartDate, onFwImportStartDateChange, fwImportIntervalDays, onFwImportIntervalDaysChange, fwImportSubmitting, onApplyDateSuggestions, onSubmit, onClose, }) { const [filters, setFilters] = useState(() => ({ ...EMPTY_FRAMEWORK_IMPORT_FILTERS })) const [filterPanelOpen, setFilterPanelOpen] = useState(true) useEffect(() => { if (!open) { setFilters({ ...EMPTY_FRAMEWORK_IMPORT_FILTERS }) setFilterPanelOpen(true) } }, [open]) const filteredPrograms = useMemo( () => filterFrameworkPrograms(frameworkProgramsList, filters), [frameworkProgramsList, filters] ) const matchCount = filteredPrograms.length useEffect(() => { if (!fwImportProgramId) return const stillVisible = filteredPrograms.some((p) => String(p.id) === String(fwImportProgramId)) if (!stillVisible) onProgramChange('') }, [filteredPrograms, fwImportProgramId, onProgramChange]) const selectedProgramSummary = useMemo(() => { if (!fwImportProgramId) return null return (frameworkProgramsList || []).find((p) => String(p.id) === String(fwImportProgramId)) }, [frameworkProgramsList, fwImportProgramId]) if (!open) return null return (
Wähle ein Trainingsrahmenprogramm und eine oder mehrere Sessions. Pro Session entsteht eine{' '} eigene geplante Einheit in der aktuellen Gruppe (Kopie des Ablaufs).
Session-Dauer: {frameworkSessionDurationLabel(selectedProgramSummary)} {selectedProgramSummary.goal_titles_agg ? ( <> {' '} · Ziele: {selectedProgramSummary.goal_titles_agg} > ) : null}
) : null}Laden der Sessions…
) : fwImportDetail?.slots?.length ? ( <>Keine Sessions in diesem Programm.
) : null}