feat: add delete functionality for exercises and routines

This commit is contained in:
2026-01-31 00:18:30 +01:00
parent 81d6b70673
commit 8300331276
5 changed files with 107 additions and 41 deletions

View File

@@ -25,53 +25,60 @@
</section>
}
@if (ShowCreateRoutine)
@if (EditingRoutine is null)
{
<section class="card">
<h2>Create Routine</h2>
<input class="input" placeholder="Routine name" @bind="NewRoutineName" @bind:event="oninput" />
<div class="list">
@foreach (var exercise in ExerciseList)
{
<label class="checkbox-row">
<input type="checkbox" checked="@SelectedExerciseIds.Contains(exercise.Id)" @onchange="() => ToggleExercise(exercise.Id)" />
<span>@exercise.Name</span>
</label>
}
</div>
<button class="primary" @onclick="CreateRoutineAsync" disabled="@string.IsNullOrWhiteSpace(NewRoutineName)">Save Routine</button>
</section>
}
@if (ShowCreateRoutine)
{
<section class="card">
<h2>Create Routine</h2>
<input class="input" placeholder="Routine name" @bind="NewRoutineName" @bind:event="oninput" />
<div class="list">
@foreach (var exercise in ExerciseList)
{
<label class="checkbox-row">
<input type="checkbox" checked="@SelectedExerciseIds.Contains(exercise.Id)" @onchange="() => ToggleExercise(exercise.Id)" />
<span>@exercise.Name</span>
</label>
}
</div>
<button class="primary" @onclick="CreateRoutineAsync" disabled="@string.IsNullOrWhiteSpace(NewRoutineName)">Save Routine</button>
</section>
}
<section class="card">
<h2>Your Routines</h2>
@if (IsLoading)
@if (ExerciseList.Count > 0 || RoutineList.Count > 0)
{
<p>Loading...</p>
}
else if (RoutineList.Count == 0)
{
<p class="muted">No routines yet. Create one above.</p>
}
else
{
<div class="list">
@foreach (var routine in RoutineList)
<section class="card">
<h2>Your Routines</h2>
@if (IsLoading)
{
<div class="list-item">
<div>
<div class="item-title">@routine.Name</div>
<div class="item-subtitle">@string.Join(" · ", routine.Exercises.Select(e => e.Name))</div>
</div>
<div class="actions">
<button class="ghost" @onclick="() => StartEdit(routine)">Edit</button>
<button class="primary" @onclick="() => StartRun(routine)">Start</button>
</div>
<p>Loading...</p>
}
else if (RoutineList.Count == 0)
{
<p class="muted">No routines yet. Create one above.</p>
}
else
{
<div class="list">
@foreach (var routine in RoutineList)
{
<div class="list-item">
<div>
<div class="item-title">@routine.Name</div>
<div class="item-subtitle">@string.Join(" · ", routine.Exercises.Select(e => e.Name))</div>
</div>
<div class="actions">
<button class="ghost" @onclick="() => StartEdit(routine)" aria-label="Edit routine">✏️</button>
<button class="ghost" @onclick="() => DeleteRoutineAsync(routine.Id)" aria-label="Delete routine">🗑️</button>
<button class="primary" @onclick="() => StartRun(routine)">Start</button>
</div>
</div>
}
</div>
}
</div>
</section>
}
</section>
}
@if (EditingRoutine is not null)
{
@@ -246,6 +253,12 @@
CancelEdit();
}
private async Task DeleteRoutineAsync(int routineId)
{
await Api.DeleteRoutineAsync(UserContext.UserId, routineId);
RoutineList.RemoveAll(r => r.Id == routineId);
}
private async Task StartRun(RoutineDto routine)
{
ActiveRun = routine;