react-native-ui-lib
Version:
[](https://stand-with-ukraine.pp.ua)
37 lines • 1.1 kB
JavaScript
import _filter from "lodash/filter";
import _isEmpty from "lodash/isEmpty";
import { useCallback, useState, useMemo } from 'react';
import { shouldFilterOut } from "../PickerPresenter";
const usePickerSearch = props => {
const {
showSearch,
onSearchChange,
children,
items
} = props;
const [searchValue, setSearchValue] = useState('');
const filterItems = useCallback(items => {
if (showSearch && !_isEmpty(searchValue)) {
return _filter(items, item => {
const {
label
} = item.props || item;
return !shouldFilterOut(searchValue, label);
});
}
return items;
}, [showSearch, searchValue]);
const filteredItems = useMemo(() => {
return filterItems(children || items);
}, [filterItems, items, children]);
const _onSearchChange = useCallback(searchValue => {
setSearchValue(searchValue);
onSearchChange?.(searchValue, filteredItems);
}, [onSearchChange, filteredItems]);
return {
setSearchValue,
onSearchChange: _onSearchChange,
filteredItems
};
};
export default usePickerSearch;