feat: using Hero component

This commit is contained in:
원더 2021-01-30 12:43:07 +09:00
parent fe41cd5e6e
commit 887efa03ca
3 changed files with 61 additions and 42 deletions

44
components/Hero.tsx Normal file
View File

@ -0,0 +1,44 @@
import dynamic from 'next/dynamic'
import { categories, categoryIcon } from '@utils/Constants'
const Container = dynamic(()=> import('@components/Container'))
const Wave = dynamic(()=> import('@components/Wave'))
const Tag = dynamic(()=> import('@components/Tag'))
const Search = dynamic(()=> import('@components/Search'))
const Hero = ({ header, description }:HeroProps):JSX.Element => {
return <>
<div className='dark:bg-discord-black bg-discord-blurple'>
<Container className='pt-12' ignoreColor paddingTop>
<h1 className='text-center sm:text-left text-gray-100 text-3xl font-bold'>
{ header && `${header} - `}
</h1>
<p className='text-center sm:text-left text-xl font-base mt-2'>{description || '다양한 국내 디스코드봇을 한곳에서 확인하세요!'}</p>
<Search />
<div className='flex flex-wrap mt-5'>
<Tag key='list' text={<>
<i className='fas fa-heart text-red-600'/>
</>} dark bigger href='/list/votes' />
{ categories.slice(0, 4).map(t=> <Tag key={t} text={<>
<i className={categoryIcon[t]} /> {t}
</>} dark bigger href={`/categories/${t}`} />) }
<Tag key='tag' text={<>
<i className='fas fa-tag'/>
</>} dark bigger href='/categories' />
</div>
</Container>
</div>
<Wave
color='currentColor'
className='dark:text-discord-black text-discord-blurple dark:bg-discord-dark bg-white hidden md:block'
/>
</>
}
interface HeroProps {
header?: string
description?: string
}
export default Hero

View File

@ -3,43 +3,17 @@ import dynamic from 'next/dynamic'
import { BotList } from '@types' import { BotList } from '@types'
import * as Query from '@utils/Query' import * as Query from '@utils/Query'
import { categories, categoryIcon } from '@utils/Constants'
const Advertisement = dynamic(()=> import('@components/Advertisement')) const Advertisement = dynamic(()=> import('@components/Advertisement'))
const Container = dynamic(()=> import('@components/Container')) const Container = dynamic(()=> import('@components/Container'))
const BotCard = dynamic(()=> import('@components/BotCard')) const BotCard = dynamic(()=> import('@components/BotCard'))
const Wave = dynamic(()=> import('@components/Wave'))
const Tag = dynamic(()=> import('@components/Tag'))
const Search = dynamic(()=> import('@components/Search'))
const Paginator = dynamic(()=> import('@components/Paginator')) const Paginator = dynamic(()=> import('@components/Paginator'))
const Hero = dynamic(() => import('@components/Hero'))
const Index: NextPage<IndexProps> = ({ votes, newBots, trusted }) => { const Index: NextPage<IndexProps> = ({ votes, newBots, trusted }) => {
return ( return (
<> <>
<div className='dark:bg-discord-black bg-discord-blurple'> <Hero />
<Container className='pb-24 pt-20' ignoreColor paddingTop>
<h1 className='text-center text-gray-100 text-3xl font-bold sm:text-left'>
</h1>
<Search />
<div className='flex flex-wrap mt-5'>
<Tag key='list' text={<>
<i className='fas fa-heart text-red-600'/>
</>} dark bigger href='/list/votes' />
{ categories.slice(0, 5).map(t=> <Tag key={t} text={<>
<i className={categoryIcon[t]} /> {t}
</>} dark bigger href={`/categories/${t}`} />) }
<Tag key='tag' text={<>
<i className='fas fa-tag'/>
</>} dark bigger href='/categories' />
</div>
</Container>
</div>
<Wave
color='currentColor'
className='dark:text-discord-black text-discord-blurple dark:bg-discord-dark bg-white hidden md:block'
/>
<Container> <Container>
<Advertisement /> <Advertisement />
<h1 className='text-3xl font-bold'> <h1 className='text-3xl font-bold'>

View File

@ -1,4 +1,5 @@
import { NextPage, NextPageContext } from 'next' import { NextPage, NextPageContext } from 'next'
import { useRouter } from 'next/router'
import dynamic from 'next/dynamic' import dynamic from 'next/dynamic'
import { ParsedUrlQuery } from 'querystring' import { ParsedUrlQuery } from 'querystring'
@ -7,9 +8,10 @@ import * as Query from '@utils/Query'
import NotFound from '../404' import NotFound from '../404'
import { PageCount } from '@utils/Yup' import { PageCount } from '@utils/Yup'
import { useRouter } from 'next/router'
const Hero = dynamic(() => import('@components/Hero'))
const Advertisement = dynamic(() => import('@components/Advertisement')) const Advertisement = dynamic(() => import('@components/Advertisement'))
const SEO = dynamic(() => import('@components/SEO'))
const BotCard = dynamic(() => import('@components/BotCard')) const BotCard = dynamic(() => import('@components/BotCard'))
const Container = dynamic(() => import('@components/Container')) const Container = dynamic(() => import('@components/Container'))
const Paginator = dynamic(() => import('@components/Paginator')) const Paginator = dynamic(() => import('@components/Paginator'))
@ -17,11 +19,10 @@ const Paginator = dynamic(() => import('@components/Paginator'))
const Votes:NextPage<VotesProps> = ({ data }) => { const Votes:NextPage<VotesProps> = ({ data }) => {
const router = useRouter() const router = useRouter()
if(!data || data.data.length === 0 || data.totalPage < Number(router.query.page)) return <NotFound /> if(!data || data.data.length === 0 || data.totalPage < Number(router.query.page)) return <NotFound />
return <Container paddingTop> return <>
<h1 className='text-3xl font-bold mt-5'> <Hero header='하트 랭킹' description='하트를 많이 받은 봇들의 순위입니다!'/>
<i className='far fa-heart mr-3 text-pink-600' /> - {data.currentPage} <SEO title='하트 랭킹' description='하트를 많이 받은 봇들의 순위입니다!'/>
</h1> <Container>
<p className='text-base'> !</p>
<Advertisement /> <Advertisement />
<div className='grid gap-4 2xl:grid-cols-4 md:grid-cols-2 mt-20'> <div className='grid gap-4 2xl:grid-cols-4 md:grid-cols-2 mt-20'>
{ {
@ -29,7 +30,7 @@ const Votes:NextPage<VotesProps> = ({ data }) => {
} }
</div> </div>
<Paginator totalPage={data.totalPage} currentPage={data.currentPage} pathname='/list/votes' /> <Paginator totalPage={data.totalPage} currentPage={data.currentPage} pathname='/list/votes' />
</Container> </Container></>
} }
export const getServerSideProps = async (ctx:Context) => { export const getServerSideProps = async (ctx:Context) => {
let data: BotList let data: BotList