import { NextPage, NextPageContext } from 'next' import { NextSeo } from 'next-seo' import { useState } from 'react' import dynamic from 'next/dynamic' import { useRouter } from 'next/router' import { get } from '@utils/Query' import { parseCookie } from '@utils/Tools' import { Bot, Server, SubmittedBot, User } from '@types' import Fetch from '@utils/Fetch' import { getToken } from '@utils/Csrf' const Container = dynamic(() => import('@components/Container')) const ResponsiveGrid = dynamic(() => import('@components/ResponsiveGrid')) const Button = dynamic(() => import('@components/Button')) const BotCard = dynamic(() => import('@components/BotCard')) const ServerCard = dynamic(() => import('@components/ServerCard')) const SubmittedBotCard = dynamic(() => import('@components/SubmittedBotCard')) const Login = dynamic(() => import('@components/Login')) const Panel: NextPage = ({ logged, user, submits, csrfToken }) => { const router = useRouter() const [submitLimit, setSubmitLimit] = useState(8) if (!logged) return ( ) return (

관리 패널

깃허브 계정 연동

연동한 깃허브 계정은 프로필에 표시됩니다.

나의 봇

{user.bots.length === 0 ? (

소유한 봇이 없습니다.

) : ( {(user.bots as Bot[]).map((bot) => ( ))} )}

나의 서버

{user.servers.length === 0 ? (

소유한 서버가 없습니다.

) : ( {(user.servers as Server[]).map((server) => ( ))} )}

봇 심사이력

{submits.length === 0 ? (

심사이력이 없습니다.

) : ( <>

자세히 보려면 카드를 클릭하세요.

{submits.slice(0, submitLimit).map((el) => ( ))}
{submitLimit < submits.length && (
)} )}
) } export const getServerSideProps = async (ctx: NextPageContext) => { const parsed = parseCookie(ctx.req) const user = (await get.Authorization(parsed?.token)) || '' const submits = await get.botSubmits.load(user) return { props: { logged: !!user, user: await get.user.load(user), submits, csrfToken: getToken(ctx.req, ctx.res), }, } } interface PanelProps { logged: boolean user: User submits: SubmittedBot[] csrfToken: string } export default Panel