Skip to content
Snippets Groups Projects
Image.tsx 2.32 KiB
Newer Older
Toavina's avatar
Toavina committed
import React from "react"
import {
    StaticImage,
    IGatsbyImageData,
    GatsbyImage,
    getImage,
} from "gatsby-plugin-image"
tovo's avatar
tovo committed

export interface Iimage {
Toavina's avatar
Toavina committed
    image?: string | IGatsbyImageData
    className?: string
    objectPosition?: string
Manoa Harinjo's avatar
Manoa Harinjo committed
    objectFit?: any
tovo's avatar
tovo committed
}

const Image = (props: Iimage) => {
Manoa Harinjo's avatar
Manoa Harinjo committed
    const {
        image,
        className = "",
        objectPosition = "50% 50%",
        objectFit = "cover",
    } = props
tovo's avatar
tovo committed

    const imageClassname = ` ${className}`
Toavina's avatar
Toavina committed

    const imageNoAvailable = (
        <StaticImage
            src="../../images/no-image-available.jpg"
            alt="no-image-available"
            className={imageClassname}
tovo's avatar
tovo committed
        />
    )

    if (image == "mock-square") {
        return (
            <StaticImage
                src="../../images/400x400.png"
                alt="no-image-available"
                className={imageClassname}
Manoa Harinjo's avatar
Manoa Harinjo committed
                objectFit={objectFit}
            />
        )
    }
    if (image == "mock-landscape") {
        return (
            <StaticImage
                src="../../images/800x400.png"
                alt="no-image-available"
                className={imageClassname}
Manoa Harinjo's avatar
Manoa Harinjo committed
                objectFit={objectFit}
            />
        )
    }
    if (image == "mock-portrait") {
        return (
            <StaticImage
                src="../../images/400x800.png"
                alt="no-image-available"
                className={imageClassname}
Manoa Harinjo's avatar
Manoa Harinjo committed
                objectFit={objectFit}
Toavina Rasoatamindrainy's avatar
Toavina Rasoatamindrainy committed
    if (!image || typeof image == "undefined" || image == "mock") {
        return imageNoAvailable
Toavina's avatar
Toavina committed
    }

    if (typeof image == "string") {
Toavina Rasoatamindrainy's avatar
Toavina Rasoatamindrainy committed
        return <img src={image} alt={image} className={imageClassname} />
Toavina's avatar
Toavina committed
    }
tovo's avatar
tovo committed

Toavina's avatar
Toavina committed
    const img = getImage(image)
    if (typeof img == "undefined") {
        // SVG image
        if (image.publicURL) {
            return (
                <img
                    src={image.publicURL}
                    alt={image.name}
                    className={imageClassname}
                />
            )
        }

Toavina Rasoatamindrainy's avatar
Toavina Rasoatamindrainy committed
        return imageNoAvailable
Toavina's avatar
Toavina committed
    }
tovo's avatar
tovo committed

Toavina's avatar
Toavina committed
    return (
        <GatsbyImage
            image={img}
            alt={image.name}
            className={imageClassname}
Manoa Harinjo's avatar
Manoa Harinjo committed
            objectFit={objectFit}
            objectPosition={objectPosition}
        />
Toavina's avatar
Toavina committed
    )
}
tovo's avatar
tovo committed

Toavina's avatar
Toavina committed
export default Image