diff --git a/ErsatzTV.Application/MediaCards/Mapper.cs b/ErsatzTV.Application/MediaCards/Mapper.cs index ac5dd247b..671d17169 100644 --- a/ErsatzTV.Application/MediaCards/Mapper.cs +++ b/ErsatzTV.Application/MediaCards/Mapper.cs @@ -18,7 +18,8 @@ namespace ErsatzTV.Application.MediaCards GetSeasonName(televisionSeason.Number), string.Empty, GetSeasonName(televisionSeason.Number), - televisionSeason.Poster); + televisionSeason.Poster, + televisionSeason.Number == 0 ? "S" : televisionSeason.Number.ToString()); internal static MovieCardViewModel ProjectToViewModel(MovieMediaItem movie) => new( diff --git a/ErsatzTV.Application/MediaCards/TelevisionSeasonCardViewModel.cs b/ErsatzTV.Application/MediaCards/TelevisionSeasonCardViewModel.cs index 0f70bb97d..3229aaf5f 100644 --- a/ErsatzTV.Application/MediaCards/TelevisionSeasonCardViewModel.cs +++ b/ErsatzTV.Application/MediaCards/TelevisionSeasonCardViewModel.cs @@ -1,7 +1,7 @@ namespace ErsatzTV.Application.MediaCards { public record TelevisionSeasonCardViewModel - (int TelevisionSeasonId, string Title, string Subtitle, string SortTitle, string Poster) : MediaCardViewModel( + (int TelevisionSeasonId, string Title, string Subtitle, string SortTitle, string Poster, string Placeholder) : MediaCardViewModel( Title, Subtitle, SortTitle, diff --git a/ErsatzTV/Pages/TelevisionSeasons.razor b/ErsatzTV/Pages/TelevisionSeasons.razor index 18c4201e0..3a314728b 100644 --- a/ErsatzTV/Pages/TelevisionSeasons.razor +++ b/ErsatzTV/Pages/TelevisionSeasons.razor @@ -1,4 +1,5 @@ @page "/media/tv/shows/{ShowId:int}" +@using static LanguageExt.Prelude @using ErsatzTV.Application.Television @using ErsatzTV.Application.Television.Queries @using ErsatzTV.Application.MediaCards @@ -30,7 +31,7 @@ @foreach (TelevisionSeasonCardViewModel card in _data.Cards) { - + } @@ -56,4 +57,8 @@ _data = await Mediator.Send(new GetTelevisionSeasonCards(ShowId, _pageNumber, _pageSize)); } + private string SeasonPlaceholder(string sortTitle) => + Optional(_data.Cards.SingleOrDefault(d => d.SortTitle == sortTitle)) + .Match(vm => vm.Placeholder, () => sortTitle.Substring(0, 1).ToUpperInvariant()); + } \ No newline at end of file diff --git a/ErsatzTV/Shared/MediaCard.razor b/ErsatzTV/Shared/MediaCard.razor index d3fc639b7..5b8b9c992 100644 --- a/ErsatzTV/Shared/MediaCard.razor +++ b/ErsatzTV/Shared/MediaCard.razor @@ -45,9 +45,17 @@ [Parameter] public EventCallback DataRefreshed { get; set; } + + [Parameter] + public Func CustomPlaceholder { get; set; } private string Placeholder(string sortTitle) { + if (CustomPlaceholder != null) + { + return CustomPlaceholder(sortTitle); + } + string first = sortTitle.Substring(0, 1).ToUpperInvariant(); return int.TryParse(first, out _) ? "#" : first; }