summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-09-26 09:33:01 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-09-26 09:33:01 +0700
commit2471cde6bdfbcc3bbc76f26656fdc79bd1f6bdb1 (patch)
tree440210ff59aff6c3ee215fd746d5ed5985c64720
parent58bd0bad3ba10720b59fd3de11e34483365289d5 (diff)
Update Image component with next image
-rw-r--r--src/core/components/elements/Image/Image.jsx45
-rw-r--r--src/lib/product/components/ProductSlider.jsx3
2 files changed, 31 insertions, 17 deletions
diff --git a/src/core/components/elements/Image/Image.jsx b/src/core/components/elements/Image/Image.jsx
index 1562444c..be275e8d 100644
--- a/src/core/components/elements/Image/Image.jsx
+++ b/src/core/components/elements/Image/Image.jsx
@@ -1,5 +1,6 @@
-import { LazyLoadImage } from 'react-lazy-load-image-component'
-import 'react-lazy-load-image-component/src/effects/opacity.css'
+import NextImage from 'next/image'
+import { useState } from 'react'
+import classNames from 'classnames'
/**
* The `Image` component is used to display lazy-loaded images.
@@ -9,20 +10,32 @@ import 'react-lazy-load-image-component/src/effects/opacity.css'
* @param {string} props.alt - Alternative text to be displayed if the image is not found.
* @returns {JSX.Element} - Rendered `Image` component.
*/
-const Image = ({ ...props }) => (
- <>
- <LazyLoadImage
- {...props}
- src={props.src || '/images/noimage.jpeg'}
- placeholderSrc='/images/indoteknik-placeholder.png'
- effect='opacity'
- alt={props.src ? props.alt : 'Image Not Found - Indoteknik'}
- wrapperClassName='bg-white'
- loading='eager'
- />
- </>
-)
+const Image = ({ ...props }) => {
+ const [isLoading, setIsLoading] = useState(true)
-Image.defaultProps = LazyLoadImage.defaultProps
+ const imageClassNames = classNames(
+ 'duration-500 ease-in-out',
+ {
+ 'blur-2xl grayscale': isLoading,
+ 'blur-0 grayscale-0': !isLoading
+ },
+ props.className
+ )
+
+ return (
+ <>
+ <NextImage
+ {...props}
+ src={props.src || '/images/noimage.jpeg'}
+ alt={props.src ? props.alt : 'Image Not Found - Indoteknik'}
+ key={props.src || '/images/noimage.jpeg'}
+ className={imageClassNames}
+ width={256}
+ height={256}
+ onLoadingComplete={() => setIsLoading(false)}
+ />
+ </>
+ )
+}
export default Image
diff --git a/src/lib/product/components/ProductSlider.jsx b/src/lib/product/components/ProductSlider.jsx
index dedbd6ab..2f8101b0 100644
--- a/src/lib/product/components/ProductSlider.jsx
+++ b/src/lib/product/components/ProductSlider.jsx
@@ -10,7 +10,7 @@ import MobileView from '@/core/components/views/MobileView'
import DesktopView from '@/core/components/views/DesktopView'
const bannerClassName =
- 'absolute rounded-r top-0 left-0 h-full w-auto md:w-[20%] idt-transition border border-gray_r-6'
+ 'absolute rounded-r top-0 left-0 h-full w-auto md:w-[20%] border border-gray_r-6'
const ProductSlider = ({ products, simpleTitle = false, bannerMode = false }) => {
const bannerRef = useRef('')
@@ -52,6 +52,7 @@ const ProductSlider = ({ products, simpleTitle = false, bannerMode = false }) =>
{bannerMode && (
<div ref={bannerRef}>
<Image
+ ref={bannerRef}
src={products.banner.image}
alt={products.banner.name}
style={{ opacity: 1 }}