{"version":3,"file":"static/chunks/dropdownMenu.e2f9cbefc90e1833.js","sources":["webpack://_N_E/./src/LegacyApp/client/components/dropdown/dropdownMenu/dropdownMenuElement.tsx","webpack://_N_E/./src/LegacyApp/client/store/dropdown/selectors/useDropdownContentSelector.ts","webpack://_N_E/./src/LegacyApp/client/components/dropdown/dropdownMenu/dropdownMenu.tsx","webpack://_N_E/./src/LegacyApp/client/store/dropdown/selectors/useDropdownContentKeysSelector.ts","webpack://_N_E/./src/LegacyApp/client/store/dropdown/dropdown.actions.ts","webpack://_N_E/./src/LegacyApp/client/store/dropdown/methods/dropdownContentEqualityFn.ts","webpack://_N_E/./src/LegacyApp/client/store/dropdown/selectors/useDropdownActiveSelector.ts"],"sourceRoot":"","sourcesContent":["import React, { FC, useCallback, useRef, useState } from 'react';\nimport classname from 'classnames';\nimport { useDispatchCallback } from '@legacyApp/hooks/store/useAppDispatch';\nimport { dropdownToggle } from '@legacyApp/client/store/dropdown/dropdown.actions';\nimport { useDropdownActiveSelector } from '@legacyApp/client/store/dropdown/selectors/useDropdownActiveSelector';\nimport { useDropdownContentSelector } from '@legacyApp/client/store/dropdown/selectors/useDropdownContentSelector';\nimport { useOnMount } from '@common/hooks/useOnMount';\nimport { useEventListener } from '@common/hooks/useEventListener';\nimport {\n\tDropdownContentData,\n\tDropdownContentDataItemElementProps,\n} from '@legacyApp/client/store/dropdown/dropdown.reducer';\nimport { useOnChange } from '@legacyApp/hooks/render/useOnChange';\nimport { isFunction } from '@common/methods/isFunction';\nimport { ClickOutsideWrapper } from '../../clickOutSideWrapper';\nimport { Trans } from '../../../modules/translation/translate';\nimport { DropdownElementStyled } from './DropdownElement.styled';\nimport { StyledDropdownMenu } from './dropdownMenu.styled';\n\nconst getParent = (id: string) => {\n\treturn document.querySelector(`[data-id=\"${id}\"]`);\n};\n\nconst isOnModal = (id: string): boolean => {\n\tconst parent = getParent(id);\n\treturn parent && !!parent.closest('.modal');\n};\n\nconst getScrollElementQuery = (id: string) => {\n\treturn isOnModal(id) ? document.querySelector('.modal-container') : window;\n};\n\nconst MenuElementContent: FC<{\n\titem: DropdownContentData['items'][number];\n\tcontent: DropdownContentData;\n}> = ({ item, content }) => {\n\tconst isString = typeof item === 'string';\n\tconst namespace =\n\t\ttypeof content.trans === 'boolean' ? undefined : content.trans;\n\n\tif (isString) {\n\t\treturn content.trans ? (\n\t\t\t<Trans label={item} namespace={namespace} />\n\t\t) : (\n\t\t\t<>{item}</>\n\t\t);\n\t}\n\n\tif (isFunction(content.itemElement)) {\n\t\tconst Element = content.itemElement;\n\t\treturn <Element {...item} />;\n\t}\n\n\tif (content.trans) {\n\t\treturn <Trans label={item.name} namespace={namespace} />;\n\t}\n\n\treturn <>{item.name}</>;\n};\n\nconst MenuElement: FC<{\n\tid: string;\n\titem: DropdownContentData['items'][number];\n\tcontent: DropdownContentData;\n\tindex: number;\n\tsetHidden: (hidden: boolean) => void;\n\ttoggle: (isOpen: boolean) => void;\n}> = ({ id, item, index, setHidden, toggle, content }) => {\n\tconst isString = typeof item === 'string';\n\tconst props: DropdownContentDataItemElementProps = {\n\t\tkey: !isString ? item.id : item,\n\t\t...(!isString && { disabled: item.disabled }),\n\t\t...(!isString && { className: item.className }),\n\t\tonClick: () => {\n\t\t\tif (isFunction(content?.onClick)) {\n\t\t\t\tcontent.onClick(item, index);\n\t\t\t}\n\t\t\ttoggle(false);\n\t\t\tsetHidden(true);\n\t\t},\n\t};\n\n\treturn (\n\t\t<DropdownElementStyled {...props} data-dropdown-id={id}>\n\t\t\t<MenuElementContent item={item} content={content} />\n\t\t</DropdownElementStyled>\n\t);\n};\n\nexport const DropdownMenuElement: FC<{\n\tid: string;\n}> = ({ id }) => {\n\tconst navRef = useRef(null);\n\n\tconst active = useDropdownActiveSelector(id);\n\tconst content = useDropdownContentSelector(id);\n\n\tconst [initPosition, setInitPosition] = useState(null);\n\tconst [styles, setStyles] = useState<{\n\t\ttop: number;\n\t\tleft: number;\n\t}>(initPosition);\n\tconst [hidden, setHidden] = useState(true);\n\n\tconst toggleDispatch = useDispatchCallback(dropdownToggle);\n\tconst toggle = useCallback(\n\t\t(isOpen: boolean) =>\n\t\t\ttoggleDispatch({\n\t\t\t\tid,\n\t\t\t\tbool: isOpen,\n\t\t\t}),\n\t\t[id, toggleDispatch],\n\t);\n\n\tconst getScrollElement = () => {\n\t\tif (!content?.scrollElement) {\n\t\t\treturn;\n\t\t}\n\t\tif (content?.scrollElement?.addEventListener) {\n\t\t\treturn content.scrollElement;\n\t\t}\n\t\treturn getParent(id).parentNode;\n\t};\n\n\tconst getPosition = useCallback((): typeof styles => {\n\t\tif (!navRef?.current) {\n\t\t\treturn null;\n\t\t}\n\t\tconst parent = getParent(id);\n\t\tif (!parent) {\n\t\t\treturn null;\n\t\t}\n\t\tconst boxBounding = parent.getBoundingClientRect();\n\t\tconst spaceUnderBox = window.innerHeight - boxBounding.bottom;\n\t\tconst spaceFromLeftBoxSide = window.innerWidth - boxBounding.left;\n\t\tconst spaceBetweenBoxAndNav = 0;\n\t\tconst isUnder =\n\t\t\tspaceUnderBox >= navRef.current.clientHeight + spaceBetweenBoxAndNav;\n\t\tconst top = isUnder\n\t\t\t? boxBounding.bottom + spaceBetweenBoxAndNav\n\t\t\t: boxBounding.top - spaceBetweenBoxAndNav - navRef.current.clientHeight;\n\t\tconst isRight = spaceFromLeftBoxSide >= navRef.current.clientWidth;\n\t\tconst left = isRight\n\t\t\t? boxBounding.left\n\t\t\t: boxBounding.left - (navRef.current.clientWidth - spaceFromLeftBoxSide);\n\t\treturn {\n\t\t\ttop,\n\t\t\tleft,\n\t\t};\n\t}, [id]);\n\n\tconst setStyles_ = useCallback(\n\t\t(isInitPosition?: boolean) => {\n\t\t\tconst styles = getPosition();\n\t\t\tif (!hidden && initPosition) {\n\t\t\t\tconst diff = Math.abs(initPosition - styles?.top);\n\t\t\t\tif (diff > 50) {\n\t\t\t\t\treturn toggle(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetStyles(styles);\n\t\t\tsetInitPosition(isInitPosition ? styles?.top : initPosition);\n\t\t},\n\t\t[getPosition, hidden, initPosition, toggle],\n\t);\n\n\tconst onScroll = () => {\n\t\tif (!active) {\n\t\t\treturn;\n\t\t}\n\t\t// console.log('dropdownMenuElement', this.props.id, {e, props: this.props, state: this.state});\n\t\tsetStyles_();\n\t};\n\n\tuseOnChange({\n\t\tvalue: active,\n\t\tonChanged: () => {\n\t\t\tsetHidden(!active);\n\t\t\tsetInitPosition(active ? false : initPosition);\n\t\t},\n\t});\n\n\tuseOnChange({\n\t\tvalue: hidden,\n\t\tonChanged: () => {\n\t\t\tsetStyles_(true);\n\t\t},\n\t});\n\n\tuseOnMount(() => {\n\t\tsetHidden(!active);\n\t});\n\n\tconst scrollElement = getScrollElement();\n\tconst scrollElementQuery = getScrollElementQuery(id);\n\n\tuseEventListener(scrollElement as any, 'scroll', onScroll);\n\tuseEventListener(scrollElementQuery as any, 'scroll', onScroll);\n\n\treturn (\n\t\t<ClickOutsideWrapper\n\t\t\tonClickOutside={() => (!hidden ? toggle(false) : false)}\n\t\t>\n\t\t\t<StyledDropdownMenu\n\t\t\t\tcss={content?.css}\n\t\t\t\tcompact\n\t\t\t\tvisible={!hidden}\n\t\t\t\tref={navRef}\n\t\t\t\tdata-id={id}\n\t\t\t\tstyle={{\n\t\t\t\t\t...styles,\n\t\t\t\t\twidth: content?.width ? content?.width : 'auto',\n\t\t\t\t}}\n\t\t\t\tclassName={classname('overflow-scrollbar--vertical scroll-horizontal', {\n\t\t\t\t\t[content?.className]: content?.className,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t<nav>\n\t\t\t\t\t{!!content?.title && (\n\t\t\t\t\t\t<p className=\"no-margin hint small-padding-top small-margin-bottom small-margin-left\">\n\t\t\t\t\t\t\t{content?.title}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\t\t\t\t\t{content?.items?.length &&\n\t\t\t\t\t\tcontent?.items.map((item, index) => (\n\t\t\t\t\t\t\t<MenuElement\n\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\tcontent={content}\n\t\t\t\t\t\t\t\tid={id}\n\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\t\t\tsetHidden={setHidden}\n\t\t\t\t\t\t\t\ttoggle={toggle}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t</nav>\n\t\t\t</StyledDropdownMenu>\n\t\t</ClickOutsideWrapper>\n\t);\n};\n","import { useAppSelector } from '@legacyApp/hooks/store/useAppSelector';\nimport { dropdownContentEqualityFn } from '@legacyApp/client/store/dropdown/methods/dropdownContentEqualityFn';\n\nexport const useDropdownContentSelector = (id: string) =>\n\tuseAppSelector(\n\t\t(state) => state.dropdown.content[id],\n\t\tdropdownContentEqualityFn,\n\t);\n","import React, { FC } from 'react';\nimport { useDropdownContentKeysSelector } from '@legacyApp/client/store/dropdown/selectors/useDropdownContentKeysSelector';\nimport { DropdownMenuElement } from './dropdownMenuElement';\n\nconst DropdownMenu: FC = () => {\n\tconst keys = useDropdownContentKeysSelector();\n\treturn (\n\t\t<>\n\t\t\t{keys.map((key) => {\n\t\t\t\treturn <DropdownMenuElement key={key} id={key} />;\n\t\t\t})}\n\t\t</>\n\t);\n};\n\nexport default DropdownMenu;\n","import { useAppSelector } from '@legacyApp/hooks/store/useAppSelector';\nimport transactionsService from '@modules/transactions/transactionsService';\n\nexport const useDropdownContentKeysSelector = () =>\n\tuseAppSelector(\n\t\t(state) => Object.keys(state.dropdown.content),\n\t\t(a, b) => !transactionsService.isListDifferent(a, b),\n\t);\n","import { DropdownContentData } from '@legacyApp/client/store/dropdown/dropdown.reducer';\nimport { actionSimple } from '../../modules/app/actionService';\nimport {\n\tDROPDOWN_ADD,\n\tDROPDOWN_DELETE,\n\tDROPDOWN_SET_ACTIVE,\n\tDROPDOWN_SET_CONTENT,\n\tDROPDOWN_TOGGLE,\n} from './dropdown.constants';\n\nexport const dropdownSetActive = actionSimple<{\n\tid: string;\n}>(DROPDOWN_SET_ACTIVE);\nexport const dropdownSetContent = actionSimple<{\n\tid: string;\n\tcontent: DropdownContentData;\n}>(DROPDOWN_SET_CONTENT);\nexport const dropdownDelete = actionSimple<string>(DROPDOWN_DELETE);\nexport const dropdownAdd = actionSimple<{\n\tid: string;\n\tcontent: DropdownContentData;\n}>(DROPDOWN_ADD);\nexport const dropdownToggle = actionSimple<{\n\tid: string;\n\tbool: boolean;\n}>(DROPDOWN_TOGGLE);\n","import { DropdownContentData } from '@legacyApp/client/store/dropdown/dropdown.reducer';\nimport transactionService from '@modules/transactions/transactionsService';\n\nexport const dropdownContentEqualityFn = (\n\ta: DropdownContentData,\n\tb: DropdownContentData,\n) => {\n\treturn !transactionService.isListDifferent(a?.items, b?.items, [\n\t\t'id',\n\t\t'name',\n\t\t'value',\n\t\t'disabled',\n\t\t'className',\n\t]);\n};\n","import { useAppSelector } from '@legacyApp/hooks/store/useAppSelector';\nimport { shallowEqual } from 'react-redux';\n\nexport const useDropdownActiveSelector = (id: string) =>\n\tuseAppSelector((state) => state.dropdown.active[id], shallowEqual);\n"],"names":["getParent","id","document","querySelector","getScrollElementQuery","parent","closest","isOnModal","window","MenuElementContent","item","content","isString","namespace","trans","undefined","label","isFunction","itemElement","Element","name","MenuElement","index","setHidden","toggle","props","key","disabled","className","onClick","DropdownMenuElement","navRef","useRef","active","useDropdownActiveSelector","useAppSelector","state","dropdown","dropdownContentEqualityFn","useDropdownContentSelector","useState","initPosition","setInitPosition","styles","setStyles","hidden","toggleDispatch","useDispatchCallback","dropdownToggle","useCallback","isOpen","bool","getPosition","current","boxBounding","getBoundingClientRect","spaceUnderBox","innerHeight","bottom","spaceFromLeftBoxSide","innerWidth","left","top","clientHeight","clientWidth","setStyles_","isInitPosition","Math","abs","onScroll","useOnChange","value","onChanged","useOnMount","scrollElement","addEventListener","parentNode","getScrollElement","scrollElementQuery","useEventListener","onClickOutside","compact","visible","ref","style","width","classname","css","title","items","length","map","keys","Object","a","b","transactionsService","dropdownDelete","actionSimple","DROPDOWN_SET_ACTIVE","DROPDOWN_SET_CONTENT","DROPDOWN_DELETE","dropdownAdd","DROPDOWN_ADD","DROPDOWN_TOGGLE","transactionService","shallowEqual"],"mappings":"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","debug_id":"0826437c-e70c-5c46-9b12-f9631f72d77a"}