import { NextPage, NextPageContext } from 'next' import type { FC } from 'react' import dynamic from 'next/dynamic' import { ParsedUrlQuery } from 'querystring' import { List, Server } from '@types' import { get } from '@utils/Query' import { SearchQuerySchema } from '@utils/Yup' import { KoreanbotsEndPoints } from '@utils/Constants' const Hero = dynamic(() => import('@components/Hero')) const Advertisement = dynamic(() => import('@components/Advertisement')) const ServerCard = dynamic(() => import('@components/ServerCard')) const Container = dynamic(() => import('@components/Container')) const ResponsiveGrid = dynamic(() => import('@components/ResponsiveGrid')) const Paginator = dynamic(() => import('@components/Paginator')) const LongButton = dynamic(() => import('@components/LongButton')) const Redirect = dynamic(() => import('@components/Redirect')) const SearchComponent: FC<{ data: List; query: URLQuery }> = ({ data, query }) => { return (
{!data || data.data.length === 0 ? (

검색 결과가 없습니다.

) : ( <> {data.data.map((el) => ( ))} )}
) } const Search: NextPage = ({ serverData, query }) => { if (!query?.q) return return ( <>

서버

봇을 찾으시나요?

봇 검색 결과 보기
) } export const getServerSideProps = async (ctx: Context) => { if (ctx.query.query && !ctx.query.q) ctx.query.q = ctx.query.query if (!ctx.query?.q) { return { redirect: { destination: '/', permanent: true, }, props: {}, } } if (!ctx.query.page) ctx.query.page = '1' const validate = await SearchQuerySchema.validate(ctx.query) .then((el) => el) .catch(() => null) if (!validate || isNaN(Number(ctx.query.page))) return { props: { query: ctx.query } } else { return { props: { serverData: await get.serverList.search .load(JSON.stringify({ query: ctx.query.q || '', page: ctx.query.page })) .then((el) => el) .catch(() => null), query: ctx.query, }, } } } interface SearchProps { serverData?: List query: URLQuery } interface Context extends NextPageContext { query: URLQuery } interface URLQuery extends ParsedUrlQuery { q?: string query?: string page?: string } export default Search