Skip to content
Snippets Groups Projects
Card.tsx 2.11 KiB
Newer Older
Toavina's avatar
Toavina committed
import React from "react"
import Image, { Iimage } from "./Image"
import { Link } from "@onegeo/gatsby-theme-onegeo"
tovo's avatar
tovo committed

export interface ICard extends Iimage {
    name?: string
    description?: string
    url?: string
Toavina's avatar
Toavina committed
    anime?: boolean
    layout?: "top" | "left"
    size?: "xs" | "base" | "xl"
const oClass = {
    top_base: {
Toavina's avatar
Toavina committed
        main: "max-w-xs ",
        description: "h-24",
Toavina's avatar
Toavina committed
        image: "h-56",
    },
    left_base: {
        main: "card-side h-52 w-full ",
        description: "",
Toavina's avatar
Toavina committed
        image: "min-w-[320px] max-w-[320px]",
    },
    left_xs: {
        main: "card-side h-28 w-full ",
        description: "line-clamp-2",
        image: "min-w-[80px] max-w-[100px]",
    },
tovo's avatar
tovo committed
}

const Card = (props: ICard) => {
Toavina's avatar
Toavina committed
    const {
        url = "#",
Toavina's avatar
Toavina committed
        className = "",
        anime = true,
        layout = "top",
        name,
        description,
        image,
        size = "base",
Toavina's avatar
Toavina committed
    } = props
Toavina's avatar
Toavina committed
    const transition = anime
        ? "lg:transition duration-200 ease-in-out lg:hover:-translate-y-2 lg:hover:shadow-2xl "
        : ""
    const oclass = oClass[layout + "_" + size] || oClass["top_base"]
Toavina's avatar
Toavina committed
    return (
        <Link
Toavina's avatar
Toavina committed
            className={
                "card card-compact shadow-xl bg-base-100 text-neutral " +
                oclass.main +
Toavina's avatar
Toavina committed
                transition +
                className
            }
        >
            <div className={oclass.image}>
                <Image image={image} className="h-full w-full object-cover" />
Toavina's avatar
Toavina committed
            </div>
            {name ? (
Toavina's avatar
Toavina committed
                <div className="card-body">
                    <h2 className="card-title uppercase">{name}</h2>
                    {description ? (
                        <div
                            className={
                                "text-justify text-ellipsis overflow-hidden " +
                                oclass.description
                            dangerouslySetInnerHTML={{ __html: description }}
Toavina's avatar
Toavina committed
                    ) : null}
                </div>
            ) : null}
        </Link>
    )
}
Toavina's avatar
Toavina committed
export default Card