Files
TrainigPlaner/src/TrainingPlanner.Web/Components/Editor/BlockCard.razor
T
2026-09-30 15:05:05 +03:00

39 lines
1.8 KiB
Plaintext

<article class="block-card">
<header class="block-header">
<div class="actions">
<span class="drag-handle" draggable="true" @ondragstart="() => OnDrag.InvokeAsync()" title="Перетащить блок">⠿</span>
<span class="block-number">@Number.ToString("00")</span>
<strong>Упражнение</strong>
</div>
<div class="actions">
<button title="Вверх" aria-label="Переместить вверх" disabled="@IsFirst" @onclick="() => OnMove.InvokeAsync(-1)">↑</button>
<button title="Вниз" aria-label="Переместить вниз" disabled="@IsLast" @onclick="() => OnMove.InvokeAsync(1)">↓</button>
<button @onclick="() => OnCopy.InvokeAsync()">Копия</button>
<button class="danger-text" @onclick="() => OnDelete.InvokeAsync()">Удалить</button>
</div>
</header>
<div class="exercise-columns"><ExerciseEditor Exercise="Block.Exercises[0]" OnChanged="OnChanged" /></div>
<footer class="block-footer">
<div class="actions">
<label class="rest-input">Подходов
<input type="number" min="1" step="1" @bind="Block.SetsCount" @bind:after="Changed" />
</label>
<label class="rest-input">Отдых, мин
<input type="number" min="0" step="any" @bind="Block.RestMinutes" @bind:after="Changed" />
</label>
</div>
</footer>
</article>
@code {
[Parameter, EditorRequired] public WorkoutBlock Block { get; set; } = null!;
[Parameter] public int Number { get; set; }
[Parameter] public bool IsFirst { get; set; }
[Parameter] public bool IsLast { get; set; }
[Parameter] public EventCallback OnChanged { get; set; }
[Parameter] public EventCallback<int> OnMove { get; set; }
[Parameter] public EventCallback OnCopy { get; set; }
[Parameter] public EventCallback OnDelete { get; set; }
[Parameter] public EventCallback OnDrag { get; set; }
private Task Changed() => OnChanged.InvokeAsync();
}