diff --git a/pages/p/[party].tsx b/pages/p/[party].tsx index 2c5e9423..bfd6f6ee 100644 --- a/pages/p/[party].tsx +++ b/pages/p/[party].tsx @@ -1,53 +1,101 @@ -import React from 'react' -import { useRouter } from 'next/router' -import { serverSideTranslations } from 'next-i18next/serverSideTranslations' +import React from "react" +import { getCookie } from "cookies-next" +import { serverSideTranslations } from "next-i18next/serverSideTranslations" -import Party from '~components/Party' +import Party from "~components/Party" -const PartyRoute: React.FC = () => { - const { party: slug } = useRouter().query +import api from "~utils/api" - return ( -
- -
- ) +import type { NextApiRequest, NextApiResponse } from "next" - // function renderNotFound() { - // return ( - //
- //

There's no grid here.

- // - //
- // ) - // } - - // if (!found && !loading) { - // return renderNotFound() - // } else if (found && !loading) { - // return render() - // } else { - // return (
) - // } +interface Props { + party: Party + raids: Raid[] + sortedRaids: Raid[][] } -export async function getStaticPaths() { - return { - paths: [ - // Object variant: - { params: { party: 'string' } }, - ], - fallback: true, - } +const PartyRoute: React.FC = (props) => { + return ( +
+ +
+ ) } -export async function getStaticProps({ locale }: { locale: string }) { - return { - props: { - ...(await serverSideTranslations(locale, ['common'])), - // Will be passed to the page component as props - }, - } +// prettier-ignore +export const getServerSidePaths = async () => { + return { + paths: [ + // Object variant: + { params: { party: "string" } }, + ], + fallback: true, + } } -export default PartyRoute \ No newline at end of file +// prettier-ignore +export const getServerSideProps = async ({ req, res, locale, query }: { req: NextApiRequest, res: NextApiResponse, locale: string, query: { [index: string]: string } }) => { + // Cookies + const cookie = getCookie("account", { req, res }) + const accountData: AccountCookie = cookie + ? JSON.parse(cookie as string) + : null + + const headers = accountData + ? { headers: { Authorization: `Bearer ${accountData.token}` } } + : {} + + let { raids, sortedRaids } = await api.endpoints.raids + .getAll() + .then((response) => organizeRaids(response.data.map((r: any) => r.raid))) + + let party: Party | null = null + if (query.party) { + let response = await api.endpoints.parties.getOne({ id: query.party, params: headers }) + party = response.data.party + } else { + console.log("No party code") + } + + return { + props: { + party: party, + raids: raids, + sortedRaids: sortedRaids, + ...(await serverSideTranslations(locale, ["common"])), + // Will be passed to the page component as props + }, + } +} + +const organizeRaids = (raids: Raid[]) => { + // Set up empty raid for "All raids" + const all = { + id: "0", + name: { + en: "All raids", + ja: "全て", + }, + slug: "all", + level: 0, + group: 0, + element: 0, + } + + const numGroups = Math.max.apply( + Math, + raids.map((raid) => raid.group) + ) + let groupedRaids = [] + + for (let i = 0; i <= numGroups; i++) { + groupedRaids[i] = raids.filter((raid) => raid.group == i) + } + + return { + raids: raids, + sortedRaids: groupedRaids, + } +} + +export default PartyRoute