diff --git a/pages/new/index.tsx b/pages/new/index.tsx
index fe4872f0..3f1ca437 100644
--- a/pages/new/index.tsx
+++ b/pages/new/index.tsx
@@ -1,28 +1,94 @@
-import React from 'react'
-import Party from '~components/Party'
+import React from "react"
+import { getCookie } from "cookies-next"
+import { serverSideTranslations } from "next-i18next/serverSideTranslations"
-import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
+import Party from "~components/Party"
+import api from "~utils/api"
-const NewRoute = () => {
- function callback(path: string) {
- // This is scuffed, how do we do this natively?
- window.history.replaceState(null, `Grid Tool`, `${path}`)
- }
+import type { NextApiRequest, NextApiResponse } from "next"
- return (
-
- )
+interface Props {
+ raids: Raid[]
+ sortedRaids: Raid[][]
}
-export async function getStaticProps({ locale }: { locale: string }) {
- return {
- props: {
- ...(await serverSideTranslations(locale, ['common'])),
- // Will be passed to the page component as props
- },
- }
+const NewRoute: React.FC = (props: Props) => {
+ function callback(path: string) {
+ // This is scuffed, how do we do this natively?
+ window.history.replaceState(null, `Grid Tool`, `${path}`)
+ }
+
+ return (
+
+ )
}
-export default NewRoute
\ No newline at end of file
+export const getServerSidePaths = async () => {
+ return {
+ paths: [
+ // Object variant:
+ { params: { party: "string" } },
+ ],
+ fallback: true,
+ }
+}
+
+// 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(headers)
+ .then((response) => organizeRaids(response.data.map((r: any) => r.raid)))
+
+ return {
+ props: {
+ 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 NewRoute