es-grid-template
Version:
es-grid-template
40 lines • 1.21 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import React, { useEffect, useMemo, useState } from 'react';
import debounce from 'lodash/debounce';
import { TableSelect } from "rc-master-ui";
export function AsyncTableSelect({
loadOptions,
debounceTimeout = 500,
defaultOptions,
columns,
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);
}, [debounceTimeout, loadOptions, defaultOptions, rowData]);
useEffect(() => {
setOptions(defaultOptions ?? []);
}, [defaultOptions]);
return /*#__PURE__*/React.createElement(TableSelect, _extends({}, props, {
filterOption: loadOptions ? false : props?.filterOption,
onSearch: debounceFetcher,
onSelect: () => setOptions(defaultOptions ?? []),
options: options,
columns: columns
}));
}