mirror of
https://github.com/Sonny93/my-links.git
synced 2025-12-09 23:15:36 +00:00
81 lines
2.1 KiB
TypeScript
81 lines
2.1 KiB
TypeScript
import { useState } from "react";
|
|
import { useSession } from "next-auth/react";
|
|
import Head from "next/head";
|
|
|
|
import Menu from "../components/Categories/SideMenu";
|
|
import Links from "../components/Links/Links";
|
|
|
|
import { Category, Link } from "../types";
|
|
|
|
import { BuildCategory } from "../utils/front";
|
|
import { prisma } from "../utils/back";
|
|
|
|
import { config } from "../config";
|
|
|
|
interface HomeProps {
|
|
categories: Category[];
|
|
favorites: Link[];
|
|
}
|
|
|
|
function Home({ categories, favorites }: HomeProps) {
|
|
const { data } = useSession({ required: true });
|
|
const [categoryActive, setCategoryActive] = useState<Category | null>(
|
|
categories?.[0]
|
|
);
|
|
|
|
const handleSelectCategory = (category: Category) =>
|
|
setCategoryActive(category);
|
|
|
|
return (
|
|
<>
|
|
<Head>
|
|
<title>{config.siteName}</title>
|
|
</Head>
|
|
<div className="App">
|
|
<Menu
|
|
categories={categories}
|
|
favorites={favorites}
|
|
handleSelectCategory={handleSelectCategory}
|
|
categoryActive={categoryActive}
|
|
session={data}
|
|
/>
|
|
<Links category={categoryActive} />
|
|
</div>
|
|
</>
|
|
);
|
|
}
|
|
|
|
export async function getServerSideProps() {
|
|
const categoriesDB = await prisma.category.findMany({
|
|
include: { links: true },
|
|
});
|
|
|
|
const favorites = [] as Link[];
|
|
const categories = categoriesDB.map((categoryDB) => {
|
|
const category = BuildCategory(categoryDB);
|
|
category.links.map((link) =>
|
|
link.favorite ? favorites.push(link) : null
|
|
);
|
|
return category;
|
|
});
|
|
|
|
if (categories.length === 0) {
|
|
return {
|
|
redirect: {
|
|
destination:
|
|
"/category/create?info=Veuillez créer une catégorie",
|
|
},
|
|
};
|
|
}
|
|
|
|
return {
|
|
props: {
|
|
categories: JSON.parse(JSON.stringify(categories)),
|
|
favorites: JSON.parse(JSON.stringify(favorites)),
|
|
},
|
|
};
|
|
}
|
|
|
|
Home.authRequired = true;
|
|
export default Home;
|