@chayns-components/core 5.0.0-beta.798 → 5.0.0-beta.799
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/lib/cjs/components/popup/Popup.styles.js +0 -1
- package/lib/cjs/components/popup/Popup.styles.js.map +1 -1
- package/lib/cjs/components/search-box/SearchBox.js +9 -4
- package/lib/cjs/components/search-box/SearchBox.js.map +1 -1
- package/lib/cjs/components/search-box/search-box-body/SearchBoxBody.js +1 -1
- package/lib/cjs/components/search-box/search-box-body/SearchBoxBody.js.map +1 -1
- package/lib/esm/components/popup/Popup.styles.js +0 -1
- package/lib/esm/components/popup/Popup.styles.js.map +1 -1
- package/lib/esm/components/search-box/SearchBox.js +8 -3
- package/lib/esm/components/search-box/SearchBox.js.map +1 -1
- package/lib/esm/components/search-box/search-box-body/SearchBoxBody.js +1 -1
- package/lib/esm/components/search-box/search-box-body/SearchBoxBody.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popup.styles.js","names":["_styledComponents","_interopRequireWildcard","require","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","StyledPopup","exports","styled","span","$shouldUseChildrenWidth","css","StyledPopupPseudo","div","$menuHeight"],"sources":["../../../../src/components/popup/Popup.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport type { WithTheme } from '../color-scheme-provider/ColorSchemeProvider';\n\ntype StyledPopupProps = WithTheme<{\n $shouldUseChildrenWidth: boolean;\n}>;\n\nexport const StyledPopup = styled.span<StyledPopupProps>`\n cursor: pointer;\n position: relative;\n\n ${({ $shouldUseChildrenWidth }) =>\n $shouldUseChildrenWidth &&\n css`\n display: flex;\n width: fit-content;\n height: fit-content;\n `}\n`;\n\nexport const StyledPopupPseudo = styled.div<{\n $menuHeight: number;\n}>`\n top: ${({ $menuHeight }) => `${$menuHeight - 0}px`};\n left: 0;\n margin: 2px;\n pointer-events: none;\n visibility: hidden;\n position: absolute;\n
|
|
1
|
+
{"version":3,"file":"Popup.styles.js","names":["_styledComponents","_interopRequireWildcard","require","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","StyledPopup","exports","styled","span","$shouldUseChildrenWidth","css","StyledPopupPseudo","div","$menuHeight"],"sources":["../../../../src/components/popup/Popup.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport type { WithTheme } from '../color-scheme-provider/ColorSchemeProvider';\n\ntype StyledPopupProps = WithTheme<{\n $shouldUseChildrenWidth: boolean;\n}>;\n\nexport const StyledPopup = styled.span<StyledPopupProps>`\n cursor: pointer;\n position: relative;\n\n ${({ $shouldUseChildrenWidth }) =>\n $shouldUseChildrenWidth &&\n css`\n display: flex;\n width: fit-content;\n height: fit-content;\n `}\n`;\n\nexport const StyledPopupPseudo = styled.div<{\n $menuHeight: number;\n}>`\n top: ${({ $menuHeight }) => `${$menuHeight - 0}px`};\n left: 0;\n margin: 2px;\n pointer-events: none;\n visibility: hidden;\n position: absolute;\n`;\n"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAgD,SAAAC,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAH,wBAAAG,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAOzC,MAAMW,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAGE,yBAAM,CAACC,IAAsB;AACxD;AACA;AACA;AACA,MAAM,CAAC;EAAEC;AAAwB,CAAC,KAC1BA,uBAAuB,IACvB,IAAAC,qBAAG;AACX;AACA;AACA;AACA,SAAS;AACT,CAAC;AAEM,MAAMC,iBAAiB,GAAAL,OAAA,CAAAK,iBAAA,GAAGJ,yBAAM,CAACK,GAEtC;AACF,WAAW,CAAC;EAAEC;AAAY,CAAC,KAAK,GAAGA,WAAW,GAAG,CAAC,IAAI;AACtD;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -166,7 +166,7 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
|
166
166
|
* This function closes the list of items
|
|
167
167
|
*/
|
|
168
168
|
const handleOutsideClick = (0, _react.useCallback)(event => {
|
|
169
|
-
if (boxRef.current && !boxRef.current.contains(event.target)) {
|
|
169
|
+
if (boxRef.current && !boxRef.current.contains(event.target) && contentRef.current && !contentRef.current.contains(event.target)) {
|
|
170
170
|
handleClose();
|
|
171
171
|
}
|
|
172
172
|
}, [handleClose]);
|
|
@@ -474,11 +474,16 @@ const SearchBox = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
|
474
474
|
return;
|
|
475
475
|
}
|
|
476
476
|
if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {
|
|
477
|
-
var _contentRef$current;
|
|
477
|
+
var _contentRef$current, _childrenArray$find;
|
|
478
478
|
e.preventDefault();
|
|
479
479
|
const children = (_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 ? void 0 : _contentRef$current.children;
|
|
480
|
-
if (children
|
|
481
|
-
|
|
480
|
+
if (!children) {
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
const childrenArray = Array.from(children);
|
|
484
|
+
const newChildren = (_childrenArray$find = childrenArray.find(child => child.id.startsWith('searchbox-content__'))) === null || _childrenArray$find === void 0 ? void 0 : _childrenArray$find.children;
|
|
485
|
+
if (newChildren && newChildren.length > 0) {
|
|
486
|
+
const filteredChildren = Array.from(newChildren).filter(child => child.dataset.isgroupname !== 'true');
|
|
482
487
|
setFilteredChildrenArray(filteredChildren);
|
|
483
488
|
const newIndex = focusedIndex !== null ? (focusedIndex + (e.key === 'ArrowUp' ? -1 : 1) + filteredChildren.length) % filteredChildren.length : 0;
|
|
484
489
|
if (focusedIndex !== null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBox.js","names":["_chaynsApi","require","_framerMotion","_react","_interopRequireWildcard","_reactDom","_styledComponents","_calculate","_searchBox","_Icon","_interopRequireDefault","_Input","_GroupName","_SearchBoxBody","_SearchBoxItem","_SearchBoxItem2","_SearchBox","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","SearchBox","forwardRef","placeholder","lists","onChange","onBlur","onSelect","onKeyDown","selectedId","container","document","body","shouldShowRoundImage","shouldShowContentOnEmptyInput","shouldAddInputToList","shouldShowToggleIcon","ref","matchingListsItems","setMatchingListsItems","useState","selectedImage","setSelectedImage","value","setValue","isAnimating","setIsAnimating","height","setHeight","width","setWidth","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","length","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","portal","setPortal","internalCoordinates","setInternalCoordinates","x","y","boxRef","useRef","contentRef","inputRef","theme","useTheme","browser","getDevice","useEffect","current","getBoundingClientRect","filterbuttons","useMemo","items","forEach","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","newList","searchList","searchString","undefined","filteredMatchingListItems","map","filter","item","handleOpen","useCallback","bodyHeight","handleClose","handleFilterButtonsGroupSelect","keys","handleOutsideClick","event","contains","target","addEventListener","window","removeEventListener","textArray","calculateContentHeight","input","getElementById","getInputWidth","offsetWidth","ResizeObserver","observe","selectedItem","find","imageUrl","createElement","StyledSearchBoxItemImage","src","$shouldShowRoundImage","handleFocus","toLowerCase","handleClick","rightElement","StyledSearchBoxIcon","onClick","icons","color","handleChange","filteredLists","handleBlur","handleSelect","newItem","replace","content","index","key","name","handleKeyDown","_contentRef$current","preventDefault","children","filteredChildren","Array","from","child","dataset","isgroupname","newIndex","prevElement","tabIndex","newElement","focus","_element$children$","element","textContent","attributes","_element$children$2","nodeValue","handleKeyPress","keyCode","useImperativeHandle","clear","createPortal","AnimatePresence","initial","selectedGroups","coordinates","onGroupSelect","StyledSearchBox","onFocus","leftElement","displayName","_default","exports"],"sources":["../../../../src/components/search-box/SearchBox.tsx"],"sourcesContent":["import { getDevice } from 'chayns-api';\nimport { AnimatePresence } from 'framer-motion';\nimport React, {\n ChangeEvent,\n ChangeEventHandler,\n FC,\n FocusEvent,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n ReactPortal,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\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 } from '../../utils/searchBox';\nimport type { ContextMenuCoordinates } from '../context-menu/ContextMenu';\nimport Icon from '../icon/Icon';\nimport Input from '../input/Input';\nimport GroupName from './group-name/GroupName';\nimport SearchBoxBody from './search-box-body/SearchBoxBody';\nimport SearchBoxItem from './search-box-item/SearchBoxItem';\nimport { StyledSearchBoxItemImage } from './search-box-item/SearchBoxItem.styles';\nimport { StyledSearchBox, StyledSearchBoxIcon } from './SearchBox.styles';\n\nexport type SearchBoxRef = {\n clear: VoidFunction;\n};\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 * 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 placeholder that should be displayed.\n */\n placeholder?: string;\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 * 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 value in the Input is displayed in the list.\n */\n shouldAddInputToList: 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 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\nconst SearchBox: FC<SearchBoxProps> = forwardRef<SearchBoxRef, SearchBoxProps>(\n (\n {\n placeholder,\n lists,\n onChange,\n onBlur,\n onSelect,\n onKeyDown,\n selectedId,\n container = document.body,\n shouldShowRoundImage,\n shouldShowContentOnEmptyInput = true,\n shouldAddInputToList = true,\n shouldShowToggleIcon = false,\n },\n ref,\n ) => {\n const [matchingListsItems, setMatchingListsItems] = useState<ISearchBoxItems[]>(lists);\n const [selectedImage, setSelectedImage] = useState<ReactElement>();\n const [value, setValue] = useState('');\n const [isAnimating, setIsAnimating] = useState(false);\n const [height, setHeight] = useState<number>(0);\n const [width, setWidth] = useState(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 [portal, setPortal] = useState<ReactPortal>();\n const [internalCoordinates, setInternalCoordinates] = useState<ContextMenuCoordinates>({\n x: 0,\n y: 0,\n });\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const theme = useTheme();\n\n const { browser } = getDevice();\n\n useEffect(() => {\n if (boxRef.current) {\n const { x, y } = boxRef.current.getBoundingClientRect();\n\n setInternalCoordinates({\n x,\n y,\n });\n }\n }, []);\n\n /**\n * Checks if Lists are smaller then 1\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 = searchList({ items: list, searchString: value });\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(\n (item) => !(newMatchingItems.length === 1 && item.text === value),\n ),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n return newLists;\n }, [groups, lists, shouldAddInputToList, value]);\n\n const handleOpen = useCallback(() => {\n if (boxRef.current) {\n const { x, y, height: bodyHeight } = boxRef.current.getBoundingClientRect();\n\n setInternalCoordinates({\n x,\n y: y + bodyHeight,\n });\n\n setIsAnimating(true);\n }\n }, []);\n\n const handleClose = useCallback(() => {\n setIsAnimating(false);\n }, []);\n\n const handleFilterButtonsGroupSelect = (keys: string[]) => {\n setGroups(keys.length === 0 ? ['all'] : keys);\n };\n\n /**\n * This function closes the list of items\n */\n const handleOutsideClick = useCallback(\n (event: MouseEvent) => {\n if (boxRef.current && !boxRef.current.contains(event.target as Node)) {\n handleClose();\n }\n },\n [handleClose],\n );\n\n /**\n * This hook listens for clicks\n */\n useEffect(() => {\n document.addEventListener('click', handleOutsideClick);\n window.addEventListener('blur', () => handleClose());\n\n return () => {\n document.removeEventListener('click', handleOutsideClick);\n window.addEventListener('blur', () => handleClose());\n };\n }, [handleOutsideClick, boxRef, handleClose]);\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 /**\n * This hook calculates the width\n */\n useEffect(() => {\n const input = document.getElementById('search_box_input');\n\n const getInputWidth = () => {\n if (input) {\n setWidth(input.offsetWidth);\n }\n };\n\n if (input) {\n new ResizeObserver(getInputWidth).observe(input);\n }\n }, []);\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) {\n setValue('');\n }\n }, [selectedId]);\n\n /**\n * This function sets the items on focus if shouldShowContentOnEmptyInput\n */\n const handleFocus = useCallback(() => {\n if (shouldShowContentOnEmptyInput) {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: value });\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(\n (item) => !(newMatchingItems.length === 1 && item.text === value),\n ),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n if (filteredMatchingListItems.length !== 0) {\n handleOpen();\n } else {\n handleClose();\n }\n }\n }, [\n activeList,\n handleClose,\n handleOpen,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n value,\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 = searchList({ items: list, searchString: value });\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 value,\n ]);\n\n const handleClick = useCallback(() => {\n if (isAnimating) {\n handleClose();\n } else {\n handleOpen();\n }\n }, [handleClose, handleOpen, isAnimating]);\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 /**\n * This function handles changes of the input\n */\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const filteredLists: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: event.target.value });\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 if (filteredLists.length !== 0) {\n handleOpen();\n } else {\n handleClose();\n }\n }\n\n setValue(event.target.value);\n setInputToListValue(event.target.value);\n\n if (typeof onChange === 'function') {\n onChange(event);\n }\n },\n [\n activeList,\n handleClose,\n handleOpen,\n onChange,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n ],\n );\n\n /**\n * This function handles the blur event of the input\n */\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n if (typeof onBlur === 'function') {\n onBlur(event);\n }\n },\n [onBlur],\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 setValue(newItem.text);\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],\n );\n\n const content = useMemo(() => {\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 }) => {\n items.push(\n <SearchBoxItem\n key={`${id}_${groupName ?? ''}`}\n id={id}\n text={text}\n imageUrl={imageUrl}\n shouldShowRoundImage={shouldShowRoundImage}\n onSelect={handleSelect}\n groupName={groupName}\n />,\n );\n });\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n items.push(\n <SearchBoxItem\n id=\"input-value\"\n onSelect={handleSelect}\n text={`<b>${inputToListValue}</b`}\n />,\n );\n }\n\n return items;\n }, [\n matchingListsItems,\n shouldAddInputToList,\n inputToListValue,\n hasMultipleGroups,\n shouldShowRoundImage,\n handleSelect,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!isAnimating) {\n return;\n }\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n const children = contentRef.current?.children;\n\n if (children && children.length > 0) {\n const filteredChildren = Array.from(children).filter(\n (child) => (child as HTMLElement).dataset.isgroupname !== 'true',\n );\n setFilteredChildrenArray(filteredChildren);\n\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 newElement.tabIndex = 0;\n newElement.focus();\n }\n } else if (e.key === 'Enter' && focusedIndex !== null) {\n if (filteredChildrenArray) {\n const element = filteredChildrenArray[focusedIndex];\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 handleSelect({\n id: id.replace('search-box-item__', ''),\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 }, [filteredChildrenArray, focusedIndex, handleSelect, isAnimating]);\n\n const handleKeyPress = useCallback((event: KeyboardEvent) => {\n if (event.keyCode === 27) {\n setMatchingListsItems([]);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => setValue(''),\n }),\n [],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyPress);\n\n return () => {\n document.addEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n useEffect(() => {\n setPortal(() =>\n createPortal(\n <AnimatePresence initial={false}>\n {isAnimating && (\n <SearchBoxBody\n filterbuttons={filterbuttons}\n selectedGroups={groups}\n width={width}\n coordinates={internalCoordinates}\n browser={browser?.name}\n height={height}\n ref={contentRef}\n onGroupSelect={handleFilterButtonsGroupSelect}\n >\n {content}\n </SearchBoxBody>\n )}\n </AnimatePresence>,\n container,\n ),\n );\n }, [\n browser?.name,\n container,\n content,\n filterbuttons,\n groups,\n height,\n internalCoordinates,\n isAnimating,\n width,\n ]);\n\n return useMemo(\n () => (\n <StyledSearchBox ref={boxRef}>\n <div id=\"search_box_input\">\n <Input\n ref={inputRef}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n placeholder={placeholder}\n onKeyDown={onKeyDown}\n leftElement={selectedImage}\n rightElement={rightElement}\n value={value}\n />\n </div>\n {portal}\n </StyledSearchBox>\n ),\n [\n handleBlur,\n handleChange,\n handleFocus,\n onKeyDown,\n placeholder,\n portal,\n rightElement,\n selectedImage,\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","_framerMotion","_react","_interopRequireWildcard","_reactDom","_styledComponents","_calculate","_searchBox","_Icon","_interopRequireDefault","_Input","_GroupName","_SearchBoxBody","_SearchBoxItem","_SearchBoxItem2","_SearchBox","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","SearchBox","forwardRef","placeholder","lists","onChange","onBlur","onSelect","onKeyDown","selectedId","container","document","body","shouldShowRoundImage","shouldShowContentOnEmptyInput","shouldAddInputToList","shouldShowToggleIcon","ref","matchingListsItems","setMatchingListsItems","useState","selectedImage","setSelectedImage","value","setValue","isAnimating","setIsAnimating","height","setHeight","width","setWidth","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","length","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","portal","setPortal","internalCoordinates","setInternalCoordinates","x","y","boxRef","useRef","contentRef","inputRef","theme","useTheme","browser","getDevice","useEffect","current","getBoundingClientRect","filterbuttons","useMemo","items","forEach","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","newList","searchList","searchString","undefined","filteredMatchingListItems","map","filter","item","handleOpen","useCallback","bodyHeight","handleClose","handleFilterButtonsGroupSelect","keys","handleOutsideClick","event","contains","target","addEventListener","window","removeEventListener","textArray","calculateContentHeight","input","getElementById","getInputWidth","offsetWidth","ResizeObserver","observe","selectedItem","find","imageUrl","createElement","StyledSearchBoxItemImage","src","$shouldShowRoundImage","handleFocus","toLowerCase","handleClick","rightElement","StyledSearchBoxIcon","onClick","icons","color","handleChange","filteredLists","handleBlur","handleSelect","newItem","replace","content","index","key","name","handleKeyDown","_contentRef$current","_childrenArray$find","preventDefault","children","childrenArray","Array","from","newChildren","child","startsWith","filteredChildren","dataset","isgroupname","newIndex","prevElement","tabIndex","newElement","focus","_element$children$","element","textContent","attributes","_element$children$2","nodeValue","handleKeyPress","keyCode","useImperativeHandle","clear","createPortal","AnimatePresence","initial","selectedGroups","coordinates","onGroupSelect","StyledSearchBox","onFocus","leftElement","displayName","_default","exports"],"sources":["../../../../src/components/search-box/SearchBox.tsx"],"sourcesContent":["import { getDevice } from 'chayns-api';\nimport { AnimatePresence } from 'framer-motion';\nimport React, {\n ChangeEvent,\n ChangeEventHandler,\n FC,\n FocusEvent,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n ReactPortal,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\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 } from '../../utils/searchBox';\nimport type { ContextMenuCoordinates } from '../context-menu/ContextMenu';\nimport Icon from '../icon/Icon';\nimport Input from '../input/Input';\nimport GroupName from './group-name/GroupName';\nimport SearchBoxBody from './search-box-body/SearchBoxBody';\nimport SearchBoxItem from './search-box-item/SearchBoxItem';\nimport { StyledSearchBoxItemImage } from './search-box-item/SearchBoxItem.styles';\nimport { StyledSearchBox, StyledSearchBoxIcon } from './SearchBox.styles';\n\nexport type SearchBoxRef = {\n clear: VoidFunction;\n};\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 * 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 placeholder that should be displayed.\n */\n placeholder?: string;\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 * 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 value in the Input is displayed in the list.\n */\n shouldAddInputToList: 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 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\nconst SearchBox: FC<SearchBoxProps> = forwardRef<SearchBoxRef, SearchBoxProps>(\n (\n {\n placeholder,\n lists,\n onChange,\n onBlur,\n onSelect,\n onKeyDown,\n selectedId,\n container = document.body,\n shouldShowRoundImage,\n shouldShowContentOnEmptyInput = true,\n shouldAddInputToList = true,\n shouldShowToggleIcon = false,\n },\n ref,\n ) => {\n const [matchingListsItems, setMatchingListsItems] = useState<ISearchBoxItems[]>(lists);\n const [selectedImage, setSelectedImage] = useState<ReactElement>();\n const [value, setValue] = useState('');\n const [isAnimating, setIsAnimating] = useState(false);\n const [height, setHeight] = useState<number>(0);\n const [width, setWidth] = useState(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 [portal, setPortal] = useState<ReactPortal>();\n const [internalCoordinates, setInternalCoordinates] = useState<ContextMenuCoordinates>({\n x: 0,\n y: 0,\n });\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const theme = useTheme();\n\n const { browser } = getDevice();\n\n useEffect(() => {\n if (boxRef.current) {\n const { x, y } = boxRef.current.getBoundingClientRect();\n\n setInternalCoordinates({\n x,\n y,\n });\n }\n }, []);\n\n /**\n * Checks if Lists are smaller then 1\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 = searchList({ items: list, searchString: value });\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(\n (item) => !(newMatchingItems.length === 1 && item.text === value),\n ),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n return newLists;\n }, [groups, lists, shouldAddInputToList, value]);\n\n const handleOpen = useCallback(() => {\n if (boxRef.current) {\n const { x, y, height: bodyHeight } = boxRef.current.getBoundingClientRect();\n\n setInternalCoordinates({\n x,\n y: y + bodyHeight,\n });\n\n setIsAnimating(true);\n }\n }, []);\n\n const handleClose = useCallback(() => {\n setIsAnimating(false);\n }, []);\n\n const handleFilterButtonsGroupSelect = (keys: string[]) => {\n setGroups(keys.length === 0 ? ['all'] : keys);\n };\n\n /**\n * This function closes the list of items\n */\n const handleOutsideClick = useCallback(\n (event: MouseEvent) => {\n if (\n boxRef.current &&\n !boxRef.current.contains(event.target as Node) &&\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n handleClose();\n }\n },\n [handleClose],\n );\n\n /**\n * This hook listens for clicks\n */\n useEffect(() => {\n document.addEventListener('click', handleOutsideClick);\n window.addEventListener('blur', () => handleClose());\n\n return () => {\n document.removeEventListener('click', handleOutsideClick);\n window.addEventListener('blur', () => handleClose());\n };\n }, [handleOutsideClick, boxRef, handleClose]);\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 /**\n * This hook calculates the width\n */\n useEffect(() => {\n const input = document.getElementById('search_box_input');\n\n const getInputWidth = () => {\n if (input) {\n setWidth(input.offsetWidth);\n }\n };\n\n if (input) {\n new ResizeObserver(getInputWidth).observe(input);\n }\n }, []);\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) {\n setValue('');\n }\n }, [selectedId]);\n\n /**\n * This function sets the items on focus if shouldShowContentOnEmptyInput\n */\n const handleFocus = useCallback(() => {\n if (shouldShowContentOnEmptyInput) {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: value });\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(\n (item) => !(newMatchingItems.length === 1 && item.text === value),\n ),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n if (filteredMatchingListItems.length !== 0) {\n handleOpen();\n } else {\n handleClose();\n }\n }\n }, [\n activeList,\n handleClose,\n handleOpen,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n value,\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 = searchList({ items: list, searchString: value });\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 value,\n ]);\n\n const handleClick = useCallback(() => {\n if (isAnimating) {\n handleClose();\n } else {\n handleOpen();\n }\n }, [handleClose, handleOpen, isAnimating]);\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 /**\n * This function handles changes of the input\n */\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const filteredLists: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: event.target.value });\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 if (filteredLists.length !== 0) {\n handleOpen();\n } else {\n handleClose();\n }\n }\n\n setValue(event.target.value);\n setInputToListValue(event.target.value);\n\n if (typeof onChange === 'function') {\n onChange(event);\n }\n },\n [\n activeList,\n handleClose,\n handleOpen,\n onChange,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n ],\n );\n\n /**\n * This function handles the blur event of the input\n */\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n if (typeof onBlur === 'function') {\n onBlur(event);\n }\n },\n [onBlur],\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 setValue(newItem.text);\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],\n );\n\n const content = useMemo(() => {\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 }) => {\n items.push(\n <SearchBoxItem\n key={`${id}_${groupName ?? ''}`}\n id={id}\n text={text}\n imageUrl={imageUrl}\n shouldShowRoundImage={shouldShowRoundImage}\n onSelect={handleSelect}\n groupName={groupName}\n />,\n );\n });\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n items.push(\n <SearchBoxItem\n id=\"input-value\"\n onSelect={handleSelect}\n text={`<b>${inputToListValue}</b`}\n />,\n );\n }\n\n return items;\n }, [\n matchingListsItems,\n shouldAddInputToList,\n inputToListValue,\n hasMultipleGroups,\n shouldShowRoundImage,\n handleSelect,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!isAnimating) {\n return;\n }\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\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('searchbox-content__'),\n )?.children;\n\n if (newChildren && newChildren.length > 0) {\n const filteredChildren = Array.from(newChildren).filter(\n (child) => (child as HTMLElement).dataset.isgroupname !== 'true',\n );\n setFilteredChildrenArray(filteredChildren);\n\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 newElement.tabIndex = 0;\n newElement.focus();\n }\n } else if (e.key === 'Enter' && focusedIndex !== null) {\n if (filteredChildrenArray) {\n const element = filteredChildrenArray[focusedIndex];\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 handleSelect({\n id: id.replace('search-box-item__', ''),\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 }, [filteredChildrenArray, focusedIndex, handleSelect, isAnimating]);\n\n const handleKeyPress = useCallback((event: KeyboardEvent) => {\n if (event.keyCode === 27) {\n setMatchingListsItems([]);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => setValue(''),\n }),\n [],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyPress);\n\n return () => {\n document.addEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n useEffect(() => {\n setPortal(() =>\n createPortal(\n <AnimatePresence initial={false}>\n {isAnimating && (\n <SearchBoxBody\n filterbuttons={filterbuttons}\n selectedGroups={groups}\n width={width}\n coordinates={internalCoordinates}\n browser={browser?.name}\n height={height}\n ref={contentRef}\n onGroupSelect={handleFilterButtonsGroupSelect}\n >\n {content}\n </SearchBoxBody>\n )}\n </AnimatePresence>,\n container,\n ),\n );\n }, [\n browser?.name,\n container,\n content,\n filterbuttons,\n groups,\n height,\n internalCoordinates,\n isAnimating,\n width,\n ]);\n\n return useMemo(\n () => (\n <StyledSearchBox ref={boxRef}>\n <div id=\"search_box_input\">\n <Input\n ref={inputRef}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n placeholder={placeholder}\n onKeyDown={onKeyDown}\n leftElement={selectedImage}\n rightElement={rightElement}\n value={value}\n />\n </div>\n {portal}\n </StyledSearchBox>\n ),\n [\n handleBlur,\n handleChange,\n handleFocus,\n onKeyDown,\n placeholder,\n portal,\n rightElement,\n selectedImage,\n value,\n ],\n );\n },\n);\n\nSearchBox.displayName = 'SearchBox';\n\nexport default SearchBox;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -47,6 +47,7 @@ const SearchBoxBody = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
|
47
47
|
}
|
|
48
48
|
}, [selectedGroups]);
|
|
49
49
|
return (0, _react.useMemo)(() => /*#__PURE__*/_react.default.createElement(_SearchBoxBody.StyledMotionSearchBoxBody, {
|
|
50
|
+
ref: ref,
|
|
50
51
|
$width: width,
|
|
51
52
|
style: {
|
|
52
53
|
left: coordinates.x,
|
|
@@ -83,7 +84,6 @@ const SearchBoxBody = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
|
83
84
|
key: "content",
|
|
84
85
|
id: `searchbox-content__${uuid}`,
|
|
85
86
|
$browser: browser,
|
|
86
|
-
ref: ref,
|
|
87
87
|
tabIndex: 0,
|
|
88
88
|
onScroll: handleScroll
|
|
89
89
|
}, children)), [browser, children, coordinates.x, coordinates.y, currentGroupName, filterbuttons, handleScroll, hasScrolled, headHeight, height, onGroupSelect, ref, selectedGroups, uuid, width]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBoxBody.js","names":["_react","_interopRequireWildcard","require","_useElementSize","_uuid","_searchBox","_FilterButtons","_interopRequireDefault","_SearchBoxBody","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","SearchBoxBody","forwardRef","filterbuttons","coordinates","selectedGroups","width","browser","height","children","onGroupSelect","ref","hasScrolled","setHasScrolled","useState","currentGroupName","setCurrentGroupName","headRef","useRef","headSize","useElementSize","uuid","useUuid","headHeight","useMemo","useEffect","element","document","getElementById","length","getCurrentGroupName","handleScroll","useCallback","event","scrollTop","target","createElement","StyledMotionSearchBoxBody","$width","style","left","x","top","y","initial","opacity","exit","animate","transition","duration","type","StyledSearchBoxBodyHead","$hasScrolled","$hasGroupName","items","size","onSelect","selectedItemIds","StyledSearchBoxBodyHeadGroupName","StyledSearchBoxBodyContent","$height","$headHeight","key","id","$browser","tabIndex","onScroll","displayName","_default","exports"],"sources":["../../../../../src/components/search-box/search-box-body/SearchBoxBody.tsx"],"sourcesContent":["import type { Browser } from 'detect-browser';\nimport React, {\n forwardRef,\n UIEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { useElementSize } from '../../../hooks/useElementSize';\nimport { useUuid } from '../../../hooks/uuid';\nimport type { IFilterButtonItem } from '../../../types/filterButtons';\nimport { getCurrentGroupName } from '../../../utils/searchBox';\nimport FilterButtons from '../../filter-buttons/FilterButtons';\nimport {\n StyledMotionSearchBoxBody,\n StyledSearchBoxBodyContent,\n StyledSearchBoxBodyHead,\n StyledSearchBoxBodyHeadGroupName,\n} from './SearchBoxBody.styles';\n\nexport type SearchBoxBodyProps = {\n children: ReactNode;\n filterbuttons?: IFilterButtonItem[];\n selectedGroups?: string[];\n height: number;\n width: number;\n browser: Browser | 'bot' | null | undefined;\n onGroupSelect?: (keys: string[]) => void;\n coordinates: { x: number; y: number };\n};\n\nconst SearchBoxBody = forwardRef<HTMLDivElement, SearchBoxBodyProps>(\n (\n {\n filterbuttons,\n coordinates,\n selectedGroups,\n width,\n browser,\n height,\n children,\n onGroupSelect,\n },\n ref,\n ) => {\n const [hasScrolled, setHasScrolled] = useState(false);\n const [currentGroupName, setCurrentGroupName] = useState('');\n\n const headRef = useRef<HTMLDivElement>(null);\n\n const headSize = useElementSize(headRef);\n\n const uuid = useUuid();\n\n const headHeight = useMemo(\n () => (headSize?.height ? headSize.height + 15 : 0),\n [headSize?.height],\n );\n\n useEffect(() => {\n const element = document.getElementById(`searchbox-content__${uuid}`);\n\n if (\n element &&\n ((selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1)\n ) {\n setCurrentGroupName(getCurrentGroupName(element));\n } else {\n setCurrentGroupName('');\n }\n }, [uuid, children, selectedGroups]);\n\n const handleScroll = useCallback(\n (event: UIEvent) => {\n const { scrollTop } = event.target as HTMLDivElement;\n\n setHasScrolled(scrollTop > 1);\n\n if (\n (selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1\n ) {\n setCurrentGroupName(getCurrentGroupName(event.target as HTMLDivElement));\n }\n },\n [selectedGroups],\n );\n\n return useMemo(\n () => (\n <StyledMotionSearchBoxBody\n $width={width}\n style={{ left: coordinates.x, top: coordinates.y }}\n initial={{ height: 0, opacity: 0 }}\n exit={{ height: 0, opacity: 0 }}\n animate={{ height: 'fit-content', opacity: 1 }}\n transition={{\n duration: 0.2,\n type: 'tween',\n }}\n >\n {filterbuttons && filterbuttons?.length > 1 && (\n <StyledSearchBoxBodyHead\n ref={headRef}\n $hasScrolled={hasScrolled}\n $hasGroupName={!!currentGroupName}\n >\n <FilterButtons\n items={filterbuttons}\n size={0}\n onSelect={onGroupSelect}\n selectedItemIds={selectedGroups}\n />\n <StyledSearchBoxBodyHeadGroupName>\n {currentGroupName}\n </StyledSearchBoxBodyHeadGroupName>\n </StyledSearchBoxBodyHead>\n )}\n <StyledSearchBoxBodyContent\n $height={height}\n $headHeight={headHeight}\n key=\"content\"\n id={`searchbox-content__${uuid}`}\n $browser={browser}\n ref={ref}\n tabIndex={0}\n onScroll={handleScroll}\n >\n {children}\n </StyledSearchBoxBodyContent>\n </StyledMotionSearchBoxBody>\n ),\n [\n browser,\n children,\n coordinates.x,\n coordinates.y,\n currentGroupName,\n filterbuttons,\n handleScroll,\n hasScrolled,\n headHeight,\n height,\n onGroupSelect,\n ref,\n selectedGroups,\n uuid,\n width,\n ],\n );\n },\n);\n\nSearchBoxBody.displayName = 'SearchBoxBody';\n\nexport default SearchBoxBody;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SearchBoxBody.js","names":["_react","_interopRequireWildcard","require","_useElementSize","_uuid","_searchBox","_FilterButtons","_interopRequireDefault","_SearchBoxBody","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","SearchBoxBody","forwardRef","filterbuttons","coordinates","selectedGroups","width","browser","height","children","onGroupSelect","ref","hasScrolled","setHasScrolled","useState","currentGroupName","setCurrentGroupName","headRef","useRef","headSize","useElementSize","uuid","useUuid","headHeight","useMemo","useEffect","element","document","getElementById","length","getCurrentGroupName","handleScroll","useCallback","event","scrollTop","target","createElement","StyledMotionSearchBoxBody","$width","style","left","x","top","y","initial","opacity","exit","animate","transition","duration","type","StyledSearchBoxBodyHead","$hasScrolled","$hasGroupName","items","size","onSelect","selectedItemIds","StyledSearchBoxBodyHeadGroupName","StyledSearchBoxBodyContent","$height","$headHeight","key","id","$browser","tabIndex","onScroll","displayName","_default","exports"],"sources":["../../../../../src/components/search-box/search-box-body/SearchBoxBody.tsx"],"sourcesContent":["import type { Browser } from 'detect-browser';\nimport React, {\n forwardRef,\n UIEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { useElementSize } from '../../../hooks/useElementSize';\nimport { useUuid } from '../../../hooks/uuid';\nimport type { IFilterButtonItem } from '../../../types/filterButtons';\nimport { getCurrentGroupName } from '../../../utils/searchBox';\nimport FilterButtons from '../../filter-buttons/FilterButtons';\nimport {\n StyledMotionSearchBoxBody,\n StyledSearchBoxBodyContent,\n StyledSearchBoxBodyHead,\n StyledSearchBoxBodyHeadGroupName,\n} from './SearchBoxBody.styles';\n\nexport type SearchBoxBodyProps = {\n children: ReactNode;\n filterbuttons?: IFilterButtonItem[];\n selectedGroups?: string[];\n height: number;\n width: number;\n browser: Browser | 'bot' | null | undefined;\n onGroupSelect?: (keys: string[]) => void;\n coordinates: { x: number; y: number };\n};\n\nconst SearchBoxBody = forwardRef<HTMLDivElement, SearchBoxBodyProps>(\n (\n {\n filterbuttons,\n coordinates,\n selectedGroups,\n width,\n browser,\n height,\n children,\n onGroupSelect,\n },\n ref,\n ) => {\n const [hasScrolled, setHasScrolled] = useState(false);\n const [currentGroupName, setCurrentGroupName] = useState('');\n\n const headRef = useRef<HTMLDivElement>(null);\n\n const headSize = useElementSize(headRef);\n\n const uuid = useUuid();\n\n const headHeight = useMemo(\n () => (headSize?.height ? headSize.height + 15 : 0),\n [headSize?.height],\n );\n\n useEffect(() => {\n const element = document.getElementById(`searchbox-content__${uuid}`);\n\n if (\n element &&\n ((selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1)\n ) {\n setCurrentGroupName(getCurrentGroupName(element));\n } else {\n setCurrentGroupName('');\n }\n }, [uuid, children, selectedGroups]);\n\n const handleScroll = useCallback(\n (event: UIEvent) => {\n const { scrollTop } = event.target as HTMLDivElement;\n\n setHasScrolled(scrollTop > 1);\n\n if (\n (selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1\n ) {\n setCurrentGroupName(getCurrentGroupName(event.target as HTMLDivElement));\n }\n },\n [selectedGroups],\n );\n\n return useMemo(\n () => (\n <StyledMotionSearchBoxBody\n ref={ref}\n $width={width}\n style={{ left: coordinates.x, top: coordinates.y }}\n initial={{ height: 0, opacity: 0 }}\n exit={{ height: 0, opacity: 0 }}\n animate={{ height: 'fit-content', opacity: 1 }}\n transition={{\n duration: 0.2,\n type: 'tween',\n }}\n >\n {filterbuttons && filterbuttons?.length > 1 && (\n <StyledSearchBoxBodyHead\n ref={headRef}\n $hasScrolled={hasScrolled}\n $hasGroupName={!!currentGroupName}\n >\n <FilterButtons\n items={filterbuttons}\n size={0}\n onSelect={onGroupSelect}\n selectedItemIds={selectedGroups}\n />\n <StyledSearchBoxBodyHeadGroupName>\n {currentGroupName}\n </StyledSearchBoxBodyHeadGroupName>\n </StyledSearchBoxBodyHead>\n )}\n <StyledSearchBoxBodyContent\n $height={height}\n $headHeight={headHeight}\n key=\"content\"\n id={`searchbox-content__${uuid}`}\n $browser={browser}\n tabIndex={0}\n onScroll={handleScroll}\n >\n {children}\n </StyledSearchBoxBodyContent>\n </StyledMotionSearchBoxBody>\n ),\n [\n browser,\n children,\n coordinates.x,\n coordinates.y,\n currentGroupName,\n filterbuttons,\n handleScroll,\n hasScrolled,\n headHeight,\n height,\n onGroupSelect,\n ref,\n selectedGroups,\n uuid,\n width,\n ],\n );\n },\n);\n\nSearchBoxBody.displayName = 'SearchBoxBody';\n\nexport default SearchBoxBody;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popup.styles.js","names":["styled","css","StyledPopup","span","_ref","$shouldUseChildrenWidth","StyledPopupPseudo","div","_ref2","$menuHeight"],"sources":["../../../../src/components/popup/Popup.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport type { WithTheme } from '../color-scheme-provider/ColorSchemeProvider';\n\ntype StyledPopupProps = WithTheme<{\n $shouldUseChildrenWidth: boolean;\n}>;\n\nexport const StyledPopup = styled.span<StyledPopupProps>`\n cursor: pointer;\n position: relative;\n\n ${({ $shouldUseChildrenWidth }) =>\n $shouldUseChildrenWidth &&\n css`\n display: flex;\n width: fit-content;\n height: fit-content;\n `}\n`;\n\nexport const StyledPopupPseudo = styled.div<{\n $menuHeight: number;\n}>`\n top: ${({ $menuHeight }) => `${$menuHeight - 0}px`};\n left: 0;\n margin: 2px;\n pointer-events: none;\n visibility: hidden;\n position: absolute;\n
|
|
1
|
+
{"version":3,"file":"Popup.styles.js","names":["styled","css","StyledPopup","span","_ref","$shouldUseChildrenWidth","StyledPopupPseudo","div","_ref2","$menuHeight"],"sources":["../../../../src/components/popup/Popup.styles.ts"],"sourcesContent":["import styled, { css } from 'styled-components';\nimport type { WithTheme } from '../color-scheme-provider/ColorSchemeProvider';\n\ntype StyledPopupProps = WithTheme<{\n $shouldUseChildrenWidth: boolean;\n}>;\n\nexport const StyledPopup = styled.span<StyledPopupProps>`\n cursor: pointer;\n position: relative;\n\n ${({ $shouldUseChildrenWidth }) =>\n $shouldUseChildrenWidth &&\n css`\n display: flex;\n width: fit-content;\n height: fit-content;\n `}\n`;\n\nexport const StyledPopupPseudo = styled.div<{\n $menuHeight: number;\n}>`\n top: ${({ $menuHeight }) => `${$menuHeight - 0}px`};\n left: 0;\n margin: 2px;\n pointer-events: none;\n visibility: hidden;\n position: absolute;\n`;\n"],"mappings":"AAAA,OAAOA,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAO/C,OAAO,MAAMC,WAAW,GAAGF,MAAM,CAACG,IAAsB;AACxD;AACA;AACA;AACA,MAAMC,IAAA;EAAA,IAAC;IAAEC;EAAwB,CAAC,GAAAD,IAAA;EAAA,OAC1BC,uBAAuB,IACvBJ,GAAG;AACX;AACA;AACA;AACA,SAAS;AAAA;AACT,CAAC;AAED,OAAO,MAAMK,iBAAiB,GAAGN,MAAM,CAACO,GAEtC;AACF,WAAWC,KAAA;EAAA,IAAC;IAAEC;EAAY,CAAC,GAAAD,KAAA;EAAA,OAAK,GAAGC,WAAW,GAAG,CAAC,IAAI;AAAA;AACtD;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -163,7 +163,7 @@ const SearchBox = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
|
163
163
|
* This function closes the list of items
|
|
164
164
|
*/
|
|
165
165
|
const handleOutsideClick = useCallback(event => {
|
|
166
|
-
if (boxRef.current && !boxRef.current.contains(event.target)) {
|
|
166
|
+
if (boxRef.current && !boxRef.current.contains(event.target) && contentRef.current && !contentRef.current.contains(event.target)) {
|
|
167
167
|
handleClose();
|
|
168
168
|
}
|
|
169
169
|
}, [handleClose]);
|
|
@@ -491,8 +491,13 @@ const SearchBox = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
|
491
491
|
if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {
|
|
492
492
|
e.preventDefault();
|
|
493
493
|
const children = contentRef.current?.children;
|
|
494
|
-
if (children
|
|
495
|
-
|
|
494
|
+
if (!children) {
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
const childrenArray = Array.from(children);
|
|
498
|
+
const newChildren = childrenArray.find(child => child.id.startsWith('searchbox-content__'))?.children;
|
|
499
|
+
if (newChildren && newChildren.length > 0) {
|
|
500
|
+
const filteredChildren = Array.from(newChildren).filter(child => child.dataset.isgroupname !== 'true');
|
|
496
501
|
setFilteredChildrenArray(filteredChildren);
|
|
497
502
|
const newIndex = focusedIndex !== null ? (focusedIndex + (e.key === 'ArrowUp' ? -1 : 1) + filteredChildren.length) % filteredChildren.length : 0;
|
|
498
503
|
if (focusedIndex !== null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBox.js","names":["getDevice","AnimatePresence","React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","createPortal","useTheme","calculateContentHeight","searchList","Icon","Input","GroupName","SearchBoxBody","SearchBoxItem","StyledSearchBoxItemImage","StyledSearchBox","StyledSearchBoxIcon","SearchBox","_ref","ref","placeholder","lists","onChange","onBlur","onSelect","onKeyDown","selectedId","container","document","body","shouldShowRoundImage","shouldShowContentOnEmptyInput","shouldAddInputToList","shouldShowToggleIcon","matchingListsItems","setMatchingListsItems","selectedImage","setSelectedImage","value","setValue","isAnimating","setIsAnimating","height","setHeight","width","setWidth","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","length","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","portal","setPortal","internalCoordinates","setInternalCoordinates","x","y","boxRef","contentRef","inputRef","theme","browser","current","getBoundingClientRect","filterbuttons","items","forEach","_ref2","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","_ref3","newList","searchString","undefined","filteredMatchingListItems","map","_ref4","filter","item","handleOpen","bodyHeight","handleClose","handleFilterButtonsGroupSelect","keys","handleOutsideClick","event","contains","target","addEventListener","window","removeEventListener","textArray","_ref5","_ref6","input","getElementById","getInputWidth","offsetWidth","ResizeObserver","observe","_ref7","selectedItem","find","_ref8","imageUrl","createElement","src","$shouldShowRoundImage","handleFocus","_ref9","_ref10","_ref11","_ref12","_ref13","toLowerCase","handleClick","rightElement","onClick","icons","color","handleChange","filteredLists","_ref14","handleBlur","handleSelect","newItem","replace","content","_ref15","index","key","name","_ref16","handleKeyDown","e","preventDefault","children","filteredChildren","Array","from","child","dataset","isgroupname","newIndex","prevElement","tabIndex","newElement","focus","element","textContent","attributes","nodeValue","handleKeyPress","keyCode","clear","initial","selectedGroups","coordinates","onGroupSelect","onFocus","leftElement","displayName"],"sources":["../../../../src/components/search-box/SearchBox.tsx"],"sourcesContent":["import { getDevice } from 'chayns-api';\nimport { AnimatePresence } from 'framer-motion';\nimport React, {\n ChangeEvent,\n ChangeEventHandler,\n FC,\n FocusEvent,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n ReactPortal,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\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 } from '../../utils/searchBox';\nimport type { ContextMenuCoordinates } from '../context-menu/ContextMenu';\nimport Icon from '../icon/Icon';\nimport Input from '../input/Input';\nimport GroupName from './group-name/GroupName';\nimport SearchBoxBody from './search-box-body/SearchBoxBody';\nimport SearchBoxItem from './search-box-item/SearchBoxItem';\nimport { StyledSearchBoxItemImage } from './search-box-item/SearchBoxItem.styles';\nimport { StyledSearchBox, StyledSearchBoxIcon } from './SearchBox.styles';\n\nexport type SearchBoxRef = {\n clear: VoidFunction;\n};\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 * 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 placeholder that should be displayed.\n */\n placeholder?: string;\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 * 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 value in the Input is displayed in the list.\n */\n shouldAddInputToList: 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 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\nconst SearchBox: FC<SearchBoxProps> = forwardRef<SearchBoxRef, SearchBoxProps>(\n (\n {\n placeholder,\n lists,\n onChange,\n onBlur,\n onSelect,\n onKeyDown,\n selectedId,\n container = document.body,\n shouldShowRoundImage,\n shouldShowContentOnEmptyInput = true,\n shouldAddInputToList = true,\n shouldShowToggleIcon = false,\n },\n ref,\n ) => {\n const [matchingListsItems, setMatchingListsItems] = useState<ISearchBoxItems[]>(lists);\n const [selectedImage, setSelectedImage] = useState<ReactElement>();\n const [value, setValue] = useState('');\n const [isAnimating, setIsAnimating] = useState(false);\n const [height, setHeight] = useState<number>(0);\n const [width, setWidth] = useState(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 [portal, setPortal] = useState<ReactPortal>();\n const [internalCoordinates, setInternalCoordinates] = useState<ContextMenuCoordinates>({\n x: 0,\n y: 0,\n });\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const theme = useTheme();\n\n const { browser } = getDevice();\n\n useEffect(() => {\n if (boxRef.current) {\n const { x, y } = boxRef.current.getBoundingClientRect();\n\n setInternalCoordinates({\n x,\n y,\n });\n }\n }, []);\n\n /**\n * Checks if Lists are smaller then 1\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 = searchList({ items: list, searchString: value });\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(\n (item) => !(newMatchingItems.length === 1 && item.text === value),\n ),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n return newLists;\n }, [groups, lists, shouldAddInputToList, value]);\n\n const handleOpen = useCallback(() => {\n if (boxRef.current) {\n const { x, y, height: bodyHeight } = boxRef.current.getBoundingClientRect();\n\n setInternalCoordinates({\n x,\n y: y + bodyHeight,\n });\n\n setIsAnimating(true);\n }\n }, []);\n\n const handleClose = useCallback(() => {\n setIsAnimating(false);\n }, []);\n\n const handleFilterButtonsGroupSelect = (keys: string[]) => {\n setGroups(keys.length === 0 ? ['all'] : keys);\n };\n\n /**\n * This function closes the list of items\n */\n const handleOutsideClick = useCallback(\n (event: MouseEvent) => {\n if (boxRef.current && !boxRef.current.contains(event.target as Node)) {\n handleClose();\n }\n },\n [handleClose],\n );\n\n /**\n * This hook listens for clicks\n */\n useEffect(() => {\n document.addEventListener('click', handleOutsideClick);\n window.addEventListener('blur', () => handleClose());\n\n return () => {\n document.removeEventListener('click', handleOutsideClick);\n window.addEventListener('blur', () => handleClose());\n };\n }, [handleOutsideClick, boxRef, handleClose]);\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 /**\n * This hook calculates the width\n */\n useEffect(() => {\n const input = document.getElementById('search_box_input');\n\n const getInputWidth = () => {\n if (input) {\n setWidth(input.offsetWidth);\n }\n };\n\n if (input) {\n new ResizeObserver(getInputWidth).observe(input);\n }\n }, []);\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) {\n setValue('');\n }\n }, [selectedId]);\n\n /**\n * This function sets the items on focus if shouldShowContentOnEmptyInput\n */\n const handleFocus = useCallback(() => {\n if (shouldShowContentOnEmptyInput) {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: value });\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(\n (item) => !(newMatchingItems.length === 1 && item.text === value),\n ),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n if (filteredMatchingListItems.length !== 0) {\n handleOpen();\n } else {\n handleClose();\n }\n }\n }, [\n activeList,\n handleClose,\n handleOpen,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n value,\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 = searchList({ items: list, searchString: value });\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 value,\n ]);\n\n const handleClick = useCallback(() => {\n if (isAnimating) {\n handleClose();\n } else {\n handleOpen();\n }\n }, [handleClose, handleOpen, isAnimating]);\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 /**\n * This function handles changes of the input\n */\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const filteredLists: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: event.target.value });\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 if (filteredLists.length !== 0) {\n handleOpen();\n } else {\n handleClose();\n }\n }\n\n setValue(event.target.value);\n setInputToListValue(event.target.value);\n\n if (typeof onChange === 'function') {\n onChange(event);\n }\n },\n [\n activeList,\n handleClose,\n handleOpen,\n onChange,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n ],\n );\n\n /**\n * This function handles the blur event of the input\n */\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n if (typeof onBlur === 'function') {\n onBlur(event);\n }\n },\n [onBlur],\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 setValue(newItem.text);\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],\n );\n\n const content = useMemo(() => {\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 }) => {\n items.push(\n <SearchBoxItem\n key={`${id}_${groupName ?? ''}`}\n id={id}\n text={text}\n imageUrl={imageUrl}\n shouldShowRoundImage={shouldShowRoundImage}\n onSelect={handleSelect}\n groupName={groupName}\n />,\n );\n });\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n items.push(\n <SearchBoxItem\n id=\"input-value\"\n onSelect={handleSelect}\n text={`<b>${inputToListValue}</b`}\n />,\n );\n }\n\n return items;\n }, [\n matchingListsItems,\n shouldAddInputToList,\n inputToListValue,\n hasMultipleGroups,\n shouldShowRoundImage,\n handleSelect,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!isAnimating) {\n return;\n }\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n const children = contentRef.current?.children;\n\n if (children && children.length > 0) {\n const filteredChildren = Array.from(children).filter(\n (child) => (child as HTMLElement).dataset.isgroupname !== 'true',\n );\n setFilteredChildrenArray(filteredChildren);\n\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 newElement.tabIndex = 0;\n newElement.focus();\n }\n } else if (e.key === 'Enter' && focusedIndex !== null) {\n if (filteredChildrenArray) {\n const element = filteredChildrenArray[focusedIndex];\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 handleSelect({\n id: id.replace('search-box-item__', ''),\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 }, [filteredChildrenArray, focusedIndex, handleSelect, isAnimating]);\n\n const handleKeyPress = useCallback((event: KeyboardEvent) => {\n if (event.keyCode === 27) {\n setMatchingListsItems([]);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => setValue(''),\n }),\n [],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyPress);\n\n return () => {\n document.addEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n useEffect(() => {\n setPortal(() =>\n createPortal(\n <AnimatePresence initial={false}>\n {isAnimating && (\n <SearchBoxBody\n filterbuttons={filterbuttons}\n selectedGroups={groups}\n width={width}\n coordinates={internalCoordinates}\n browser={browser?.name}\n height={height}\n ref={contentRef}\n onGroupSelect={handleFilterButtonsGroupSelect}\n >\n {content}\n </SearchBoxBody>\n )}\n </AnimatePresence>,\n container,\n ),\n );\n }, [\n browser?.name,\n container,\n content,\n filterbuttons,\n groups,\n height,\n internalCoordinates,\n isAnimating,\n width,\n ]);\n\n return useMemo(\n () => (\n <StyledSearchBox ref={boxRef}>\n <div id=\"search_box_input\">\n <Input\n ref={inputRef}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n placeholder={placeholder}\n onKeyDown={onKeyDown}\n leftElement={selectedImage}\n rightElement={rightElement}\n value={value}\n />\n </div>\n {portal}\n </StyledSearchBox>\n ),\n [\n handleBlur,\n handleChange,\n handleFocus,\n onKeyDown,\n placeholder,\n portal,\n rightElement,\n selectedImage,\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":["getDevice","AnimatePresence","React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useRef","useState","createPortal","useTheme","calculateContentHeight","searchList","Icon","Input","GroupName","SearchBoxBody","SearchBoxItem","StyledSearchBoxItemImage","StyledSearchBox","StyledSearchBoxIcon","SearchBox","_ref","ref","placeholder","lists","onChange","onBlur","onSelect","onKeyDown","selectedId","container","document","body","shouldShowRoundImage","shouldShowContentOnEmptyInput","shouldAddInputToList","shouldShowToggleIcon","matchingListsItems","setMatchingListsItems","selectedImage","setSelectedImage","value","setValue","isAnimating","setIsAnimating","height","setHeight","width","setWidth","focusedIndex","setFocusedIndex","hasMultipleGroups","setHasMultipleGroups","length","filteredChildrenArray","setFilteredChildrenArray","inputToListValue","setInputToListValue","groups","setGroups","portal","setPortal","internalCoordinates","setInternalCoordinates","x","y","boxRef","contentRef","inputRef","theme","browser","current","getBoundingClientRect","filterbuttons","items","forEach","_ref2","groupName","push","id","text","activeList","newLists","list","includes","newMatchingItems","_ref3","newList","searchString","undefined","filteredMatchingListItems","map","_ref4","filter","item","handleOpen","bodyHeight","handleClose","handleFilterButtonsGroupSelect","keys","handleOutsideClick","event","contains","target","addEventListener","window","removeEventListener","textArray","_ref5","_ref6","input","getElementById","getInputWidth","offsetWidth","ResizeObserver","observe","_ref7","selectedItem","find","_ref8","imageUrl","createElement","src","$shouldShowRoundImage","handleFocus","_ref9","_ref10","_ref11","_ref12","_ref13","toLowerCase","handleClick","rightElement","onClick","icons","color","handleChange","filteredLists","_ref14","handleBlur","handleSelect","newItem","replace","content","_ref15","index","key","name","_ref16","handleKeyDown","e","preventDefault","children","childrenArray","Array","from","newChildren","child","startsWith","filteredChildren","dataset","isgroupname","newIndex","prevElement","tabIndex","newElement","focus","element","textContent","attributes","nodeValue","handleKeyPress","keyCode","clear","initial","selectedGroups","coordinates","onGroupSelect","onFocus","leftElement","displayName"],"sources":["../../../../src/components/search-box/SearchBox.tsx"],"sourcesContent":["import { getDevice } from 'chayns-api';\nimport { AnimatePresence } from 'framer-motion';\nimport React, {\n ChangeEvent,\n ChangeEventHandler,\n FC,\n FocusEvent,\n FocusEventHandler,\n forwardRef,\n KeyboardEventHandler,\n ReactElement,\n ReactPortal,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\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 } from '../../utils/searchBox';\nimport type { ContextMenuCoordinates } from '../context-menu/ContextMenu';\nimport Icon from '../icon/Icon';\nimport Input from '../input/Input';\nimport GroupName from './group-name/GroupName';\nimport SearchBoxBody from './search-box-body/SearchBoxBody';\nimport SearchBoxItem from './search-box-item/SearchBoxItem';\nimport { StyledSearchBoxItemImage } from './search-box-item/SearchBoxItem.styles';\nimport { StyledSearchBox, StyledSearchBoxIcon } from './SearchBox.styles';\n\nexport type SearchBoxRef = {\n clear: VoidFunction;\n};\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 * 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 placeholder that should be displayed.\n */\n placeholder?: string;\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 * 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 value in the Input is displayed in the list.\n */\n shouldAddInputToList: 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 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\nconst SearchBox: FC<SearchBoxProps> = forwardRef<SearchBoxRef, SearchBoxProps>(\n (\n {\n placeholder,\n lists,\n onChange,\n onBlur,\n onSelect,\n onKeyDown,\n selectedId,\n container = document.body,\n shouldShowRoundImage,\n shouldShowContentOnEmptyInput = true,\n shouldAddInputToList = true,\n shouldShowToggleIcon = false,\n },\n ref,\n ) => {\n const [matchingListsItems, setMatchingListsItems] = useState<ISearchBoxItems[]>(lists);\n const [selectedImage, setSelectedImage] = useState<ReactElement>();\n const [value, setValue] = useState('');\n const [isAnimating, setIsAnimating] = useState(false);\n const [height, setHeight] = useState<number>(0);\n const [width, setWidth] = useState(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 [portal, setPortal] = useState<ReactPortal>();\n const [internalCoordinates, setInternalCoordinates] = useState<ContextMenuCoordinates>({\n x: 0,\n y: 0,\n });\n\n const boxRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const theme = useTheme();\n\n const { browser } = getDevice();\n\n useEffect(() => {\n if (boxRef.current) {\n const { x, y } = boxRef.current.getBoundingClientRect();\n\n setInternalCoordinates({\n x,\n y,\n });\n }\n }, []);\n\n /**\n * Checks if Lists are smaller then 1\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 = searchList({ items: list, searchString: value });\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(\n (item) => !(newMatchingItems.length === 1 && item.text === value),\n ),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n return newLists;\n }, [groups, lists, shouldAddInputToList, value]);\n\n const handleOpen = useCallback(() => {\n if (boxRef.current) {\n const { x, y, height: bodyHeight } = boxRef.current.getBoundingClientRect();\n\n setInternalCoordinates({\n x,\n y: y + bodyHeight,\n });\n\n setIsAnimating(true);\n }\n }, []);\n\n const handleClose = useCallback(() => {\n setIsAnimating(false);\n }, []);\n\n const handleFilterButtonsGroupSelect = (keys: string[]) => {\n setGroups(keys.length === 0 ? ['all'] : keys);\n };\n\n /**\n * This function closes the list of items\n */\n const handleOutsideClick = useCallback(\n (event: MouseEvent) => {\n if (\n boxRef.current &&\n !boxRef.current.contains(event.target as Node) &&\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n handleClose();\n }\n },\n [handleClose],\n );\n\n /**\n * This hook listens for clicks\n */\n useEffect(() => {\n document.addEventListener('click', handleOutsideClick);\n window.addEventListener('blur', () => handleClose());\n\n return () => {\n document.removeEventListener('click', handleOutsideClick);\n window.addEventListener('blur', () => handleClose());\n };\n }, [handleOutsideClick, boxRef, handleClose]);\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 /**\n * This hook calculates the width\n */\n useEffect(() => {\n const input = document.getElementById('search_box_input');\n\n const getInputWidth = () => {\n if (input) {\n setWidth(input.offsetWidth);\n }\n };\n\n if (input) {\n new ResizeObserver(getInputWidth).observe(input);\n }\n }, []);\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) {\n setValue('');\n }\n }, [selectedId]);\n\n /**\n * This function sets the items on focus if shouldShowContentOnEmptyInput\n */\n const handleFocus = useCallback(() => {\n if (shouldShowContentOnEmptyInput) {\n const newMatchingItems: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: value });\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(\n (item) => !(newMatchingItems.length === 1 && item.text === value),\n ),\n }));\n\n setMatchingListsItems(filteredMatchingListItems);\n\n if (filteredMatchingListItems.length !== 0) {\n handleOpen();\n } else {\n handleClose();\n }\n }\n }, [\n activeList,\n handleClose,\n handleOpen,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n value,\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 = searchList({ items: list, searchString: value });\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 value,\n ]);\n\n const handleClick = useCallback(() => {\n if (isAnimating) {\n handleClose();\n } else {\n handleOpen();\n }\n }, [handleClose, handleOpen, isAnimating]);\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 /**\n * This function handles changes of the input\n */\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const filteredLists: ISearchBoxItems[] = [];\n\n activeList.forEach(({ list, groupName }) => {\n const newList = searchList({ items: list, searchString: event.target.value });\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 if (filteredLists.length !== 0) {\n handleOpen();\n } else {\n handleClose();\n }\n }\n\n setValue(event.target.value);\n setInputToListValue(event.target.value);\n\n if (typeof onChange === 'function') {\n onChange(event);\n }\n },\n [\n activeList,\n handleClose,\n handleOpen,\n onChange,\n shouldAddInputToList,\n shouldShowContentOnEmptyInput,\n ],\n );\n\n /**\n * This function handles the blur event of the input\n */\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLInputElement>) => {\n if (typeof onBlur === 'function') {\n onBlur(event);\n }\n },\n [onBlur],\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 setValue(newItem.text);\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],\n );\n\n const content = useMemo(() => {\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 }) => {\n items.push(\n <SearchBoxItem\n key={`${id}_${groupName ?? ''}`}\n id={id}\n text={text}\n imageUrl={imageUrl}\n shouldShowRoundImage={shouldShowRoundImage}\n onSelect={handleSelect}\n groupName={groupName}\n />,\n );\n });\n });\n\n if (shouldAddInputToList && inputToListValue !== '') {\n items.push(\n <SearchBoxItem\n id=\"input-value\"\n onSelect={handleSelect}\n text={`<b>${inputToListValue}</b`}\n />,\n );\n }\n\n return items;\n }, [\n matchingListsItems,\n shouldAddInputToList,\n inputToListValue,\n hasMultipleGroups,\n shouldShowRoundImage,\n handleSelect,\n ]);\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!isAnimating) {\n return;\n }\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\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('searchbox-content__'),\n )?.children;\n\n if (newChildren && newChildren.length > 0) {\n const filteredChildren = Array.from(newChildren).filter(\n (child) => (child as HTMLElement).dataset.isgroupname !== 'true',\n );\n setFilteredChildrenArray(filteredChildren);\n\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 newElement.tabIndex = 0;\n newElement.focus();\n }\n } else if (e.key === 'Enter' && focusedIndex !== null) {\n if (filteredChildrenArray) {\n const element = filteredChildrenArray[focusedIndex];\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 handleSelect({\n id: id.replace('search-box-item__', ''),\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 }, [filteredChildrenArray, focusedIndex, handleSelect, isAnimating]);\n\n const handleKeyPress = useCallback((event: KeyboardEvent) => {\n if (event.keyCode === 27) {\n setMatchingListsItems([]);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n clear: () => setValue(''),\n }),\n [],\n );\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyPress);\n\n return () => {\n document.addEventListener('keydown', handleKeyPress);\n };\n }, [handleKeyPress]);\n\n useEffect(() => {\n setPortal(() =>\n createPortal(\n <AnimatePresence initial={false}>\n {isAnimating && (\n <SearchBoxBody\n filterbuttons={filterbuttons}\n selectedGroups={groups}\n width={width}\n coordinates={internalCoordinates}\n browser={browser?.name}\n height={height}\n ref={contentRef}\n onGroupSelect={handleFilterButtonsGroupSelect}\n >\n {content}\n </SearchBoxBody>\n )}\n </AnimatePresence>,\n container,\n ),\n );\n }, [\n browser?.name,\n container,\n content,\n filterbuttons,\n groups,\n height,\n internalCoordinates,\n isAnimating,\n width,\n ]);\n\n return useMemo(\n () => (\n <StyledSearchBox ref={boxRef}>\n <div id=\"search_box_input\">\n <Input\n ref={inputRef}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n placeholder={placeholder}\n onKeyDown={onKeyDown}\n leftElement={selectedImage}\n rightElement={rightElement}\n value={value}\n />\n </div>\n {portal}\n </StyledSearchBox>\n ),\n [\n handleBlur,\n handleChange,\n handleFocus,\n onKeyDown,\n placeholder,\n portal,\n rightElement,\n selectedImage,\n value,\n ],\n );\n },\n);\n\nSearchBox.displayName = 'SearchBox';\n\nexport default SearchBox;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -39,6 +39,7 @@ const SearchBoxBody = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
|
39
39
|
}
|
|
40
40
|
}, [selectedGroups]);
|
|
41
41
|
return useMemo(() => /*#__PURE__*/React.createElement(StyledMotionSearchBoxBody, {
|
|
42
|
+
ref: ref,
|
|
42
43
|
$width: width,
|
|
43
44
|
style: {
|
|
44
45
|
left: coordinates.x,
|
|
@@ -75,7 +76,6 @@ const SearchBoxBody = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
|
75
76
|
key: "content",
|
|
76
77
|
id: `searchbox-content__${uuid}`,
|
|
77
78
|
$browser: browser,
|
|
78
|
-
ref: ref,
|
|
79
79
|
tabIndex: 0,
|
|
80
80
|
onScroll: handleScroll
|
|
81
81
|
}, children)), [browser, children, coordinates.x, coordinates.y, currentGroupName, filterbuttons, handleScroll, hasScrolled, headHeight, height, onGroupSelect, ref, selectedGroups, uuid, width]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchBoxBody.js","names":["React","forwardRef","useCallback","useEffect","useMemo","useRef","useState","useElementSize","useUuid","getCurrentGroupName","FilterButtons","StyledMotionSearchBoxBody","StyledSearchBoxBodyContent","StyledSearchBoxBodyHead","StyledSearchBoxBodyHeadGroupName","SearchBoxBody","_ref","ref","filterbuttons","coordinates","selectedGroups","width","browser","height","children","onGroupSelect","hasScrolled","setHasScrolled","currentGroupName","setCurrentGroupName","headRef","headSize","uuid","headHeight","element","document","getElementById","length","handleScroll","event","scrollTop","target","createElement","$width","style","left","x","top","y","initial","opacity","exit","animate","transition","duration","type","$hasScrolled","$hasGroupName","items","size","onSelect","selectedItemIds","$height","$headHeight","key","id","$browser","tabIndex","onScroll","displayName"],"sources":["../../../../../src/components/search-box/search-box-body/SearchBoxBody.tsx"],"sourcesContent":["import type { Browser } from 'detect-browser';\nimport React, {\n forwardRef,\n UIEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { useElementSize } from '../../../hooks/useElementSize';\nimport { useUuid } from '../../../hooks/uuid';\nimport type { IFilterButtonItem } from '../../../types/filterButtons';\nimport { getCurrentGroupName } from '../../../utils/searchBox';\nimport FilterButtons from '../../filter-buttons/FilterButtons';\nimport {\n StyledMotionSearchBoxBody,\n StyledSearchBoxBodyContent,\n StyledSearchBoxBodyHead,\n StyledSearchBoxBodyHeadGroupName,\n} from './SearchBoxBody.styles';\n\nexport type SearchBoxBodyProps = {\n children: ReactNode;\n filterbuttons?: IFilterButtonItem[];\n selectedGroups?: string[];\n height: number;\n width: number;\n browser: Browser | 'bot' | null | undefined;\n onGroupSelect?: (keys: string[]) => void;\n coordinates: { x: number; y: number };\n};\n\nconst SearchBoxBody = forwardRef<HTMLDivElement, SearchBoxBodyProps>(\n (\n {\n filterbuttons,\n coordinates,\n selectedGroups,\n width,\n browser,\n height,\n children,\n onGroupSelect,\n },\n ref,\n ) => {\n const [hasScrolled, setHasScrolled] = useState(false);\n const [currentGroupName, setCurrentGroupName] = useState('');\n\n const headRef = useRef<HTMLDivElement>(null);\n\n const headSize = useElementSize(headRef);\n\n const uuid = useUuid();\n\n const headHeight = useMemo(\n () => (headSize?.height ? headSize.height + 15 : 0),\n [headSize?.height],\n );\n\n useEffect(() => {\n const element = document.getElementById(`searchbox-content__${uuid}`);\n\n if (\n element &&\n ((selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1)\n ) {\n setCurrentGroupName(getCurrentGroupName(element));\n } else {\n setCurrentGroupName('');\n }\n }, [uuid, children, selectedGroups]);\n\n const handleScroll = useCallback(\n (event: UIEvent) => {\n const { scrollTop } = event.target as HTMLDivElement;\n\n setHasScrolled(scrollTop > 1);\n\n if (\n (selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1\n ) {\n setCurrentGroupName(getCurrentGroupName(event.target as HTMLDivElement));\n }\n },\n [selectedGroups],\n );\n\n return useMemo(\n () => (\n <StyledMotionSearchBoxBody\n $width={width}\n style={{ left: coordinates.x, top: coordinates.y }}\n initial={{ height: 0, opacity: 0 }}\n exit={{ height: 0, opacity: 0 }}\n animate={{ height: 'fit-content', opacity: 1 }}\n transition={{\n duration: 0.2,\n type: 'tween',\n }}\n >\n {filterbuttons && filterbuttons?.length > 1 && (\n <StyledSearchBoxBodyHead\n ref={headRef}\n $hasScrolled={hasScrolled}\n $hasGroupName={!!currentGroupName}\n >\n <FilterButtons\n items={filterbuttons}\n size={0}\n onSelect={onGroupSelect}\n selectedItemIds={selectedGroups}\n />\n <StyledSearchBoxBodyHeadGroupName>\n {currentGroupName}\n </StyledSearchBoxBodyHeadGroupName>\n </StyledSearchBoxBodyHead>\n )}\n <StyledSearchBoxBodyContent\n $height={height}\n $headHeight={headHeight}\n key=\"content\"\n id={`searchbox-content__${uuid}`}\n $browser={browser}\n
|
|
1
|
+
{"version":3,"file":"SearchBoxBody.js","names":["React","forwardRef","useCallback","useEffect","useMemo","useRef","useState","useElementSize","useUuid","getCurrentGroupName","FilterButtons","StyledMotionSearchBoxBody","StyledSearchBoxBodyContent","StyledSearchBoxBodyHead","StyledSearchBoxBodyHeadGroupName","SearchBoxBody","_ref","ref","filterbuttons","coordinates","selectedGroups","width","browser","height","children","onGroupSelect","hasScrolled","setHasScrolled","currentGroupName","setCurrentGroupName","headRef","headSize","uuid","headHeight","element","document","getElementById","length","handleScroll","event","scrollTop","target","createElement","$width","style","left","x","top","y","initial","opacity","exit","animate","transition","duration","type","$hasScrolled","$hasGroupName","items","size","onSelect","selectedItemIds","$height","$headHeight","key","id","$browser","tabIndex","onScroll","displayName"],"sources":["../../../../../src/components/search-box/search-box-body/SearchBoxBody.tsx"],"sourcesContent":["import type { Browser } from 'detect-browser';\nimport React, {\n forwardRef,\n UIEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { useElementSize } from '../../../hooks/useElementSize';\nimport { useUuid } from '../../../hooks/uuid';\nimport type { IFilterButtonItem } from '../../../types/filterButtons';\nimport { getCurrentGroupName } from '../../../utils/searchBox';\nimport FilterButtons from '../../filter-buttons/FilterButtons';\nimport {\n StyledMotionSearchBoxBody,\n StyledSearchBoxBodyContent,\n StyledSearchBoxBodyHead,\n StyledSearchBoxBodyHeadGroupName,\n} from './SearchBoxBody.styles';\n\nexport type SearchBoxBodyProps = {\n children: ReactNode;\n filterbuttons?: IFilterButtonItem[];\n selectedGroups?: string[];\n height: number;\n width: number;\n browser: Browser | 'bot' | null | undefined;\n onGroupSelect?: (keys: string[]) => void;\n coordinates: { x: number; y: number };\n};\n\nconst SearchBoxBody = forwardRef<HTMLDivElement, SearchBoxBodyProps>(\n (\n {\n filterbuttons,\n coordinates,\n selectedGroups,\n width,\n browser,\n height,\n children,\n onGroupSelect,\n },\n ref,\n ) => {\n const [hasScrolled, setHasScrolled] = useState(false);\n const [currentGroupName, setCurrentGroupName] = useState('');\n\n const headRef = useRef<HTMLDivElement>(null);\n\n const headSize = useElementSize(headRef);\n\n const uuid = useUuid();\n\n const headHeight = useMemo(\n () => (headSize?.height ? headSize.height + 15 : 0),\n [headSize?.height],\n );\n\n useEffect(() => {\n const element = document.getElementById(`searchbox-content__${uuid}`);\n\n if (\n element &&\n ((selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1)\n ) {\n setCurrentGroupName(getCurrentGroupName(element));\n } else {\n setCurrentGroupName('');\n }\n }, [uuid, children, selectedGroups]);\n\n const handleScroll = useCallback(\n (event: UIEvent) => {\n const { scrollTop } = event.target as HTMLDivElement;\n\n setHasScrolled(scrollTop > 1);\n\n if (\n (selectedGroups?.length === 1 && selectedGroups[0] === 'all') ||\n selectedGroups?.length !== 1\n ) {\n setCurrentGroupName(getCurrentGroupName(event.target as HTMLDivElement));\n }\n },\n [selectedGroups],\n );\n\n return useMemo(\n () => (\n <StyledMotionSearchBoxBody\n ref={ref}\n $width={width}\n style={{ left: coordinates.x, top: coordinates.y }}\n initial={{ height: 0, opacity: 0 }}\n exit={{ height: 0, opacity: 0 }}\n animate={{ height: 'fit-content', opacity: 1 }}\n transition={{\n duration: 0.2,\n type: 'tween',\n }}\n >\n {filterbuttons && filterbuttons?.length > 1 && (\n <StyledSearchBoxBodyHead\n ref={headRef}\n $hasScrolled={hasScrolled}\n $hasGroupName={!!currentGroupName}\n >\n <FilterButtons\n items={filterbuttons}\n size={0}\n onSelect={onGroupSelect}\n selectedItemIds={selectedGroups}\n />\n <StyledSearchBoxBodyHeadGroupName>\n {currentGroupName}\n </StyledSearchBoxBodyHeadGroupName>\n </StyledSearchBoxBodyHead>\n )}\n <StyledSearchBoxBodyContent\n $height={height}\n $headHeight={headHeight}\n key=\"content\"\n id={`searchbox-content__${uuid}`}\n $browser={browser}\n tabIndex={0}\n onScroll={handleScroll}\n >\n {children}\n </StyledSearchBoxBodyContent>\n </StyledMotionSearchBoxBody>\n ),\n [\n browser,\n children,\n coordinates.x,\n coordinates.y,\n currentGroupName,\n filterbuttons,\n handleScroll,\n hasScrolled,\n headHeight,\n height,\n onGroupSelect,\n ref,\n selectedGroups,\n uuid,\n width,\n ],\n );\n },\n);\n\nSearchBoxBody.displayName = 'SearchBoxBody';\n\nexport default SearchBoxBody;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chayns-components/core",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.799",
|
|
4
4
|
"description": "A set of beautiful React components for developing your own applications with chayns.",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"browserslist": [
|
|
@@ -85,5 +85,5 @@
|
|
|
85
85
|
"publishConfig": {
|
|
86
86
|
"access": "public"
|
|
87
87
|
},
|
|
88
|
-
"gitHead": "
|
|
88
|
+
"gitHead": "ebf6f69dcf160769e78a3033b42fda6aab0d0a4f"
|
|
89
89
|
}
|