Parcourir la source

feat: make delete exercise button work (#43)

Jonathan il y a 1 mois
Parent
commit
c513a79882

+ 4 - 0
src/features/workout-builder/model/use-workout-stepper.ts

@@ -23,6 +23,7 @@ export function useWorkoutStepper() {
     shuffleExercise,
     pickExercise,
     isShuffling,
+    deleteExercise,
   } = useWorkoutBuilderStore();
 
   const canProceedToStep2 = selectedEquipment.length > 0;
@@ -71,5 +72,8 @@ export function useWorkoutStepper() {
 
     // pick
     pickExercise,
+
+    // delete
+    deleteExercise,
   };
 }

+ 17 - 0
src/features/workout-builder/model/workout-builder.store.ts

@@ -29,6 +29,7 @@ interface WorkoutBuilderState {
   setExercisesOrder: (order: string[]) => void;
   shuffleExercise: (exerciseId: string, muscle: ExerciseAttributeValueEnum) => Promise<void>;
   pickExercise: (exerciseId: string) => Promise<void>;
+  deleteExercise: (exerciseId: string) => void;
   loadFromSession: (params: {
     equipment: ExerciseAttributeValueEnum[];
     muscles: ExerciseAttributeValueEnum[];
@@ -90,6 +91,22 @@ export const useWorkoutBuilderStore = create<WorkoutBuilderState>((set, get) =>
 
   setExercisesOrder: (order) => set({ exercisesOrder: order }),
 
+  deleteExercise: (exerciseId) =>
+    set((state) => ({
+      exercisesByMuscle: state.exercisesByMuscle
+        .map((group) => {
+          const filteredExercises = group.exercises.filter((ex: any) => ex.id !== exerciseId);
+
+          if (filteredExercises.length === group.exercises.length) {
+            return group;
+          }
+
+          return { ...group, exercises: filteredExercises };
+        })
+        .filter((group) => group.exercises.length > 0),
+      exercisesOrder: state.exercisesOrder.filter((id) => id !== exerciseId),
+    })),
+
   shuffleExercise: async (exerciseId, muscle) => {
     set({ isShuffling: true });
     try {

+ 3 - 3
src/features/workout-builder/ui/workout-stepper.tsx

@@ -49,6 +49,7 @@ export function WorkoutStepper() {
     pickExercise,
     isShuffling,
     goToStep,
+    deleteExercise,
   } = useWorkoutStepper();
 
   useEffect(() => {
@@ -103,9 +104,8 @@ export function WorkoutStepper() {
     }
   };
 
-  const handleDeleteExercise = (exerciseId: string, muscle: string) => {
-    alert("TODO : Delete exercise");
-    console.log("Delete exercise:", exerciseId, "for muscle:", muscle);
+  const handleDeleteExercise = (exerciseId: string) => {
+    deleteExercise(exerciseId);
   };
 
   const handleAddExercise = () => {