Skip to content
Snippets Groups Projects
News.tsx 1.65 KiB
Newer Older
Toavina's avatar
Toavina committed
import React from "react"
import { useStaticQuery, graphql } from "gatsby"
tovo's avatar
tovo committed

Toavina's avatar
Toavina committed
import CardList from "./core/CardList"
import Button from "./core/Button"
tovo's avatar
tovo committed

tovo's avatar
tovo committed
interface INews {
Toavina's avatar
Toavina committed
    title?: string
    action?: {
        name?: string
        url?: string
Toavina's avatar
Toavina committed
        classname?: string
    }
    anime?: boolean
tovo's avatar
tovo committed
}

tovo's avatar
tovo committed
const News = (props: INews) => {
Toavina's avatar
Toavina committed
    const data = useStaticQuery(graphql`
        query getNews {
            directus {
                news(
                    limit: 3
                    filter: { status: { _eq: "published" } }
                    sort: "-date_published"
                ) {
                    id
                    content
                    title
                    date_published
                    image {
                        id
                        imageFile {
                            childImageSharp {
                                gatsbyImageData
                            }
                        }
                    }
                }
tovo's avatar
tovo committed
            }
        }
Toavina's avatar
Toavina committed
    `)
tovo's avatar
tovo committed

Toavina's avatar
Toavina committed
    const { title = "", anime = true, action } = props
tovo's avatar
tovo committed

Toavina's avatar
Toavina committed
    const news = data.directus.news.map((dtNew) => {
        return {
            name: dtNew.title,
            description: dtNew.content,
Toavina's avatar
Toavina committed
            image: dtNew.image?.imageFile,
            url: "#",
Toavina's avatar
Toavina committed
        }
    })
tovo's avatar
tovo committed

Toavina's avatar
Toavina committed
    return (
        <>
            <h2 className="mt-2 text-3xl font-extrabold tracking-tight sm:text-4xl mb-8">
                {title}
            </h2>
            <CardList cards={news} layout="grid" anime={anime} />
            <div className="flex justify-center mt-8">
                {action && <Button {...action} />}
Toavina's avatar
Toavina committed
            </div>
        </>
    )
}
tovo's avatar
tovo committed

Toavina's avatar
Toavina committed
export default News