From ee145d6f65f5767210763d552d53f548d6e0cea8 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sat, 24 Jan 2026 17:27:32 -0800 Subject: [PATCH] add enableViewport prop to Image to conditionally lazy load --- src/shared/components/image/image.tsx | 61 +++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/shared/components/image/image.tsx b/src/shared/components/image/image.tsx index 6cb49aeb8..23591b274 100644 --- a/src/shared/components/image/image.tsx +++ b/src/shared/components/image/image.tsx @@ -18,6 +18,7 @@ import { useInViewport } from '/@/shared/hooks/use-in-viewport'; export interface ImageProps extends Omit, 'src'> { containerClassName?: string; enableAnimation?: boolean; + enableViewport?: boolean; imageContainerProps?: Omit; includeLoader?: boolean; includeUnloader?: boolean; @@ -47,12 +48,72 @@ export function BaseImage({ className, containerClassName, enableAnimation = false, + enableViewport = true, imageContainerProps, includeLoader = true, includeUnloader = true, src, unloaderIcon = 'emptyImage', ...props +}: ImageProps) { + if (enableViewport) { + return ( + + ); + } + + return ( + + {src ? ( + : null} + loading="eager" + src={src} + unloader={ + includeUnloader ? ( + + ) : null + } + {...props} + /> + ) : !src ? ( + + ) : ( + + )} + + ); +} + +function ImageWithViewport({ + className, + containerClassName, + enableAnimation, + imageContainerProps, + includeLoader, + includeUnloader, + src, + unloaderIcon, + ...props }: ImageProps) { const { inViewport, ref } = useInViewport();