@code { [Parameter] public required string Source { get; set; } [Parameter] public string FallbackSource { get; set; } = "images/home/no_img_main.gif"; [Parameter] public bool LazyLoading { get; set; } = true; [Parameter] public string? ContainerClass { get; set; } [Parameter] public string? ImageClass { get; set; } private bool _isLoaded; private string? _lastSource; private string ContainerClassees => GetContainerClasses(); private string ImageClasses => GetImageClasses(); private string? LoadingAttribute => LazyLoading ? "lazy" : null; protected override void OnParametersSet() { if (!string.Equals(_lastSource, Source, StringComparison.Ordinal)) { _lastSource = Source; _isLoaded = false; } } private string GetContainerClasses() { List classNames = ["j-image-container"]; if (!string.IsNullOrEmpty(ContainerClass)) { List customClassNames = ContainerClass .Split(" ") .Select(className => className.Trim()) .Where(className => !string.IsNullOrWhiteSpace(className)) .ToList(); classNames.AddRange(customClassNames); } return string.Join(" ", classNames); } private string GetImageClasses() { List classNames = ["j-image"]; if (!_isLoaded) { classNames.Add("j-lazy-load"); } if (!string.IsNullOrEmpty(ImageClass)) { List customClassNames = ImageClass .Split(" ") .Select(className => className.Trim()) .Where(className => !string.IsNullOrWhiteSpace(className)) .ToList(); classNames.AddRange(customClassNames); } return string.Join(" ", classNames); } private void OnImageLoaded() { _isLoaded = true; } }