UNPKG

@awsui/components-react

Version:

AWS UI is a collection of [React](https://reactjs.org/) components that help create intuitive, responsive, and accessible user experiences for web applications. It is developed by Amazon Web Services (AWS). This work is available under the terms of the [A

94 lines (93 loc) 3.91 kB
import { __assign, __rest, __spreadArrays } from "tslib"; import { useCallback, useMemo } from 'react'; import { fireNonCancelableEvent } from '../internal/events'; import { filterOptions } from './utils/utils'; import { KeyCode } from '../internal/keycode'; import { generateTestIndexes } from '../internal/components/options-list/utils/test-indexes'; var parentMap = new WeakMap(); export var getParentGroup = function (item) { return parentMap.get(item); }; export var useAutosuggestItems = function (options) { if (options === void 0) { options = []; } return useMemo(function () { return options.reduce(function (acc, option) { if ('options' in option) { var options_1 = option.options, rest = __rest(option, ["options"]); var groupHeader_1 = __assign(__assign({}, rest), { type: 'parent' }); acc.push(groupHeader_1); var groupDisabled_1 = false; options_1.forEach(function (child) { acc.push(__assign(__assign({ disabled: groupHeader_1.disabled }, child), { type: 'child' })); parentMap.set(acc[acc.length - 1], option); groupDisabled_1 = groupDisabled_1 || !!child.disabled; }); if (groupDisabled_1) { groupHeader_1.disabled = true; } } else { acc.push(__assign({}, option)); } return acc; }, []); }, [options]); }; export var useFilteredItems = function (autosuggestItems, value, filteringType, showAll) { return useMemo(function () { var filteredItems = filteringType === 'auto' && !showAll ? filterOptions(autosuggestItems, value) : __spreadArrays(autosuggestItems); if (value) { filteredItems.unshift({ value: value, type: 'use-entered' }); } generateTestIndexes(filteredItems, getParentGroup); return filteredItems; }, [autosuggestItems, value, filteringType, showAll]); }; export var useSelectOption = function (onChange, closeDropdown) { return useCallback(function (option) { fireNonCancelableEvent(onChange, { value: option.value || '' }); closeDropdown(); }, [onChange, closeDropdown]); }; export var useSelectVisibleOption = function (filteredItems, selectOption, isInteractive) { return useCallback(function (index) { var option = filteredItems[index]; if (option && isInteractive(option)) { selectOption(option); } }, [filteredItems, selectOption, isInteractive]); }; export var useHighlightVisibleOption = function (filteredItems, setHighlightedIndex, isInteractive) { return useCallback(function (index) { var option = filteredItems[index]; if (option && isInteractive(option)) { setHighlightedIndex(index); } }, [filteredItems, setHighlightedIndex, isInteractive]); }; export var useKeyboardHandler = function (moveHighlight, openDropdown, selectHighlighted, usingMouse, onKeyDown) { return useCallback(function (e) { switch (e.detail.keyCode) { case KeyCode.down: { moveHighlight(1); openDropdown(); usingMouse.current = false; e.preventDefault(); break; } case KeyCode.up: { moveHighlight(-1); openDropdown(); usingMouse.current = false; e.preventDefault(); break; } case KeyCode.enter: { selectHighlighted(); e.preventDefault(); break; } default: { onKeyDown && onKeyDown(e); } } }, [moveHighlight, selectHighlighted, onKeyDown, usingMouse, openDropdown]); };