@using static LanguageExt.Prelude
@using ErsatzTV.Application.MediaCards
@using Unit = LanguageExt.Unit
@inject IMediator _mediator
@if (SelectClicked.HasDelegate || !string.IsNullOrWhiteSpace(Link))
{
@if (string.IsNullOrWhiteSpace(Data.Poster))
{
@GetPlaceholder(Data.SortTitle)
}
@if (IsSelected)
{
}
@if (SelectClicked.HasDelegate)
{
}
@if (AddToCollectionClicked.HasDelegate && !IsSelectMode)
{
}
@if (DeleteClicked.HasDelegate && !IsSelectMode)
{
}
}
else
{
@if (string.IsNullOrWhiteSpace(Data.Poster))
{
@GetPlaceholder(Data.SortTitle)
}
}
@(Title ?? Data.Title)
@(Subtitle ?? Data.Subtitle)
@code {
[Parameter]
public MediaCardViewModel Data { get; set; }
[Parameter]
public string Link { get; set; }
[Parameter]
public EventCallback DataRefreshed { get; set; }
[Parameter]
public string Placeholder { get; set; }
[Parameter]
public string Title { get; set; }
[Parameter]
public string Subtitle { get; set; }
[Parameter]
public string ContainerClass { get; set; }
[Parameter]
public string CardClass { get; set; }
[Parameter]
public ArtworkKind ArtworkKind { get; set; }
[Parameter]
public EventCallback DeleteClicked { get; set; }
[Parameter]
public EventCallback AddToCollectionClicked { get; set; }
[Parameter]
public EventCallback SelectClicked { get; set; }
[Parameter]
public bool IsSelectMode { get; set; }
[Parameter]
public bool IsSelected { get; set; }
[Parameter]
public Color SelectColor { get; set; } = Color.Tertiary;
[Parameter]
public bool IsRemoteArtwork { get; set; }
private string GetPlaceholder(string sortTitle)
{
if (Placeholder != null)
{
return Placeholder;
}
char first = Optional(sortTitle).Map(t => t.ToUpperInvariant().HeadOrNone()).Flatten().Match(head => head, () => ' ');
return char.IsDigit(first) || !char.IsLetter(first) ? "#" : first.ToString();
}
private string ArtworkForItem()
{
if (IsRemoteArtwork || Data.Poster?.StartsWith("http://") == true || Data.Poster?.StartsWith("https://") == true)
{
return $"position: relative; background-image: url({Data.Poster}); background-size: cover; background-position: center";
}
return string.IsNullOrWhiteSpace(Data.Poster)
? "position: relative"
: $"position: relative; background-image: url(/artwork/{PathForArtwork()}/{Data.Poster}); background-size: cover; background-position: center";
}
private string PathForArtwork() => ArtworkKind switch
{
ArtworkKind.Thumbnail => "thumbnails",
_ => "posters"
};
}