@using RackPeek.Domain.UseCases.Labels @typeparam TResource where TResource : RackPeek.Domain.Resources.Resource @inject IAddLabelUseCase AddLabelUseCase @inject IRemoveLabelUseCase RemoveLabelUseCase
Labels
@if (Resource.Labels.Any()) {
@foreach (var kvp in Resource.Labels.OrderBy(k => k.Key)) {
}
}
@code { [Parameter] [EditorRequired] public TResource Resource { get; set; } = default!; [Parameter] public EventCallback OnLabelsChanged { get; set; } [Parameter] public string? TestIdPrefix { get; set; } private bool _labelModalOpen; private string? _editingKey; private string? _editingValue; private string BaseTestId => string.IsNullOrWhiteSpace(TestIdPrefix) ? "resource-label-editor" : $"{TestIdPrefix}-resource-label-editor"; void OpenAddLabel() { _editingKey = null; _editingValue = null; _labelModalOpen = true; } void OpenEditLabel(string key, string value) { _editingKey = key; _editingValue = value; _labelModalOpen = true; } public async Task HandleLabelSubmit((string Key, string Value) label) { var originalKey = _editingKey; _editingKey = null; _editingValue = null; if (originalKey is not null && originalKey != label.Key) await RemoveLabelUseCase.ExecuteAsync(Resource.Name, originalKey); await AddLabelUseCase.ExecuteAsync(Resource.Name, label.Key, label.Value); if (OnLabelsChanged.HasDelegate) await OnLabelsChanged.InvokeAsync(); } async Task RemoveLabel(string key) { await RemoveLabelUseCase.ExecuteAsync(Resource.Name, key); if (OnLabelsChanged.HasDelegate) await OnLabelsChanged.InvokeAsync(); } }