Browse Source

Add select all controls to media lists

pull/2738/head
Jon Crall 7 months ago
parent
commit
5f13fabd2a
  1. 2
      ErsatzTV/Pages/ArtistList.razor
  2. 2
      ErsatzTV/Pages/EpisodeList.razor
  3. 2
      ErsatzTV/Pages/ImageList.razor
  4. 2
      ErsatzTV/Pages/MovieList.razor
  5. 12
      ErsatzTV/Pages/MultiSelectBase.cs
  6. 2
      ErsatzTV/Pages/MusicVideoList.razor
  7. 2
      ErsatzTV/Pages/OtherVideoList.razor
  8. 2
      ErsatzTV/Pages/RemoteStreamList.razor
  9. 2
      ErsatzTV/Pages/SongList.razor
  10. 2
      ErsatzTV/Pages/TelevisionShowList.razor
  11. 59
      ErsatzTV/Pages/Trash.razor
  12. 16
      ErsatzTV/Shared/MediaCardPager.razor

2
ErsatzTV/Pages/ArtistList.razor

@ -18,6 +18,8 @@ @@ -18,6 +18,8 @@
AddSelectionToCollection="@AddSelectionToCollection"
AddSelectionToPlaylist="@AddSelectionToPlaylist"
ClearSelection="@ClearSelection"
CanSelectAllOnPage="@(() => _data.Cards.Count > 0)"
SelectAllOnPage="@(() => SelectAllPageItems(_data.Cards))"
IsSelectMode="@IsSelectMode"
SelectionLabel="@SelectionLabel"/>
</MudPaper>

2
ErsatzTV/Pages/EpisodeList.razor

@ -18,6 +18,8 @@ @@ -18,6 +18,8 @@
AddSelectionToCollection="@AddSelectionToCollection"
AddSelectionToPlaylist="@AddSelectionToPlaylist"
ClearSelection="@ClearSelection"
CanSelectAllOnPage="@(() => _data.Cards.Count > 0)"
SelectAllOnPage="@(() => SelectAllPageItems(_data.Cards))"
IsSelectMode="@IsSelectMode"
SelectionLabel="@SelectionLabel"/>
</MudPaper>

2
ErsatzTV/Pages/ImageList.razor

@ -18,6 +18,8 @@ @@ -18,6 +18,8 @@
AddSelectionToCollection="@AddSelectionToCollection"
AddSelectionToPlaylist="@AddSelectionToPlaylist"
ClearSelection="@ClearSelection"
CanSelectAllOnPage="@(() => _data.Cards.Count > 0)"
SelectAllOnPage="@(() => SelectAllPageItems(_data.Cards))"
IsSelectMode="@IsSelectMode"
SelectionLabel="@SelectionLabel"/>
</MudPaper>

2
ErsatzTV/Pages/MovieList.razor

@ -20,6 +20,8 @@ @@ -20,6 +20,8 @@
AddSelectionToCollection="@AddSelectionToCollection"
AddSelectionToPlaylist="@AddSelectionToPlaylist"
ClearSelection="@ClearSelection"
CanSelectAllOnPage="@(() => _data.Cards.Count > 0)"
SelectAllOnPage="@(() => SelectAllPageItems(_data.Cards))"
IsSelectMode="@IsSelectMode"
SelectionLabel="@SelectionLabel"/>
</MudPaper>

12
ErsatzTV/Pages/MultiSelectBase.cs

@ -38,6 +38,18 @@ public class MultiSelectBase<T> : FragmentNavigationBase @@ -38,6 +38,18 @@ public class MultiSelectBase<T> : FragmentNavigationBase
protected string SelectionLabel() =>
$"{SelectedItems.Count} {(SelectedItems.Count == 1 ? "Item" : "Items")} Selected";
protected void SelectAllPageItems(IEnumerable<MediaCardViewModel> cards)
{
SelectedItems.Clear();
foreach (MediaCardViewModel card in cards)
{
_recentlySelected = card;
SelectedItems.Add(card);
}
StateHasChanged();
}
protected void ClearSelection()
{
SelectedItems.Clear();

2
ErsatzTV/Pages/MusicVideoList.razor

@ -18,6 +18,8 @@ @@ -18,6 +18,8 @@
AddSelectionToCollection="@AddSelectionToCollection"
AddSelectionToPlaylist="@AddSelectionToPlaylist"
ClearSelection="@ClearSelection"
CanSelectAllOnPage="@(() => _data.Cards.Count > 0)"
SelectAllOnPage="@(() => SelectAllPageItems(_data.Cards))"
IsSelectMode="@IsSelectMode"
SelectionLabel="@SelectionLabel"/>
</MudPaper>

2
ErsatzTV/Pages/OtherVideoList.razor

@ -18,6 +18,8 @@ @@ -18,6 +18,8 @@
AddSelectionToCollection="@AddSelectionToCollection"
AddSelectionToPlaylist="@AddSelectionToPlaylist"
ClearSelection="@ClearSelection"
CanSelectAllOnPage="@(() => _data.Cards.Count > 0)"
SelectAllOnPage="@(() => SelectAllPageItems(_data.Cards))"
IsSelectMode="@IsSelectMode"
SelectionLabel="@SelectionLabel"/>
</MudPaper>

2
ErsatzTV/Pages/RemoteStreamList.razor

@ -18,6 +18,8 @@ @@ -18,6 +18,8 @@
AddSelectionToCollection="@AddSelectionToCollection"
AddSelectionToPlaylist="@AddSelectionToPlaylist"
ClearSelection="@ClearSelection"
CanSelectAllOnPage="@(() => _data.Cards.Count > 0)"
SelectAllOnPage="@(() => SelectAllPageItems(_data.Cards))"
IsSelectMode="@IsSelectMode"
SelectionLabel="@SelectionLabel"/>
</MudPaper>

2
ErsatzTV/Pages/SongList.razor

@ -18,6 +18,8 @@ @@ -18,6 +18,8 @@
AddSelectionToCollection="@AddSelectionToCollection"
AddSelectionToPlaylist="@AddSelectionToPlaylist"
ClearSelection="@ClearSelection"
CanSelectAllOnPage="@(() => _data.Cards.Count > 0)"
SelectAllOnPage="@(() => SelectAllPageItems(_data.Cards))"
IsSelectMode="@IsSelectMode"
SelectionLabel="@SelectionLabel"/>
</MudPaper>

2
ErsatzTV/Pages/TelevisionShowList.razor

@ -20,6 +20,8 @@ @@ -20,6 +20,8 @@
AddSelectionToCollection="@AddSelectionToCollection"
AddSelectionToPlaylist="@AddSelectionToPlaylist"
ClearSelection="@ClearSelection"
CanSelectAllOnPage="@(() => _data.Cards.Count > 0)"
SelectAllOnPage="@(() => SelectAllPageItems(_data.Cards))"
IsSelectMode="@IsSelectMode"
SelectionLabel="@SelectionLabel"/>
</MudPaper>

59
ErsatzTV/Pages/Trash.razor

@ -92,25 +92,37 @@ @@ -92,25 +92,37 @@
<MudLink Class="ml-4" Href="@(NavigationManager.Uri.Split("#").Head() + "#remote_streams")" Style="margin-bottom: auto; margin-top: auto">@_remoteStreams.Count Remote Streams</MudLink>
}
<div class="flex-grow-1 d-none d-md-flex"></div>
<div>
<MudButton Variant="@Variant.Filled"
Color="@Color.Error"
StartIcon="@Icons.Material.Filled.DeleteForever"
OnClick="@(_ => EmptyTrash())">
Empty Trash
</MudButton>
</div>
<MudButton Variant="@Variant.Filled"
Color="@Color.Primary"
StartIcon="@Icons.Material.Filled.SelectAll"
Disabled="@(!IsNotEmpty)"
OnClick="@(_ => SelectAllPageItems(AllCardsOnPage()))">
Select All
</MudButton>
<MudButton Class="ml-3"
Variant="@Variant.Filled"
Color="@Color.Error"
StartIcon="@Icons.Material.Filled.DeleteForever"
OnClick="@(_ => EmptyTrash())">
Empty Trash
</MudButton>
</div>
<div style="align-items: center; display: flex; width: 100%" class="d-md-none">
<div class="flex-grow-1"></div>
<div>
<MudButton Variant="@Variant.Filled"
Color="@Color.Error"
StartIcon="@Icons.Material.Filled.DeleteForever"
OnClick="@(_ => EmptyTrash())">
Empty Trash
</MudButton>
</div>
<MudButton Variant="@Variant.Filled"
Color="@Color.Primary"
StartIcon="@Icons.Material.Filled.SelectAll"
Disabled="@(!IsNotEmpty)"
OnClick="@(_ => SelectAllPageItems(AllCardsOnPage()))">
Select All
</MudButton>
<MudButton Class="ml-2"
Variant="@Variant.Filled"
Color="@Color.Error"
StartIcon="@Icons.Material.Filled.DeleteForever"
OnClick="@(_ => EmptyTrash())">
Empty Trash
</MudButton>
</div>
}
else
@ -509,7 +521,20 @@ @@ -509,7 +521,20 @@
}
private bool IsNotEmpty =>
_movies?.Cards.Count > 0 || _shows?.Cards.Count > 0 || _seasons?.Cards.Count > 0 || _episodes?.Cards.Count > 0 || _musicVideos?.Cards.Count > 0 || _otherVideos?.Cards.Count > 0 || _songs?.Cards.Count > 0 || _artists?.Cards.Count > 0 || _images?.Cards.Count > 0;
_movies?.Cards.Count > 0 || _shows?.Cards.Count > 0 || _seasons?.Cards.Count > 0 || _episodes?.Cards.Count > 0 || _musicVideos?.Cards.Count > 0 || _otherVideos?.Cards.Count > 0 || _songs?.Cards.Count > 0 || _artists?.Cards.Count > 0 || _images?.Cards.Count > 0 || _remoteStreams?.Cards.Count > 0;
private IEnumerable<MediaCardViewModel> AllCardsOnPage() =>
Enumerable.Empty<MediaCardViewModel>()
.Concat(_movies.Cards)
.Concat(_shows.Cards)
.Concat(_seasons.Cards)
.Concat(_episodes.Cards)
.Concat(_artists.Cards)
.Concat(_musicVideos.Cards)
.Concat(_otherVideos.Cards)
.Concat(_songs.Cards)
.Concat(_images.Cards)
.Concat(_remoteStreams.Cards);
private void SelectClicked(MediaCardViewModel card, MouseEventArgs e)
{

16
ErsatzTV/Shared/MediaCardPager.razor

@ -44,6 +44,16 @@ @@ -44,6 +44,16 @@
<div style="flex: 1">
<MudText Class="d-none d-md-flex">@Query</MudText>
</div>
@if (SelectAllOnPage is not null)
{
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
Disabled="@(CanSelectAllOnPage?.Invoke() != true)"
StartIcon="@Icons.Material.Filled.SelectAll"
OnClick="@(_ => SelectAllOnPage())">
Select All
</MudButton>
}
<div>
<MudPaper Style="align-items: center; display: flex; justify-content: center;">
<MudIconButton Icon="@Icons.Material.Outlined.ChevronLeft"
@ -99,6 +109,12 @@ @@ -99,6 +109,12 @@
[Parameter]
public Action ClearSelection { get; set; }
[Parameter]
public Func<bool> CanSelectAllOnPage { get; set; }
[Parameter]
public Action SelectAllOnPage { get; set; }
private static MarkupString PaddedString(int value, int maximum)
{
int length = maximum.ToString(CultureInfo.InvariantCulture).Length;

Loading…
Cancel
Save