es-grid-template
Version:
es-grid-template
38 lines • 1.14 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import React, { useEffect, useMemo, useState } from 'react';
import debounce from 'lodash/debounce';
import { Select } from "rc-master-ui";
export function AsyncSelect({
loadOptions,
debounceTimeout = 500,
defaultOptions,
rowData,
...props
}) {
const [options, setOptions] = useState(defaultOptions ?? []);
const debounceFetcher = useMemo(() => {
const fetchOptions = value => {
if (value.trim().length === 0) {
setOptions(defaultOptions ?? []);
return;
}
if (loadOptions) {
loadOptions(value, newOptions => {
setOptions(newOptions);
}, {
rowData
});
}
};
return debounce(fetchOptions, debounceTimeout);
}, [loadOptions, debounceTimeout]);
useEffect(() => {
setOptions(defaultOptions ?? []);
}, [defaultOptions]);
return /*#__PURE__*/React.createElement(Select, _extends({}, props, {
filterOption: loadOptions ? false : props?.filterOption,
onSearch: debounceFetcher,
onSelect: () => setOptions(defaultOptions ?? []),
options: options
}));
}