1
0
Fork 0
freesewing/sites/org/pages/showcase/index.mjs

100 lines
2.6 KiB
JavaScript
Raw Normal View History

2023-04-09 15:57:25 +02:00
// Dependencies
import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
import { useTranslation } from 'next-i18next'
import { sanityLoader, sanityImage } from 'site/components/sanity/utils.mjs'
2023-04-09 15:57:25 +02:00
// Components
import { PageWrapper, ns as pageNs } from 'shared/components/wrappers/page.mjs'
import Link from 'next/link'
2023-04-09 15:57:25 +02:00
// Translation namespaces used on this page
const namespaces = [...new Set(['common', 'designs', ...pageNs])]
export const PreviewTile = ({ img, slug, title }) => (
<Link href={`/showcase/${slug}`} className="text-center">
<span
style={{ backgroundImage: `url(${img})`, backgroundSize: 'cover' }}
className={`
rounded-full inline-block border-base-100
w-40 h-40
md:w-56 md:h-56
`}
></span>
<p>{title}</p>
</Link>
)
// const DesignPosts = ({ design, posts }) => {
// const { t } = useTranslation(['patterns'])
// return (
// <div className='py-2'>
// <h2>
// <Link href={`/showcase/designs/${design}`}>
// <a className="hover:text-secondary-focus hover:underline">{t(`${design}.t`)}</a>
// </Link>
// </h2>
// </div>
// )
// }
// FIXME paginate
const Posts = ({ posts }) => (
<div className="grid grid-cols-1 gap-4 xl:gap-8 lg:grid-cols-2 xl:grid-cols-3 lg:pr-4 xl:pr-8">
{posts.map((post) => (
<PreviewTile img={post.image} slug={post.slug} title={post.title} key={post.slug} />
))}
</div>
)
2023-04-09 15:57:25 +02:00
const ShowcaseIndexPage = (props) => {
const { t } = useTranslation()
const { posts } = props
// const designKeys = useMemo(() => Object.keys(designs).sort(), [designs])
return (
<PageWrapper title={t('showcase')} {...props.page}>
<Posts posts={posts} />
</PageWrapper>
)
}
export default ShowcaseIndexPage
2023-04-09 15:57:25 +02:00
export async function getStaticProps({ locale }) {
const posts = await sanityLoader({
language: locale,
type: 'showcase',
order: 'date desc',
}).catch((err) => console.log(err))
const designs = {}
const propPosts = []
posts.forEach((post) => {
// for (const design of post.designs) {
// if (typeof designs[design] === 'undefined') designs[design] = []
// designs[design].push(post)
// }
propPosts.push({
slug: post.slug.current,
title: post.title,
date: post.date,
// FIXME get the authors separately
author: post.maker,
image: sanityImage(post.image[0]) + '?fit=clip&w=400',
})
})
2023-04-09 15:57:25 +02:00
return {
props: {
posts: propPosts,
designs,
2023-04-09 15:57:25 +02:00
...(await serverSideTranslations(locale, namespaces)),
page: {
locale,
// title: 'Freesewing Blog',
2023-04-09 15:57:25 +02:00
path: ['showcase'],
},
},
}
}