From 4f363730d5e33d178252b17b512a3aa0b2b962fb Mon Sep 17 00:00:00 2001 From: AG Date: Sat, 29 Nov 2025 19:29:35 +0200 Subject: [PATCH] New exercise creation added to Quick Log. History fixed. --- components/History.tsx | 112 +++++++++++------------ components/Tracker/ActiveSessionView.tsx | 3 +- components/Tracker/SporadicView.tsx | 52 +++++++++-- components/Tracker/useTracker.ts | 15 ++- server/prisma/dev.db | Bin 102400 -> 102400 bytes 5 files changed, 116 insertions(+), 66 deletions(-) diff --git a/components/History.tsx b/components/History.tsx index 847e25d..0d2715c 100644 --- a/components/History.tsx +++ b/components/History.tsx @@ -112,7 +112,7 @@ const History: React.FC = ({ sessions, sporadicSets, onUpdateSessi } }; - if (sessions.length === 0) { + if (sessions.length === 0 && (!sporadicSets || sporadicSets.length === 0)) { return (
@@ -197,66 +197,66 @@ const History: React.FC = ({ sessions, sporadicSets, onUpdateSessi
) })} - - {/* Sporadic Sets Section */} - {sporadicSets && sporadicSets.length > 0 && ( -
-

{t('sporadic_sets_title', lang)}

- {Object.entries( - sporadicSets.reduce((groups: Record, set) => { - const date = new Date(set.timestamp).toISOString().split('T')[0]; - if (!groups[date]) groups[date] = []; - groups[date].push(set); - return groups; - }, {}) - ) - .sort(([a], [b]) => b.localeCompare(a)) - .map(([date, sets]) => ( -
-
{date}
-
- {sets.map(set => ( -
-
-
{set.exerciseName}
-
- {set.type === ExerciseType.STRENGTH && `${set.weight || 0}kg x ${set.reps || 0}`} - {set.type === ExerciseType.BODYWEIGHT && `${set.weight ? `+${set.weight}kg` : 'BW'} x ${set.reps || 0}`} - {set.type === ExerciseType.CARDIO && `${set.durationSeconds || 0}s ${set.distanceMeters ? `/ ${set.distanceMeters}m` : ''}`} - {set.type === ExerciseType.STATIC && `${set.durationSeconds || 0}s`} - {set.type === ExerciseType.HIGH_JUMP && `${set.height || 0}cm`} - {set.type === ExerciseType.LONG_JUMP && `${set.distanceMeters || 0}m`} - {set.type === ExerciseType.PLYOMETRIC && `x ${set.reps || 0}`} + {/* Sporadic Sets Section */} + {sporadicSets && sporadicSets.length > 0 && ( +
+

{t('sporadic_sets_title', lang)}

+ {Object.entries( + sporadicSets.reduce((groups: Record, set) => { + const date = new Date(set.timestamp).toISOString().split('T')[0]; + if (!groups[date]) groups[date] = []; + groups[date].push(set); + return groups; + }, {}) + ) + .sort(([a], [b]) => b.localeCompare(a)) + .map(([date, sets]) => ( +
+
{date}
+
+ {(sets as SporadicSet[]).map(set => ( +
+
+
{set.exerciseName}
+
+ {set.type === ExerciseType.STRENGTH && `${set.weight || 0}kg x ${set.reps || 0}`} + {set.type === ExerciseType.BODYWEIGHT && `${set.weight ? `+${set.weight}kg` : 'BW'} x ${set.reps || 0}`} + {set.type === ExerciseType.CARDIO && `${set.durationSeconds || 0}s ${set.distanceMeters ? `/ ${set.distanceMeters}m` : ''}`} + {set.type === ExerciseType.STATIC && `${set.durationSeconds || 0}s`} + {set.type === ExerciseType.HIGH_JUMP && `${set.height || 0}cm`} + {set.type === ExerciseType.LONG_JUMP && `${set.distanceMeters || 0}m`} + {set.type === ExerciseType.PLYOMETRIC && `x ${set.reps || 0}`} +
+
+ {new Date(set.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} +
-
- {new Date(set.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} +
+ +
-
- - -
-
- ))} + ))} +
-
- ))} -
- )} + ))} +
+ )} +
{/* DELETE CONFIRMATION DIALOG (MD3) */} {deletingId && ( diff --git a/components/Tracker/ActiveSessionView.tsx b/components/Tracker/ActiveSessionView.tsx index 4f3aa73..40ce102 100644 --- a/components/Tracker/ActiveSessionView.tsx +++ b/components/Tracker/ActiveSessionView.tsx @@ -204,7 +204,8 @@ const ActiveSessionView: React.FC = ({ tracker, activeSe filteredExercises.map(ex => ( +

{t('quick_log', lang)}

@@ -67,13 +86,20 @@ const SporadicView: React.FC = ({ tracker, lang }) => { autoComplete="off" type="text" /> + {showSuggestions && (
{filteredExercises.length > 0 ? ( filteredExercises.map(ex => (
)}
+ + {isCreating && ( + setIsCreating(false)} + onSave={handleCreateExercise} + lang={lang} + existingExercises={exercises} + /> + )}
); }; diff --git a/components/Tracker/useTracker.ts b/components/Tracker/useTracker.ts index bbf981a..5e386da 100644 --- a/components/Tracker/useTracker.ts +++ b/components/Tracker/useTracker.ts @@ -308,7 +308,7 @@ export const useTracker = ({ } try { - const result = await logSporadicSet(userId, set); + const result = await logSporadicSet(set); if (result) { setSporadicSuccess(true); setTimeout(() => setSporadicSuccess(false), 2000); @@ -329,6 +329,7 @@ export const useTracker = ({ await saveExercise(userId, newEx); setExercises(prev => [...prev, newEx].sort((a, b) => a.name.localeCompare(b.name))); setSelectedExercise(newEx); + setSearchQuery(newEx.name); setIsCreating(false); }; @@ -364,6 +365,17 @@ export const useTracker = ({ setShowPlanList(false); }; + const resetForm = () => { + setWeight(''); + setReps(''); + setDuration(''); + setDistance(''); + setHeight(''); + setSelectedExercise(null); + setSearchQuery(''); + setSporadicSuccess(false); + }; + return { exercises, plans, @@ -426,5 +438,6 @@ export const useTracker = ({ handleSaveEdit, handleCancelEdit, jumpToStep, + resetForm, }; }; diff --git a/server/prisma/dev.db b/server/prisma/dev.db index bf88365d8637481d7f92b582cc0ce438604a7200..b1174a0d932ce38628781fd04cd12240fd1e510d 100644 GIT binary patch delta 1165 zcma)*J!=&~7=?HC-rVF~;+=?EhzbTGS~xnh^9@0RM*JXPBrb^wYIb&KKnSSB5Swsg zlawkJf>=Z%!7doVzhGlwx)AJb{1LvpifFgp!t8tA^PD-ey3tzQXuUXw=3XAZjOISh zzkl9oboV3t7LRuKKOG$U+9mUi{xm&0j0ULjR_WXln{i1*5;U=z22zN?Gp<9C@%&Zq z;>d-m$4l9h#Y;EG?@V90e)Zbz*?Tca903VqT~RQqNnnK_!g)!okbxL(B=<=!l;owv z==g(2{|MZ72n0@)0-01YXE_lfDTvUH6YB&ghWY@?+ytXbf#J!eg$0uSC(?6`ty)%sz)!}NCKh|*{pKhe>IxY`@o46lOM0g8NfSECTekN|GX|M!YqYh)_Uh1kH&TUL?{RCWEeXJ)LD#F76Ff zo4N9db|JuK4pC`liLt>F#-tQbCP9s=!&m3N2g{rh-iz>FRlZGptIW9$e3f$@uRBAn zlg*U~uRzF)m_LiqAi!3ILVXd$tTO8yNjy!6U>=G=9fOM4;I(F6iR$f~t@9ub&q96P nxf?rU-|bMtB$OeZkFh&9v|J?n88{^;_x}(I+Fg delta 176 zcmZozz}B#UZGtqT_e2?IM(>RYOZpeH2q>^I2rw}4FWW3AFo$11f{`;cl$C*zfq}u$ zEXBk;HPuKr**wWo*TmSwSU1ts&`8%Z$uP~#C@san*feSS26;vmLB?4ZCWc=K<^pO0 on{@+d);WF+b>>h`Vhq_Nz@h+h$YvISzw+A|4H%gNfXqMq0Agz_$N&HU