nicklima/strapi-blog-frontend-next

View on GitHub
components/ImageStrapi/index.tsx

Summary

Maintainability
A
0 mins
Test Coverage
F
10%
import NextImage from "next/image"

import { getStrapiMedia } from "lib"
import { IImage, IImageLoader } from "./interface"

const ImageStrapi = ({ image, layout, width, height }: IImage) => {
  const { alternativeText } = image.data.attributes

  const imgSrc = getStrapiMedia(image)
  const imgW = width ? width : image.data.attributes.width
  const imgH = height ? height : image.data.attributes.height

  const loader = ({ src, width, quality, format }: IImageLoader) => {
    return `${src}?w=${width}&q=${quality || 75}&f=${format || "webp"}`
  }

  if (layout === "fill") {
    return (
      <NextImage
        alt={alternativeText || ""}
        blurDataURL={imgSrc}
        layout="fill"
        loader={loader}
        objectFit="cover"
        placeholder="blur"
        src={imgSrc}
      />
    )
  }

  return (
    <NextImage
      alt={alternativeText || ""}
      blurDataURL={imgSrc}
      height={imgH}
      layout={layout || "responsive"}
      loader={loader}
      objectFit="cover"
      placeholder="blur"
      src={imgSrc}
      width={imgW}
    />
  )
}

export default ImageStrapi