import * as React from 'react'; import Popover from '@wcpos/components/src/popover'; import { useQuery } from '@wcpos/query'; import Menu from './menu'; import SearchInput from './search-input'; type CustomerDocument = import('@wcpos/database').CustomerDocument; interface CustomerSelectProps { onSelectCustomer: (customer: CustomerDocument) => void; autoFocus?: boolean; value?: CustomerDocument; onBlur?: () => void; size?: 'small' | 'normal'; style?: React.CSSProperties; } /** * */ const CustomerSelect = ({ onSelectCustomer, autoFocus = false, value, onBlur = () => {}, size = 'normal', style, }: CustomerSelectProps) => { const [opened, setOpened] = React.useState(false); /** * */ const query = useQuery({ queryKeys: ['customers', 'select'], collectionName: 'customers', initialParams: { sortBy: 'last_name', sortDirection: 'asc', }, }); /** * */ const onSearch = React.useCallback( (search) => { query.debouncedSearch(search); }, [query] ); /** * Reset search when unmounting */ React.useEffect(() => { return () => { onSearch(''); }; }, [onSearch]); /** * */ return ( { /** * If popover closes, go back to selected customer */ onSelectCustomer(value); setOpened(false); }} withArrow={false} matchWidth withinPortal={false} > ); }; export default CustomerSelect;