Demos
Default autocomplete
<Autocomplete data={topMovies} label="Label:" />
Autocomplete with numbers
<Autocompleteinput_value="201"show_clear_buttonlabel="Label:"data={[format(20001234567, {ban: true,}),format(22233344425, {ban: true,}),format(1234.5, {currency: true,}),format('+47116000', {phone: true,}),]}search_numbers={true}/>
Autocomplete with a custom title
keep_value
means the input value gets not removed after an input blur happens.show_clear_button
means a clear button will show up when the input field contains a value.
<Autocompletedata={topMovies}keep_value={true}show_clear_button={true}label="Label:"placeholder="Custom placeholder ..."on_change={({ data }) => {console.log('on_change', data)}}/>
Async usage, dynamically update data during typing
This example simulates server delay with a timeout and - if it gets debounced, we cancel the timeout. Read more about the debounce method.
Also, you may consider using disable_filter
if you have a backend doing the search operation.
const onTypeHandler = ({value,showIndicator,hideIndicator,updateData,debounce,/* ... */}) => {console.log('typed value:', value)showIndicator()debounce(({ value }) => {console.log('debounced value:', value)// simulate server delayconst timeout = setTimeout(() => {// update the drawerListupdateData(topMovies)hideIndicator()}, 600)// cancel invocation methodreturn () => clearTimeout(timeout)},{value,},250)}render(<Autocompletemode="async"on_type={onTypeHandler}no_scroll_animation={true}placeholder="Search ..."/>)
Update data dynamically on the first focus
const onFocusHandler = ({ updateData, dataList, showIndicatorItem }) => {if (!dataList.length) {showIndicatorItem()setTimeout(() => {updateData(topMovies)}, 1e3)}}render(<Autocompletemode="async"no_scroll_animation={true}prevent_selection={true}on_type={({ value /* updateData, ... */ }) => {console.log('on_type', value)}}on_focus={onFocusHandler}/>)
With a Button to toggle the open / close state
NB: Just to show the possibility; the data is given as a function.
<Autocompletelabel="Label:"value={10}show_submit_button={true}on_change={({ data }) => {console.log('on_change', data)}}>{() => topMovies}</Autocomplete>
With a predefined input/search value
<Autocompletelabel="Label:"input_value="the pa ther"no_animationon_change={({ data }) => {console.log('on_change', data)}}>{() => topMovies}</Autocomplete>
Different sizes
Four sizes are available: small
, default
, medium
and large
.
<FormRow direction="vertical"><Autocompletelabel="Label:"size="default"bottomdata={() => topMovies}/><Autocompletelabel="Label:"size="medium"bottomdata={() => topMovies}/><Autocompletelabel="Label:"size="large"bottomdata={() => topMovies}/></FormRow>
Data suffix value
Data is provided as such:
const { locale } = React.useContext(Context)const data = [{suffix_value: (<NumberFormat currency srLabel="Total:" locale={locale}>{12345678}</NumberFormat>),selected_value: `Brukskonto (${ban})`,content: ['Brukskonto', ban],},]
const CustomWidth = styled(Autocomplete)`.dnb-drawer-list__root,.dnb-autocomplete__shell {width: 50vw;min-width: 15rem;max-width: 30rem;}`render(<CustomWidthvalue={1}data={numbers}size="medium"input_icon={null}show_submit_buttonlabel="From account"label_direction="vertical"/>)
Custom width
const CustomWidthOne = styled(Autocomplete)`.dnb-autocomplete__shell {width: 10rem;}`const CustomWidthTwo = styled(Autocomplete)`&.dnb-autocomplete--is-popup .dnb-drawer-list__root {width: 12rem;}`const CustomWidthThree = styled(Autocomplete)`/** Change the "__shell" width */.dnb-autocomplete__shell {width: 12rem;}/** Change the "__list" width */.dnb-drawer-list__root {width: 20rem;}`render(<FormRow direction="vertical"><CustomWidthOnelabel="Label:"label_sr_onlysize="default"icon_position="left"bottomdata={topMovies}/><CustomWidthTwolabel="Label:"label_sr_onlysize="medium"bottomdata={topMovies}/><CustomWidthThreelabel="Label:"label_sr_onlysize="large"align_autocomplete="right"icon_position="right"input_icon="bell"bottomdata={topMovies}/></FormRow>)
Autocomplete with status message
<Autocompletedata={topMovies}label="Label:"status="Please select a valid date"status_state="info"show_submit_button/>