Изменено отображение треков
This commit is contained in:
@@ -5,72 +5,50 @@
|
||||
@inject HttpClient Http
|
||||
@inject ISnackbar Snackbar
|
||||
|
||||
<MudPaper Class="mb-4" Elevation="0" Style="background-color: rgba(0,0,0,0.05); border-radius: 8px;">
|
||||
<MudStack AlignItems="AlignItems.Start">
|
||||
<MudTextField @bind-Value="_searchQuery"
|
||||
@bind-Value:after="SearchTracks"
|
||||
Variant="Variant.Outlined"
|
||||
FullWidth
|
||||
Label="Название или ссылка на трек Яндекс.Музыки"
|
||||
Disabled="@_isSearching"
|
||||
Adornment="Adornment.End" AdornmentIcon="@Icons.Material.Filled.Search" AdornmentColor="Color.Secondary"
|
||||
/>
|
||||
<MudStack AlignItems="AlignItems.Stretch">
|
||||
<MudTextField @bind-Value="_searchQuery"
|
||||
@bind-Value:after="SearchTracks"
|
||||
Variant="Variant.Outlined"
|
||||
FullWidth
|
||||
Label="Название или ссылка на трек Яндекс.Музыки"
|
||||
Disabled="@_isSearching"
|
||||
Adornment="Adornment.End" AdornmentIcon="@Icons.Material.Filled.Search" AdornmentColor="Color.Secondary"
|
||||
/>
|
||||
|
||||
<MudToggleGroup T="TrackSearchType"
|
||||
@bind-Value="_searchType"
|
||||
@bind-Value:after="SearchTracks"
|
||||
Size="Size.Small"
|
||||
Color="Color.Primary"
|
||||
Disabled="@(_isSearching)"
|
||||
>
|
||||
<MudToggleItem Value="TrackSearchType.All" Text="Все" />
|
||||
<MudToggleItem Value="TrackSearchType.Track" Text="Трек" />
|
||||
<MudToggleItem Value="TrackSearchType.Album" Text="Альбом" />
|
||||
<MudToggleItem Value="TrackSearchType.Artist" Text="Исполнитель" />
|
||||
</MudToggleGroup>
|
||||
<MudToggleGroup T="TrackSearchType"
|
||||
@bind-Value="_searchType"
|
||||
@bind-Value:after="SearchTracks"
|
||||
Size="Size.Small"
|
||||
Color="Color.Primary"
|
||||
Disabled="@(_isSearching)"
|
||||
>
|
||||
<MudToggleItem Value="TrackSearchType.All" Text="Все" />
|
||||
<MudToggleItem Value="TrackSearchType.Track" Text="Трек" />
|
||||
<MudToggleItem Value="TrackSearchType.Album" Text="Альбом" />
|
||||
<MudToggleItem Value="TrackSearchType.Artist" Text="Исполнитель" />
|
||||
</MudToggleGroup>
|
||||
|
||||
@if (_isSearching)
|
||||
{
|
||||
<MudProgressLinear Color="Color.Primary" Indeterminate="true" Class="my-7" />
|
||||
}
|
||||
else if (_searchResults.Any())
|
||||
{
|
||||
<div style="max-height: 400px; overflow-y: auto;">
|
||||
@foreach (var track in _searchResults)
|
||||
{
|
||||
<div style="display: flex; align-items: center; gap: 12px; padding: 8px; border-bottom: 1px solid rgba(0,0,0,0.1);">
|
||||
<div style="width: 40px; height: 40px; flex-shrink: 0;">
|
||||
<TrackCoverWithPlay CoverUrl="@track.CoverUri"
|
||||
TrackId="@track.TrackId"
|
||||
TrackTitle="@track.Title"
|
||||
PlaylistShareToken="@ShareToken"
|
||||
Width="40" Height="40" />
|
||||
</div>
|
||||
<div style="flex: 1; min-width: 0;">
|
||||
<MudText Typo="Typo.body1" Style="font-weight: 500;">@track.Title</MudText>
|
||||
<MudText Typo="Typo.body2" Color="Color.Secondary">@string.Join(", ", track.Artists)</MudText>
|
||||
</div>
|
||||
<div style="flex-shrink: 0;">
|
||||
<MudText Typo="Typo.body2">@track.DurationMs.FormatDuration()</MudText>
|
||||
</div>
|
||||
<div style="flex-shrink: 0;">
|
||||
<MudToggleIconButton Toggled="_addingTrackIds.Contains(track.TrackId)"
|
||||
Icon="@Icons.Material.Filled.AddCircle"
|
||||
Color="@Color.Primary"
|
||||
ToggledIcon="@Icons.Material.Filled.RemoveCircle"
|
||||
ToggledColor="@Color.Error"
|
||||
ToggledChanged="() => ToggleTrack(track)" />
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
else if (!_isFirstSearch)
|
||||
{
|
||||
<MudAlert Severity="Severity.Info">Ничего не найдено. Попробуйте изменить запрос.</MudAlert>
|
||||
}
|
||||
</MudStack>
|
||||
</MudPaper>
|
||||
<MudTable Items="@_searchResults"
|
||||
Virtualize="@true"
|
||||
Height="400px"
|
||||
Hover="true"
|
||||
Breakpoint="Breakpoint.Sm"
|
||||
Loading="@_isSearching">
|
||||
<RowTemplate>
|
||||
<MudTd Style="width: 100%;">
|
||||
<TrackItem Track="@context" PlaylistShareToken="@ShareToken" />
|
||||
</MudTd>
|
||||
<MudTd>
|
||||
<MudToggleIconButton Toggled="_addingTrackIds.Contains(context.TrackId)"
|
||||
Icon="@Icons.Material.Filled.AddCircle"
|
||||
Color="@Color.Primary"
|
||||
ToggledIcon="@Icons.Material.Filled.RemoveCircle"
|
||||
ToggledColor="@Color.Error"
|
||||
ToggledChanged="() => ToggleTrack(context)" />
|
||||
</MudTd>
|
||||
</RowTemplate>
|
||||
</MudTable>
|
||||
</MudStack>
|
||||
|
||||
@code {
|
||||
[Parameter] public string ShareToken { get; set; } = string.Empty;
|
||||
@@ -165,7 +143,7 @@
|
||||
{
|
||||
await RemoveTrackById(track.TrackId);
|
||||
await OnTrackRemoved.InvokeAsync();
|
||||
Snackbar.Add($"Трек \"{track.Title}\" добавлен", Severity.Success);
|
||||
Snackbar.Add($"Трек \"{track.Title}\" удален", Severity.Success);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -208,7 +186,6 @@
|
||||
var response = await Http.PostAsJsonAsync($"/api/sharedplaylist/{ShareToken}/add-tracks", request);
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
Snackbar.Add("Трек успешно добавлен", Severity.Success);
|
||||
await OnTrackAdded.InvokeAsync(); // уведомляем родителя, что список треков изменился
|
||||
}
|
||||
else
|
||||
@@ -235,7 +212,6 @@
|
||||
var response = await Http.PostAsJsonAsync($"/api/sharedplaylist/{ShareToken}/remove-tracks", request);
|
||||
if (response.IsSuccessStatusCode)
|
||||
{
|
||||
Snackbar.Add("Трек успешно удален", Severity.Success);
|
||||
await OnTrackAdded.InvokeAsync(); // уведомляем родителя, что список треков изменился
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user