import { NextPage } from 'next' import Link from 'next/link' import dynamic from 'next/dynamic' import { Field, Form, Formik } from 'formik' import { Server, CsrfContext, ResponseProps, User } from '@types' import { get } from '@utils/Query' import { makeServerURL, parseCookie } from '@utils/Tools' import { ParsedUrlQuery } from 'querystring' import NotFound from 'pages/404' import { getToken } from '@utils/Csrf' import { DMCA, TextField } from '@components/ReportTemplate' import { useState } from 'react' import Fetch from '@utils/Fetch' import { ReportSchema } from '@utils/Yup' import { getJosaPicker } from 'josa' import { serverReportCats } from '@utils/Constants' import { NextSeo } from 'next-seo' const Container = dynamic(() => import('@components/Container')) const Message = dynamic(() => import('@components/Message')) const Login = dynamic(() => import('@components/Login')) const ReportServer: NextPage = ({ data, user, csrfToken }) => { const [reportRes, setReportRes] = useState>(null) if (!data?.id) return if (!user) return ( ) return ( {data.name} {getJosaPicker('로')(data.name)}돌아가기 {reportRes?.code === 200 ? (

성공적으로 제출하였습니다!

더 자세한 설명이 필요할 수 있습니다.{' '} 반드시{' '} 공식 디스코드 에 참여해주세요!!

) : ( { const res = await Fetch(`/servers/${data.id}/report`, { method: 'POST', body: JSON.stringify(body), }) setReportRes(res) }} validationSchema={ReportSchema} initialValues={{ category: null, description: '', _csrf: csrfToken, }} > {({ errors, touched, values, setFieldValue }) => (
{reportRes && (

{reportRes.message}

    {reportRes.errors?.map((el, n) =>
  • {el}
  • )}
)}

신고 구분

해당되는 항목을 선택해주세요.

{serverReportCats.map((el) => (
))}
{errors.category && touched.category ? (errors.category as string) : null}
{values.category && ( <> { { [serverReportCats[1]]: (

본인 혹은 다른 사람이 위험에 처해 있나요?

당신은 소중한 사람입니다.

자살예방상담전화 1393 | 청소년전화 1388

), [serverReportCats[3]]: ( ), [serverReportCats[4]]: (

디스코드 약관을 위반사항을 신고하시려고요?

디스코드 문의 를 통해 직접 디스코드에 신고하실 수도 있습니다.

), }[values.category] } {![serverReportCats[3]].includes(values.category) && ( <>

설명

최대한 자세하게 기재해주세요.

)} )}
)}
)}
) } export const getServerSideProps = async (ctx: Context) => { const parsed = parseCookie(ctx.req) const data = await get.server.load(ctx.query.id) const user = await get.Authorization(parsed?.token) return { props: { csrfToken: getToken(ctx.req, ctx.res), data, user: await get.user.load(user || ''), }, } } interface ReportServerProps { csrfToken: string data: Server user: User } interface Context extends CsrfContext { query: URLQuery } interface URLQuery extends ParsedUrlQuery { id: string } export default ReportServer