|
import { AutoComplete as PrimeAutoComplete } from 'primereact/autocomplete' |
|
import { useState } from 'react' |
|
const AutoComplete = ({ languages, onComplete }) => { |
|
const [autoComplete, setAutoComplete] = useState('') |
|
const [suggestions, setSuggestions] = useState([]) |
|
|
|
const exampleCodes = ['de', 'fr', 'ar', 'hi', 'sw', 'fa'] |
|
const exampleLanguages = exampleCodes.map(code => |
|
languages?.find(item => item.bcp_47 === code) |
|
) |
|
|
|
const search = e => { |
|
const matches = languages.filter(language => { |
|
const query = e.query.toLowerCase() |
|
return ( |
|
language.language_name.toLowerCase().includes(query) || |
|
language.autonym.toLowerCase().includes(query) || |
|
language.bcp_47.toLowerCase().includes(query) |
|
) |
|
}) |
|
setSuggestions(matches) |
|
} |
|
|
|
const itemTemplate = item => ( |
|
<div |
|
style={{ |
|
display: 'flex', |
|
flexDirection: 'row', |
|
justifyContent: 'space-between' |
|
}} |
|
> |
|
<span> |
|
{item.autonym} |
|
<span style={{ color: 'gray', marginLeft: '1rem' }}> |
|
{item.language_name} |
|
</span> |
|
</span> |
|
<span style={{ color: 'gray' }}>{item.bcp_47}</span> |
|
</div> |
|
) |
|
|
|
return ( |
|
<> |
|
<PrimeAutoComplete |
|
placeholder='Search for language-specific leaderboards...' |
|
value={autoComplete} |
|
onChange={e => setAutoComplete(e.value)} |
|
onClick={() => { |
|
setAutoComplete('') |
|
setSuggestions(languages) |
|
}} |
|
onSelect={e => { |
|
setAutoComplete(e.value.language_name) |
|
onComplete([e.value]) |
|
}} |
|
suggestions={suggestions} |
|
completeMethod={search} |
|
virtualScrollerOptions={{ itemSize: 50 }} // smaller values give layout problems |
|
delay={500} |
|
autoHighlight |
|
autoFocus |
|
itemTemplate={itemTemplate} |
|
field='language_name' |
|
minLength={0} |
|
/> |
|
<span |
|
style={{ |
|
display: 'flex', |
|
flexWrap: 'wrap', |
|
gap: '1rem', |
|
rowGap: '0.3rem', |
|
marginTop: '1rem', |
|
maxWidth: '600px', |
|
justifyContent: 'center', |
|
color: '#555', |
|
fontSize: '0.8rem' |
|
}} |
|
> |
|
<span>Examples:</span> |
|
{exampleLanguages?.map(language => ( |
|
<a |
|
onClick={() => { |
|
onComplete([language]) |
|
setAutoComplete(language.language_name) |
|
}} |
|
style={{ textDecoration: 'underline', cursor: 'pointer' }} |
|
> |
|
{language.language_name} Leaderboard |
|
</a> |
|
))} |
|
{/* <li>African Leaderboard</li> |
|
<li>Indic Leaderboard</li> |
|
<li>Transcription Leaderboard</li> |
|
<li>Dataset Availability for African Languages</li> |
|
<li>GPT 4.5 Evaluation</li> |
|
<li>MMLU Evaluation of Open Models</li> */} |
|
</span> |
|
</> |
|
) |
|
} |
|
|
|
export default AutoComplete |
|
|