@chayns-components/core 5.4.14-alpha.0 → 5.4.15-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,6 +21,7 @@ var _DropdownBodyWrapper = _interopRequireDefault(require("../dropdown-body-wrap
21
21
  var _TagInput = _interopRequireDefault(require("../tag-input/TagInput"));
22
22
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
23
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
24
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
24
25
  const filterSearchBoxItems = ({
25
26
  customFilter,
26
27
  items,
@@ -54,6 +55,7 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
54
55
  container,
55
56
  customFilter,
56
57
  dropdownDirection,
58
+ inputProps,
57
59
  isInvalid = false,
58
60
  leftIcons,
59
61
  lists,
@@ -79,7 +81,14 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
79
81
  }, ref) => {
80
82
  const [matchingListsItems, setMatchingListsItems] = (0, _react.useState)(lists);
81
83
  const [selectedImage, setSelectedImage] = (0, _react.useState)();
82
- const [value, setValue] = (0, _react.useState)(typeof presetValue === 'string' && presetValue !== '' ? presetValue : '');
84
+ const [internalValue, setInternalValue] = (0, _react.useState)(typeof presetValue === 'string' && presetValue !== '' ? presetValue : '');
85
+ const inputValue = inputProps === null || inputProps === void 0 ? void 0 : inputProps.value;
86
+ const value = inputValue ?? internalValue;
87
+ const setValue = (0, _react.useCallback)(nextValue => {
88
+ if (typeof inputValue !== 'string') {
89
+ setInternalValue(nextValue);
90
+ }
91
+ }, [inputValue]);
83
92
  const [height, setHeight] = (0, _react.useState)(0);
84
93
  const [focusedIndex, setFocusedIndex] = (0, _react.useState)(null);
85
94
  const [hasMultipleGroups, setHasMultipleGroups] = (0, _react.useState)(lists.length > 1);
@@ -257,8 +266,11 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
257
266
  * This function handles the focus event of the input and opens the dropdown if the input
258
267
  * should show content on an empty input
259
268
  */
260
- const handleFocus = (0, _react.useCallback)(() => {
269
+ const handleFocus = (0, _react.useCallback)(event => {
261
270
  hasFocusRef.current = true;
271
+ if (typeof (inputProps === null || inputProps === void 0 ? void 0 : inputProps.onFocus) === 'function') {
272
+ inputProps.onFocus(event);
273
+ }
262
274
  if (shouldShowContentOnEmptyInput) {
263
275
  const newMatchingItems = [];
264
276
  activeList.forEach(({
@@ -301,7 +313,15 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
301
313
  handleOpen();
302
314
  }
303
315
  }
304
- }, [shouldShowContentOnEmptyInput, activeList, shouldAddInputToList, hintText, dropdownSearchString, customFilter, shouldUseCustomFilterOnly, handleOpen]);
316
+ }, [shouldShowContentOnEmptyInput, activeList, shouldAddInputToList, hintText, dropdownSearchString, customFilter, shouldUseCustomFilterOnly, handleOpen, inputProps]);
317
+ const handleKeyDown = (0, _react.useCallback)(event => {
318
+ if (typeof onKeyDown === 'function') {
319
+ onKeyDown(event);
320
+ }
321
+ if (typeof (inputProps === null || inputProps === void 0 ? void 0 : inputProps.onKeyDown) === 'function') {
322
+ inputProps.onKeyDown(event);
323
+ }
324
+ }, [inputProps, onKeyDown]);
305
325
 
306
326
  /**
307
327
  * This function filters the lists by input
@@ -411,7 +431,10 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
411
431
  if (typeof onChange === 'function') {
412
432
  onChange(event);
413
433
  }
414
- }, [activeList, customFilter, handleOpen, onChange, shouldAddInputToList, shouldShowContentOnEmptyInput, shouldUseCustomFilterOnly]);
434
+ if (typeof (inputProps === null || inputProps === void 0 ? void 0 : inputProps.onChange) === 'function') {
435
+ inputProps.onChange(event);
436
+ }
437
+ }, [activeList, customFilter, handleOpen, inputProps, onChange, shouldAddInputToList, shouldShowContentOnEmptyInput, shouldUseCustomFilterOnly]);
415
438
 
416
439
  /**
417
440
  * This function handles the blur event of the input
@@ -421,7 +444,10 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
421
444
  if (typeof onBlur === 'function') {
422
445
  onBlur(event);
423
446
  }
424
- }, [onBlur]);
447
+ if (typeof (inputProps === null || inputProps === void 0 ? void 0 : inputProps.onBlur) === 'function') {
448
+ inputProps.onBlur(event);
449
+ }
450
+ }, [inputProps, onBlur]);
425
451
  const handleDropdownOutsideClick = (0, _react.useCallback)(() => {
426
452
  var _tagInputRef$current;
427
453
  (_tagInputRef$current = tagInputRef.current) === null || _tagInputRef$current === void 0 || _tagInputRef$current.blur();
@@ -589,7 +615,7 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
589
615
  }, []);
590
616
  (0, _react.useImperativeHandle)(ref, () => ({
591
617
  clear: () => setValue('')
592
- }), []);
618
+ }), [setValue]);
593
619
  (0, _react.useEffect)(() => {
594
620
  document.addEventListener('keydown', handleKeyPress);
595
621
  return () => {
@@ -604,7 +630,7 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
604
630
  if (presetValue) {
605
631
  setValue(presetValue);
606
632
  }
607
- }, [presetValue]);
633
+ }, [presetValue, setValue]);
608
634
  const shouldShowDropdown = shouldShowBody && (matchingListsItems.length !== 0 || !!hintText) && (value.trim() !== '' || shouldShowContentOnEmptyInput);
609
635
  return (0, _react.useMemo)(() => /*#__PURE__*/_react.default.createElement(_SearchBox.StyledSearchBox, {
610
636
  ref: boxRef,
@@ -625,19 +651,20 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
625
651
  shouldEnableKeyboardHighlighting: shouldEnableKeyboardHighlighting,
626
652
  shouldPreventEnter: true,
627
653
  tags: tagInputSettings.tags
628
- }) : /*#__PURE__*/_react.default.createElement(_Input.default, {
654
+ }) : /*#__PURE__*/_react.default.createElement(_Input.default
655
+ /* eslint-disable-next-line react/jsx-props-no-spreading */, _extends({}, inputProps, {
629
656
  isInvalid: isInvalid,
630
657
  leftElement: leftElement,
631
658
  onBlur: handleBlur,
632
659
  onChange: handleChange,
633
660
  onFocus: handleFocus,
634
- onKeyDown: onKeyDown,
661
+ onKeyDown: handleKeyDown,
635
662
  placeholder: placeholder,
636
663
  ref: inputRef,
637
664
  rightElement: rightElement,
638
- shouldEnableKeyboardHighlighting: shouldEnableKeyboardHighlighting,
665
+ shouldEnableKeyboardHighlighting: (inputProps === null || inputProps === void 0 ? void 0 : inputProps.shouldEnableKeyboardHighlighting) ?? shouldEnableKeyboardHighlighting,
639
666
  value: value
640
- })), boxRef.current && /*#__PURE__*/_react.default.createElement(_DropdownBodyWrapper.default, {
667
+ }))), boxRef.current && /*#__PURE__*/_react.default.createElement(_DropdownBodyWrapper.default, {
641
668
  anchorElement: boxRef.current,
642
669
  container: container,
643
670
  direction: dropdownDirection,
@@ -654,7 +681,7 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
654
681
  ref: contentRef,
655
682
  selectedGroups: groups,
656
683
  shouldHideFilterButtons: shouldHideFilterButtons
657
- }, content))), [container, content, dropdownDirection, filterButtons, groups, handleBlur, handleChange, handleClose, handleDropdownOutsideClick, handleFocus, height, isInvalid, leftElement, maxHeight, onKeyDown, placeholder, rightElement, shouldHideFilterButtons, shouldShowDropdown, shouldEnableKeyboardHighlighting, tagInputSettings, uuid, value]);
684
+ }, content))), [container, content, dropdownDirection, filterButtons, groups, handleBlur, handleChange, handleClose, handleDropdownOutsideClick, handleFocus, handleKeyDown, height, inputProps, isInvalid, leftElement, maxHeight, onKeyDown, placeholder, rightElement, shouldHideFilterButtons, shouldShowDropdown, shouldEnableKeyboardHighlighting, tagInputSettings, uuid, value]);
658
685
  });
659
686
  SearchBox.displayName = 'SearchBox';
660
687
  var _default = exports.default = SearchBox;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchBox.js","names":["_chaynsApi","require","_react","_interopRequireWildcard","_styledComponents","_calculate","_searchBox","_Icon","_interopRequireDefault","_Input","_GroupName","_SearchBoxBody","_SearchBoxItem","_SearchBoxItem2","_SearchBox","_uuid","_DropdownBodyWrapper","_TagInput","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","filterSearchBoxItems","customFilter","items","searchString","shouldUseCustomFilterOnly","searchList","filteredItems","filter","sortSearchBoxItems","getDropdownSearchString","selectedId","shouldKeepSelectedItemPosition","value","SearchBox","forwardRef","container","dropdownDirection","isInvalid","leftIcons","lists","maxHeight","onBlur","onChange","onKeyDown","onSelect","placeholder","presetValue","hintText","shouldAddInputToList","shouldHideFilterButtons","shouldShowContentOnEmptyInput","shouldShowSmallItems","shouldShowRoundImage","shouldShowToggleIcon","tagInputSettings","shouldEnableKeyboardHighlighting","ref","matchingListsItems","setMatchingListsItems","useState","selectedImage","setSelectedImage","setValue","height","setHeight","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","length","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","shouldShowBody","setShouldShowBody","uuid","useUuid","boxRef","useRef","contentRef","inputRef","tagInputRef","hasFocusRef","isAnimatingRef","shouldShowPresetValue","theme","useTheme","dropdownSearchString","isTouch","useDevice","useEffect","filterButtons","useMemo","forEach","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","newList","undefined","filteredMatchingListItems","map","item","handleOpen","useCallback","handleClose","handleFilterButtonsGroupSelect","keys","textArray","calculateContentHeight","selectedItem","find","imageUrl","createElement","StyledSearchBoxItemImage","src","$shouldShowRoundImage","current","handleFocus","toLowerCase","handleClick","rightElement","StyledSearchBoxIcon","onClick","icons","color","leftElement","StyledSearchBoxLeftWrapper","handleChange","event","filteredLists","target","handleBlur","handleDropdownOutsideClick","_tagInputRef$current","blur","handleContainerBlur","_contentRef$current","nextFocusedElement","relatedTarget","currentContainer","currentTarget","contains","handleSelect","newItem","replace","_tagInputRef$current2","resetValue","content","StyledSearchBoxHintText","index","key","name","listIndex","tabIndex","handleKeyDown","_contentRef$current2","_childrenArray$find","children","childrenArray","Array","from","newChildren","child","startsWith","filteredChildren","dataset","isgroupname","preventDefault","newIndex","prevElement","newElement","stopPropagation","_element$children$","element","textContent","attributes","_element$children$2","nodeValue","newId","document","addEventListener","removeEventListener","handleKeyPress","keyCode","useImperativeHandle","clear","shouldShowDropdown","trim","StyledSearchBox","onAdd","onFocus","onRemove","shouldAllowMultiple","shouldPreventEnter","tags","anchorElement","direction","onClose","onOutsideClick","shouldShow","onGroupSelect","selectedGroups","displayName","_default","exports"],"sources":["../../../../src/components/search-box/SearchBox.tsx"],"sourcesContent":["import { useDevice } from 'chayns-api';\nimport React, {\n ChangeEvent,\n ChangeEventHandler,\n FC,\n FocusEvent,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTheme } from 'styled-components';\nimport type { IFilterButtonItem } from '../../types/filterButtons';\nimport type { ISearchBoxItem, ISearchBoxItems } from '../../types/searchBox';\nimport { calculateContentHeight } from '../../utils/calculate';\nimport { searchList, sortSearchBoxItems } from '../../utils/searchBox';\nimport type { Theme } from '../color-scheme-provider/ColorSchemeProvider';\nimport Icon from '../icon/Icon';\nimport Input from '../input/Input';\nimport GroupName from './group-name/GroupName';\nimport SearchBoxBody from './search-box-body/SearchBoxBody';\nimport SearchBoxItem from './search-box-item/SearchBoxItem';\nimport { StyledSearchBoxItemImage } from './search-box-item/SearchBoxItem.styles';\nimport {\n StyledSearchBox,\n StyledSearchBoxHintText,\n StyledSearchBoxIcon,\n StyledSearchBoxLeftWrapper,\n} from './SearchBox.styles';\nimport { useUuid } from '../../hooks/uuid';\nimport DropdownBodyWrapper from '../dropdown-body-wrapper/DropdownBodyWrapper';\nimport TagInput, { TagInputProps, TagInputRef } from '../tag-input/TagInput';\nimport type { DropdownDirection } from '../../types/dropdown';\n\nexport interface SearchBoxRef {\n clear: VoidFunction;\n}\n\nexport interface TagInputSettings {\n onAdd?: TagInputProps['onAdd'];\n onRemove?: TagInputProps['onRemove'];\n shouldAllowMultiple?: TagInputProps['shouldAllowMultiple'];\n tags?: TagInputProps['tags'];\n}\n\nconst filterSearchBoxItems = ({\n customFilter,\n items,\n searchString,\n shouldUseCustomFilterOnly,\n}: {\n customFilter?: (item: ISearchBoxItem) => boolean;\n items: ISearchBoxItem[];\n searchString: string;\n shouldUseCustomFilterOnly?: boolean;\n}) => {\n if (typeof customFilter !== 'function') {\n return searchList({ items, searchString });\n }\n\n if (shouldUseCustomFilterOnly) {\n const filteredItems = items.filter(customFilter);\n\n return sortSearchBoxItems({ items: filteredItems, searchString });\n }\n\n return searchList({ items, searchString }).filter(customFilter);\n};\n\nconst getDropdownSearchString = ({\n selectedId,\n shouldKeepSelectedItemPosition,\n value,\n}: {\n selectedId?: string;\n shouldKeepSelectedItemPosition?: boolean;\n value: string;\n}) => (shouldKeepSelectedItemPosition && selectedId ? '' : value);\n\nexport type SearchBoxProps = {\n /**\n * The element where the content of the `ComboBox` should be rendered via React Portal.\n */\n container?: Element;\n /**\n * An optional callback function to filter the elements to be displayed\n */\n customFilter?: (item: ISearchBoxItem) => boolean;\n /**\n * If true, the custom filter replaces the built-in text search instead of narrowing its results.\n */\n shouldUseCustomFilterOnly?: boolean;\n /**\n * The direction in which the dropdown should be displayed. By default, it is displayed below the input.\n */\n dropdownDirection?: DropdownDirection;\n /**\n * If true, the input field is marked as invalid\n */\n isInvalid?: boolean;\n /**\n * An optional icon that is displayed inside the left side of the input.\n */\n leftIcons?: string[];\n /**\n * List of groups with items that can be searched. It is possible to give only one list; if multiple lists are provided, the 'group name' parameter becomes mandatory.\n */\n lists: ISearchBoxItems[];\n /**\n * The maximum height of the dropdown body in pixels.\n */\n maxHeight?: number;\n /**\n * Function to be executed when the input lost focus.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when the input is changed.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /**\n * Function that is executed when a letter is pressed\n */\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when an item is selected.\n */\n onSelect?: (item: ISearchBoxItem) => void;\n /**\n * The placeholder that should be displayed.\n */\n placeholder?: string;\n /**\n * Set an input for the search box - it is not an item of a list, just a string.\n */\n presetValue?: string;\n /**\n * Control the selected item. If you use this prop, make sure to update it when the user selects an item.\n */\n selectedId?: string;\n /**\n * If true, the selected item keeps its original position in the dropdown list.\n */\n shouldKeepSelectedItemPosition?: boolean;\n /**\n * If true, the value in the Input is displayed in the list.\n */\n shouldAddInputToList: boolean;\n /**\n * If true, the filter buttons are hidden.\n */\n shouldHideFilterButtons?: boolean;\n /**\n * Whether the full list of items should be displayed if the input is empty.\n */\n shouldShowContentOnEmptyInput?: boolean;\n /**\n * If true, the dropdown items are displayed more compactly.\n */\n shouldShowSmallItems?: boolean;\n /**\n * If true, the images of the items are displayed in a round shape.\n */\n shouldShowRoundImage?: boolean;\n /**\n * Whether the icon to open and close the list should be displayed.\n */\n shouldShowToggleIcon?: boolean;\n /**\n * Settings for the TagInput.\n */\n tagInputSettings?: TagInputSettings;\n /**\n * Enables keyboard-only focus highlighting.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n /**\n * A text that should be displayed if no results are found.\n */\n hintText?: string;\n};\n\nconst SearchBox: FC<SearchBoxProps> = forwardRef<SearchBoxRef, SearchBoxProps>(\n (\n {\n container,\n customFilter,\n dropdownDirection,\n isInvalid = false,\n leftIcons,\n lists,\n maxHeight = 300,\n onBlur,\n onChange,\n onKeyDown,\n onSelect,\n placeholder,\n presetValue,\n hintText,\n selectedId,\n shouldAddInputToList = true,\n shouldKeepSelectedItemPosition = false,\n shouldUseCustomFilterOnly = false,\n shouldHideFilterButtons = false,\n shouldShowContentOnEmptyInput = true,\n shouldShowSmallItems = false,\n shouldShowRoundImage,\n shouldShowToggleIcon = false,\n tagInputSettings,\n shouldEnableKeyboardHighlighting,\n },\n ref,\n ) => {\n const [matchingListsItems, setMatchingListsItems] = useState<ISearchBoxItems[]>(lists);\n const [selectedImage, setSelectedImage] = useState<ReactElement>();\n const [value, setValue] = useState(\n typeof presetValue === 'string' && presetValue !== '' ? presetValue : '',\n );\n const [height, setHeight] = useState<number>(0);\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n const [hasMultipleGroups, setHasMultipleGroups] = useState<boolean>(lists.length > 1);\n const [filteredChildrenArray, setFilteredChildrenArray] = useState<Element[]>();\n const [inputToListValue, setInputToListValue] = useState<string>('');\n const [groups, setGroups] = useState<string[]>(['all']);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const uuid = useUuid();\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const tagInputRef = useRef<TagInputRef>(null);\n\n const hasFocusRef = useRef<boolean>(false);\n const isAnimatingRef = useRef<boolean>(false);\n const shouldShowPresetValue = useRef<boolean>(\n typeof presetValue === 'string' && presetValue !== '',\n );\n\n const theme = useTheme() as Theme;\n const dropdownSearchString = getDropdownSearchString({\n selectedId,\n shouldKeepSelectedItemPosition,\n value,\n });\n\n const { isTouch } = useDevice();\n\n /**\n * Checks if there are multiple groups in the lists\n */\n useEffect(() => {\n setHasMultipleGroups(lists.length > 1);\n }, [lists]);\n\n const filterButtons = useMemo(() => {\n const items: IFilterButtonItem[] = [];\n\n if (lists.length <= 1) {\n return items;\n }\n\n lists.forEach(({ groupName }) => {\n if (groupName) {\n items.push({\n id: groupName,\n text: groupName,\n });\n }\n });\n\n return items;\n }, [lists]);\n\n /**\n * Filters the lists by the FilterButtons\n */\n const activeList = useMemo(() => {\n let newLists: ISearchBoxItems[] = [];\n\n if (groups[0] === 'all') {\n newLists = lists;\n } else {\n lists.forEach((list) => {\n if (list.groupName && groups.includes(list.groupName)) {\n newLists.push(list);\n }\n });\n }\n\n const newMatchingItems: ISearchBoxItems[] = [];\n\n newLists.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (typeof customFilter === 'function' && shouldUseCustomFilterOnly) {\n return true;\n }\n\n return !(newMatchingItems.length === 1 && item.text === dropdownSearchString);\n }),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n return newLists;\n }, [\n groups,\n lists,\n customFilter,\n dropdownSearchString,\n shouldAddInputToList,\n shouldUseCustomFilterOnly,\n ]);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleFilterButtonsGroupSelect = (keys: string[]) => {\n setGroups(keys.length === 0 ? ['all'] : keys);\n };\n\n /**\n * This hook calculates the height\n */\n useEffect(() => {\n const textArray: string[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n list.forEach(({ text }) => textArray.push(text));\n if (!groupName) {\n return;\n }\n textArray.push(groupName);\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n textArray.push(inputToListValue);\n }\n\n setHeight(calculateContentHeight(textArray));\n }, [inputToListValue, activeList, placeholder, shouldAddInputToList]);\n\n useEffect(() => {\n if (selectedId) {\n activeList.forEach(({ list }) => {\n const selectedItem = list.find(({ id }) => id === selectedId);\n if (selectedItem) {\n setValue(selectedItem.text);\n\n if (selectedItem.imageUrl) {\n setSelectedImage(\n <StyledSearchBoxItemImage\n src={selectedItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />,\n );\n }\n }\n });\n }\n }, [activeList, selectedId, shouldShowRoundImage]);\n\n /**\n * This hook resets the value if the selectedId changes to undefined. This is an own useEffect because the value\n * should not be reset if the list changes and the selectedId is still undefined.\n */\n useEffect(() => {\n if (!selectedId && !shouldShowPresetValue.current) {\n setValue('');\n }\n }, [selectedId]);\n\n useEffect(() => {\n isAnimatingRef.current = shouldShowBody;\n }, [shouldShowBody]);\n\n useEffect(() => {\n if (\n (matchingListsItems.length !== 0 || hintText) &&\n !isAnimatingRef.current &&\n hasFocusRef.current\n ) {\n handleOpen();\n }\n }, [handleOpen, hintText, matchingListsItems.length]);\n\n /**\n * This function handles the focus event of the input and opens the dropdown if the input\n * should show content on an empty input\n */\n const handleFocus = useCallback(() => {\n hasFocusRef.current = true;\n\n if (shouldShowContentOnEmptyInput) {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (typeof customFilter === 'function' && shouldUseCustomFilterOnly) {\n return true;\n }\n\n return !(\n newMatchingItems.length === 1 && item.text === dropdownSearchString\n );\n }),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n if (filteredMatchingListItems.length !== 0 || hintText) {\n handleOpen();\n }\n }\n }, [\n shouldShowContentOnEmptyInput,\n activeList,\n shouldAddInputToList,\n hintText,\n dropdownSearchString,\n customFilter,\n shouldUseCustomFilterOnly,\n handleOpen,\n ]);\n\n /**\n * This function filters the lists by input\n */\n\n useEffect(() => {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n if (shouldAddInputToList && inputToListValue !== '') {\n newMatchingItems.forEach(({ list }) => {\n list.forEach(({ text }) => {\n if (text.toLowerCase() === inputToListValue.toLowerCase()) {\n setInputToListValue('');\n }\n });\n });\n }\n }, [\n inputToListValue,\n activeList,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n dropdownSearchString,\n customFilter,\n shouldUseCustomFilterOnly,\n ]);\n\n const handleClick = useCallback(() => {\n if (shouldShowBody) {\n handleClose();\n } else {\n handleOpen();\n }\n }, [handleClose, handleOpen, shouldShowBody]);\n\n const rightElement = useMemo(() => {\n if (!shouldShowToggleIcon) {\n return undefined;\n }\n\n return (\n <StyledSearchBoxIcon onClick={handleClick}>\n <Icon icons={['fa fa-chevron-down']} color={theme['006'] as string} />\n </StyledSearchBoxIcon>\n );\n }, [handleClick, shouldShowToggleIcon, theme]);\n\n const leftElement = useMemo(\n () =>\n (leftIcons || selectedImage) && (\n <StyledSearchBoxLeftWrapper>\n {leftIcons && <Icon icons={leftIcons} />}\n {selectedImage && selectedImage}\n </StyledSearchBoxLeftWrapper>\n ),\n [leftIcons, selectedImage],\n );\n\n /**\n * This function handles changes of the input\n */\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const filteredLists: ISearchBoxItems[] = [];\n shouldShowPresetValue.current = false;\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: event.target.value,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n filteredLists.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (filteredLists.length === 0 && shouldAddInputToList) {\n filteredLists.push({\n groupName: undefined,\n list: [],\n });\n }\n\n setSelectedImage(undefined);\n\n if (!shouldShowContentOnEmptyInput && !event.target.value) {\n setMatchingListsItems([]);\n } else {\n setMatchingListsItems(filteredLists);\n }\n\n if (filteredLists.length !== 0) {\n handleOpen();\n }\n\n setValue(event.target.value);\n setInputToListValue(event.target.value);\n\n if (typeof onChange === 'function') {\n onChange(event);\n }\n },\n [\n activeList,\n customFilter,\n handleOpen,\n onChange,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n shouldUseCustomFilterOnly,\n ],\n );\n\n /**\n * This function handles the blur event of the input\n */\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n hasFocusRef.current = false;\n\n if (typeof onBlur === 'function') {\n onBlur(event);\n }\n },\n [onBlur],\n );\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return hasFocusRef.current && isTouch;\n }, [isTouch]);\n\n const handleContainerBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n const nextFocusedElement = event.relatedTarget as Node | null;\n const currentContainer = event.currentTarget as HTMLElement;\n\n // Check if focus is moving outside the SearchBox container\n // Also check the dropdown content (contentRef) since it's rendered in a portal\n if (\n !nextFocusedElement ||\n (!currentContainer.contains(nextFocusedElement) &&\n !contentRef.current?.contains(nextFocusedElement))\n ) {\n handleClose();\n }\n },\n [handleClose],\n );\n\n /**\n * This function handles the item selection\n */\n const handleSelect = useCallback(\n (item: ISearchBoxItem) => {\n const newItem = {\n ...item,\n text: item.text.replace('<b>', '').replace('</b>', '').replace('</b', ''),\n };\n\n if (tagInputSettings) {\n setValue('');\n setInputToListValue('');\n tagInputRef.current?.resetValue();\n } else {\n setValue(newItem.text);\n }\n\n handleClose();\n\n setSelectedImage(\n newItem.imageUrl ? (\n <StyledSearchBoxItemImage\n src={newItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />\n ) : undefined,\n );\n\n setMatchingListsItems([]);\n\n if (typeof onSelect === 'function') {\n onSelect(newItem);\n }\n },\n [handleClose, onSelect, shouldShowRoundImage, tagInputSettings],\n );\n\n const content = useMemo(() => {\n if (hintText && matchingListsItems.length === 0) {\n return (\n <StyledSearchBoxHintText>\n {hintText.replace('##value##', value)}\n </StyledSearchBoxHintText>\n );\n }\n\n const items: ReactElement[] = [];\n\n matchingListsItems.forEach(({ groupName, list }, index) => {\n if (hasMultipleGroups) {\n if (list.length <= 0) {\n return;\n }\n\n if (index !== 0) {\n items.push(<GroupName key={groupName} name={groupName ?? ''} />);\n }\n }\n\n list.forEach(({ id, text, imageUrl }, listIndex) => {\n items.push(\n <SearchBoxItem\n key={`${id}_${groupName ?? ''}`}\n id={id}\n text={text}\n imageUrl={imageUrl}\n shouldShowSmallItems={shouldShowSmallItems}\n shouldShowRoundImage={shouldShowRoundImage}\n onSelect={handleSelect}\n groupName={groupName}\n tabIndex={index === 0 && listIndex === 0 ? 0 : -1}\n />,\n );\n });\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n items.push(\n <SearchBoxItem\n id=\"input-value\"\n onSelect={handleSelect}\n shouldShowSmallItems={shouldShowSmallItems}\n text={`<b>${inputToListValue}</b`}\n tabIndex={items.length === 0 ? 0 : -1}\n />,\n );\n }\n\n return items;\n }, [\n hintText,\n matchingListsItems,\n shouldAddInputToList,\n inputToListValue,\n value,\n hasMultipleGroups,\n shouldShowSmallItems,\n shouldShowRoundImage,\n handleSelect,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!shouldShowBody || matchingListsItems.length === 0) {\n return;\n }\n\n const children = contentRef.current?.children;\n\n if (!children) {\n return;\n }\n\n const childrenArray = Array.from(children);\n\n const newChildren = childrenArray.find((child) =>\n child.id.startsWith('searchBoxContent__'),\n )?.children;\n\n if (!(newChildren && newChildren.length > 0)) {\n return;\n }\n\n const filteredChildren = Array.from(newChildren).filter(\n (child) => (child as HTMLElement).dataset.isgroupname !== 'true',\n );\n\n setFilteredChildrenArray(filteredChildren);\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n\n if (newChildren && newChildren.length > 0) {\n const newIndex =\n focusedIndex !== null\n ? (focusedIndex +\n (e.key === 'ArrowUp' ? -1 : 1) +\n filteredChildren.length) %\n filteredChildren.length\n : 0;\n\n if (focusedIndex !== null) {\n const prevElement = filteredChildren[focusedIndex] as HTMLDivElement;\n prevElement.tabIndex = -1;\n }\n\n setFocusedIndex(newIndex);\n\n const newElement = filteredChildren[newIndex] as HTMLDivElement;\n\n newElement.tabIndex = 0;\n }\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n\n if (filteredChildren) {\n const element = filteredChildren[focusedIndex ?? 0];\n\n if (!element) {\n return;\n }\n\n const { id, textContent } = element;\n\n let imageUrl: string | undefined;\n\n // Just Ignore, it works\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (element.children[0]?.attributes.src) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n imageUrl = element.children[0]?.attributes.src.nodeValue as string;\n }\n\n const newId = id.replace('search-box-item__', '');\n\n handleSelect({\n id: newId === 'input-value' ? textContent : newId,\n text: textContent ?? '',\n imageUrl,\n });\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [\n filteredChildrenArray,\n focusedIndex,\n handleSelect,\n matchingListsItems.length,\n shouldShowBody,\n ]);\n\n const handleKeyPress = useCallback((event: KeyboardEvent) => {\n if (event.keyCode === 27) {\n setMatchingListsItems([]);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => setValue(''),\n }),\n [],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyPress);\n\n return () => {\n document.addEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n /**\n * Update the value if preset value changes\n */\n useEffect(() => {\n if (presetValue) {\n setValue(presetValue);\n }\n }, [presetValue]);\n\n const shouldShowDropdown =\n shouldShowBody &&\n (matchingListsItems.length !== 0 || !!hintText) &&\n (value.trim() !== '' || shouldShowContentOnEmptyInput);\n\n return useMemo(\n () => (\n <StyledSearchBox\n ref={boxRef}\n key={`search-box-${uuid}`}\n onBlur={handleContainerBlur}\n >\n <div id={`search_box_input${uuid}`}>\n {tagInputSettings ? (\n <TagInput\n leftElement={leftElement}\n onAdd={tagInputSettings.onAdd}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onRemove={tagInputSettings.onRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={tagInputSettings.shouldAllowMultiple}\n shouldEnableKeyboardHighlighting={shouldEnableKeyboardHighlighting}\n shouldPreventEnter\n tags={tagInputSettings.tags}\n />\n ) : (\n <Input\n isInvalid={isInvalid}\n leftElement={leftElement}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n ref={inputRef}\n rightElement={rightElement}\n shouldEnableKeyboardHighlighting={shouldEnableKeyboardHighlighting}\n value={value}\n />\n )}\n </div>\n {boxRef.current && (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={shouldShowDropdown}\n >\n <SearchBoxBody\n filterButtons={filterButtons}\n height={height}\n maxHeight={maxHeight}\n shouldShow={shouldShowDropdown}\n key={`search-box-body-${uuid}`}\n onGroupSelect={handleFilterButtonsGroupSelect}\n ref={contentRef}\n selectedGroups={groups}\n shouldHideFilterButtons={shouldHideFilterButtons}\n >\n {content}\n </SearchBoxBody>\n </DropdownBodyWrapper>\n )}\n </StyledSearchBox>\n ),\n [\n container,\n content,\n dropdownDirection,\n filterButtons,\n groups,\n handleBlur,\n handleChange,\n handleClose,\n handleDropdownOutsideClick,\n handleFocus,\n height,\n isInvalid,\n leftElement,\n maxHeight,\n onKeyDown,\n placeholder,\n rightElement,\n shouldHideFilterButtons,\n shouldShowDropdown,\n shouldEnableKeyboardHighlighting,\n tagInputSettings,\n uuid,\n value,\n ],\n );\n },\n);\n\nSearchBox.displayName = 'SearchBox';\n\nexport default SearchBox;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SearchBox.js","names":["_chaynsApi","require","_react","_interopRequireWildcard","_styledComponents","_calculate","_searchBox","_Icon","_interopRequireDefault","_Input","_GroupName","_SearchBoxBody","_SearchBoxItem","_SearchBoxItem2","_SearchBox","_uuid","_DropdownBodyWrapper","_TagInput","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","filterSearchBoxItems","customFilter","items","searchString","shouldUseCustomFilterOnly","searchList","filteredItems","filter","sortSearchBoxItems","getDropdownSearchString","selectedId","shouldKeepSelectedItemPosition","value","SearchBox","forwardRef","container","dropdownDirection","inputProps","isInvalid","leftIcons","lists","maxHeight","onBlur","onChange","onKeyDown","onSelect","placeholder","presetValue","hintText","shouldAddInputToList","shouldHideFilterButtons","shouldShowContentOnEmptyInput","shouldShowSmallItems","shouldShowRoundImage","shouldShowToggleIcon","tagInputSettings","shouldEnableKeyboardHighlighting","ref","matchingListsItems","setMatchingListsItems","useState","selectedImage","setSelectedImage","internalValue","setInternalValue","inputValue","setValue","useCallback","nextValue","height","setHeight","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","shouldShowBody","setShouldShowBody","uuid","useUuid","boxRef","useRef","contentRef","inputRef","tagInputRef","hasFocusRef","isAnimatingRef","shouldShowPresetValue","theme","useTheme","dropdownSearchString","isTouch","useDevice","useEffect","filterButtons","useMemo","forEach","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","newList","undefined","filteredMatchingListItems","map","item","handleOpen","handleClose","handleFilterButtonsGroupSelect","keys","textArray","calculateContentHeight","selectedItem","find","imageUrl","createElement","StyledSearchBoxItemImage","src","$shouldShowRoundImage","current","handleFocus","event","onFocus","handleKeyDown","toLowerCase","handleClick","rightElement","StyledSearchBoxIcon","onClick","icons","color","leftElement","StyledSearchBoxLeftWrapper","handleChange","filteredLists","target","handleBlur","handleDropdownOutsideClick","_tagInputRef$current","blur","handleContainerBlur","_contentRef$current","nextFocusedElement","relatedTarget","currentContainer","currentTarget","contains","handleSelect","newItem","replace","_tagInputRef$current2","resetValue","content","StyledSearchBoxHintText","index","key","name","listIndex","tabIndex","_contentRef$current2","_childrenArray$find","children","childrenArray","Array","from","newChildren","child","startsWith","filteredChildren","dataset","isgroupname","preventDefault","newIndex","prevElement","newElement","stopPropagation","_element$children$","element","textContent","attributes","_element$children$2","nodeValue","newId","document","addEventListener","removeEventListener","handleKeyPress","keyCode","useImperativeHandle","clear","shouldShowDropdown","trim","StyledSearchBox","onAdd","onRemove","shouldAllowMultiple","shouldPreventEnter","tags","anchorElement","direction","onClose","onOutsideClick","shouldShow","onGroupSelect","selectedGroups","displayName","_default","exports"],"sources":["../../../../src/components/search-box/SearchBox.tsx"],"sourcesContent":["import { useDevice } from 'chayns-api';\nimport React, {\n ChangeEvent,\n ChangeEventHandler,\n FC,\n FocusEvent,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTheme } from 'styled-components';\nimport type { IFilterButtonItem } from '../../types/filterButtons';\nimport type { ISearchBoxItem, ISearchBoxItems } from '../../types/searchBox';\nimport { calculateContentHeight } from '../../utils/calculate';\nimport { searchList, sortSearchBoxItems } from '../../utils/searchBox';\nimport type { Theme } from '../color-scheme-provider/ColorSchemeProvider';\nimport Icon from '../icon/Icon';\nimport Input, { type InputProps } from '../input/Input';\nimport GroupName from './group-name/GroupName';\nimport SearchBoxBody from './search-box-body/SearchBoxBody';\nimport SearchBoxItem from './search-box-item/SearchBoxItem';\nimport { StyledSearchBoxItemImage } from './search-box-item/SearchBoxItem.styles';\nimport {\n StyledSearchBox,\n StyledSearchBoxHintText,\n StyledSearchBoxIcon,\n StyledSearchBoxLeftWrapper,\n} from './SearchBox.styles';\nimport { useUuid } from '../../hooks/uuid';\nimport DropdownBodyWrapper from '../dropdown-body-wrapper/DropdownBodyWrapper';\nimport TagInput, { TagInputProps, TagInputRef } from '../tag-input/TagInput';\nimport type { DropdownDirection } from '../../types/dropdown';\n\nexport interface SearchBoxRef {\n clear: VoidFunction;\n}\n\nexport interface TagInputSettings {\n onAdd?: TagInputProps['onAdd'];\n onRemove?: TagInputProps['onRemove'];\n shouldAllowMultiple?: TagInputProps['shouldAllowMultiple'];\n tags?: TagInputProps['tags'];\n}\n\nconst filterSearchBoxItems = ({\n customFilter,\n items,\n searchString,\n shouldUseCustomFilterOnly,\n}: {\n customFilter?: (item: ISearchBoxItem) => boolean;\n items: ISearchBoxItem[];\n searchString: string;\n shouldUseCustomFilterOnly?: boolean;\n}) => {\n if (typeof customFilter !== 'function') {\n return searchList({ items, searchString });\n }\n\n if (shouldUseCustomFilterOnly) {\n const filteredItems = items.filter(customFilter);\n\n return sortSearchBoxItems({ items: filteredItems, searchString });\n }\n\n return searchList({ items, searchString }).filter(customFilter);\n};\n\nconst getDropdownSearchString = ({\n selectedId,\n shouldKeepSelectedItemPosition,\n value,\n}: {\n selectedId?: string;\n shouldKeepSelectedItemPosition?: boolean;\n value: string;\n}) => (shouldKeepSelectedItemPosition && selectedId ? '' : value);\n\nexport type SearchBoxProps = {\n /**\n * The element where the content of the `ComboBox` should be rendered via React Portal.\n */\n container?: Element;\n /**\n * An optional callback function to filter the elements to be displayed\n */\n customFilter?: (item: ISearchBoxItem) => boolean;\n /**\n * If true, the custom filter replaces the built-in text search instead of narrowing its results.\n */\n shouldUseCustomFilterOnly?: boolean;\n /**\n * The direction in which the dropdown should be displayed. By default, it is displayed below the input.\n */\n dropdownDirection?: DropdownDirection;\n /**\n * If true, the input field is marked as invalid\n */\n isInvalid?: boolean;\n /**\n * An optional icon that is displayed inside the left side of the input.\n */\n leftIcons?: string[];\n /**\n * Props that are passed to the underlying Input component.\n */\n inputProps?: InputProps;\n /**\n * List of groups with items that can be searched. It is possible to give only one list; if multiple lists are provided, the 'group name' parameter becomes mandatory.\n */\n lists: ISearchBoxItems[];\n /**\n * The maximum height of the dropdown body in pixels.\n */\n maxHeight?: number;\n /**\n * Function to be executed when the input lost focus.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when the input is changed.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /**\n * Function that is executed when a letter is pressed\n */\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when an item is selected.\n */\n onSelect?: (item: ISearchBoxItem) => void;\n /**\n * The placeholder that should be displayed.\n */\n placeholder?: string;\n /**\n * Set an input for the search box - it is not an item of a list, just a string.\n */\n presetValue?: string;\n /**\n * Control the selected item. If you use this prop, make sure to update it when the user selects an item.\n */\n selectedId?: string;\n /**\n * If true, the selected item keeps its original position in the dropdown list.\n */\n shouldKeepSelectedItemPosition?: boolean;\n /**\n * If true, the value in the Input is displayed in the list.\n */\n shouldAddInputToList: boolean;\n /**\n * If true, the filter buttons are hidden.\n */\n shouldHideFilterButtons?: boolean;\n /**\n * Whether the full list of items should be displayed if the input is empty.\n */\n shouldShowContentOnEmptyInput?: boolean;\n /**\n * If true, the dropdown items are displayed more compactly.\n */\n shouldShowSmallItems?: boolean;\n /**\n * If true, the images of the items are displayed in a round shape.\n */\n shouldShowRoundImage?: boolean;\n /**\n * Whether the icon to open and close the list should be displayed.\n */\n shouldShowToggleIcon?: boolean;\n /**\n * Settings for the TagInput.\n */\n tagInputSettings?: TagInputSettings;\n /**\n * Enables keyboard-only focus highlighting.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n /**\n * A text that should be displayed if no results are found.\n */\n hintText?: string;\n};\n\nconst SearchBox: FC<SearchBoxProps> = forwardRef<SearchBoxRef, SearchBoxProps>(\n (\n {\n container,\n customFilter,\n dropdownDirection,\n inputProps,\n isInvalid = false,\n leftIcons,\n lists,\n maxHeight = 300,\n onBlur,\n onChange,\n onKeyDown,\n onSelect,\n placeholder,\n presetValue,\n hintText,\n selectedId,\n shouldAddInputToList = true,\n shouldKeepSelectedItemPosition = false,\n shouldUseCustomFilterOnly = false,\n shouldHideFilterButtons = false,\n shouldShowContentOnEmptyInput = true,\n shouldShowSmallItems = false,\n shouldShowRoundImage,\n shouldShowToggleIcon = false,\n tagInputSettings,\n shouldEnableKeyboardHighlighting,\n },\n ref,\n ) => {\n const [matchingListsItems, setMatchingListsItems] = useState<ISearchBoxItems[]>(lists);\n const [selectedImage, setSelectedImage] = useState<ReactElement>();\n const [internalValue, setInternalValue] = useState(\n typeof presetValue === 'string' && presetValue !== '' ? presetValue : '',\n );\n const inputValue = inputProps?.value;\n const value = inputValue ?? internalValue;\n const setValue = useCallback(\n (nextValue: string) => {\n if (typeof inputValue !== 'string') {\n setInternalValue(nextValue);\n }\n },\n [inputValue],\n );\n const [height, setHeight] = useState<number>(0);\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n const [hasMultipleGroups, setHasMultipleGroups] = useState<boolean>(lists.length > 1);\n const [filteredChildrenArray, setFilteredChildrenArray] = useState<Element[]>();\n const [inputToListValue, setInputToListValue] = useState<string>('');\n const [groups, setGroups] = useState<string[]>(['all']);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const uuid = useUuid();\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const tagInputRef = useRef<TagInputRef>(null);\n\n const hasFocusRef = useRef<boolean>(false);\n const isAnimatingRef = useRef<boolean>(false);\n const shouldShowPresetValue = useRef<boolean>(\n typeof presetValue === 'string' && presetValue !== '',\n );\n\n const theme = useTheme() as Theme;\n const dropdownSearchString = getDropdownSearchString({\n selectedId,\n shouldKeepSelectedItemPosition,\n value,\n });\n\n const { isTouch } = useDevice();\n\n /**\n * Checks if there are multiple groups in the lists\n */\n useEffect(() => {\n setHasMultipleGroups(lists.length > 1);\n }, [lists]);\n\n const filterButtons = useMemo(() => {\n const items: IFilterButtonItem[] = [];\n\n if (lists.length <= 1) {\n return items;\n }\n\n lists.forEach(({ groupName }) => {\n if (groupName) {\n items.push({\n id: groupName,\n text: groupName,\n });\n }\n });\n\n return items;\n }, [lists]);\n\n /**\n * Filters the lists by the FilterButtons\n */\n const activeList = useMemo(() => {\n let newLists: ISearchBoxItems[] = [];\n\n if (groups[0] === 'all') {\n newLists = lists;\n } else {\n lists.forEach((list) => {\n if (list.groupName && groups.includes(list.groupName)) {\n newLists.push(list);\n }\n });\n }\n\n const newMatchingItems: ISearchBoxItems[] = [];\n\n newLists.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (typeof customFilter === 'function' && shouldUseCustomFilterOnly) {\n return true;\n }\n\n return !(newMatchingItems.length === 1 && item.text === dropdownSearchString);\n }),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n return newLists;\n }, [\n groups,\n lists,\n customFilter,\n dropdownSearchString,\n shouldAddInputToList,\n shouldUseCustomFilterOnly,\n ]);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleFilterButtonsGroupSelect = (keys: string[]) => {\n setGroups(keys.length === 0 ? ['all'] : keys);\n };\n\n /**\n * This hook calculates the height\n */\n useEffect(() => {\n const textArray: string[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n list.forEach(({ text }) => textArray.push(text));\n if (!groupName) {\n return;\n }\n textArray.push(groupName);\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n textArray.push(inputToListValue);\n }\n\n setHeight(calculateContentHeight(textArray));\n }, [inputToListValue, activeList, placeholder, shouldAddInputToList]);\n\n useEffect(() => {\n if (selectedId) {\n activeList.forEach(({ list }) => {\n const selectedItem = list.find(({ id }) => id === selectedId);\n if (selectedItem) {\n setValue(selectedItem.text);\n\n if (selectedItem.imageUrl) {\n setSelectedImage(\n <StyledSearchBoxItemImage\n src={selectedItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />,\n );\n }\n }\n });\n }\n }, [activeList, selectedId, shouldShowRoundImage]);\n\n /**\n * This hook resets the value if the selectedId changes to undefined. This is an own useEffect because the value\n * should not be reset if the list changes and the selectedId is still undefined.\n */\n useEffect(() => {\n if (!selectedId && !shouldShowPresetValue.current) {\n setValue('');\n }\n }, [selectedId]);\n\n useEffect(() => {\n isAnimatingRef.current = shouldShowBody;\n }, [shouldShowBody]);\n\n useEffect(() => {\n if (\n (matchingListsItems.length !== 0 || hintText) &&\n !isAnimatingRef.current &&\n hasFocusRef.current\n ) {\n handleOpen();\n }\n }, [handleOpen, hintText, matchingListsItems.length]);\n\n /**\n * This function handles the focus event of the input and opens the dropdown if the input\n * should show content on an empty input\n */\n const handleFocus = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n hasFocusRef.current = true;\n\n if (typeof inputProps?.onFocus === 'function') {\n inputProps.onFocus(event);\n }\n\n if (shouldShowContentOnEmptyInput) {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(\n ({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (\n typeof customFilter === 'function' &&\n shouldUseCustomFilterOnly\n ) {\n return true;\n }\n\n return !(\n newMatchingItems.length === 1 &&\n item.text === dropdownSearchString\n );\n }),\n }),\n );\n\n setMatchingListsItems(filteredMatchingListItems);\n\n if (filteredMatchingListItems.length !== 0 || hintText) {\n handleOpen();\n }\n }\n },\n [\n shouldShowContentOnEmptyInput,\n activeList,\n shouldAddInputToList,\n hintText,\n dropdownSearchString,\n customFilter,\n shouldUseCustomFilterOnly,\n handleOpen,\n inputProps,\n ],\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLInputElement>>(\n (event) => {\n if (typeof onKeyDown === 'function') {\n onKeyDown(event);\n }\n\n if (typeof inputProps?.onKeyDown === 'function') {\n inputProps.onKeyDown(event);\n }\n },\n [inputProps, onKeyDown],\n );\n\n /**\n * This function filters the lists by input\n */\n\n useEffect(() => {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n if (shouldAddInputToList && inputToListValue !== '') {\n newMatchingItems.forEach(({ list }) => {\n list.forEach(({ text }) => {\n if (text.toLowerCase() === inputToListValue.toLowerCase()) {\n setInputToListValue('');\n }\n });\n });\n }\n }, [\n inputToListValue,\n activeList,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n dropdownSearchString,\n customFilter,\n shouldUseCustomFilterOnly,\n ]);\n\n const handleClick = useCallback(() => {\n if (shouldShowBody) {\n handleClose();\n } else {\n handleOpen();\n }\n }, [handleClose, handleOpen, shouldShowBody]);\n\n const rightElement = useMemo(() => {\n if (!shouldShowToggleIcon) {\n return undefined;\n }\n\n return (\n <StyledSearchBoxIcon onClick={handleClick}>\n <Icon icons={['fa fa-chevron-down']} color={theme['006'] as string} />\n </StyledSearchBoxIcon>\n );\n }, [handleClick, shouldShowToggleIcon, theme]);\n\n const leftElement = useMemo(\n () =>\n (leftIcons || selectedImage) && (\n <StyledSearchBoxLeftWrapper>\n {leftIcons && <Icon icons={leftIcons} />}\n {selectedImage && selectedImage}\n </StyledSearchBoxLeftWrapper>\n ),\n [leftIcons, selectedImage],\n );\n\n /**\n * This function handles changes of the input\n */\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const filteredLists: ISearchBoxItems[] = [];\n shouldShowPresetValue.current = false;\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: event.target.value,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n filteredLists.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (filteredLists.length === 0 && shouldAddInputToList) {\n filteredLists.push({\n groupName: undefined,\n list: [],\n });\n }\n\n setSelectedImage(undefined);\n\n if (!shouldShowContentOnEmptyInput && !event.target.value) {\n setMatchingListsItems([]);\n } else {\n setMatchingListsItems(filteredLists);\n }\n\n if (filteredLists.length !== 0) {\n handleOpen();\n }\n\n setValue(event.target.value);\n setInputToListValue(event.target.value);\n\n if (typeof onChange === 'function') {\n onChange(event);\n }\n\n if (typeof inputProps?.onChange === 'function') {\n inputProps.onChange(event);\n }\n },\n [\n activeList,\n customFilter,\n handleOpen,\n inputProps,\n onChange,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n shouldUseCustomFilterOnly,\n ],\n );\n\n /**\n * This function handles the blur event of the input\n */\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n hasFocusRef.current = false;\n\n if (typeof onBlur === 'function') {\n onBlur(event);\n }\n\n if (typeof inputProps?.onBlur === 'function') {\n inputProps.onBlur(event);\n }\n },\n [inputProps, onBlur],\n );\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return hasFocusRef.current && isTouch;\n }, [isTouch]);\n\n const handleContainerBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n const nextFocusedElement = event.relatedTarget as Node | null;\n const currentContainer = event.currentTarget as HTMLElement;\n\n // Check if focus is moving outside the SearchBox container\n // Also check the dropdown content (contentRef) since it's rendered in a portal\n if (\n !nextFocusedElement ||\n (!currentContainer.contains(nextFocusedElement) &&\n !contentRef.current?.contains(nextFocusedElement))\n ) {\n handleClose();\n }\n },\n [handleClose],\n );\n\n /**\n * This function handles the item selection\n */\n const handleSelect = useCallback(\n (item: ISearchBoxItem) => {\n const newItem = {\n ...item,\n text: item.text.replace('<b>', '').replace('</b>', '').replace('</b', ''),\n };\n\n if (tagInputSettings) {\n setValue('');\n setInputToListValue('');\n tagInputRef.current?.resetValue();\n } else {\n setValue(newItem.text);\n }\n\n handleClose();\n\n setSelectedImage(\n newItem.imageUrl ? (\n <StyledSearchBoxItemImage\n src={newItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />\n ) : undefined,\n );\n\n setMatchingListsItems([]);\n\n if (typeof onSelect === 'function') {\n onSelect(newItem);\n }\n },\n [handleClose, onSelect, shouldShowRoundImage, tagInputSettings],\n );\n\n const content = useMemo(() => {\n if (hintText && matchingListsItems.length === 0) {\n return (\n <StyledSearchBoxHintText>\n {hintText.replace('##value##', value)}\n </StyledSearchBoxHintText>\n );\n }\n\n const items: ReactElement[] = [];\n\n matchingListsItems.forEach(({ groupName, list }, index) => {\n if (hasMultipleGroups) {\n if (list.length <= 0) {\n return;\n }\n\n if (index !== 0) {\n items.push(<GroupName key={groupName} name={groupName ?? ''} />);\n }\n }\n\n list.forEach(({ id, text, imageUrl }, listIndex) => {\n items.push(\n <SearchBoxItem\n key={`${id}_${groupName ?? ''}`}\n id={id}\n text={text}\n imageUrl={imageUrl}\n shouldShowSmallItems={shouldShowSmallItems}\n shouldShowRoundImage={shouldShowRoundImage}\n onSelect={handleSelect}\n groupName={groupName}\n tabIndex={index === 0 && listIndex === 0 ? 0 : -1}\n />,\n );\n });\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n items.push(\n <SearchBoxItem\n id=\"input-value\"\n onSelect={handleSelect}\n shouldShowSmallItems={shouldShowSmallItems}\n text={`<b>${inputToListValue}</b`}\n tabIndex={items.length === 0 ? 0 : -1}\n />,\n );\n }\n\n return items;\n }, [\n hintText,\n matchingListsItems,\n shouldAddInputToList,\n inputToListValue,\n value,\n hasMultipleGroups,\n shouldShowSmallItems,\n shouldShowRoundImage,\n handleSelect,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!shouldShowBody || matchingListsItems.length === 0) {\n return;\n }\n\n const children = contentRef.current?.children;\n\n if (!children) {\n return;\n }\n\n const childrenArray = Array.from(children);\n\n const newChildren = childrenArray.find((child) =>\n child.id.startsWith('searchBoxContent__'),\n )?.children;\n\n if (!(newChildren && newChildren.length > 0)) {\n return;\n }\n\n const filteredChildren = Array.from(newChildren).filter(\n (child) => (child as HTMLElement).dataset.isgroupname !== 'true',\n );\n\n setFilteredChildrenArray(filteredChildren);\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n\n if (newChildren && newChildren.length > 0) {\n const newIndex =\n focusedIndex !== null\n ? (focusedIndex +\n (e.key === 'ArrowUp' ? -1 : 1) +\n filteredChildren.length) %\n filteredChildren.length\n : 0;\n\n if (focusedIndex !== null) {\n const prevElement = filteredChildren[focusedIndex] as HTMLDivElement;\n prevElement.tabIndex = -1;\n }\n\n setFocusedIndex(newIndex);\n\n const newElement = filteredChildren[newIndex] as HTMLDivElement;\n\n newElement.tabIndex = 0;\n }\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n\n if (filteredChildren) {\n const element = filteredChildren[focusedIndex ?? 0];\n\n if (!element) {\n return;\n }\n\n const { id, textContent } = element;\n\n let imageUrl: string | undefined;\n\n // Just Ignore, it works\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (element.children[0]?.attributes.src) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n imageUrl = element.children[0]?.attributes.src.nodeValue as string;\n }\n\n const newId = id.replace('search-box-item__', '');\n\n handleSelect({\n id: newId === 'input-value' ? textContent : newId,\n text: textContent ?? '',\n imageUrl,\n });\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [\n filteredChildrenArray,\n focusedIndex,\n handleSelect,\n matchingListsItems.length,\n shouldShowBody,\n ]);\n\n const handleKeyPress = useCallback((event: KeyboardEvent) => {\n if (event.keyCode === 27) {\n setMatchingListsItems([]);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => setValue(''),\n }),\n [setValue],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyPress);\n\n return () => {\n document.addEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n /**\n * Update the value if preset value changes\n */\n useEffect(() => {\n if (presetValue) {\n setValue(presetValue);\n }\n }, [presetValue, setValue]);\n\n const shouldShowDropdown =\n shouldShowBody &&\n (matchingListsItems.length !== 0 || !!hintText) &&\n (value.trim() !== '' || shouldShowContentOnEmptyInput);\n\n return useMemo(\n () => (\n <StyledSearchBox\n ref={boxRef}\n key={`search-box-${uuid}`}\n onBlur={handleContainerBlur}\n >\n <div id={`search_box_input${uuid}`}>\n {tagInputSettings ? (\n <TagInput\n leftElement={leftElement}\n onAdd={tagInputSettings.onAdd}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onRemove={tagInputSettings.onRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={tagInputSettings.shouldAllowMultiple}\n shouldEnableKeyboardHighlighting={shouldEnableKeyboardHighlighting}\n shouldPreventEnter\n tags={tagInputSettings.tags}\n />\n ) : (\n <Input\n /* eslint-disable-next-line react/jsx-props-no-spreading */\n {...inputProps}\n isInvalid={isInvalid}\n leftElement={leftElement}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={inputRef}\n rightElement={rightElement}\n shouldEnableKeyboardHighlighting={\n inputProps?.shouldEnableKeyboardHighlighting ??\n shouldEnableKeyboardHighlighting\n }\n value={value}\n />\n )}\n </div>\n {boxRef.current && (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={shouldShowDropdown}\n >\n <SearchBoxBody\n filterButtons={filterButtons}\n height={height}\n maxHeight={maxHeight}\n shouldShow={shouldShowDropdown}\n key={`search-box-body-${uuid}`}\n onGroupSelect={handleFilterButtonsGroupSelect}\n ref={contentRef}\n selectedGroups={groups}\n shouldHideFilterButtons={shouldHideFilterButtons}\n >\n {content}\n </SearchBoxBody>\n </DropdownBodyWrapper>\n )}\n </StyledSearchBox>\n ),\n [\n container,\n content,\n dropdownDirection,\n filterButtons,\n groups,\n handleBlur,\n handleChange,\n handleClose,\n handleDropdownOutsideClick,\n handleFocus,\n handleKeyDown,\n height,\n inputProps,\n isInvalid,\n leftElement,\n maxHeight,\n onKeyDown,\n placeholder,\n rightElement,\n shouldHideFilterButtons,\n shouldShowDropdown,\n shouldEnableKeyboardHighlighting,\n tagInputSettings,\n uuid,\n value,\n ],\n );\n },\n);\n\nSearchBox.displayName = 'SearchBox';\n\nexport default SearchBox;\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
1
2
  import { useDevice } from 'chayns-api';
2
3
  import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
3
4
  import { useTheme } from 'styled-components';
@@ -46,6 +47,7 @@ const SearchBox = /*#__PURE__*/forwardRef(({
46
47
  container,
47
48
  customFilter,
48
49
  dropdownDirection,
50
+ inputProps,
49
51
  isInvalid = false,
50
52
  leftIcons,
51
53
  lists,
@@ -71,7 +73,14 @@ const SearchBox = /*#__PURE__*/forwardRef(({
71
73
  }, ref) => {
72
74
  const [matchingListsItems, setMatchingListsItems] = useState(lists);
73
75
  const [selectedImage, setSelectedImage] = useState();
74
- const [value, setValue] = useState(typeof presetValue === 'string' && presetValue !== '' ? presetValue : '');
76
+ const [internalValue, setInternalValue] = useState(typeof presetValue === 'string' && presetValue !== '' ? presetValue : '');
77
+ const inputValue = inputProps?.value;
78
+ const value = inputValue ?? internalValue;
79
+ const setValue = useCallback(nextValue => {
80
+ if (typeof inputValue !== 'string') {
81
+ setInternalValue(nextValue);
82
+ }
83
+ }, [inputValue]);
75
84
  const [height, setHeight] = useState(0);
76
85
  const [focusedIndex, setFocusedIndex] = useState(null);
77
86
  const [hasMultipleGroups, setHasMultipleGroups] = useState(lists.length > 1);
@@ -249,8 +258,11 @@ const SearchBox = /*#__PURE__*/forwardRef(({
249
258
  * This function handles the focus event of the input and opens the dropdown if the input
250
259
  * should show content on an empty input
251
260
  */
252
- const handleFocus = useCallback(() => {
261
+ const handleFocus = useCallback(event => {
253
262
  hasFocusRef.current = true;
263
+ if (typeof inputProps?.onFocus === 'function') {
264
+ inputProps.onFocus(event);
265
+ }
254
266
  if (shouldShowContentOnEmptyInput) {
255
267
  const newMatchingItems = [];
256
268
  activeList.forEach(({
@@ -293,7 +305,15 @@ const SearchBox = /*#__PURE__*/forwardRef(({
293
305
  handleOpen();
294
306
  }
295
307
  }
296
- }, [shouldShowContentOnEmptyInput, activeList, shouldAddInputToList, hintText, dropdownSearchString, customFilter, shouldUseCustomFilterOnly, handleOpen]);
308
+ }, [shouldShowContentOnEmptyInput, activeList, shouldAddInputToList, hintText, dropdownSearchString, customFilter, shouldUseCustomFilterOnly, handleOpen, inputProps]);
309
+ const handleKeyDown = useCallback(event => {
310
+ if (typeof onKeyDown === 'function') {
311
+ onKeyDown(event);
312
+ }
313
+ if (typeof inputProps?.onKeyDown === 'function') {
314
+ inputProps.onKeyDown(event);
315
+ }
316
+ }, [inputProps, onKeyDown]);
297
317
 
298
318
  /**
299
319
  * This function filters the lists by input
@@ -403,7 +423,10 @@ const SearchBox = /*#__PURE__*/forwardRef(({
403
423
  if (typeof onChange === 'function') {
404
424
  onChange(event);
405
425
  }
406
- }, [activeList, customFilter, handleOpen, onChange, shouldAddInputToList, shouldShowContentOnEmptyInput, shouldUseCustomFilterOnly]);
426
+ if (typeof inputProps?.onChange === 'function') {
427
+ inputProps.onChange(event);
428
+ }
429
+ }, [activeList, customFilter, handleOpen, inputProps, onChange, shouldAddInputToList, shouldShowContentOnEmptyInput, shouldUseCustomFilterOnly]);
407
430
 
408
431
  /**
409
432
  * This function handles the blur event of the input
@@ -413,7 +436,10 @@ const SearchBox = /*#__PURE__*/forwardRef(({
413
436
  if (typeof onBlur === 'function') {
414
437
  onBlur(event);
415
438
  }
416
- }, [onBlur]);
439
+ if (typeof inputProps?.onBlur === 'function') {
440
+ inputProps.onBlur(event);
441
+ }
442
+ }, [inputProps, onBlur]);
417
443
  const handleDropdownOutsideClick = useCallback(() => {
418
444
  tagInputRef.current?.blur();
419
445
  return hasFocusRef.current && isTouch;
@@ -575,7 +601,7 @@ const SearchBox = /*#__PURE__*/forwardRef(({
575
601
  }, []);
576
602
  useImperativeHandle(ref, () => ({
577
603
  clear: () => setValue('')
578
- }), []);
604
+ }), [setValue]);
579
605
  useEffect(() => {
580
606
  document.addEventListener('keydown', handleKeyPress);
581
607
  return () => {
@@ -590,7 +616,7 @@ const SearchBox = /*#__PURE__*/forwardRef(({
590
616
  if (presetValue) {
591
617
  setValue(presetValue);
592
618
  }
593
- }, [presetValue]);
619
+ }, [presetValue, setValue]);
594
620
  const shouldShowDropdown = shouldShowBody && (matchingListsItems.length !== 0 || !!hintText) && (value.trim() !== '' || shouldShowContentOnEmptyInput);
595
621
  return useMemo(() => /*#__PURE__*/React.createElement(StyledSearchBox, {
596
622
  ref: boxRef,
@@ -611,19 +637,20 @@ const SearchBox = /*#__PURE__*/forwardRef(({
611
637
  shouldEnableKeyboardHighlighting: shouldEnableKeyboardHighlighting,
612
638
  shouldPreventEnter: true,
613
639
  tags: tagInputSettings.tags
614
- }) : /*#__PURE__*/React.createElement(Input, {
640
+ }) : /*#__PURE__*/React.createElement(Input
641
+ /* eslint-disable-next-line react/jsx-props-no-spreading */, _extends({}, inputProps, {
615
642
  isInvalid: isInvalid,
616
643
  leftElement: leftElement,
617
644
  onBlur: handleBlur,
618
645
  onChange: handleChange,
619
646
  onFocus: handleFocus,
620
- onKeyDown: onKeyDown,
647
+ onKeyDown: handleKeyDown,
621
648
  placeholder: placeholder,
622
649
  ref: inputRef,
623
650
  rightElement: rightElement,
624
- shouldEnableKeyboardHighlighting: shouldEnableKeyboardHighlighting,
651
+ shouldEnableKeyboardHighlighting: inputProps?.shouldEnableKeyboardHighlighting ?? shouldEnableKeyboardHighlighting,
625
652
  value: value
626
- })), boxRef.current && /*#__PURE__*/React.createElement(DropdownBodyWrapper, {
653
+ }))), boxRef.current && /*#__PURE__*/React.createElement(DropdownBodyWrapper, {
627
654
  anchorElement: boxRef.current,
628
655
  container: container,
629
656
  direction: dropdownDirection,
@@ -640,7 +667,7 @@ const SearchBox = /*#__PURE__*/forwardRef(({
640
667
  ref: contentRef,
641
668
  selectedGroups: groups,
642
669
  shouldHideFilterButtons: shouldHideFilterButtons
643
- }, content))), [container, content, dropdownDirection, filterButtons, groups, handleBlur, handleChange, handleClose, handleDropdownOutsideClick, handleFocus, height, isInvalid, leftElement, maxHeight, onKeyDown, placeholder, rightElement, shouldHideFilterButtons, shouldShowDropdown, shouldEnableKeyboardHighlighting, tagInputSettings, uuid, value]);
670
+ }, content))), [container, content, dropdownDirection, filterButtons, groups, handleBlur, handleChange, handleClose, handleDropdownOutsideClick, handleFocus, handleKeyDown, height, inputProps, isInvalid, leftElement, maxHeight, onKeyDown, placeholder, rightElement, shouldHideFilterButtons, shouldShowDropdown, shouldEnableKeyboardHighlighting, tagInputSettings, uuid, value]);
644
671
  });
645
672
  SearchBox.displayName = 'SearchBox';
646
673
  export default SearchBox;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchBox.js","names":["useDevice","React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","useTheme","calculateContentHeight","searchList","sortSearchBoxItems","Icon","Input","GroupName","SearchBoxBody","SearchBoxItem","StyledSearchBoxItemImage","StyledSearchBox","StyledSearchBoxHintText","StyledSearchBoxIcon","StyledSearchBoxLeftWrapper","useUuid","DropdownBodyWrapper","TagInput","filterSearchBoxItems","customFilter","items","searchString","shouldUseCustomFilterOnly","filteredItems","filter","getDropdownSearchString","selectedId","shouldKeepSelectedItemPosition","value","SearchBox","container","dropdownDirection","isInvalid","leftIcons","lists","maxHeight","onBlur","onChange","onKeyDown","onSelect","placeholder","presetValue","hintText","shouldAddInputToList","shouldHideFilterButtons","shouldShowContentOnEmptyInput","shouldShowSmallItems","shouldShowRoundImage","shouldShowToggleIcon","tagInputSettings","shouldEnableKeyboardHighlighting","ref","matchingListsItems","setMatchingListsItems","selectedImage","setSelectedImage","setValue","height","setHeight","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","length","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","shouldShowBody","setShouldShowBody","uuid","boxRef","contentRef","inputRef","tagInputRef","hasFocusRef","isAnimatingRef","shouldShowPresetValue","theme","dropdownSearchString","isTouch","filterButtons","forEach","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","newList","undefined","filteredMatchingListItems","map","item","handleOpen","handleClose","handleFilterButtonsGroupSelect","keys","textArray","selectedItem","find","imageUrl","createElement","src","$shouldShowRoundImage","current","handleFocus","toLowerCase","handleClick","rightElement","onClick","icons","color","leftElement","handleChange","event","filteredLists","target","handleBlur","handleDropdownOutsideClick","blur","handleContainerBlur","nextFocusedElement","relatedTarget","currentContainer","currentTarget","contains","handleSelect","newItem","replace","resetValue","content","index","key","name","listIndex","tabIndex","handleKeyDown","e","children","childrenArray","Array","from","newChildren","child","startsWith","filteredChildren","dataset","isgroupname","preventDefault","newIndex","prevElement","newElement","stopPropagation","element","textContent","attributes","nodeValue","newId","document","addEventListener","removeEventListener","handleKeyPress","keyCode","clear","shouldShowDropdown","trim","onAdd","onFocus","onRemove","shouldAllowMultiple","shouldPreventEnter","tags","anchorElement","direction","onClose","onOutsideClick","shouldShow","onGroupSelect","selectedGroups","displayName"],"sources":["../../../../src/components/search-box/SearchBox.tsx"],"sourcesContent":["import { useDevice } from 'chayns-api';\nimport React, {\n ChangeEvent,\n ChangeEventHandler,\n FC,\n FocusEvent,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTheme } from 'styled-components';\nimport type { IFilterButtonItem } from '../../types/filterButtons';\nimport type { ISearchBoxItem, ISearchBoxItems } from '../../types/searchBox';\nimport { calculateContentHeight } from '../../utils/calculate';\nimport { searchList, sortSearchBoxItems } from '../../utils/searchBox';\nimport type { Theme } from '../color-scheme-provider/ColorSchemeProvider';\nimport Icon from '../icon/Icon';\nimport Input from '../input/Input';\nimport GroupName from './group-name/GroupName';\nimport SearchBoxBody from './search-box-body/SearchBoxBody';\nimport SearchBoxItem from './search-box-item/SearchBoxItem';\nimport { StyledSearchBoxItemImage } from './search-box-item/SearchBoxItem.styles';\nimport {\n StyledSearchBox,\n StyledSearchBoxHintText,\n StyledSearchBoxIcon,\n StyledSearchBoxLeftWrapper,\n} from './SearchBox.styles';\nimport { useUuid } from '../../hooks/uuid';\nimport DropdownBodyWrapper from '../dropdown-body-wrapper/DropdownBodyWrapper';\nimport TagInput, { TagInputProps, TagInputRef } from '../tag-input/TagInput';\nimport type { DropdownDirection } from '../../types/dropdown';\n\nexport interface SearchBoxRef {\n clear: VoidFunction;\n}\n\nexport interface TagInputSettings {\n onAdd?: TagInputProps['onAdd'];\n onRemove?: TagInputProps['onRemove'];\n shouldAllowMultiple?: TagInputProps['shouldAllowMultiple'];\n tags?: TagInputProps['tags'];\n}\n\nconst filterSearchBoxItems = ({\n customFilter,\n items,\n searchString,\n shouldUseCustomFilterOnly,\n}: {\n customFilter?: (item: ISearchBoxItem) => boolean;\n items: ISearchBoxItem[];\n searchString: string;\n shouldUseCustomFilterOnly?: boolean;\n}) => {\n if (typeof customFilter !== 'function') {\n return searchList({ items, searchString });\n }\n\n if (shouldUseCustomFilterOnly) {\n const filteredItems = items.filter(customFilter);\n\n return sortSearchBoxItems({ items: filteredItems, searchString });\n }\n\n return searchList({ items, searchString }).filter(customFilter);\n};\n\nconst getDropdownSearchString = ({\n selectedId,\n shouldKeepSelectedItemPosition,\n value,\n}: {\n selectedId?: string;\n shouldKeepSelectedItemPosition?: boolean;\n value: string;\n}) => (shouldKeepSelectedItemPosition && selectedId ? '' : value);\n\nexport type SearchBoxProps = {\n /**\n * The element where the content of the `ComboBox` should be rendered via React Portal.\n */\n container?: Element;\n /**\n * An optional callback function to filter the elements to be displayed\n */\n customFilter?: (item: ISearchBoxItem) => boolean;\n /**\n * If true, the custom filter replaces the built-in text search instead of narrowing its results.\n */\n shouldUseCustomFilterOnly?: boolean;\n /**\n * The direction in which the dropdown should be displayed. By default, it is displayed below the input.\n */\n dropdownDirection?: DropdownDirection;\n /**\n * If true, the input field is marked as invalid\n */\n isInvalid?: boolean;\n /**\n * An optional icon that is displayed inside the left side of the input.\n */\n leftIcons?: string[];\n /**\n * List of groups with items that can be searched. It is possible to give only one list; if multiple lists are provided, the 'group name' parameter becomes mandatory.\n */\n lists: ISearchBoxItems[];\n /**\n * The maximum height of the dropdown body in pixels.\n */\n maxHeight?: number;\n /**\n * Function to be executed when the input lost focus.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when the input is changed.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /**\n * Function that is executed when a letter is pressed\n */\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when an item is selected.\n */\n onSelect?: (item: ISearchBoxItem) => void;\n /**\n * The placeholder that should be displayed.\n */\n placeholder?: string;\n /**\n * Set an input for the search box - it is not an item of a list, just a string.\n */\n presetValue?: string;\n /**\n * Control the selected item. If you use this prop, make sure to update it when the user selects an item.\n */\n selectedId?: string;\n /**\n * If true, the selected item keeps its original position in the dropdown list.\n */\n shouldKeepSelectedItemPosition?: boolean;\n /**\n * If true, the value in the Input is displayed in the list.\n */\n shouldAddInputToList: boolean;\n /**\n * If true, the filter buttons are hidden.\n */\n shouldHideFilterButtons?: boolean;\n /**\n * Whether the full list of items should be displayed if the input is empty.\n */\n shouldShowContentOnEmptyInput?: boolean;\n /**\n * If true, the dropdown items are displayed more compactly.\n */\n shouldShowSmallItems?: boolean;\n /**\n * If true, the images of the items are displayed in a round shape.\n */\n shouldShowRoundImage?: boolean;\n /**\n * Whether the icon to open and close the list should be displayed.\n */\n shouldShowToggleIcon?: boolean;\n /**\n * Settings for the TagInput.\n */\n tagInputSettings?: TagInputSettings;\n /**\n * Enables keyboard-only focus highlighting.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n /**\n * A text that should be displayed if no results are found.\n */\n hintText?: string;\n};\n\nconst SearchBox: FC<SearchBoxProps> = forwardRef<SearchBoxRef, SearchBoxProps>(\n (\n {\n container,\n customFilter,\n dropdownDirection,\n isInvalid = false,\n leftIcons,\n lists,\n maxHeight = 300,\n onBlur,\n onChange,\n onKeyDown,\n onSelect,\n placeholder,\n presetValue,\n hintText,\n selectedId,\n shouldAddInputToList = true,\n shouldKeepSelectedItemPosition = false,\n shouldUseCustomFilterOnly = false,\n shouldHideFilterButtons = false,\n shouldShowContentOnEmptyInput = true,\n shouldShowSmallItems = false,\n shouldShowRoundImage,\n shouldShowToggleIcon = false,\n tagInputSettings,\n shouldEnableKeyboardHighlighting,\n },\n ref,\n ) => {\n const [matchingListsItems, setMatchingListsItems] = useState<ISearchBoxItems[]>(lists);\n const [selectedImage, setSelectedImage] = useState<ReactElement>();\n const [value, setValue] = useState(\n typeof presetValue === 'string' && presetValue !== '' ? presetValue : '',\n );\n const [height, setHeight] = useState<number>(0);\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n const [hasMultipleGroups, setHasMultipleGroups] = useState<boolean>(lists.length > 1);\n const [filteredChildrenArray, setFilteredChildrenArray] = useState<Element[]>();\n const [inputToListValue, setInputToListValue] = useState<string>('');\n const [groups, setGroups] = useState<string[]>(['all']);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const uuid = useUuid();\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const tagInputRef = useRef<TagInputRef>(null);\n\n const hasFocusRef = useRef<boolean>(false);\n const isAnimatingRef = useRef<boolean>(false);\n const shouldShowPresetValue = useRef<boolean>(\n typeof presetValue === 'string' && presetValue !== '',\n );\n\n const theme = useTheme() as Theme;\n const dropdownSearchString = getDropdownSearchString({\n selectedId,\n shouldKeepSelectedItemPosition,\n value,\n });\n\n const { isTouch } = useDevice();\n\n /**\n * Checks if there are multiple groups in the lists\n */\n useEffect(() => {\n setHasMultipleGroups(lists.length > 1);\n }, [lists]);\n\n const filterButtons = useMemo(() => {\n const items: IFilterButtonItem[] = [];\n\n if (lists.length <= 1) {\n return items;\n }\n\n lists.forEach(({ groupName }) => {\n if (groupName) {\n items.push({\n id: groupName,\n text: groupName,\n });\n }\n });\n\n return items;\n }, [lists]);\n\n /**\n * Filters the lists by the FilterButtons\n */\n const activeList = useMemo(() => {\n let newLists: ISearchBoxItems[] = [];\n\n if (groups[0] === 'all') {\n newLists = lists;\n } else {\n lists.forEach((list) => {\n if (list.groupName && groups.includes(list.groupName)) {\n newLists.push(list);\n }\n });\n }\n\n const newMatchingItems: ISearchBoxItems[] = [];\n\n newLists.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (typeof customFilter === 'function' && shouldUseCustomFilterOnly) {\n return true;\n }\n\n return !(newMatchingItems.length === 1 && item.text === dropdownSearchString);\n }),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n return newLists;\n }, [\n groups,\n lists,\n customFilter,\n dropdownSearchString,\n shouldAddInputToList,\n shouldUseCustomFilterOnly,\n ]);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleFilterButtonsGroupSelect = (keys: string[]) => {\n setGroups(keys.length === 0 ? ['all'] : keys);\n };\n\n /**\n * This hook calculates the height\n */\n useEffect(() => {\n const textArray: string[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n list.forEach(({ text }) => textArray.push(text));\n if (!groupName) {\n return;\n }\n textArray.push(groupName);\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n textArray.push(inputToListValue);\n }\n\n setHeight(calculateContentHeight(textArray));\n }, [inputToListValue, activeList, placeholder, shouldAddInputToList]);\n\n useEffect(() => {\n if (selectedId) {\n activeList.forEach(({ list }) => {\n const selectedItem = list.find(({ id }) => id === selectedId);\n if (selectedItem) {\n setValue(selectedItem.text);\n\n if (selectedItem.imageUrl) {\n setSelectedImage(\n <StyledSearchBoxItemImage\n src={selectedItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />,\n );\n }\n }\n });\n }\n }, [activeList, selectedId, shouldShowRoundImage]);\n\n /**\n * This hook resets the value if the selectedId changes to undefined. This is an own useEffect because the value\n * should not be reset if the list changes and the selectedId is still undefined.\n */\n useEffect(() => {\n if (!selectedId && !shouldShowPresetValue.current) {\n setValue('');\n }\n }, [selectedId]);\n\n useEffect(() => {\n isAnimatingRef.current = shouldShowBody;\n }, [shouldShowBody]);\n\n useEffect(() => {\n if (\n (matchingListsItems.length !== 0 || hintText) &&\n !isAnimatingRef.current &&\n hasFocusRef.current\n ) {\n handleOpen();\n }\n }, [handleOpen, hintText, matchingListsItems.length]);\n\n /**\n * This function handles the focus event of the input and opens the dropdown if the input\n * should show content on an empty input\n */\n const handleFocus = useCallback(() => {\n hasFocusRef.current = true;\n\n if (shouldShowContentOnEmptyInput) {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (typeof customFilter === 'function' && shouldUseCustomFilterOnly) {\n return true;\n }\n\n return !(\n newMatchingItems.length === 1 && item.text === dropdownSearchString\n );\n }),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n if (filteredMatchingListItems.length !== 0 || hintText) {\n handleOpen();\n }\n }\n }, [\n shouldShowContentOnEmptyInput,\n activeList,\n shouldAddInputToList,\n hintText,\n dropdownSearchString,\n customFilter,\n shouldUseCustomFilterOnly,\n handleOpen,\n ]);\n\n /**\n * This function filters the lists by input\n */\n\n useEffect(() => {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n if (shouldAddInputToList && inputToListValue !== '') {\n newMatchingItems.forEach(({ list }) => {\n list.forEach(({ text }) => {\n if (text.toLowerCase() === inputToListValue.toLowerCase()) {\n setInputToListValue('');\n }\n });\n });\n }\n }, [\n inputToListValue,\n activeList,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n dropdownSearchString,\n customFilter,\n shouldUseCustomFilterOnly,\n ]);\n\n const handleClick = useCallback(() => {\n if (shouldShowBody) {\n handleClose();\n } else {\n handleOpen();\n }\n }, [handleClose, handleOpen, shouldShowBody]);\n\n const rightElement = useMemo(() => {\n if (!shouldShowToggleIcon) {\n return undefined;\n }\n\n return (\n <StyledSearchBoxIcon onClick={handleClick}>\n <Icon icons={['fa fa-chevron-down']} color={theme['006'] as string} />\n </StyledSearchBoxIcon>\n );\n }, [handleClick, shouldShowToggleIcon, theme]);\n\n const leftElement = useMemo(\n () =>\n (leftIcons || selectedImage) && (\n <StyledSearchBoxLeftWrapper>\n {leftIcons && <Icon icons={leftIcons} />}\n {selectedImage && selectedImage}\n </StyledSearchBoxLeftWrapper>\n ),\n [leftIcons, selectedImage],\n );\n\n /**\n * This function handles changes of the input\n */\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const filteredLists: ISearchBoxItems[] = [];\n shouldShowPresetValue.current = false;\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: event.target.value,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n filteredLists.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (filteredLists.length === 0 && shouldAddInputToList) {\n filteredLists.push({\n groupName: undefined,\n list: [],\n });\n }\n\n setSelectedImage(undefined);\n\n if (!shouldShowContentOnEmptyInput && !event.target.value) {\n setMatchingListsItems([]);\n } else {\n setMatchingListsItems(filteredLists);\n }\n\n if (filteredLists.length !== 0) {\n handleOpen();\n }\n\n setValue(event.target.value);\n setInputToListValue(event.target.value);\n\n if (typeof onChange === 'function') {\n onChange(event);\n }\n },\n [\n activeList,\n customFilter,\n handleOpen,\n onChange,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n shouldUseCustomFilterOnly,\n ],\n );\n\n /**\n * This function handles the blur event of the input\n */\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n hasFocusRef.current = false;\n\n if (typeof onBlur === 'function') {\n onBlur(event);\n }\n },\n [onBlur],\n );\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return hasFocusRef.current && isTouch;\n }, [isTouch]);\n\n const handleContainerBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n const nextFocusedElement = event.relatedTarget as Node | null;\n const currentContainer = event.currentTarget as HTMLElement;\n\n // Check if focus is moving outside the SearchBox container\n // Also check the dropdown content (contentRef) since it's rendered in a portal\n if (\n !nextFocusedElement ||\n (!currentContainer.contains(nextFocusedElement) &&\n !contentRef.current?.contains(nextFocusedElement))\n ) {\n handleClose();\n }\n },\n [handleClose],\n );\n\n /**\n * This function handles the item selection\n */\n const handleSelect = useCallback(\n (item: ISearchBoxItem) => {\n const newItem = {\n ...item,\n text: item.text.replace('<b>', '').replace('</b>', '').replace('</b', ''),\n };\n\n if (tagInputSettings) {\n setValue('');\n setInputToListValue('');\n tagInputRef.current?.resetValue();\n } else {\n setValue(newItem.text);\n }\n\n handleClose();\n\n setSelectedImage(\n newItem.imageUrl ? (\n <StyledSearchBoxItemImage\n src={newItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />\n ) : undefined,\n );\n\n setMatchingListsItems([]);\n\n if (typeof onSelect === 'function') {\n onSelect(newItem);\n }\n },\n [handleClose, onSelect, shouldShowRoundImage, tagInputSettings],\n );\n\n const content = useMemo(() => {\n if (hintText && matchingListsItems.length === 0) {\n return (\n <StyledSearchBoxHintText>\n {hintText.replace('##value##', value)}\n </StyledSearchBoxHintText>\n );\n }\n\n const items: ReactElement[] = [];\n\n matchingListsItems.forEach(({ groupName, list }, index) => {\n if (hasMultipleGroups) {\n if (list.length <= 0) {\n return;\n }\n\n if (index !== 0) {\n items.push(<GroupName key={groupName} name={groupName ?? ''} />);\n }\n }\n\n list.forEach(({ id, text, imageUrl }, listIndex) => {\n items.push(\n <SearchBoxItem\n key={`${id}_${groupName ?? ''}`}\n id={id}\n text={text}\n imageUrl={imageUrl}\n shouldShowSmallItems={shouldShowSmallItems}\n shouldShowRoundImage={shouldShowRoundImage}\n onSelect={handleSelect}\n groupName={groupName}\n tabIndex={index === 0 && listIndex === 0 ? 0 : -1}\n />,\n );\n });\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n items.push(\n <SearchBoxItem\n id=\"input-value\"\n onSelect={handleSelect}\n shouldShowSmallItems={shouldShowSmallItems}\n text={`<b>${inputToListValue}</b`}\n tabIndex={items.length === 0 ? 0 : -1}\n />,\n );\n }\n\n return items;\n }, [\n hintText,\n matchingListsItems,\n shouldAddInputToList,\n inputToListValue,\n value,\n hasMultipleGroups,\n shouldShowSmallItems,\n shouldShowRoundImage,\n handleSelect,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!shouldShowBody || matchingListsItems.length === 0) {\n return;\n }\n\n const children = contentRef.current?.children;\n\n if (!children) {\n return;\n }\n\n const childrenArray = Array.from(children);\n\n const newChildren = childrenArray.find((child) =>\n child.id.startsWith('searchBoxContent__'),\n )?.children;\n\n if (!(newChildren && newChildren.length > 0)) {\n return;\n }\n\n const filteredChildren = Array.from(newChildren).filter(\n (child) => (child as HTMLElement).dataset.isgroupname !== 'true',\n );\n\n setFilteredChildrenArray(filteredChildren);\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n\n if (newChildren && newChildren.length > 0) {\n const newIndex =\n focusedIndex !== null\n ? (focusedIndex +\n (e.key === 'ArrowUp' ? -1 : 1) +\n filteredChildren.length) %\n filteredChildren.length\n : 0;\n\n if (focusedIndex !== null) {\n const prevElement = filteredChildren[focusedIndex] as HTMLDivElement;\n prevElement.tabIndex = -1;\n }\n\n setFocusedIndex(newIndex);\n\n const newElement = filteredChildren[newIndex] as HTMLDivElement;\n\n newElement.tabIndex = 0;\n }\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n\n if (filteredChildren) {\n const element = filteredChildren[focusedIndex ?? 0];\n\n if (!element) {\n return;\n }\n\n const { id, textContent } = element;\n\n let imageUrl: string | undefined;\n\n // Just Ignore, it works\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (element.children[0]?.attributes.src) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n imageUrl = element.children[0]?.attributes.src.nodeValue as string;\n }\n\n const newId = id.replace('search-box-item__', '');\n\n handleSelect({\n id: newId === 'input-value' ? textContent : newId,\n text: textContent ?? '',\n imageUrl,\n });\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [\n filteredChildrenArray,\n focusedIndex,\n handleSelect,\n matchingListsItems.length,\n shouldShowBody,\n ]);\n\n const handleKeyPress = useCallback((event: KeyboardEvent) => {\n if (event.keyCode === 27) {\n setMatchingListsItems([]);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => setValue(''),\n }),\n [],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyPress);\n\n return () => {\n document.addEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n /**\n * Update the value if preset value changes\n */\n useEffect(() => {\n if (presetValue) {\n setValue(presetValue);\n }\n }, [presetValue]);\n\n const shouldShowDropdown =\n shouldShowBody &&\n (matchingListsItems.length !== 0 || !!hintText) &&\n (value.trim() !== '' || shouldShowContentOnEmptyInput);\n\n return useMemo(\n () => (\n <StyledSearchBox\n ref={boxRef}\n key={`search-box-${uuid}`}\n onBlur={handleContainerBlur}\n >\n <div id={`search_box_input${uuid}`}>\n {tagInputSettings ? (\n <TagInput\n leftElement={leftElement}\n onAdd={tagInputSettings.onAdd}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onRemove={tagInputSettings.onRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={tagInputSettings.shouldAllowMultiple}\n shouldEnableKeyboardHighlighting={shouldEnableKeyboardHighlighting}\n shouldPreventEnter\n tags={tagInputSettings.tags}\n />\n ) : (\n <Input\n isInvalid={isInvalid}\n leftElement={leftElement}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n ref={inputRef}\n rightElement={rightElement}\n shouldEnableKeyboardHighlighting={shouldEnableKeyboardHighlighting}\n value={value}\n />\n )}\n </div>\n {boxRef.current && (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={shouldShowDropdown}\n >\n <SearchBoxBody\n filterButtons={filterButtons}\n height={height}\n maxHeight={maxHeight}\n shouldShow={shouldShowDropdown}\n key={`search-box-body-${uuid}`}\n onGroupSelect={handleFilterButtonsGroupSelect}\n ref={contentRef}\n selectedGroups={groups}\n shouldHideFilterButtons={shouldHideFilterButtons}\n >\n {content}\n </SearchBoxBody>\n </DropdownBodyWrapper>\n )}\n </StyledSearchBox>\n ),\n [\n container,\n content,\n dropdownDirection,\n filterButtons,\n groups,\n handleBlur,\n handleChange,\n handleClose,\n handleDropdownOutsideClick,\n handleFocus,\n height,\n isInvalid,\n leftElement,\n maxHeight,\n onKeyDown,\n placeholder,\n rightElement,\n shouldHideFilterButtons,\n shouldShowDropdown,\n shouldEnableKeyboardHighlighting,\n tagInputSettings,\n uuid,\n value,\n ],\n );\n },\n);\n\nSearchBox.displayName = 'SearchBox';\n\nexport default SearchBox;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SearchBox.js","names":["useDevice","React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","useTheme","calculateContentHeight","searchList","sortSearchBoxItems","Icon","Input","GroupName","SearchBoxBody","SearchBoxItem","StyledSearchBoxItemImage","StyledSearchBox","StyledSearchBoxHintText","StyledSearchBoxIcon","StyledSearchBoxLeftWrapper","useUuid","DropdownBodyWrapper","TagInput","filterSearchBoxItems","customFilter","items","searchString","shouldUseCustomFilterOnly","filteredItems","filter","getDropdownSearchString","selectedId","shouldKeepSelectedItemPosition","value","SearchBox","container","dropdownDirection","inputProps","isInvalid","leftIcons","lists","maxHeight","onBlur","onChange","onKeyDown","onSelect","placeholder","presetValue","hintText","shouldAddInputToList","shouldHideFilterButtons","shouldShowContentOnEmptyInput","shouldShowSmallItems","shouldShowRoundImage","shouldShowToggleIcon","tagInputSettings","shouldEnableKeyboardHighlighting","ref","matchingListsItems","setMatchingListsItems","selectedImage","setSelectedImage","internalValue","setInternalValue","inputValue","setValue","nextValue","height","setHeight","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","length","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","shouldShowBody","setShouldShowBody","uuid","boxRef","contentRef","inputRef","tagInputRef","hasFocusRef","isAnimatingRef","shouldShowPresetValue","theme","dropdownSearchString","isTouch","filterButtons","forEach","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","newList","undefined","filteredMatchingListItems","map","item","handleOpen","handleClose","handleFilterButtonsGroupSelect","keys","textArray","selectedItem","find","imageUrl","createElement","src","$shouldShowRoundImage","current","handleFocus","event","onFocus","handleKeyDown","toLowerCase","handleClick","rightElement","onClick","icons","color","leftElement","handleChange","filteredLists","target","handleBlur","handleDropdownOutsideClick","blur","handleContainerBlur","nextFocusedElement","relatedTarget","currentContainer","currentTarget","contains","handleSelect","newItem","replace","resetValue","content","index","key","name","listIndex","tabIndex","e","children","childrenArray","Array","from","newChildren","child","startsWith","filteredChildren","dataset","isgroupname","preventDefault","newIndex","prevElement","newElement","stopPropagation","element","textContent","attributes","nodeValue","newId","document","addEventListener","removeEventListener","handleKeyPress","keyCode","clear","shouldShowDropdown","trim","onAdd","onRemove","shouldAllowMultiple","shouldPreventEnter","tags","_extends","anchorElement","direction","onClose","onOutsideClick","shouldShow","onGroupSelect","selectedGroups","displayName"],"sources":["../../../../src/components/search-box/SearchBox.tsx"],"sourcesContent":["import { useDevice } from 'chayns-api';\nimport React, {\n ChangeEvent,\n ChangeEventHandler,\n FC,\n FocusEvent,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTheme } from 'styled-components';\nimport type { IFilterButtonItem } from '../../types/filterButtons';\nimport type { ISearchBoxItem, ISearchBoxItems } from '../../types/searchBox';\nimport { calculateContentHeight } from '../../utils/calculate';\nimport { searchList, sortSearchBoxItems } from '../../utils/searchBox';\nimport type { Theme } from '../color-scheme-provider/ColorSchemeProvider';\nimport Icon from '../icon/Icon';\nimport Input, { type InputProps } from '../input/Input';\nimport GroupName from './group-name/GroupName';\nimport SearchBoxBody from './search-box-body/SearchBoxBody';\nimport SearchBoxItem from './search-box-item/SearchBoxItem';\nimport { StyledSearchBoxItemImage } from './search-box-item/SearchBoxItem.styles';\nimport {\n StyledSearchBox,\n StyledSearchBoxHintText,\n StyledSearchBoxIcon,\n StyledSearchBoxLeftWrapper,\n} from './SearchBox.styles';\nimport { useUuid } from '../../hooks/uuid';\nimport DropdownBodyWrapper from '../dropdown-body-wrapper/DropdownBodyWrapper';\nimport TagInput, { TagInputProps, TagInputRef } from '../tag-input/TagInput';\nimport type { DropdownDirection } from '../../types/dropdown';\n\nexport interface SearchBoxRef {\n clear: VoidFunction;\n}\n\nexport interface TagInputSettings {\n onAdd?: TagInputProps['onAdd'];\n onRemove?: TagInputProps['onRemove'];\n shouldAllowMultiple?: TagInputProps['shouldAllowMultiple'];\n tags?: TagInputProps['tags'];\n}\n\nconst filterSearchBoxItems = ({\n customFilter,\n items,\n searchString,\n shouldUseCustomFilterOnly,\n}: {\n customFilter?: (item: ISearchBoxItem) => boolean;\n items: ISearchBoxItem[];\n searchString: string;\n shouldUseCustomFilterOnly?: boolean;\n}) => {\n if (typeof customFilter !== 'function') {\n return searchList({ items, searchString });\n }\n\n if (shouldUseCustomFilterOnly) {\n const filteredItems = items.filter(customFilter);\n\n return sortSearchBoxItems({ items: filteredItems, searchString });\n }\n\n return searchList({ items, searchString }).filter(customFilter);\n};\n\nconst getDropdownSearchString = ({\n selectedId,\n shouldKeepSelectedItemPosition,\n value,\n}: {\n selectedId?: string;\n shouldKeepSelectedItemPosition?: boolean;\n value: string;\n}) => (shouldKeepSelectedItemPosition && selectedId ? '' : value);\n\nexport type SearchBoxProps = {\n /**\n * The element where the content of the `ComboBox` should be rendered via React Portal.\n */\n container?: Element;\n /**\n * An optional callback function to filter the elements to be displayed\n */\n customFilter?: (item: ISearchBoxItem) => boolean;\n /**\n * If true, the custom filter replaces the built-in text search instead of narrowing its results.\n */\n shouldUseCustomFilterOnly?: boolean;\n /**\n * The direction in which the dropdown should be displayed. By default, it is displayed below the input.\n */\n dropdownDirection?: DropdownDirection;\n /**\n * If true, the input field is marked as invalid\n */\n isInvalid?: boolean;\n /**\n * An optional icon that is displayed inside the left side of the input.\n */\n leftIcons?: string[];\n /**\n * Props that are passed to the underlying Input component.\n */\n inputProps?: InputProps;\n /**\n * List of groups with items that can be searched. It is possible to give only one list; if multiple lists are provided, the 'group name' parameter becomes mandatory.\n */\n lists: ISearchBoxItems[];\n /**\n * The maximum height of the dropdown body in pixels.\n */\n maxHeight?: number;\n /**\n * Function to be executed when the input lost focus.\n */\n onBlur?: FocusEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when the input is changed.\n */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /**\n * Function that is executed when a letter is pressed\n */\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\n /**\n * Function to be executed when an item is selected.\n */\n onSelect?: (item: ISearchBoxItem) => void;\n /**\n * The placeholder that should be displayed.\n */\n placeholder?: string;\n /**\n * Set an input for the search box - it is not an item of a list, just a string.\n */\n presetValue?: string;\n /**\n * Control the selected item. If you use this prop, make sure to update it when the user selects an item.\n */\n selectedId?: string;\n /**\n * If true, the selected item keeps its original position in the dropdown list.\n */\n shouldKeepSelectedItemPosition?: boolean;\n /**\n * If true, the value in the Input is displayed in the list.\n */\n shouldAddInputToList: boolean;\n /**\n * If true, the filter buttons are hidden.\n */\n shouldHideFilterButtons?: boolean;\n /**\n * Whether the full list of items should be displayed if the input is empty.\n */\n shouldShowContentOnEmptyInput?: boolean;\n /**\n * If true, the dropdown items are displayed more compactly.\n */\n shouldShowSmallItems?: boolean;\n /**\n * If true, the images of the items are displayed in a round shape.\n */\n shouldShowRoundImage?: boolean;\n /**\n * Whether the icon to open and close the list should be displayed.\n */\n shouldShowToggleIcon?: boolean;\n /**\n * Settings for the TagInput.\n */\n tagInputSettings?: TagInputSettings;\n /**\n * Enables keyboard-only focus highlighting.\n */\n shouldEnableKeyboardHighlighting?: boolean;\n /**\n * A text that should be displayed if no results are found.\n */\n hintText?: string;\n};\n\nconst SearchBox: FC<SearchBoxProps> = forwardRef<SearchBoxRef, SearchBoxProps>(\n (\n {\n container,\n customFilter,\n dropdownDirection,\n inputProps,\n isInvalid = false,\n leftIcons,\n lists,\n maxHeight = 300,\n onBlur,\n onChange,\n onKeyDown,\n onSelect,\n placeholder,\n presetValue,\n hintText,\n selectedId,\n shouldAddInputToList = true,\n shouldKeepSelectedItemPosition = false,\n shouldUseCustomFilterOnly = false,\n shouldHideFilterButtons = false,\n shouldShowContentOnEmptyInput = true,\n shouldShowSmallItems = false,\n shouldShowRoundImage,\n shouldShowToggleIcon = false,\n tagInputSettings,\n shouldEnableKeyboardHighlighting,\n },\n ref,\n ) => {\n const [matchingListsItems, setMatchingListsItems] = useState<ISearchBoxItems[]>(lists);\n const [selectedImage, setSelectedImage] = useState<ReactElement>();\n const [internalValue, setInternalValue] = useState(\n typeof presetValue === 'string' && presetValue !== '' ? presetValue : '',\n );\n const inputValue = inputProps?.value;\n const value = inputValue ?? internalValue;\n const setValue = useCallback(\n (nextValue: string) => {\n if (typeof inputValue !== 'string') {\n setInternalValue(nextValue);\n }\n },\n [inputValue],\n );\n const [height, setHeight] = useState<number>(0);\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n const [hasMultipleGroups, setHasMultipleGroups] = useState<boolean>(lists.length > 1);\n const [filteredChildrenArray, setFilteredChildrenArray] = useState<Element[]>();\n const [inputToListValue, setInputToListValue] = useState<string>('');\n const [groups, setGroups] = useState<string[]>(['all']);\n const [shouldShowBody, setShouldShowBody] = useState(false);\n\n const uuid = useUuid();\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const tagInputRef = useRef<TagInputRef>(null);\n\n const hasFocusRef = useRef<boolean>(false);\n const isAnimatingRef = useRef<boolean>(false);\n const shouldShowPresetValue = useRef<boolean>(\n typeof presetValue === 'string' && presetValue !== '',\n );\n\n const theme = useTheme() as Theme;\n const dropdownSearchString = getDropdownSearchString({\n selectedId,\n shouldKeepSelectedItemPosition,\n value,\n });\n\n const { isTouch } = useDevice();\n\n /**\n * Checks if there are multiple groups in the lists\n */\n useEffect(() => {\n setHasMultipleGroups(lists.length > 1);\n }, [lists]);\n\n const filterButtons = useMemo(() => {\n const items: IFilterButtonItem[] = [];\n\n if (lists.length <= 1) {\n return items;\n }\n\n lists.forEach(({ groupName }) => {\n if (groupName) {\n items.push({\n id: groupName,\n text: groupName,\n });\n }\n });\n\n return items;\n }, [lists]);\n\n /**\n * Filters the lists by the FilterButtons\n */\n const activeList = useMemo(() => {\n let newLists: ISearchBoxItems[] = [];\n\n if (groups[0] === 'all') {\n newLists = lists;\n } else {\n lists.forEach((list) => {\n if (list.groupName && groups.includes(list.groupName)) {\n newLists.push(list);\n }\n });\n }\n\n const newMatchingItems: ISearchBoxItems[] = [];\n\n newLists.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (typeof customFilter === 'function' && shouldUseCustomFilterOnly) {\n return true;\n }\n\n return !(newMatchingItems.length === 1 && item.text === dropdownSearchString);\n }),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n return newLists;\n }, [\n groups,\n lists,\n customFilter,\n dropdownSearchString,\n shouldAddInputToList,\n shouldUseCustomFilterOnly,\n ]);\n\n const handleOpen = useCallback(() => {\n setShouldShowBody(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setShouldShowBody(false);\n }, []);\n\n const handleFilterButtonsGroupSelect = (keys: string[]) => {\n setGroups(keys.length === 0 ? ['all'] : keys);\n };\n\n /**\n * This hook calculates the height\n */\n useEffect(() => {\n const textArray: string[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n list.forEach(({ text }) => textArray.push(text));\n if (!groupName) {\n return;\n }\n textArray.push(groupName);\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n textArray.push(inputToListValue);\n }\n\n setHeight(calculateContentHeight(textArray));\n }, [inputToListValue, activeList, placeholder, shouldAddInputToList]);\n\n useEffect(() => {\n if (selectedId) {\n activeList.forEach(({ list }) => {\n const selectedItem = list.find(({ id }) => id === selectedId);\n if (selectedItem) {\n setValue(selectedItem.text);\n\n if (selectedItem.imageUrl) {\n setSelectedImage(\n <StyledSearchBoxItemImage\n src={selectedItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />,\n );\n }\n }\n });\n }\n }, [activeList, selectedId, shouldShowRoundImage]);\n\n /**\n * This hook resets the value if the selectedId changes to undefined. This is an own useEffect because the value\n * should not be reset if the list changes and the selectedId is still undefined.\n */\n useEffect(() => {\n if (!selectedId && !shouldShowPresetValue.current) {\n setValue('');\n }\n }, [selectedId]);\n\n useEffect(() => {\n isAnimatingRef.current = shouldShowBody;\n }, [shouldShowBody]);\n\n useEffect(() => {\n if (\n (matchingListsItems.length !== 0 || hintText) &&\n !isAnimatingRef.current &&\n hasFocusRef.current\n ) {\n handleOpen();\n }\n }, [handleOpen, hintText, matchingListsItems.length]);\n\n /**\n * This function handles the focus event of the input and opens the dropdown if the input\n * should show content on an empty input\n */\n const handleFocus = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n hasFocusRef.current = true;\n\n if (typeof inputProps?.onFocus === 'function') {\n inputProps.onFocus(event);\n }\n\n if (shouldShowContentOnEmptyInput) {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n const filteredMatchingListItems = newMatchingItems.map(\n ({ list, groupName }) => ({\n groupName,\n list: list.filter((item) => {\n if (\n typeof customFilter === 'function' &&\n shouldUseCustomFilterOnly\n ) {\n return true;\n }\n\n return !(\n newMatchingItems.length === 1 &&\n item.text === dropdownSearchString\n );\n }),\n }),\n );\n\n setMatchingListsItems(filteredMatchingListItems);\n\n if (filteredMatchingListItems.length !== 0 || hintText) {\n handleOpen();\n }\n }\n },\n [\n shouldShowContentOnEmptyInput,\n activeList,\n shouldAddInputToList,\n hintText,\n dropdownSearchString,\n customFilter,\n shouldUseCustomFilterOnly,\n handleOpen,\n inputProps,\n ],\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLInputElement>>(\n (event) => {\n if (typeof onKeyDown === 'function') {\n onKeyDown(event);\n }\n\n if (typeof inputProps?.onKeyDown === 'function') {\n inputProps.onKeyDown(event);\n }\n },\n [inputProps, onKeyDown],\n );\n\n /**\n * This function filters the lists by input\n */\n\n useEffect(() => {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: dropdownSearchString,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n newMatchingItems.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (newMatchingItems.length === 0 && shouldAddInputToList) {\n newMatchingItems.push({\n groupName: undefined,\n list: [],\n });\n }\n\n if (shouldAddInputToList && inputToListValue !== '') {\n newMatchingItems.forEach(({ list }) => {\n list.forEach(({ text }) => {\n if (text.toLowerCase() === inputToListValue.toLowerCase()) {\n setInputToListValue('');\n }\n });\n });\n }\n }, [\n inputToListValue,\n activeList,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n dropdownSearchString,\n customFilter,\n shouldUseCustomFilterOnly,\n ]);\n\n const handleClick = useCallback(() => {\n if (shouldShowBody) {\n handleClose();\n } else {\n handleOpen();\n }\n }, [handleClose, handleOpen, shouldShowBody]);\n\n const rightElement = useMemo(() => {\n if (!shouldShowToggleIcon) {\n return undefined;\n }\n\n return (\n <StyledSearchBoxIcon onClick={handleClick}>\n <Icon icons={['fa fa-chevron-down']} color={theme['006'] as string} />\n </StyledSearchBoxIcon>\n );\n }, [handleClick, shouldShowToggleIcon, theme]);\n\n const leftElement = useMemo(\n () =>\n (leftIcons || selectedImage) && (\n <StyledSearchBoxLeftWrapper>\n {leftIcons && <Icon icons={leftIcons} />}\n {selectedImage && selectedImage}\n </StyledSearchBoxLeftWrapper>\n ),\n [leftIcons, selectedImage],\n );\n\n /**\n * This function handles changes of the input\n */\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const filteredLists: ISearchBoxItems[] = [];\n shouldShowPresetValue.current = false;\n\n activeList.forEach(({ list, groupName }) => {\n const newList = filterSearchBoxItems({\n customFilter,\n items: list,\n searchString: event.target.value,\n shouldUseCustomFilterOnly,\n });\n\n if (newList.length > 0) {\n filteredLists.push({\n groupName,\n list: newList,\n });\n }\n });\n\n if (filteredLists.length === 0 && shouldAddInputToList) {\n filteredLists.push({\n groupName: undefined,\n list: [],\n });\n }\n\n setSelectedImage(undefined);\n\n if (!shouldShowContentOnEmptyInput && !event.target.value) {\n setMatchingListsItems([]);\n } else {\n setMatchingListsItems(filteredLists);\n }\n\n if (filteredLists.length !== 0) {\n handleOpen();\n }\n\n setValue(event.target.value);\n setInputToListValue(event.target.value);\n\n if (typeof onChange === 'function') {\n onChange(event);\n }\n\n if (typeof inputProps?.onChange === 'function') {\n inputProps.onChange(event);\n }\n },\n [\n activeList,\n customFilter,\n handleOpen,\n inputProps,\n onChange,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n shouldUseCustomFilterOnly,\n ],\n );\n\n /**\n * This function handles the blur event of the input\n */\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n hasFocusRef.current = false;\n\n if (typeof onBlur === 'function') {\n onBlur(event);\n }\n\n if (typeof inputProps?.onBlur === 'function') {\n inputProps.onBlur(event);\n }\n },\n [inputProps, onBlur],\n );\n\n const handleDropdownOutsideClick = useCallback(() => {\n tagInputRef.current?.blur();\n\n return hasFocusRef.current && isTouch;\n }, [isTouch]);\n\n const handleContainerBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n const nextFocusedElement = event.relatedTarget as Node | null;\n const currentContainer = event.currentTarget as HTMLElement;\n\n // Check if focus is moving outside the SearchBox container\n // Also check the dropdown content (contentRef) since it's rendered in a portal\n if (\n !nextFocusedElement ||\n (!currentContainer.contains(nextFocusedElement) &&\n !contentRef.current?.contains(nextFocusedElement))\n ) {\n handleClose();\n }\n },\n [handleClose],\n );\n\n /**\n * This function handles the item selection\n */\n const handleSelect = useCallback(\n (item: ISearchBoxItem) => {\n const newItem = {\n ...item,\n text: item.text.replace('<b>', '').replace('</b>', '').replace('</b', ''),\n };\n\n if (tagInputSettings) {\n setValue('');\n setInputToListValue('');\n tagInputRef.current?.resetValue();\n } else {\n setValue(newItem.text);\n }\n\n handleClose();\n\n setSelectedImage(\n newItem.imageUrl ? (\n <StyledSearchBoxItemImage\n src={newItem.imageUrl}\n $shouldShowRoundImage={shouldShowRoundImage}\n />\n ) : undefined,\n );\n\n setMatchingListsItems([]);\n\n if (typeof onSelect === 'function') {\n onSelect(newItem);\n }\n },\n [handleClose, onSelect, shouldShowRoundImage, tagInputSettings],\n );\n\n const content = useMemo(() => {\n if (hintText && matchingListsItems.length === 0) {\n return (\n <StyledSearchBoxHintText>\n {hintText.replace('##value##', value)}\n </StyledSearchBoxHintText>\n );\n }\n\n const items: ReactElement[] = [];\n\n matchingListsItems.forEach(({ groupName, list }, index) => {\n if (hasMultipleGroups) {\n if (list.length <= 0) {\n return;\n }\n\n if (index !== 0) {\n items.push(<GroupName key={groupName} name={groupName ?? ''} />);\n }\n }\n\n list.forEach(({ id, text, imageUrl }, listIndex) => {\n items.push(\n <SearchBoxItem\n key={`${id}_${groupName ?? ''}`}\n id={id}\n text={text}\n imageUrl={imageUrl}\n shouldShowSmallItems={shouldShowSmallItems}\n shouldShowRoundImage={shouldShowRoundImage}\n onSelect={handleSelect}\n groupName={groupName}\n tabIndex={index === 0 && listIndex === 0 ? 0 : -1}\n />,\n );\n });\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n items.push(\n <SearchBoxItem\n id=\"input-value\"\n onSelect={handleSelect}\n shouldShowSmallItems={shouldShowSmallItems}\n text={`<b>${inputToListValue}</b`}\n tabIndex={items.length === 0 ? 0 : -1}\n />,\n );\n }\n\n return items;\n }, [\n hintText,\n matchingListsItems,\n shouldAddInputToList,\n inputToListValue,\n value,\n hasMultipleGroups,\n shouldShowSmallItems,\n shouldShowRoundImage,\n handleSelect,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!shouldShowBody || matchingListsItems.length === 0) {\n return;\n }\n\n const children = contentRef.current?.children;\n\n if (!children) {\n return;\n }\n\n const childrenArray = Array.from(children);\n\n const newChildren = childrenArray.find((child) =>\n child.id.startsWith('searchBoxContent__'),\n )?.children;\n\n if (!(newChildren && newChildren.length > 0)) {\n return;\n }\n\n const filteredChildren = Array.from(newChildren).filter(\n (child) => (child as HTMLElement).dataset.isgroupname !== 'true',\n );\n\n setFilteredChildrenArray(filteredChildren);\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n\n if (newChildren && newChildren.length > 0) {\n const newIndex =\n focusedIndex !== null\n ? (focusedIndex +\n (e.key === 'ArrowUp' ? -1 : 1) +\n filteredChildren.length) %\n filteredChildren.length\n : 0;\n\n if (focusedIndex !== null) {\n const prevElement = filteredChildren[focusedIndex] as HTMLDivElement;\n prevElement.tabIndex = -1;\n }\n\n setFocusedIndex(newIndex);\n\n const newElement = filteredChildren[newIndex] as HTMLDivElement;\n\n newElement.tabIndex = 0;\n }\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n\n if (filteredChildren) {\n const element = filteredChildren[focusedIndex ?? 0];\n\n if (!element) {\n return;\n }\n\n const { id, textContent } = element;\n\n let imageUrl: string | undefined;\n\n // Just Ignore, it works\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (element.children[0]?.attributes.src) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n imageUrl = element.children[0]?.attributes.src.nodeValue as string;\n }\n\n const newId = id.replace('search-box-item__', '');\n\n handleSelect({\n id: newId === 'input-value' ? textContent : newId,\n text: textContent ?? '',\n imageUrl,\n });\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [\n filteredChildrenArray,\n focusedIndex,\n handleSelect,\n matchingListsItems.length,\n shouldShowBody,\n ]);\n\n const handleKeyPress = useCallback((event: KeyboardEvent) => {\n if (event.keyCode === 27) {\n setMatchingListsItems([]);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => setValue(''),\n }),\n [setValue],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyPress);\n\n return () => {\n document.addEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n /**\n * Update the value if preset value changes\n */\n useEffect(() => {\n if (presetValue) {\n setValue(presetValue);\n }\n }, [presetValue, setValue]);\n\n const shouldShowDropdown =\n shouldShowBody &&\n (matchingListsItems.length !== 0 || !!hintText) &&\n (value.trim() !== '' || shouldShowContentOnEmptyInput);\n\n return useMemo(\n () => (\n <StyledSearchBox\n ref={boxRef}\n key={`search-box-${uuid}`}\n onBlur={handleContainerBlur}\n >\n <div id={`search_box_input${uuid}`}>\n {tagInputSettings ? (\n <TagInput\n leftElement={leftElement}\n onAdd={tagInputSettings.onAdd}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onRemove={tagInputSettings.onRemove}\n placeholder={placeholder}\n ref={tagInputRef}\n shouldAllowMultiple={tagInputSettings.shouldAllowMultiple}\n shouldEnableKeyboardHighlighting={shouldEnableKeyboardHighlighting}\n shouldPreventEnter\n tags={tagInputSettings.tags}\n />\n ) : (\n <Input\n /* eslint-disable-next-line react/jsx-props-no-spreading */\n {...inputProps}\n isInvalid={isInvalid}\n leftElement={leftElement}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={inputRef}\n rightElement={rightElement}\n shouldEnableKeyboardHighlighting={\n inputProps?.shouldEnableKeyboardHighlighting ??\n shouldEnableKeyboardHighlighting\n }\n value={value}\n />\n )}\n </div>\n {boxRef.current && (\n <DropdownBodyWrapper\n anchorElement={boxRef.current}\n container={container}\n direction={dropdownDirection}\n onClose={handleClose}\n onOutsideClick={handleDropdownOutsideClick}\n shouldShowDropdown={shouldShowDropdown}\n >\n <SearchBoxBody\n filterButtons={filterButtons}\n height={height}\n maxHeight={maxHeight}\n shouldShow={shouldShowDropdown}\n key={`search-box-body-${uuid}`}\n onGroupSelect={handleFilterButtonsGroupSelect}\n ref={contentRef}\n selectedGroups={groups}\n shouldHideFilterButtons={shouldHideFilterButtons}\n >\n {content}\n </SearchBoxBody>\n </DropdownBodyWrapper>\n )}\n </StyledSearchBox>\n ),\n [\n container,\n content,\n dropdownDirection,\n filterButtons,\n groups,\n handleBlur,\n handleChange,\n handleClose,\n handleDropdownOutsideClick,\n handleFocus,\n handleKeyDown,\n height,\n inputProps,\n isInvalid,\n leftElement,\n maxHeight,\n onKeyDown,\n placeholder,\n rightElement,\n shouldHideFilterButtons,\n shouldShowDropdown,\n shouldEnableKeyboardHighlighting,\n tagInputSettings,\n uuid,\n value,\n ],\n );\n },\n);\n\nSearchBox.displayName = 'SearchBox';\n\nexport default SearchBox;\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  import { ChangeEventHandler, FC, FocusEventHandler, KeyboardEventHandler } from 'react';
2
2
  import type { ISearchBoxItem, ISearchBoxItems } from '../../types/searchBox';
3
+ import { type InputProps } from '../input/Input';
3
4
  import { TagInputProps } from '../tag-input/TagInput';
4
5
  import type { DropdownDirection } from '../../types/dropdown';
5
6
  export interface SearchBoxRef {
@@ -36,6 +37,10 @@ export type SearchBoxProps = {
36
37
  * An optional icon that is displayed inside the left side of the input.
37
38
  */
38
39
  leftIcons?: string[];
40
+ /**
41
+ * Props that are passed to the underlying Input component.
42
+ */
43
+ inputProps?: InputProps;
39
44
  /**
40
45
  * List of groups with items that can be searched. It is possible to give only one list; if multiple lists are provided, the 'group name' parameter becomes mandatory.
41
46
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/core",
3
- "version": "5.4.14-alpha.0",
3
+ "version": "5.4.15-alpha.0",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -88,5 +88,5 @@
88
88
  "publishConfig": {
89
89
  "access": "public"
90
90
  },
91
- "gitHead": "83d8c925dfdb3760ce82257c03c532d91f33a8d6"
91
+ "gitHead": "10a2db86ca792d7db14b4071011e1c3984d5b075"
92
92
  }