core/components/Hero.tsx
SKINMAKER b421d1ab64
chore: apply prettier (#637)
* chore: apply prettier

* chore: edit ready comment

* chore: move ts comment
2023-11-29 22:04:33 +09:00

155 lines
3.6 KiB
TypeScript

import dynamic from 'next/dynamic'
import { NextSeo } from 'next-seo'
import {
botCategories,
botCategoryIcon,
serverCategories,
serverCategoryIcon,
} from '@utils/Constants'
const Container = dynamic(() => import('@components/Container'))
const Tag = dynamic(() => import('@components/Tag'))
const Search = dynamic(() => import('@components/Search'))
const Hero: React.FC<HeroProps> = ({ type = 'all', header, description }) => {
const link = `/${type}/categories`
return (
<>
<NextSeo
title={header}
description={description}
openGraph={{
title: header,
description,
}}
/>
<div className='mb-8 bg-discord-blurple text-gray-100 dark:bg-discord-black md:p-0'>
<Container className='pb-16 pt-24 md:pb-20' ignoreColor>
<h1 className='hidden text-left text-3xl font-bold md:block'>
{header && `${header} - `}
</h1>
<h1 className='text-center text-3xl font-semibold md:hidden'>
{header && (
<span className='text-4xl'>
{header}
<br />
</span>
)}
</h1>
<p className='font-base mt-2 text-center text-xl sm:text-left'>
{description ||
`${type !== 'all' ? '다양한 ' : ''}국내 디스코드${
{ all: '의 모든 것을', bots: ' 봇들을', servers: ' 서버들을' }[type]
} 한 곳에서 확인하세요!`}
</p>
<Search />
<div className='mt-5 flex flex-wrap'>
{type === 'all' ? (
<>
<Tag
text={
<>
<i className='fas fa-robot text-koreanbots-blue' />
</>
}
dark
bigger
href='/bots'
/>
<Tag
text={
<>
<i className='fas fa-users text-koreanbots-blue' />
</>
}
dark
bigger
href='/servers'
/>
{botCategories.slice(0, 2).map((t) => (
<Tag
key={t}
text={
<>
<i className={botCategoryIcon[t]} /> {t}
</>
}
dark
bigger
href={`/bots/categories/${t}`}
/>
))}
{serverCategories.slice(0, 2).map((t) => (
<Tag
key={t}
text={
<>
<i className={serverCategoryIcon[t]} /> {t}
</>
}
dark
bigger
href={`/servers/categories/${t}`}
/>
))}
</>
) : (
<>
<Tag
key='list'
text={
<>
<i className='fas fa-heart text-red-600' />
</>
}
dark
bigger
href={type === 'bots' ? '/bots/list/votes' : '/servers/list/votes'}
/>
{(type === 'bots' ? botCategories : serverCategories).slice(0, 4).map((t) => (
<Tag
key={t}
text={
<>
<i
className={(type === 'bots' ? botCategoryIcon : serverCategoryIcon)[t]}
/>{' '}
{t}
</>
}
dark
bigger
href={`${link}/${t}`}
/>
))}
<Tag
key='tag'
text={
<>
<i className='fas fa-tag' />
</>
}
dark
bigger
href={link}
/>
</>
)}
</div>
</Container>
</div>
</>
)
}
interface HeroProps {
type?: 'all' | 'bots' | 'servers'
header?: string
description?: string
}
export default Hero