import { Select, Row, Col } from '@btri-ui/base'; import debounce from 'lodash/debounce'; import React, { useMemo, useRef, useState } from 'react'; function DebounceSelect({ fetchOptions, debounceTimeout = 800, ...props }) { const [fetching, setFetching] = useState(false); const [options, setOptions] = useState([]); const fetchRef = useRef(0); const debounceFetcher = useMemo(() => { const loadOptions = (value: string) => { fetchRef.current += 1; const fetchId = fetchRef.current; setOptions([]); setFetching(true); fetchOptions(value).then(newOptions => { if (fetchId !== fetchRef.current) { // for fetch callback order return; } setOptions(newOptions); setFetching(false); }); }; return debounce(loadOptions, debounceTimeout); }, [fetchOptions, debounceTimeout]); return (