@using PlaylistShared.Shared.Shared
@inject HttpClient Http
@inject ISnackbar Snackbar
@if (_addingTrack)
{
}
else
{
Добавить
}
@code {
private int _activeTabIndex = 0;
private string _trackLink = "";
private bool _addingTrack = false;
[Parameter] public string ShareToken { get; set; } = string.Empty;
[Parameter] public EventCallback OnTrackAdded { get; set; }
private async Task AddTrackByLink()
{
if (string.IsNullOrWhiteSpace(_trackLink))
{
Snackbar.Add("Введите ссылку на трек", Severity.Warning);
return;
}
var trackId = ExtractTrackIdFromLink(_trackLink);
if (string.IsNullOrEmpty(trackId))
{
Snackbar.Add("Неверный формат ссылки", Severity.Warning);
return;
}
await AddTrackById(trackId);
if (!_addingTrack) // если не было ошибки
_trackLink = "";
}
private async Task AddTrackById(string trackId)
{
_addingTrack = true;
try
{
var request = new AddTracksRequest { TrackIds = new List { trackId } };
var response = await Http.PostAsJsonAsync($"/api/sharedplaylist/{ShareToken}/add-tracks", request);
if (response.IsSuccessStatusCode)
{
Snackbar.Add("Трек успешно добавлен", Severity.Success);
await OnTrackAdded.InvokeAsync(); // уведомляем родителя, что список треков изменился
}
else
{
var error = await response.Content.ReadFromJsonAsync>();
Snackbar.Add(error?.Error?.Message ?? "Ошибка добавления трека", Severity.Error);
}
}
catch (Exception ex)
{
Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error);
}
finally
{
_addingTrack = false;
StateHasChanged();
}
}
private string? ExtractTrackIdFromLink(string link)
{
var match = System.Text.RegularExpressions.Regex.Match(link, @"/track/(\d+)");
return match.Success ? match.Groups[1].Value : null;
}
}