@inject ImageCacheService ImageCache
@if (_loading)
{
}
else if (!string.IsNullOrWhiteSpace(_resolvedSrc))
{
}
else if (!string.IsNullOrWhiteSpace(Fallback))
{
}
@code {
/// مسیر تصویر (نسبی، data-URI، یا http)
[Parameter] public string? Path { get; set; }
/// متن جایگزین
[Parameter] public string? Alt { get; set; }
/// نحوه جایگیری تصویر
[Parameter] public ObjectFit ObjectFit { get; set; } = ObjectFit.Cover;
/// موقعیت تصویر
[Parameter] public ObjectPosition ObjectPosition { get; set; } = ObjectPosition.Center;
/// سایه تصویر
[Parameter] public int Elevation { get; set; }
/// تصویر سیال (100% عرض)
[Parameter] public bool Fluid { get; set; }
/// استایل inline
[Parameter] public string? Style { get; set; }
/// کلاس CSS
[Parameter] public string? Class { get; set; }
/// عرض تصویر (پیکسل) — مانند MudImage
[Parameter] public int? ImgWidth { get; set; }
/// ارتفاع تصویر (پیکسل) — مانند MudImage
[Parameter] public int? ImgHeight { get; set; }
/// عرض placeholder skeleton (مقدار CSS)
[Parameter] public string? SkeletonWidth { get; set; }
/// ارتفاع placeholder skeleton (مقدار CSS)
[Parameter] public string? SkeletonHeight { get; set; }
/// آیکون fallback هنگام عدم وجود تصویر
[Parameter] public string? Fallback { get; set; }
private string? _resolvedSrc;
private bool _loading;
private string? _lastPath;
protected override async Task OnParametersSetAsync()
{
// فقط وقتی Path تغییر کرده، resolve مجدد انجام شود
if (Path == _lastPath) return;
_lastPath = Path;
if (string.IsNullOrWhiteSpace(Path))
{
_resolvedSrc = null;
_loading = false;
return;
}
// اگر قبلاً base64 هست → نمایش فوری
if (Path.StartsWith("data:", StringComparison.Ordinal))
{
_resolvedSrc = Path;
_loading = false;
return;
}
_loading = true;
StateHasChanged();
_resolvedSrc = await ImageCache.ResolveAsync(Path);
_loading = false;
}
}