LANCommander/LANCommander.UI/Components/SafeImage/SafeImage.razor
2026-01-03 18:26:30 -06:00

64 lines
No EOL
1.6 KiB
Text

@using LANCommander.SDK.Models
@using LANCommander.SDK.Services
@inject MediaClient MediaClient
@namespace LANCommander.UI.Components
<Spin Spinning="_loading" WrapperClassName="@_class">
@if (!_error)
{
if (!String.IsNullOrWhiteSpace(Source))
{
<img src="@Source" @onload="OnLoad" @onerror="OnError" style="@Style" />
}
else if (Media != null)
{
<img src="@(MediaClient.GetAbsoluteThumbnailUrl(Media))" @onload="OnLoad" @onerror="OnError" style="@Style" />
}
else
{
@ChildContent
}
}
else
{
@ChildContent
}
</Spin>
@code {
[Parameter] public string Source { get; set; }
[Parameter] public Media Media { get; set; }
[Parameter] public ImageFit Fit { get; set; }
[Parameter] public string Class { get; set; }
[Parameter] public string Style { get; set; }
[Parameter] public RenderFragment ChildContent { get; set; }
string _class = String.Empty;
bool _loading = true;
bool _error = false;
protected override void OnParametersSet()
{
_class = new ClassBuilder()
.Add("safe-image")
.If(() => Fit == ImageFit.Cover, "safe-image-fit-cover")
.If(() => !String.IsNullOrWhiteSpace(Class), Class)
.Build();
if (String.IsNullOrWhiteSpace(Source) && Media == null)
_loading = false;
}
void OnLoad()
{
_loading = false;
StateHasChanged();
}
void OnError()
{
_error = true;
_loading = false;
StateHasChanged();
}
}