mirror of
https://github.com/DerTyp7/explainegy-nextjs.git
synced 2025-10-29 04:42:12 +01:00
51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
import styles from "@/styles/modules/CategoryList.module.scss";
|
|
import Link from "next/link";
|
|
import { Category } from "@prisma/client";
|
|
import prisma, { CategoryWithIncludes } from "@/lib/prisma";
|
|
|
|
export default function CategoryList({ categories }: { categories: CategoryWithIncludes[] }) {
|
|
return (
|
|
<div className={styles.categoryList}>
|
|
<h1>Overview</h1>
|
|
<div className={styles.content}>
|
|
<div className={styles.grid}>
|
|
{categories?.length > 0
|
|
? categories.map((cat: CategoryWithIncludes, i: number) => {
|
|
return (
|
|
<div key={i} className={styles.linkContainer}>
|
|
<Link href={`/articles/${cat.name.toLowerCase()}`} style={{ backgroundColor: cat.color }}>
|
|
<div className={styles.svgContainer}>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox={cat?.svg?.viewbox}>
|
|
<path d={cat?.svg?.path} />
|
|
</svg>
|
|
</div>
|
|
{cat.title}
|
|
</Link>
|
|
</div>
|
|
);
|
|
})
|
|
: "We did not find any categories"}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export async function getServerSideProps() {
|
|
let categories: CategoryWithIncludes[] = [];
|
|
await prisma.category.findMany({ include: { articles: true, svg: true } }).then(
|
|
(result: CategoryWithIncludes[]) => {
|
|
if (result) {
|
|
categories = JSON.parse(JSON.stringify(result));
|
|
}
|
|
},
|
|
(reason: any) => {
|
|
console.log(reason);
|
|
}
|
|
);
|
|
|
|
return {
|
|
props: { categories: categories }, // will be passed to the page component as props
|
|
};
|
|
}
|