@shopify/polaris
Version:
Shopify’s product component library
21 lines (20 loc) • 1.5 kB
JavaScript
import React from 'react';
import { useI18n } from '../../utilities/i18n';
import { Spinner } from '../Spinner';
import { TextField, ComboBox } from './components';
import styles from './Autocomplete.scss';
// TypeScript can't generate types that correctly infer the typing of
// subcomponents so explicitly state the subcomponents in the type definition.
// Letting this be implicit works in this project but fails in projects that use
// generated *.d.ts files.
export const Autocomplete = function Autocomplete({ id, options, selected, textField, preferredPosition, listTitle, allowMultiple, loading, actionBefore, willLoadMoreResults, emptyState, onSelect, onLoadMoreResults, }) {
const i18n = useI18n();
const spinnerMarkup = loading ? (<div className={styles.Loading}>
<Spinner size="small" accessibilityLabel={i18n.translate('Polaris.Autocomplete.spinnerAccessibilityLabel')}/>
</div>) : null;
const conditionalOptions = loading && !willLoadMoreResults ? [] : options;
const conditionalAction = actionBefore && actionBefore !== [] ? [actionBefore] : undefined;
return (<ComboBox id={id} options={conditionalOptions} selected={selected} textField={textField} preferredPosition={preferredPosition} listTitle={listTitle} allowMultiple={allowMultiple} contentAfter={spinnerMarkup} actionsBefore={conditionalAction} onSelect={onSelect} onEndReached={onLoadMoreResults} emptyState={emptyState}/>);
};
Autocomplete.ComboBox = ComboBox;
Autocomplete.TextField = TextField;