diff --git a/components/Search.tsx b/components/Search.tsx index 34fce9f..fb019d3 100644 --- a/components/Search.tsx +++ b/components/Search.tsx @@ -1,17 +1,61 @@ -// import { useState } from 'react' +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 => { - return
- - -
-} + 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) -interface SearchProps { - query: string - result: string + } + return <> +
+ setHidden(false)} onBlur={() => setHidden(true)} className='bg-transparent flex-grow outline-none border-none shadow border-0 py-3 px-7 pr-20 h-16 text-xl' placeholder='검색...' value={query} onChange={(e)=> { + 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 : query.length < 3 ? '최소 2글자 이상 입력해주세요.' : '검색어를 입력해주세요.'}
  • + } + +
+
+
+ } export default Search