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;
}