UNPKG

@mskcc/carbon-react

Version:

Carbon react components for the MSKCC DSM

62 lines (58 loc) 1.93 kB
/** * MSKCC 2021, 2024 */ import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js'; import React__default, { useState, useRef } from 'react'; import cx from 'classnames'; import Search from '../Search/Search.js'; import '../Search/Search.Skeleton.js'; import { usePrefix } from '../../internal/usePrefix.js'; import { composeEventHandlers } from '../../tools/events.js'; function ExpandableSearch(_ref) { let { onBlur, onChange, onExpand, onFocus, defaultValue, isExpanded, ...props } = _ref; const [expanded, setExpanded] = useState(isExpanded || false); const [hasContent, setHasContent] = useState(defaultValue ? true : false); const searchRef = useRef(null); const prefix = usePrefix(); function handleFocus() { if (!expanded) { setExpanded(true); } } function handleBlur(evt) { const relatedTargetIsAllowed = evt.relatedTarget && evt.relatedTarget.classList.contains(`${prefix}--search-close`); if (expanded && !relatedTargetIsAllowed && !hasContent) { setExpanded(false); } } function handleChange(evt) { setHasContent(evt.target.value !== ''); } function handleExpand() { searchRef.current?.focus?.(); } const classes = cx(`${prefix}--search--expandable`, { [`${prefix}--search--expanded`]: expanded }, props.className); return /*#__PURE__*/React__default.createElement(Search, _extends({}, props, { defaultValue: defaultValue, isExpanded: expanded, ref: searchRef, className: classes, onFocus: composeEventHandlers([onFocus, handleFocus]), onBlur: composeEventHandlers([onBlur, handleBlur]), onChange: composeEventHandlers([onChange, handleChange]), onExpand: composeEventHandlers([onExpand, handleExpand]) })); } ExpandableSearch.propTypes = Search.propTypes; ExpandableSearch.displayName = 'ExpandableSearch'; export { ExpandableSearch as default };