Browse Source

clean up fragment letter anchor code (#140)

pull/141/head
Jason Dove 5 years ago committed by GitHub
parent
commit
24cdf6295f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      ErsatzTV/Pages/MovieList.razor
  2. 31
      ErsatzTV/Pages/MusicVideoList.razor
  3. 33
      ErsatzTV/Pages/TelevisionShowList.razor
  4. 28
      ErsatzTV/Shared/FragmentLetterAnchor.razor
  5. 15
      ErsatzTV/Shared/FragmentLetterAnchor.razor.cs

28
ErsatzTV/Pages/MovieList.razor

@ -56,30 +56,14 @@ @@ -56,30 +56,14 @@
</MudPaper>
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8" Style="margin-top: 64px">
<MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid">
@{ var letters = new System.Collections.Generic.HashSet<char>(); }
@foreach (MovieCardViewModel card in _data.Cards.Where(m => !string.IsNullOrWhiteSpace(m.Title)).OrderBy(m => m.SortTitle))
{
@if (!letters.Contains(card.SortTitle.Head()))
{
Option<char> maybeLetter = card.SortTitle.ToLowerInvariant().HeadOrNone();
if (maybeLetter.IsSome)
{
char letter = maybeLetter.ValueUnsafe();
if (letter >= '0' && letter <= '9')
{
letter = '#';
}
letters.Add(letter);
<div id="@($"letter-{letter}")" style="scroll-margin-top: 128px"></div>
}
}
<MediaCard Data="@card"
Link="@($"/media/movies/{card.MovieId}")"
<FragmentLetterAnchor TCard="MovieCardViewModel" Cards="@_data.Cards">
<MediaCard Data="@context"
Link="@($"/media/movies/{context.MovieId}")"
AddToCollectionClicked="@AddToCollection"
SelectClicked="@(e => SelectClicked(card, e))"
IsSelected="@IsSelected(card)"
SelectClicked="@(e => SelectClicked(context, e))"
IsSelected="@IsSelected(context)"
IsSelectMode="@IsSelectMode()"/>
}
</FragmentLetterAnchor>
</MudContainer>
</MudContainer>
@if (_data.PageMap.IsSome)

31
ErsatzTV/Pages/MusicVideoList.razor

@ -56,31 +56,15 @@ @@ -56,31 +56,15 @@
</MudPaper>
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8" Style="margin-top: 64px">
<MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid">
@{ var letters = new System.Collections.Generic.HashSet<char>(); }
@foreach (MusicVideoCardViewModel card in _data.Cards.Where(m => !string.IsNullOrWhiteSpace(m.Title)).OrderBy(m => m.SortTitle))
{
@if (!letters.Contains(card.SortTitle.Head()))
{
Option<char> maybeLetter = card.SortTitle.ToLowerInvariant().HeadOrNone();
if (maybeLetter.IsSome)
{
char letter = maybeLetter.ValueUnsafe();
if (letter >= '0' && letter <= '9')
{
letter = '#';
}
letters.Add(letter);
<div id="@($"letter-{letter}")" style="scroll-margin-top: 128px"></div>
}
}
<MediaCard Data="@card"
<FragmentLetterAnchor TCard="MusicVideoCardViewModel" Cards="@_data.Cards">
<MediaCard Data="@context"
Link=""
ArtworkKind="ArtworkKind.Thumbnail"
AddToCollectionClicked="@AddToCollection"
SelectClicked="@(e => SelectClicked(card, e))"
IsSelected="@IsSelected(card)"
SelectClicked="@(e => SelectClicked(context, e))"
IsSelected="@IsSelected(context)"
IsSelectMode="@IsSelectMode()"/>
}
</FragmentLetterAnchor>
</MudContainer>
</MudContainer>
@if (_data.PageMap.IsSome)
@ -147,10 +131,7 @@ @@ -147,10 +131,7 @@
private void SelectClicked(MediaCardViewModel card, MouseEventArgs e)
{
List<MediaCardViewModel> GetSortedItems()
{
return _data.Cards.OrderBy(m => m.SortTitle).ToList<MediaCardViewModel>();
}
List<MediaCardViewModel> GetSortedItems() => _data.Cards.OrderBy(m => m.SortTitle).ToList<MediaCardViewModel>();
SelectClicked(GetSortedItems, card, e);
}

33
ErsatzTV/Pages/TelevisionShowList.razor

@ -56,30 +56,14 @@ @@ -56,30 +56,14 @@
</MudPaper>
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8" Style="margin-top: 64px">
<MudContainer MaxWidth="MaxWidth.False" Class="media-card-grid">
@{ var letters = new System.Collections.Generic.HashSet<char>(); }
@foreach (TelevisionShowCardViewModel card in _data.Cards.OrderBy(s => s.SortTitle))
{
@if (!letters.Contains(card.SortTitle.Head()))
{
Option<char> maybeLetter = card.SortTitle.ToLowerInvariant().HeadOrNone();
if (maybeLetter.IsSome)
{
char letter = maybeLetter.ValueUnsafe();
if (letter >= '0' && letter <= '9')
{
letter = '#';
}
letters.Add(letter);
<div id="@($"letter-{letter}")" style="scroll-margin-top: 128px"></div>
}
}
<MediaCard Data="@card"
Link="@($"/media/tv/shows/{card.TelevisionShowId}")"
<FragmentLetterAnchor TCard="TelevisionShowCardViewModel" Cards="@_data.Cards">
<MediaCard Data="@context"
Link="@($"/media/tv/shows/{context.TelevisionShowId}")"
AddToCollectionClicked="@AddToCollection"
SelectClicked="@(e => SelectClicked(card, e))"
IsSelected="@IsSelected(card)"
SelectClicked="@(e => SelectClicked(context, e))"
IsSelected="@IsSelected(context)"
IsSelectMode="@IsSelectMode()"/>
}
</FragmentLetterAnchor>
</MudContainer>
</MudContainer>
@if (_data.PageMap.IsSome)
@ -146,10 +130,7 @@ @@ -146,10 +130,7 @@
private void SelectClicked(MediaCardViewModel card, MouseEventArgs e)
{
List<MediaCardViewModel> GetSortedItems()
{
return _data.Cards.OrderBy(m => m.SortTitle).ToList<MediaCardViewModel>();
}
List<MediaCardViewModel> GetSortedItems() => _data.Cards.OrderBy(m => m.SortTitle).ToList<MediaCardViewModel>();
SelectClicked(GetSortedItems, card, e);
}

28
ErsatzTV/Shared/FragmentLetterAnchor.razor

@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
@using ErsatzTV.Application.MediaCards
@using LanguageExt.UnsafeValueAccess
@typeparam TCard
@{ var letters = new System.Collections.Generic.HashSet<char>(); }
@foreach (TCard card in Cards.Filter(c => !string.IsNullOrWhiteSpace(c.Title)).OrderBy(c => c.SortTitle))
{
@if (!letters.Contains(card.SortTitle.Head()))
{
Option<char> maybeLetter = card.SortTitle.ToLowerInvariant().HeadOrNone();
if (maybeLetter.IsSome)
{
char letter = maybeLetter.ValueUnsafe();
if (letter >= '0' && letter <= '9')
{
letter = '#';
}
letters.Add(letter);
<div id="@($"letter-{letter}")" style="scroll-margin-top: 128px">
@ChildContent(card)
</div>
}
}
else
{
@ChildContent
}
}

15
ErsatzTV/Shared/FragmentLetterAnchor.razor.cs

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
using System.Collections.Generic;
using ErsatzTV.Application.MediaCards;
using Microsoft.AspNetCore.Components;
namespace ErsatzTV.Shared
{
public partial class FragmentLetterAnchor<TCard> where TCard : MediaCardViewModel
{
[Parameter]
public RenderFragment<TCard> ChildContent { get; set; }
[Parameter]
public List<TCard> Cards { get; set; }
}
}
Loading…
Cancel
Save