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 : 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