@chayns-components/core 5.5.40 → 5.5.41

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.
package/AGENTS.md CHANGED
@@ -4736,7 +4736,7 @@ import { SearchBox } from '@chayns-components/core';
4736
4736
  | name | type | required | description |
4737
4737
  | --- | --- | --- | --- |
4738
4738
  | `container` | `Element \| undefined` | no | The element where the content of the `ComboBox` should be rendered via React Portal. |
4739
- | `customFilter` | `((item: ISearchBoxItem) => boolean) \| undefined` | no | An optional callback function to filter the elements to be displayed |
4739
+ | `customFilter` | `((item: ISearchBoxItem, value: string) => boolean) \| undefined` | no | An optional callback function to filter the elements to be displayed |
4740
4740
  | `customSortFunction` | `SearchBoxSortFunction \| undefined` | no | An optional callback function to sort the filtered elements to be displayed |
4741
4741
  | `dropdownDirection` | `DropdownDirection \| undefined` | no | The direction in which the dropdown should be displayed. By default, it is displayed below the input. |
4742
4742
  | `hintText` | `string \| undefined` | no | A text that should be displayed if no results are found. |
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.filterSearchBoxItems = exports.default = void 0;
7
7
  var _chaynsApi = require("chayns-api");
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _styledComponents = require("styled-components");
@@ -29,18 +29,18 @@ const filterSearchBoxItems = ({
29
29
  searchString,
30
30
  shouldUseCustomFilterOnly
31
31
  }) => {
32
- if (typeof customFilter !== 'function') {
33
- return (0, _searchBox.searchList)({
32
+ if (shouldUseCustomFilterOnly) {
33
+ const filteredItems = typeof customFilter === 'function' ? items.filter(item => customFilter(item, searchString)) : items;
34
+ return (0, _searchBox.sortSearchBoxItems)({
34
35
  customSortFunction,
35
- items,
36
+ items: filteredItems,
36
37
  searchString
37
38
  });
38
39
  }
39
- if (shouldUseCustomFilterOnly) {
40
- const filteredItems = items.filter(customFilter);
41
- return (0, _searchBox.sortSearchBoxItems)({
40
+ if (typeof customFilter !== 'function') {
41
+ return (0, _searchBox.searchList)({
42
42
  customSortFunction,
43
- items: filteredItems,
43
+ items,
44
44
  searchString
45
45
  });
46
46
  }
@@ -48,8 +48,9 @@ const filterSearchBoxItems = ({
48
48
  customSortFunction,
49
49
  items,
50
50
  searchString
51
- }).filter(customFilter);
51
+ }).filter(item => customFilter(item, searchString));
52
52
  };
53
+ exports.filterSearchBoxItems = filterSearchBoxItems;
53
54
  const getDropdownSearchString = ({
54
55
  selectedId,
55
56
  shouldKeepSelectedItemPosition,
@@ -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","_extends","assign","bind","arguments","length","apply","filterSearchBoxItems","customFilter","customSortFunction","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","size","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, type SearchBoxSortFunction } 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 size?: TagInputProps['size'];\n shouldAllowMultiple?: TagInputProps['shouldAllowMultiple'];\n tags?: TagInputProps['tags'];\n}\n\nconst filterSearchBoxItems = ({\n customFilter,\n customSortFunction,\n items,\n searchString,\n shouldUseCustomFilterOnly,\n}: {\n customFilter?: (item: ISearchBoxItem) => boolean;\n customSortFunction?: SearchBoxSortFunction;\n items: ISearchBoxItem[];\n searchString: string;\n shouldUseCustomFilterOnly?: boolean;\n}) => {\n if (typeof customFilter !== 'function') {\n return searchList({ customSortFunction, items, searchString });\n }\n\n if (shouldUseCustomFilterOnly) {\n const filteredItems = items.filter(customFilter);\n\n return sortSearchBoxItems({ customSortFunction, items: filteredItems, searchString });\n }\n\n return searchList({ customSortFunction, 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 * An optional callback function to sort the filtered elements to be displayed\n */\n customSortFunction?: SearchBoxSortFunction;\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 size={tagInputSettings.size}\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
+ {"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","customSortFunction","items","searchString","shouldUseCustomFilterOnly","filteredItems","filter","item","sortSearchBoxItems","searchList","exports","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","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","size","shouldAllowMultiple","shouldPreventEnter","tags","anchorElement","direction","onClose","onOutsideClick","shouldShow","onGroupSelect","selectedGroups","displayName","_default"],"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, type SearchBoxSortFunction } 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 size?: TagInputProps['size'];\n shouldAllowMultiple?: TagInputProps['shouldAllowMultiple'];\n tags?: TagInputProps['tags'];\n}\n\nexport const filterSearchBoxItems = ({\n customFilter,\n customSortFunction,\n items,\n searchString,\n shouldUseCustomFilterOnly,\n}: {\n customFilter?: (item: ISearchBoxItem, value: string) => boolean;\n customSortFunction?: SearchBoxSortFunction;\n items: ISearchBoxItem[];\n searchString: string;\n shouldUseCustomFilterOnly?: boolean;\n}) => {\n if (shouldUseCustomFilterOnly) {\n const filteredItems =\n typeof customFilter === 'function'\n ? items.filter((item) => customFilter(item, searchString))\n : items;\n\n return sortSearchBoxItems({ customSortFunction, items: filteredItems, searchString });\n }\n\n if (typeof customFilter !== 'function') {\n return searchList({ customSortFunction, items, searchString });\n }\n\n return searchList({ customSortFunction, items, searchString }).filter((item) =>\n customFilter(item, searchString),\n );\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 * @param item The item to filter.\n * @param value The current input value.\n */\n customFilter?: (item: ISearchBoxItem, value: string) => boolean;\n /**\n * An optional callback function to sort the filtered elements to be displayed\n */\n customSortFunction?: SearchBoxSortFunction;\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 size={tagInputSettings.size}\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,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _vitest = require("vitest");
4
+ var _SearchBox = require("../components/search-box/SearchBox");
4
5
  var _searchBox = require("./searchBox");
5
6
  const items = [{
6
7
  id: '2',
@@ -30,5 +31,24 @@ const items = [{
30
31
  id
31
32
  }) => id)).toEqual(['1', '2']);
32
33
  });
34
+ (0, _vitest.it)('uses only the custom filter when shouldUseCustomFilterOnly is enabled', () => {
35
+ const values = [];
36
+ const result = (0, _SearchBox.filterSearchBoxItems)({
37
+ customFilter: ({
38
+ id
39
+ }, value) => {
40
+ values.push(value);
41
+ return id === '2';
42
+ },
43
+ customSortFunction: (a, b) => a.id.localeCompare(b.id),
44
+ items,
45
+ searchString: 'does-not-match',
46
+ shouldUseCustomFilterOnly: true
47
+ });
48
+ (0, _vitest.expect)(result.map(({
49
+ id
50
+ }) => id)).toEqual(['2']);
51
+ (0, _vitest.expect)(values).toEqual(['does-not-match', 'does-not-match']);
52
+ });
33
53
  });
34
54
  //# sourceMappingURL=searchBox.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"searchBox.test.js","names":["_vitest","require","_searchBox","items","id","text","describe","it","result","searchList","customSortFunction","a","b","localeCompare","searchString","expect","map","toEqual"],"sources":["../../../src/utils/searchBox.test.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest';\nimport type { ISearchBoxItem } from '../types/searchBox';\nimport { searchList } from './searchBox';\n\nconst items: ISearchBoxItem[] = [\n { id: '2', text: 'Zweite' },\n { id: '1', text: 'Erste' },\n];\n\ndescribe('searchList', () => {\n it('uses the custom sort function instead of the default sort', () => {\n const result = searchList({\n customSortFunction: (a, b) => b.id.localeCompare(a.id),\n items,\n searchString: '',\n });\n\n expect(result.map(({ id }) => id)).toEqual(['2', '1']);\n });\n\n it('still filters before applying the custom sort function', () => {\n const result = searchList({\n customSortFunction: (a, b) => a.id.localeCompare(b.id),\n items,\n searchString: 'e',\n });\n\n expect(result.map(({ id }) => id)).toEqual(['1', '2']);\n });\n});\n"],"mappings":";;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAEA,MAAME,KAAuB,GAAG,CAC5B;EAAEC,EAAE,EAAE,GAAG;EAAEC,IAAI,EAAE;AAAS,CAAC,EAC3B;EAAED,EAAE,EAAE,GAAG;EAAEC,IAAI,EAAE;AAAQ,CAAC,CAC7B;AAED,IAAAC,gBAAQ,EAAC,YAAY,EAAE,MAAM;EACzB,IAAAC,UAAE,EAAC,2DAA2D,EAAE,MAAM;IAClE,MAAMC,MAAM,GAAG,IAAAC,qBAAU,EAAC;MACtBC,kBAAkB,EAAEA,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACR,EAAE,CAACS,aAAa,CAACF,CAAC,CAACP,EAAE,CAAC;MACtDD,KAAK;MACLW,YAAY,EAAE;IAClB,CAAC,CAAC;IAEF,IAAAC,cAAM,EAACP,MAAM,CAACQ,GAAG,CAAC,CAAC;MAAEZ;IAAG,CAAC,KAAKA,EAAE,CAAC,CAAC,CAACa,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC1D,CAAC,CAAC;EAEF,IAAAV,UAAE,EAAC,wDAAwD,EAAE,MAAM;IAC/D,MAAMC,MAAM,GAAG,IAAAC,qBAAU,EAAC;MACtBC,kBAAkB,EAAEA,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACP,EAAE,CAACS,aAAa,CAACD,CAAC,CAACR,EAAE,CAAC;MACtDD,KAAK;MACLW,YAAY,EAAE;IAClB,CAAC,CAAC;IAEF,IAAAC,cAAM,EAACP,MAAM,CAACQ,GAAG,CAAC,CAAC;MAAEZ;IAAG,CAAC,KAAKA,EAAE,CAAC,CAAC,CAACa,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC1D,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"searchBox.test.js","names":["_vitest","require","_SearchBox","_searchBox","items","id","text","describe","it","result","searchList","customSortFunction","a","b","localeCompare","searchString","expect","map","toEqual","values","filterSearchBoxItems","customFilter","value","push","shouldUseCustomFilterOnly"],"sources":["../../../src/utils/searchBox.test.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest';\nimport type { ISearchBoxItem } from '../types/searchBox';\nimport { filterSearchBoxItems } from '../components/search-box/SearchBox';\nimport { searchList } from './searchBox';\n\nconst items: ISearchBoxItem[] = [\n { id: '2', text: 'Zweite' },\n { id: '1', text: 'Erste' },\n];\n\ndescribe('searchList', () => {\n it('uses the custom sort function instead of the default sort', () => {\n const result = searchList({\n customSortFunction: (a, b) => b.id.localeCompare(a.id),\n items,\n searchString: '',\n });\n\n expect(result.map(({ id }) => id)).toEqual(['2', '1']);\n });\n\n it('still filters before applying the custom sort function', () => {\n const result = searchList({\n customSortFunction: (a, b) => a.id.localeCompare(b.id),\n items,\n searchString: 'e',\n });\n\n expect(result.map(({ id }) => id)).toEqual(['1', '2']);\n });\n\n it('uses only the custom filter when shouldUseCustomFilterOnly is enabled', () => {\n const values: string[] = [];\n const result = filterSearchBoxItems({\n customFilter: ({ id }, value) => {\n values.push(value);\n return id === '2';\n },\n customSortFunction: (a, b) => a.id.localeCompare(b.id),\n items,\n searchString: 'does-not-match',\n shouldUseCustomFilterOnly: true,\n });\n\n expect(result.map(({ id }) => id)).toEqual(['2']);\n expect(values).toEqual(['does-not-match', 'does-not-match']);\n });\n});\n"],"mappings":";;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,MAAMG,KAAuB,GAAG,CAC5B;EAAEC,EAAE,EAAE,GAAG;EAAEC,IAAI,EAAE;AAAS,CAAC,EAC3B;EAAED,EAAE,EAAE,GAAG;EAAEC,IAAI,EAAE;AAAQ,CAAC,CAC7B;AAED,IAAAC,gBAAQ,EAAC,YAAY,EAAE,MAAM;EACzB,IAAAC,UAAE,EAAC,2DAA2D,EAAE,MAAM;IAClE,MAAMC,MAAM,GAAG,IAAAC,qBAAU,EAAC;MACtBC,kBAAkB,EAAEA,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACR,EAAE,CAACS,aAAa,CAACF,CAAC,CAACP,EAAE,CAAC;MACtDD,KAAK;MACLW,YAAY,EAAE;IAClB,CAAC,CAAC;IAEF,IAAAC,cAAM,EAACP,MAAM,CAACQ,GAAG,CAAC,CAAC;MAAEZ;IAAG,CAAC,KAAKA,EAAE,CAAC,CAAC,CAACa,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC1D,CAAC,CAAC;EAEF,IAAAV,UAAE,EAAC,wDAAwD,EAAE,MAAM;IAC/D,MAAMC,MAAM,GAAG,IAAAC,qBAAU,EAAC;MACtBC,kBAAkB,EAAEA,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACP,EAAE,CAACS,aAAa,CAACD,CAAC,CAACR,EAAE,CAAC;MACtDD,KAAK;MACLW,YAAY,EAAE;IAClB,CAAC,CAAC;IAEF,IAAAC,cAAM,EAACP,MAAM,CAACQ,GAAG,CAAC,CAAC;MAAEZ;IAAG,CAAC,KAAKA,EAAE,CAAC,CAAC,CAACa,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC1D,CAAC,CAAC;EAEF,IAAAV,UAAE,EAAC,uEAAuE,EAAE,MAAM;IAC9E,MAAMW,MAAgB,GAAG,EAAE;IAC3B,MAAMV,MAAM,GAAG,IAAAW,+BAAoB,EAAC;MAChCC,YAAY,EAAEA,CAAC;QAAEhB;MAAG,CAAC,EAAEiB,KAAK,KAAK;QAC7BH,MAAM,CAACI,IAAI,CAACD,KAAK,CAAC;QAClB,OAAOjB,EAAE,KAAK,GAAG;MACrB,CAAC;MACDM,kBAAkB,EAAEA,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACP,EAAE,CAACS,aAAa,CAACD,CAAC,CAACR,EAAE,CAAC;MACtDD,KAAK;MACLW,YAAY,EAAE,gBAAgB;MAC9BS,yBAAyB,EAAE;IAC/B,CAAC,CAAC;IAEF,IAAAR,cAAM,EAACP,MAAM,CAACQ,GAAG,CAAC,CAAC;MAAEZ;IAAG,CAAC,KAAKA,EAAE,CAAC,CAAC,CAACa,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IACjD,IAAAF,cAAM,EAACG,MAAM,CAAC,CAACD,OAAO,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;EAChE,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
@@ -14,25 +14,25 @@ import { StyledSearchBox, StyledSearchBoxHintText, StyledSearchBoxIcon, StyledSe
14
14
  import { useUuid } from '../../hooks/uuid';
15
15
  import DropdownBodyWrapper from '../dropdown-body-wrapper/DropdownBodyWrapper';
16
16
  import TagInput from '../tag-input/TagInput';
17
- const filterSearchBoxItems = ({
17
+ export const filterSearchBoxItems = ({
18
18
  customFilter,
19
19
  customSortFunction,
20
20
  items,
21
21
  searchString,
22
22
  shouldUseCustomFilterOnly
23
23
  }) => {
24
- if (typeof customFilter !== 'function') {
25
- return searchList({
24
+ if (shouldUseCustomFilterOnly) {
25
+ const filteredItems = typeof customFilter === 'function' ? items.filter(item => customFilter(item, searchString)) : items;
26
+ return sortSearchBoxItems({
26
27
  customSortFunction,
27
- items,
28
+ items: filteredItems,
28
29
  searchString
29
30
  });
30
31
  }
31
- if (shouldUseCustomFilterOnly) {
32
- const filteredItems = items.filter(customFilter);
33
- return sortSearchBoxItems({
32
+ if (typeof customFilter !== 'function') {
33
+ return searchList({
34
34
  customSortFunction,
35
- items: filteredItems,
35
+ items,
36
36
  searchString
37
37
  });
38
38
  }
@@ -40,7 +40,7 @@ const filterSearchBoxItems = ({
40
40
  customSortFunction,
41
41
  items,
42
42
  searchString
43
- }).filter(customFilter);
43
+ }).filter(item => customFilter(item, searchString));
44
44
  };
45
45
  const getDropdownSearchString = ({
46
46
  selectedId,
@@ -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","customSortFunction","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","size","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, type SearchBoxSortFunction } 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 size?: TagInputProps['size'];\n shouldAllowMultiple?: TagInputProps['shouldAllowMultiple'];\n tags?: TagInputProps['tags'];\n}\n\nconst filterSearchBoxItems = ({\n customFilter,\n customSortFunction,\n items,\n searchString,\n shouldUseCustomFilterOnly,\n}: {\n customFilter?: (item: ISearchBoxItem) => boolean;\n customSortFunction?: SearchBoxSortFunction;\n items: ISearchBoxItem[];\n searchString: string;\n shouldUseCustomFilterOnly?: boolean;\n}) => {\n if (typeof customFilter !== 'function') {\n return searchList({ customSortFunction, items, searchString });\n }\n\n if (shouldUseCustomFilterOnly) {\n const filteredItems = items.filter(customFilter);\n\n return sortSearchBoxItems({ customSortFunction, items: filteredItems, searchString });\n }\n\n return searchList({ customSortFunction, 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 * An optional callback function to sort the filtered elements to be displayed\n */\n customSortFunction?: SearchBoxSortFunction;\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 size={tagInputSettings.size}\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
+ {"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","customSortFunction","items","searchString","shouldUseCustomFilterOnly","filteredItems","filter","item","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","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","size","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, type SearchBoxSortFunction } 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 size?: TagInputProps['size'];\n shouldAllowMultiple?: TagInputProps['shouldAllowMultiple'];\n tags?: TagInputProps['tags'];\n}\n\nexport const filterSearchBoxItems = ({\n customFilter,\n customSortFunction,\n items,\n searchString,\n shouldUseCustomFilterOnly,\n}: {\n customFilter?: (item: ISearchBoxItem, value: string) => boolean;\n customSortFunction?: SearchBoxSortFunction;\n items: ISearchBoxItem[];\n searchString: string;\n shouldUseCustomFilterOnly?: boolean;\n}) => {\n if (shouldUseCustomFilterOnly) {\n const filteredItems =\n typeof customFilter === 'function'\n ? items.filter((item) => customFilter(item, searchString))\n : items;\n\n return sortSearchBoxItems({ customSortFunction, items: filteredItems, searchString });\n }\n\n if (typeof customFilter !== 'function') {\n return searchList({ customSortFunction, items, searchString });\n }\n\n return searchList({ customSortFunction, items, searchString }).filter((item) =>\n customFilter(item, searchString),\n );\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 * @param item The item to filter.\n * @param value The current input value.\n */\n customFilter?: (item: ISearchBoxItem, value: string) => boolean;\n /**\n * An optional callback function to sort the filtered elements to be displayed\n */\n customSortFunction?: SearchBoxSortFunction;\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 customSortFunction,\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 size={tagInputSettings.size}\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,4 +1,5 @@
1
1
  import { describe, expect, it } from 'vitest';
2
+ import { filterSearchBoxItems } from '../components/search-box/SearchBox';
2
3
  import { searchList } from './searchBox';
3
4
  const items = [{
4
5
  id: '2',
@@ -28,5 +29,24 @@ describe('searchList', () => {
28
29
  id
29
30
  }) => id)).toEqual(['1', '2']);
30
31
  });
32
+ it('uses only the custom filter when shouldUseCustomFilterOnly is enabled', () => {
33
+ const values = [];
34
+ const result = filterSearchBoxItems({
35
+ customFilter: ({
36
+ id
37
+ }, value) => {
38
+ values.push(value);
39
+ return id === '2';
40
+ },
41
+ customSortFunction: (a, b) => a.id.localeCompare(b.id),
42
+ items,
43
+ searchString: 'does-not-match',
44
+ shouldUseCustomFilterOnly: true
45
+ });
46
+ expect(result.map(({
47
+ id
48
+ }) => id)).toEqual(['2']);
49
+ expect(values).toEqual(['does-not-match', 'does-not-match']);
50
+ });
31
51
  });
32
52
  //# sourceMappingURL=searchBox.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"searchBox.test.js","names":["describe","expect","it","searchList","items","id","text","result","customSortFunction","a","b","localeCompare","searchString","map","toEqual"],"sources":["../../../src/utils/searchBox.test.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest';\nimport type { ISearchBoxItem } from '../types/searchBox';\nimport { searchList } from './searchBox';\n\nconst items: ISearchBoxItem[] = [\n { id: '2', text: 'Zweite' },\n { id: '1', text: 'Erste' },\n];\n\ndescribe('searchList', () => {\n it('uses the custom sort function instead of the default sort', () => {\n const result = searchList({\n customSortFunction: (a, b) => b.id.localeCompare(a.id),\n items,\n searchString: '',\n });\n\n expect(result.map(({ id }) => id)).toEqual(['2', '1']);\n });\n\n it('still filters before applying the custom sort function', () => {\n const result = searchList({\n customSortFunction: (a, b) => a.id.localeCompare(b.id),\n items,\n searchString: 'e',\n });\n\n expect(result.map(({ id }) => id)).toEqual(['1', '2']);\n });\n});\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAE7C,SAASC,UAAU,QAAQ,aAAa;AAExC,MAAMC,KAAuB,GAAG,CAC5B;EAAEC,EAAE,EAAE,GAAG;EAAEC,IAAI,EAAE;AAAS,CAAC,EAC3B;EAAED,EAAE,EAAE,GAAG;EAAEC,IAAI,EAAE;AAAQ,CAAC,CAC7B;AAEDN,QAAQ,CAAC,YAAY,EAAE,MAAM;EACzBE,EAAE,CAAC,2DAA2D,EAAE,MAAM;IAClE,MAAMK,MAAM,GAAGJ,UAAU,CAAC;MACtBK,kBAAkB,EAAEA,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACL,EAAE,CAACM,aAAa,CAACF,CAAC,CAACJ,EAAE,CAAC;MACtDD,KAAK;MACLQ,YAAY,EAAE;IAClB,CAAC,CAAC;IAEFX,MAAM,CAACM,MAAM,CAACM,GAAG,CAAC,CAAC;MAAER;IAAG,CAAC,KAAKA,EAAE,CAAC,CAAC,CAACS,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC1D,CAAC,CAAC;EAEFZ,EAAE,CAAC,wDAAwD,EAAE,MAAM;IAC/D,MAAMK,MAAM,GAAGJ,UAAU,CAAC;MACtBK,kBAAkB,EAAEA,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACJ,EAAE,CAACM,aAAa,CAACD,CAAC,CAACL,EAAE,CAAC;MACtDD,KAAK;MACLQ,YAAY,EAAE;IAClB,CAAC,CAAC;IAEFX,MAAM,CAACM,MAAM,CAACM,GAAG,CAAC,CAAC;MAAER;IAAG,CAAC,KAAKA,EAAE,CAAC,CAAC,CAACS,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC1D,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"searchBox.test.js","names":["describe","expect","it","filterSearchBoxItems","searchList","items","id","text","result","customSortFunction","a","b","localeCompare","searchString","map","toEqual","values","customFilter","value","push","shouldUseCustomFilterOnly"],"sources":["../../../src/utils/searchBox.test.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest';\nimport type { ISearchBoxItem } from '../types/searchBox';\nimport { filterSearchBoxItems } from '../components/search-box/SearchBox';\nimport { searchList } from './searchBox';\n\nconst items: ISearchBoxItem[] = [\n { id: '2', text: 'Zweite' },\n { id: '1', text: 'Erste' },\n];\n\ndescribe('searchList', () => {\n it('uses the custom sort function instead of the default sort', () => {\n const result = searchList({\n customSortFunction: (a, b) => b.id.localeCompare(a.id),\n items,\n searchString: '',\n });\n\n expect(result.map(({ id }) => id)).toEqual(['2', '1']);\n });\n\n it('still filters before applying the custom sort function', () => {\n const result = searchList({\n customSortFunction: (a, b) => a.id.localeCompare(b.id),\n items,\n searchString: 'e',\n });\n\n expect(result.map(({ id }) => id)).toEqual(['1', '2']);\n });\n\n it('uses only the custom filter when shouldUseCustomFilterOnly is enabled', () => {\n const values: string[] = [];\n const result = filterSearchBoxItems({\n customFilter: ({ id }, value) => {\n values.push(value);\n return id === '2';\n },\n customSortFunction: (a, b) => a.id.localeCompare(b.id),\n items,\n searchString: 'does-not-match',\n shouldUseCustomFilterOnly: true,\n });\n\n expect(result.map(({ id }) => id)).toEqual(['2']);\n expect(values).toEqual(['does-not-match', 'does-not-match']);\n });\n});\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAE7C,SAASC,oBAAoB,QAAQ,oCAAoC;AACzE,SAASC,UAAU,QAAQ,aAAa;AAExC,MAAMC,KAAuB,GAAG,CAC5B;EAAEC,EAAE,EAAE,GAAG;EAAEC,IAAI,EAAE;AAAS,CAAC,EAC3B;EAAED,EAAE,EAAE,GAAG;EAAEC,IAAI,EAAE;AAAQ,CAAC,CAC7B;AAEDP,QAAQ,CAAC,YAAY,EAAE,MAAM;EACzBE,EAAE,CAAC,2DAA2D,EAAE,MAAM;IAClE,MAAMM,MAAM,GAAGJ,UAAU,CAAC;MACtBK,kBAAkB,EAAEA,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACL,EAAE,CAACM,aAAa,CAACF,CAAC,CAACJ,EAAE,CAAC;MACtDD,KAAK;MACLQ,YAAY,EAAE;IAClB,CAAC,CAAC;IAEFZ,MAAM,CAACO,MAAM,CAACM,GAAG,CAAC,CAAC;MAAER;IAAG,CAAC,KAAKA,EAAE,CAAC,CAAC,CAACS,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC1D,CAAC,CAAC;EAEFb,EAAE,CAAC,wDAAwD,EAAE,MAAM;IAC/D,MAAMM,MAAM,GAAGJ,UAAU,CAAC;MACtBK,kBAAkB,EAAEA,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACJ,EAAE,CAACM,aAAa,CAACD,CAAC,CAACL,EAAE,CAAC;MACtDD,KAAK;MACLQ,YAAY,EAAE;IAClB,CAAC,CAAC;IAEFZ,MAAM,CAACO,MAAM,CAACM,GAAG,CAAC,CAAC;MAAER;IAAG,CAAC,KAAKA,EAAE,CAAC,CAAC,CAACS,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC1D,CAAC,CAAC;EAEFb,EAAE,CAAC,uEAAuE,EAAE,MAAM;IAC9E,MAAMc,MAAgB,GAAG,EAAE;IAC3B,MAAMR,MAAM,GAAGL,oBAAoB,CAAC;MAChCc,YAAY,EAAEA,CAAC;QAAEX;MAAG,CAAC,EAAEY,KAAK,KAAK;QAC7BF,MAAM,CAACG,IAAI,CAACD,KAAK,CAAC;QAClB,OAAOZ,EAAE,KAAK,GAAG;MACrB,CAAC;MACDG,kBAAkB,EAAEA,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACJ,EAAE,CAACM,aAAa,CAACD,CAAC,CAACL,EAAE,CAAC;MACtDD,KAAK;MACLQ,YAAY,EAAE,gBAAgB;MAC9BO,yBAAyB,EAAE;IAC/B,CAAC,CAAC;IAEFnB,MAAM,CAACO,MAAM,CAACM,GAAG,CAAC,CAAC;MAAER;IAAG,CAAC,KAAKA,EAAE,CAAC,CAAC,CAACS,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IACjDd,MAAM,CAACe,MAAM,CAAC,CAACD,OAAO,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;EAChE,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
@@ -14,6 +14,13 @@ export interface TagInputSettings {
14
14
  shouldAllowMultiple?: TagInputProps['shouldAllowMultiple'];
15
15
  tags?: TagInputProps['tags'];
16
16
  }
17
+ export declare const filterSearchBoxItems: ({ customFilter, customSortFunction, items, searchString, shouldUseCustomFilterOnly, }: {
18
+ customFilter?: (item: ISearchBoxItem, value: string) => boolean;
19
+ customSortFunction?: SearchBoxSortFunction;
20
+ items: ISearchBoxItem[];
21
+ searchString: string;
22
+ shouldUseCustomFilterOnly?: boolean;
23
+ }) => ISearchBoxItem[];
17
24
  export type SearchBoxProps = {
18
25
  /**
19
26
  * The element where the content of the `ComboBox` should be rendered via React Portal.
@@ -21,8 +28,10 @@ export type SearchBoxProps = {
21
28
  container?: Element;
22
29
  /**
23
30
  * An optional callback function to filter the elements to be displayed
31
+ * @param item The item to filter.
32
+ * @param value The current input value.
24
33
  */
25
- customFilter?: (item: ISearchBoxItem) => boolean;
34
+ customFilter?: (item: ISearchBoxItem, value: string) => boolean;
26
35
  /**
27
36
  * An optional callback function to sort the filtered elements to be displayed
28
37
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/core",
3
- "version": "5.5.40",
3
+ "version": "5.5.41",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -93,5 +93,5 @@
93
93
  "publishConfig": {
94
94
  "access": "public"
95
95
  },
96
- "gitHead": "6dbae57c63a1acb4aad518450bc6bc3d911a1d3e"
96
+ "gitHead": "fc3d589835b668db40cc14ed59307d4cca80e9da"
97
97
  }