import React from 'react'; import { MoreVertical, X, CheckSquare, ChevronUp, ChevronDown, Scale, Dumbbell, Plus, Activity, Timer as TimerIcon, ArrowRight, ArrowUp, CheckCircle, Edit, Trash2 } from 'lucide-react'; import { ExerciseType, Language, WorkoutSet } from '../../types'; import { t } from '../../services/i18n'; import FilledInput from '../FilledInput'; import ExerciseModal from '../ExerciseModal'; import { useTracker } from './useTracker'; import SetLogger from './SetLogger'; interface ActiveSessionViewProps { tracker: ReturnType; activeSession: any; // Using any to avoid strict type issues with the complex session object for now, but ideally should be WorkoutSession lang: Language; onSessionEnd: () => void; onSessionQuit: () => void; onRemoveSet: (setId: string) => void; } const ActiveSessionView: React.FC = ({ tracker, activeSession, lang, onSessionEnd, onSessionQuit, onRemoveSet }) => { const { elapsedTime, showFinishConfirm, setShowFinishConfirm, showQuitConfirm, setShowQuitConfirm, showMenu, setShowMenu, activePlan, // This comes from useTracker props but we might need to pass it explicitly if not in hook return currentStepIndex, showPlanList, setShowPlanList, jumpToStep, searchQuery, setSearchQuery, setShowSuggestions, showSuggestions, filteredExercises, setSelectedExercise, selectedExercise, weight, setWeight, reps, setReps, duration, setDuration, distance, setDistance, height, setHeight, handleAddSet, editingSetId, editWeight, setEditWeight, editReps, setEditReps, editDuration, setEditDuration, editDistance, setEditDistance, editHeight, setEditHeight, handleCancelEdit, handleSaveEdit, handleEditSet, isCreating, setIsCreating, handleCreateExercise, exercises } = tracker; const isPlanFinished = activePlan && currentStepIndex >= activePlan.steps.length; return (

{activePlan ? activePlan.name : t('free_workout', lang)}

{elapsedTime} {activeSession.userBodyWeight ? ` • ${activeSession.userBodyWeight}kg` : ''}
{showMenu && ( <>
setShowMenu(false)} />
)}
{activePlan && (
{showPlanList && (
{activePlan.steps.map((step, idx) => ( ))}
)}
)}
{activeSession.sets.length > 0 && (

{t('history_section', lang)}

{[...activeSession.sets].reverse().map((set: WorkoutSet, idx: number) => { const setNumber = activeSession.sets.length - idx; const isEditing = editingSetId === set.id; return (
{setNumber}
{isEditing ? (
{set.exerciseName}{set.side && {t(set.side.toLowerCase() as any, lang)}}
{set.weight !== undefined && ( setEditWeight(e.target.value)} className="px-2 py-1 bg-surface-container-high rounded text-sm text-on-surface border border-outline-variant focus:border-primary focus:outline-none" placeholder="Weight (kg)" /> )} {set.reps !== undefined && ( setEditReps(e.target.value)} className="px-2 py-1 bg-surface-container-high rounded text-sm text-on-surface border border-outline-variant focus:border-primary focus:outline-none" placeholder="Reps" /> )} {set.durationSeconds !== undefined && ( setEditDuration(e.target.value)} className="px-2 py-1 bg-surface-container-high rounded text-sm text-on-surface border border-outline-variant focus:border-primary focus:outline-none" placeholder="Duration (s)" /> )} {set.distanceMeters !== undefined && ( setEditDistance(e.target.value)} className="px-2 py-1 bg-surface-container-high rounded text-sm text-on-surface border border-outline-variant focus:border-primary focus:outline-none" placeholder="Distance (m)" /> )} {set.height !== undefined && ( setEditHeight(e.target.value)} className="px-2 py-1 bg-surface-container-high rounded text-sm text-on-surface border border-outline-variant focus:border-primary focus:outline-none" placeholder="Height (cm)" /> )}
) : (
{set.exerciseName}{set.side && {t(set.side.toLowerCase() as any, lang)}}
{set.type === ExerciseType.STRENGTH && `${set.weight ? `${set.weight}kg` : ''} ${set.reps ? `x ${set.reps}` : ''}`.trim() } {set.type === ExerciseType.BODYWEIGHT && `${set.weight ? `${set.weight}kg` : ''} ${set.reps ? `x ${set.reps}` : ''}`.trim() } {set.type === ExerciseType.CARDIO && `${set.durationSeconds ? `${set.durationSeconds}s` : ''} ${set.distanceMeters ? `/ ${set.distanceMeters}m` : ''}`.trim() } {set.type === ExerciseType.STATIC && `${set.durationSeconds ? `${set.durationSeconds}s` : ''}`.trim() } {set.type === ExerciseType.HIGH_JUMP && `${set.height ? `${set.height}cm` : ''}`.trim() } {set.type === ExerciseType.LONG_JUMP && `${set.distanceMeters ? `${set.distanceMeters}m` : ''}`.trim() } {set.type === ExerciseType.PLYOMETRIC && `${set.reps ? `x ${set.reps}` : ''}`.trim() }
)}
{isEditing ? ( <> ) : ( <> )}
); })}
)}
{isCreating && ( setIsCreating(false)} onSave={handleCreateExercise} lang={lang} existingExercises={exercises} /> )} {/* Finish Confirmation Dialog */} {showFinishConfirm && (

{t('finish_confirm_title', lang)}

{t('finish_confirm_msg', lang)}

)} {/* Quit Without Saving Confirmation Dialog */} {showQuitConfirm && (

{t('quit_confirm_title', lang)}

{t('quit_confirm_msg', lang)}

)}
); }; export default ActiveSessionView;