blob: 3d795ce73fda8d0e7ebc18b11399ad081dcaecb0 [file] [log] [blame]
Adrien BĂ©raud88a52442021-04-26 12:11:41 -04001import React, { useEffect, useState } from 'react'
2import usePromise from "react-fetch-hook/usePromise"
3import { InputAdornment, TextField } from '@material-ui/core'
4import { SearchRounded } from '@material-ui/icons'
5import authManager from '../AuthManager'
6
7const isInputValid = input => input && input.length > 2
8
9export default function UsernameChooser(props) {
10 const [query, setQuery] = useState('')
11
12 const { isLoading, data, error } = usePromise(() => isInputValid(query) ? authManager.fetch(`/api/ns/name/${query}`)
13 .then(res => {
14 if (res.status === 200)
15 return res.json()
16 else throw res.status
17 }) : new Promise((res, rej) => rej(400)),
18 [query])
19
20 useEffect(() => {
21 if (!isLoading) {
22 if (error === 404)
23 props.setName(query)
24 else
25 props.setName('')
26 }
27 }, [query, isLoading, data, error])
28
29 const handleChange = event => setQuery(event.target.value)
30
31 return (
32 <TextField
33 className="main-search-input"
34 type="search"
35 placeholder="Register a unique name"
36 error={!error}
37 label={isLoading ? 'Searching...' : (error && error !== 400 ? 'This name is available' : (data && data.address ? 'This name is not available' : ''))}
38 value={query}
39 disabled={props.disabled}
40 onChange={handleChange}
41 InputProps={{
42 startAdornment: (
43 <InputAdornment position="start"><SearchRounded /></InputAdornment>
44 )
45 }}
46 />
47 )
48}