UNPKG

nishant-design-system

Version:
128 lines (127 loc) 5.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Typeahead = void 0; var React = _interopRequireWildcard(require("react")); var _reactDom = require("@floating-ui/react-dom"); var _color = require("../../styles/variables/_color"); var _size = require("../../styles/variables/_size"); var _space = require("../../styles/variables/_space"); var _classify = require("../../utils/classify"); var _clickAway = require("../../utils/click-away"); var _Menu = require("../Menu"); var _SearchInput = require("../SearchInput"); var _TypeaheadModule = _interopRequireDefault(require("./Typeahead.module.css")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } const Typeahead = _ref => { let { size = 'medium', classNames, placeholder = 'Select...', onSelect, onSearch, onClear, menu, onMenuOpen, onMenuClose, typeaheadInputText = '', isLoading, menuOpenOffset = 1, ...inputProps } = _ref; const typeaheadRef = React.useRef(); const [filteredOptions, setFilteredOptions] = React.useState(menu?.options); const { x, y, reference, floating, strategy } = (0, _reactDom.useFloating)({ strategy: 'absolute', placement: 'bottom-start', whileElementsMounted: _reactDom.autoUpdate, middleware: [(0, _reactDom.flip)(), (0, _reactDom.offset)(parseInt(_space.spaceXXSmall))] }); const onMenuToggle = isOpen => { isOpen ? onMenuOpen && onMenuOpen() : onMenuClose && onMenuClose(); }; React.useEffect(() => { const optionsFiltered = menu?.options && menu.options.filter(option => { if (!option.label || !typeaheadInputText) { return true; } else { return option.label.toLowerCase().indexOf(typeaheadInputText.toLowerCase()) !== -1; } }); setFilteredOptions(optionsFiltered || []); }, [typeaheadInputText, menu?.options]); return /*#__PURE__*/React.createElement(_clickAway.ClickAway, { onChange: onMenuToggle }, _ref2 => { let { isOpen, onOpen, cancelNext, clickAway } = _ref2; return /*#__PURE__*/React.createElement("div", { "data-testid": "Typeahead", className: (0, _classify.classify)(_TypeaheadModule.default.typeaheadContainer, classNames?.wrapper), ref: typeaheadRef, onClickCapture: cancelNext }, /*#__PURE__*/React.createElement(_SearchInput.SearchInput, _extends({}, inputProps, { boxRef: reference, size: size, placeholder: placeholder, value: typeaheadInputText, classNames: { box: classNames?.box }, isLoading: isLoading, onChange: e => { e.stopPropagation(); onSearch && onSearch(e); if (e.target.value.length >= menuOpenOffset) { onOpen(); } else { clickAway(); } }, onFocus: _e => { if (typeaheadInputText.length >= menuOpenOffset) { onOpen(); } else { clickAway(); } }, onClear: _e => { onClear?.(); } })), isOpen && !isLoading && menu && filteredOptions && !!filteredOptions.length && /*#__PURE__*/React.createElement("div", { onClickCapture: cancelNext, ref: floating, style: { position: strategy, top: y ?? _space.spaceNone, left: x ?? _space.spaceNone, width: _size.sizeFluid, backgroundColor: _color.colorBackgroundTertiary } }, /*#__PURE__*/React.createElement(_Menu.Menu, _extends({}, menu, { options: filteredOptions, onSelect: option => { onSelect && onSelect(option); if (!menu.optionsVariant || menu.optionsVariant === 'normal') { clickAway(); } }, size: menu.size || size })))); }); }; exports.Typeahead = Typeahead;