import React, { PropsWithChildren, useCallback, useState } from 'react'
import { AutoComplete, SelectOptionItems } from 'react-icecream'
export default function Demo() {
return (
<>
>
)
}
function NameInput() {
const maxNameLength = 10
const [name, setName] = useState('')
const isNameValid = name.length <= maxNameLength
const fetchNames = useCallback((keyword: string) => {
const names = ['Alice', 'Bob', '张三', '李四']
return names
.filter(item => (keyword ? item.toLowerCase().includes(keyword.toLowerCase()) : true))
.map(item => ({ value: item, content: item }))
}, [])
return (
{name.length}/{maxNameLength}}
value={name}
onChange={setName}
validateStatus={isNameValid ? 'success' : 'error'}
clearable
fetch={fetchNames}
/>
)
}
function fetchOptions(keyword: string): SelectOptionItems {
if (!keyword) {
return []
}
return [
{ value: keyword, content: keyword },
{ value: keyword.repeat(2), content: keyword.repeat(2) },
{ value: keyword.repeat(3), content: keyword.repeat(3) }
]
}
function fetchRemoteOptions(keyword: string): Promise> {
if (!keyword) {
return Promise.resolve([])
}
return new Promise(resolve => {
setTimeout(() => resolve(fetchOptions(keyword)), 2000)
})
}
function fetchGroupedOptions(keyword: string): SelectOptionItems {
if (!keyword) {
return []
}
return [{
title: 'Group 1',
options: [
{ value: keyword.repeat(2), content: keyword.repeat(2) }
]
}, {
title: 'Group 2',
options: [
{ value: keyword.repeat(3), content: keyword.repeat(3) }
]
}]
}
function Line({ children }: PropsWithChildren<{}>) {
return {children}
}