import { useState } from 'react' import Link from 'next/link' import { makeBotURL } from '@utils/Tools' import Fetch from '@utils/Fetch' import { BotList, ResponseProps } from '@types' import DiscordAvatar from './DiscordAvatar' const Search = (): JSX.Element => { const [ query, setQuery ] = useState('') const [ data, setData ] = useState>(null) const [ loading, setLoading ] = useState(false) const [ abortControl, setAbortControl ] = useState(new AbortController()) const [ hidden, setHidden ] = useState(true) const SearchResults = async (value: string) => { setQuery(value) try { abortControl.abort() } catch { return null } const controller = new AbortController() setAbortControl(controller) if(value.length > 2) setLoading(true) const res = await Fetch(`/search/bots?q=${encodeURIComponent(value)}`, { signal: controller.signal }) setData(res) setLoading(false) } return <>
setHidden(false)} onBlur={() => setTimeout(() => setHidden(true), 80)} className='relative w-full mt-5 text-black bg-white dark:text-gray-100 dark:bg-very-black flex rounded-lg z-10'> { SearchResults(e.target.value) }} />
    { data && data.code === 200 && data.data ? data.data.data.length === 0 ?
  • 검색 결과가 없습니다.
  • : data.data.data.map(el =>
  • {el.name}

    {el.intro}

  • ) : loading ?
  • 검색중입니다...
  • :
  • {query && data ? data.errors && data.errors[0] || data.message?.includes('문법') ? <>검색 문법이 잘못되었습니다.
    더 알아보기 : data.message : query.length < 3 ? '최소 2글자 이상 입력해주세요.' : '검색어를 입력해주세요.'}
  • }
} export default Search