@laerdal/life-react-components 3.6.0-dev.1.full → 3.6.1
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/dist/Accordion/__tests__/AccordionMenu.test.tsx +42 -0
- package/dist/Accordion/__tests__/ContentAccordion.test.tsx +150 -0
- package/dist/AuthPage/__tests__/AuthPage.test.tsx +27 -0
- package/dist/Banners/__tests__/Banner.test.tsx +47 -0
- package/dist/Banners/__tests__/OverviewBanner.test.tsx +20 -0
- package/dist/Breadcrumb/__tests__/Breadcrumb.test.tsx +78 -0
- package/dist/Button/TextButton.cjs +648 -0
- package/dist/Button/TextButton.cjs.map +1 -0
- package/dist/Button/TextButton.d.ts +77 -0
- package/dist/Button/TextButton.js +640 -0
- package/dist/Button/TextButton.js.map +1 -0
- package/dist/Button/__tests__/BackButton.test.tsx +32 -0
- package/dist/Button/__tests__/Button.test.tsx +45 -0
- package/dist/Button/__tests__/DualButton.test.tsx +119 -0
- package/dist/Button/__tests__/TextButton.test.tsx +45 -0
- package/dist/Card/HorizontalCard/__tests__/HorizontalCard.test.tsx +71 -0
- package/dist/Card/HorizontalCard/__tests__/VerticalCard.test.tsx +124 -0
- package/dist/Card/VerticalCard/VerticalCard.cjs +187 -0
- package/dist/Card/VerticalCard/VerticalCard.cjs.map +1 -0
- package/dist/Card/VerticalCard/VerticalCard.d.ts +25 -0
- package/dist/Card/VerticalCard/VerticalCard.js +178 -0
- package/dist/Card/VerticalCard/VerticalCard.js.map +1 -0
- package/dist/Card/VerticalCard/VerticalCardBottomSection.cjs +261 -0
- package/dist/Card/VerticalCard/VerticalCardBottomSection.cjs.map +1 -0
- package/dist/Card/VerticalCard/VerticalCardBottomSection.d.ts +53 -0
- package/dist/Card/VerticalCard/VerticalCardBottomSection.js +252 -0
- package/dist/Card/VerticalCard/VerticalCardBottomSection.js.map +1 -0
- package/dist/Card/VerticalCard/VerticalCardMiddleSection.cjs +145 -0
- package/dist/Card/VerticalCard/VerticalCardMiddleSection.cjs.map +1 -0
- package/dist/Card/VerticalCard/VerticalCardMiddleSection.d.ts +42 -0
- package/dist/Card/VerticalCard/VerticalCardMiddleSection.js +136 -0
- package/dist/Card/VerticalCard/VerticalCardMiddleSection.js.map +1 -0
- package/dist/Card/VerticalCard/VerticalCardTopSection.cjs +165 -0
- package/dist/Card/VerticalCard/VerticalCardTopSection.cjs.map +1 -0
- package/dist/Card/VerticalCard/VerticalCardTopSection.d.ts +45 -0
- package/dist/Card/VerticalCard/VerticalCardTopSection.js +156 -0
- package/dist/Card/VerticalCard/VerticalCardTopSection.js.map +1 -0
- package/dist/Card/VerticalCard/__tests__/VerticalCard.test.tsx +124 -0
- package/dist/Card/__tests__/Card.test.tsx +146 -0
- package/dist/Chips/ChoiceChips.cjs +0 -1
- package/dist/Chips/ChoiceChips.cjs.map +1 -1
- package/dist/Chips/ChoiceChips.js +0 -1
- package/dist/Chips/ChoiceChips.js.map +1 -1
- package/dist/Chips/__tests__/ActionChip.test.tsx +94 -0
- package/dist/Chips/__tests__/ChoiceChips.test.tsx +79 -0
- package/dist/Chips/__tests__/FilterChip.test.tsx +95 -0
- package/dist/Chips/__tests__/InputChip.test.tsx +155 -0
- package/dist/ChipsInput/ChipDropdownInput.cjs +1 -1
- package/dist/ChipsInput/ChipDropdownInput.cjs.map +1 -1
- package/dist/ChipsInput/ChipDropdownInput.js +1 -1
- package/dist/ChipsInput/ChipDropdownInput.js.map +1 -1
- package/dist/ChipsInput/__tests__/ChipDropdownInput.test.tsx +100 -0
- package/dist/ChipsInput/__tests__/ChipInputFields.test.tsx +155 -0
- package/dist/Dropdown/BasicDropdown.cjs +0 -2
- package/dist/Dropdown/BasicDropdown.cjs.map +1 -1
- package/dist/Dropdown/BasicDropdown.js +0 -2
- package/dist/Dropdown/BasicDropdown.js.map +1 -1
- package/dist/Dropdown/DropdownButton.cjs +0 -4
- package/dist/Dropdown/DropdownButton.cjs.map +1 -1
- package/dist/Dropdown/DropdownButton.js +0 -4
- package/dist/Dropdown/DropdownButton.js.map +1 -1
- package/dist/Dropdown/DropdownContent.cjs +1 -1
- package/dist/Dropdown/DropdownContent.cjs.map +1 -1
- package/dist/Dropdown/DropdownContent.js +1 -1
- package/dist/Dropdown/DropdownContent.js.map +1 -1
- package/dist/Dropdown/DropdownFilter.cjs +0 -2
- package/dist/Dropdown/DropdownFilter.cjs.map +1 -1
- package/dist/Dropdown/DropdownFilter.js +0 -2
- package/dist/Dropdown/DropdownFilter.js.map +1 -1
- package/dist/Dropdown/__tests__/DropdownFilter.test.tsx +39 -0
- package/dist/Footer/__tests__/Footer.test.tsx +182 -0
- package/dist/GlobalNavigationBar/__tests__/Logo.test.tsx +31 -0
- package/dist/GlobalNavigationBar/desktop/ExtendedMainMenu.cjs +1 -0
- package/dist/GlobalNavigationBar/desktop/ExtendedMainMenu.cjs.map +1 -1
- package/dist/GlobalNavigationBar/desktop/ExtendedMainMenu.js +1 -0
- package/dist/GlobalNavigationBar/desktop/ExtendedMainMenu.js.map +1 -1
- package/dist/GlobalNavigationBar/desktop/SubMenu.cjs +1 -0
- package/dist/GlobalNavigationBar/desktop/SubMenu.cjs.map +1 -1
- package/dist/GlobalNavigationBar/desktop/SubMenu.js +1 -0
- package/dist/GlobalNavigationBar/desktop/SubMenu.js.map +1 -1
- package/dist/GlobalNavigationBar/desktop/__tests__/DesktopActions.test.tsx +108 -0
- package/dist/GlobalNavigationBar/desktop/__tests__/ExtendedMainMenu.test.tsx +28 -0
- package/dist/GlobalNavigationBar/desktop/__tests__/MainMenu.test.tsx +55 -0
- package/dist/GlobalNavigationBar/desktop/__tests__/RightSideNav.test.tsx +45 -0
- package/dist/GlobalNavigationBar/desktop/__tests__/UserMenu.test.tsx +125 -0
- package/dist/GlobalNavigationBar/mobile/__tests__/MobileMenu.test.tsx +317 -0
- package/dist/GlobalNavigationBar/mobile/__tests__/MobileMenuContent.test.tsx +294 -0
- package/dist/GlobalNavigationBar/mobile/__tests__/MobileMenuHeader.test.tsx +195 -0
- package/dist/InputFields/QuickSearch.cjs +1 -1
- package/dist/InputFields/QuickSearch.cjs.map +1 -1
- package/dist/InputFields/QuickSearch.js +1 -1
- package/dist/InputFields/QuickSearch.js.map +1 -1
- package/dist/InputFields/__tests__/NumberField.test.tsx +67 -0
- package/dist/InputFields/__tests__/NumberInput.test.tsx +68 -0
- package/dist/InputFields/__tests__/QuickSearch.test.tsx +42 -0
- package/dist/LinearProgress/__tests__/LinearProgress.test.tsx +25 -0
- package/dist/List/__tests__/ListRow.test.tsx +18 -0
- package/dist/LoadingPage/__tests__/GlobalLoadingPage.test.tsx +23 -0
- package/dist/Modals/__tests__/Modal.test.tsx +169 -0
- package/dist/Modals/__tests__/ModalContainer.test.tsx +77 -0
- package/dist/Modals/__tests__/ModalContent.test.tsx +126 -0
- package/dist/NavItem/__tests__/NavItem.test.ts +6 -0
- package/dist/Navigation/NavigationProvider.cjs +43 -0
- package/dist/Navigation/NavigationProvider.cjs.map +1 -0
- package/dist/Navigation/NavigationProvider.d.ts +15 -0
- package/dist/Navigation/NavigationProvider.js +32 -0
- package/dist/Navigation/NavigationProvider.js.map +1 -0
- package/dist/Navigation/index.cjs +19 -0
- package/dist/Navigation/index.cjs.map +1 -0
- package/dist/Navigation/index.d.ts +2 -0
- package/dist/Navigation/index.js +2 -0
- package/dist/Navigation/index.js.map +1 -0
- package/dist/NotificationDot/__tests__/NotificationDot.test.tsx +33 -0
- package/dist/Paginator/__tests__/Paginator.test.tsx +33 -0
- package/dist/Popover/__tests__/Popover.test.tsx +64 -0
- package/dist/ProfileButton/__tests__/ProfileButton.test.tsx +31 -0
- package/dist/QuizButton/__tests__/QuizButton.test.tsx +53 -0
- package/dist/SegmentControl/__tests__/SegmentControl.test.tsx +145 -0
- package/dist/SideMenu/__tests__/SideMenu.test.tsx +99 -0
- package/dist/Switcher/__tests__/SwitcherMenuItem.tsx +14 -0
- package/dist/Table/Table.cjs +3 -1
- package/dist/Table/Table.cjs.map +1 -1
- package/dist/Table/Table.js +3 -1
- package/dist/Table/Table.js.map +1 -1
- package/dist/Table/TableBody.cjs +1 -1
- package/dist/Table/TableBody.cjs.map +1 -1
- package/dist/Table/TableBody.js +1 -1
- package/dist/Table/TableBody.js.map +1 -1
- package/dist/Table/TableFooter.cjs +0 -2
- package/dist/Table/TableFooter.cjs.map +1 -1
- package/dist/Table/TableFooter.js +0 -2
- package/dist/Table/TableFooter.js.map +1 -1
- package/dist/Table/__tests__/Table.test.tsx +499 -0
- package/dist/Tabs/__tests__/HorizontalTabs.test.tsx +95 -0
- package/dist/Tabs/__tests__/TabLink.test.tsx +40 -0
- package/dist/Tabs/__tests__/Tablist.test.tsx +37 -0
- package/dist/Tag/__tests__/Tag.test.tsx +86 -0
- package/dist/Toasters/__tests__/Toast.test.tsx +74 -0
- package/dist/Toggles/__tests__/ToggleButton.test.tsx +53 -0
- package/dist/Toggles/__tests__/ToggleSwitch.test.tsx +87 -0
- package/dist/Tooltips/__tests__/TooltipWrapper.test.tsx +16 -0
- package/dist/icons/systemicons/CreditCard.cjs +43 -0
- package/dist/icons/systemicons/CreditCard.cjs.map +1 -0
- package/dist/icons/systemicons/CreditCard.d.ts +3 -0
- package/dist/icons/systemicons/CreditCard.js +33 -0
- package/dist/icons/systemicons/CreditCard.js.map +1 -0
- package/dist/icons/systemicons/Discount.cjs +43 -0
- package/dist/icons/systemicons/Discount.cjs.map +1 -0
- package/dist/icons/systemicons/Discount.d.ts +3 -0
- package/dist/icons/systemicons/Discount.js +33 -0
- package/dist/icons/systemicons/Discount.js.map +1 -0
- package/dist/icons/systemicons/DocumentComplete.cjs +43 -0
- package/dist/icons/systemicons/DocumentComplete.cjs.map +1 -0
- package/dist/icons/systemicons/DocumentComplete.d.ts +3 -0
- package/dist/icons/systemicons/DocumentComplete.js +33 -0
- package/dist/icons/systemicons/DocumentComplete.js.map +1 -0
- package/dist/icons/systemicons/Folder.cjs +43 -0
- package/dist/icons/systemicons/Folder.cjs.map +1 -0
- package/dist/icons/systemicons/Folder.d.ts +3 -0
- package/dist/icons/systemicons/Folder.js +33 -0
- package/dist/icons/systemicons/Folder.js.map +1 -0
- package/dist/icons/systemicons/FolderNew.cjs +43 -0
- package/dist/icons/systemicons/FolderNew.cjs.map +1 -0
- package/dist/icons/systemicons/FolderNew.d.ts +3 -0
- package/dist/icons/systemicons/FolderNew.js +33 -0
- package/dist/icons/systemicons/FolderNew.js.map +1 -0
- package/dist/icons/systemicons/MoodHappy.cjs +43 -0
- package/dist/icons/systemicons/MoodHappy.cjs.map +1 -0
- package/dist/icons/systemicons/MoodHappy.d.ts +3 -0
- package/dist/icons/systemicons/MoodHappy.js +33 -0
- package/dist/icons/systemicons/MoodHappy.js.map +1 -0
- package/dist/icons/systemicons/MoodIndifferent.cjs +43 -0
- package/dist/icons/systemicons/MoodIndifferent.cjs.map +1 -0
- package/dist/icons/systemicons/MoodIndifferent.d.ts +3 -0
- package/dist/icons/systemicons/MoodIndifferent.js +33 -0
- package/dist/icons/systemicons/MoodIndifferent.js.map +1 -0
- package/dist/icons/systemicons/MoodSad.cjs +43 -0
- package/dist/icons/systemicons/MoodSad.cjs.map +1 -0
- package/dist/icons/systemicons/MoodSad.d.ts +3 -0
- package/dist/icons/systemicons/MoodSad.js +33 -0
- package/dist/icons/systemicons/MoodSad.js.map +1 -0
- package/dist/icons/systemicons/MoodVeryHappy.cjs +43 -0
- package/dist/icons/systemicons/MoodVeryHappy.cjs.map +1 -0
- package/dist/icons/systemicons/MoodVeryHappy.d.ts +3 -0
- package/dist/icons/systemicons/MoodVeryHappy.js +33 -0
- package/dist/icons/systemicons/MoodVeryHappy.js.map +1 -0
- package/dist/icons/systemicons/MoodVerySad.cjs +43 -0
- package/dist/icons/systemicons/MoodVerySad.cjs.map +1 -0
- package/dist/icons/systemicons/MoodVerySad.d.ts +3 -0
- package/dist/icons/systemicons/MoodVerySad.js +33 -0
- package/dist/icons/systemicons/MoodVerySad.js.map +1 -0
- package/dist/icons/systemicons/Orders.cjs +43 -0
- package/dist/icons/systemicons/Orders.cjs.map +1 -0
- package/dist/icons/systemicons/Orders.d.ts +3 -0
- package/dist/icons/systemicons/Orders.js +33 -0
- package/dist/icons/systemicons/Orders.js.map +1 -0
- package/dist/icons/systemicons/Palette.cjs +43 -0
- package/dist/icons/systemicons/Palette.cjs.map +1 -0
- package/dist/icons/systemicons/Palette.d.ts +3 -0
- package/dist/icons/systemicons/Palette.js +33 -0
- package/dist/icons/systemicons/Palette.js.map +1 -0
- package/dist/icons/systemicons/Stack.cjs +43 -0
- package/dist/icons/systemicons/Stack.cjs.map +1 -0
- package/dist/icons/systemicons/Stack.d.ts +3 -0
- package/dist/icons/systemicons/Stack.js +33 -0
- package/dist/icons/systemicons/Stack.js.map +1 -0
- package/dist/styles/design-tokens/dark/tokens.css +481 -0
- package/dist/styles/design-tokens/light/tokens.css +481 -0
- package/dist/styles/design-tokens/rqi_dark/tokens.css +481 -0
- package/dist/styles/design-tokens/rqi_light/tokens.css +481 -0
- package/dist/styles/react-datepicker.css +766 -0
- package/dist/styles/typography.cjs +35 -59
- package/dist/styles/typography.cjs.map +1 -1
- package/dist/styles/typography.d.ts +1 -1
- package/dist/styles/typography.js +35 -59
- package/dist/styles/typography.js.map +1 -1
- package/dist/test-utils.cjs +16 -10
- package/dist/test-utils.cjs.map +1 -1
- package/dist/test-utils.d.ts +5 -5
- package/dist/test-utils.js +14 -8
- package/dist/test-utils.js.map +1 -1
- package/dist/utils/color-tokens.cjs +91 -0
- package/dist/utils/color-tokens.cjs.map +1 -0
- package/dist/utils/color-tokens.d.ts +19 -0
- package/dist/utils/color-tokens.js +82 -0
- package/dist/utils/color-tokens.js.map +1 -0
- package/package.json +1 -1
|
@@ -117,6 +117,7 @@ export var SubMenu = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
117
117
|
if (newFocusedElement && newFocusedElement !== oldFocusedElement) {
|
|
118
118
|
var _newFocusedElement$cu, _item$items$index$id;
|
|
119
119
|
(_newFocusedElement$cu = newFocusedElement.current) === null || _newFocusedElement$cu === void 0 ? void 0 : _newFocusedElement$cu.classList.add('dropdown-hover');
|
|
120
|
+
console.log(item.items[index].id);
|
|
120
121
|
onItemFocused && onItemFocused((_item$items$index$id = item.items[index].id) !== null && _item$items$index$id !== void 0 ? _item$items$index$id : '');
|
|
121
122
|
} else if (onItemFocused) onItemFocused('');
|
|
122
123
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubMenu.js","names":["React","styled","Menu","MenuSection","MenuSectionList","Size","SystemIcons","checkIfContainsItem","Tabs","TabLink","MenuItem","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SubMenuWrapper","div","_templateObject","_taggedTemplateLiteral","props","topLevel","visible","SubMenu","forwardRef","_ref","ref","item","index","dropdownMenusOpenedArray","onSubMenuHidden","onSubMenuOpened","onItemStateChanged","focusedItemId","activeItemId","nestPath","ariaLabelledBy","onItemFocused","_React$useState","useState","_React$useState2","_slicedToArray","forceUpdate","focusedRef","useRef","_React$useState3","_React$useState4","allRefs","setAllRefs","_React$useState5","_React$useState6","subMenuRefs","setAllSubMenuRefs","useEffect","items","map","x","type","createRef","undefined","existingRef","current","find","id","onMouseLeave","event","_toConsumableArray","filter","containActiveItem","onMouseEnter","existingRefForId","concat","onKeyDown","e","key","stopPropagation","preventDefault","setNewFocusedElement","length","code","focusedItem","_allRefs$focusedRef$c","click","_oldFocusedElement$cu","newFocusedElement","oldFocusedElement","classList","remove","_newFocusedElement$cu","_item$items$index$id","add","onFocus","onBlur","className","Boolean","children","role","tabIndex","size","Medium","entry","_entry$label2","isGroup","to","SubItemOpened","_entry$items$find$id","_entry$items$find","_entry$label","style","position","value","label","iconRight","ArrowDropRight","active","onClickHandler","onActiveStateChanged","state","forceDeactivate","requiredLine","optionalLine","endLineIcon","OptionalLineIcon","disabled","showNotificationDot","variant","propTypes","_pt","number","isRequired","bool","func","string","arrayOf"],"sources":["../../../src/GlobalNavigationBar/desktop/SubMenu.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { Menu, MenuSection, MenuSectionList } from './ExtendedMainMenu';\r\nimport { MenuNavigationItemTypeDesktopGroup } from '../types';\r\nimport { Size } from '../../types';\r\nimport { SystemIcons } from '../../icons';\r\nimport { checkIfContainsItem } from '../utils';\r\nimport Tabs from '../../Tabs/Tabs';\r\nimport TabLink from '../../Tabs/TabLink';\r\nimport { MenuItem } from '../../MenuItem';\r\n\r\nexport type SubMenuProps = {\r\n item: MenuNavigationItemTypeDesktopGroup;\r\n index: number;\r\n topLevel: boolean;\r\n dropdownMenusOpenedArray: React.MutableRefObject<string[]>;\r\n onSubMenuOpened?: (item: string) => void;\r\n onSubMenuHidden?: (item: string) => void;\r\n onItemStateChanged?: (item: string, state: boolean) => void;\r\n onItemFocused?: (item: string) => void;\r\n focusedItemId?: string;\r\n activeItemId?: string;\r\n nestPath?: string[];\r\n ariaLabelledBy?: string;\r\n};\r\n\r\nexport const SubMenuWrapper = styled.div<{ topLevel: boolean; visible: boolean }>`\r\n ${Menu} {\r\n top: ${(props) => (props.topLevel ? '100%' : '0px')};\r\n left: ${(props) => (props.topLevel ? '0px' : 'calc(100% - 12px)')};\r\n }\r\n\r\n ${(props) => (!props.visible ? 'display: none;' : '')}\r\n\r\n button {\r\n padding-left: 0px;\r\n }\r\n`;\r\n\r\nexport const SubMenu = React.forwardRef<HTMLUListElement, SubMenuProps>(({\r\n item,\r\n index,\r\n topLevel,\r\n dropdownMenusOpenedArray,\r\n onSubMenuHidden,\r\n onSubMenuOpened,\r\n onItemStateChanged,\r\n focusedItemId,\r\n activeItemId,\r\n nestPath,\r\n ariaLabelledBy,\r\n onItemFocused\r\n}: SubMenuProps, ref): React.ReactElement<SubMenuProps> => {\r\n const [, forceUpdate] = React.useState({});\r\n const focusedRef = React.useRef<{ index: number }>({ index: -1 });\r\n const [allRefs, setAllRefs] = React.useState<React.RefObject<HTMLButtonElement | HTMLAnchorElement>[]>([]);\r\n const [subMenuRefs, setAllSubMenuRefs] = React.useState<(React.RefObject<HTMLUListElement> | undefined)[]>([]);\r\n\r\n React.useEffect(() => {\r\n setAllRefs(item.items.map((x) => (x.type == 'desktopgroup' ? React.createRef<HTMLButtonElement>() : React.createRef<HTMLAnchorElement>())));\r\n setAllSubMenuRefs(item.items.map((x) => (x.type == 'desktopgroup' ? React.createRef<HTMLUListElement>() : undefined)));\r\n }, [item]);\r\n\r\n const existingRef = dropdownMenusOpenedArray.current.find((x) => x == item.id);\r\n const onMouseLeave = (event: any, id: string) => {\r\n dropdownMenusOpenedArray.current = [...dropdownMenusOpenedArray.current.filter((x) => x != id)];\r\n //just trigger rerendering\r\n onSubMenuHidden && onSubMenuHidden(id);\r\n forceUpdate({});\r\n };\r\n let containActiveItem = false;\r\n if (item.type == 'desktopgroup' && activeItemId) containActiveItem = checkIfContainsItem(item, activeItemId);\r\n\r\n const onMouseEnter = (event: any, id: string) => {\r\n const existingRefForId = dropdownMenusOpenedArray.current.find((x) => x == id);\r\n if (existingRefForId == null) {\r\n dropdownMenusOpenedArray.current = [...dropdownMenusOpenedArray.current, id];\r\n //just trigger rerendering\r\n onSubMenuOpened && onSubMenuOpened(id);\r\n forceUpdate({});\r\n }\r\n };\r\n\r\n const onKeyDown = (e: React.KeyboardEvent<HTMLUListElement>) => {\r\n \r\n if (e.key === 'ArrowUp' || e.key === 'Up') {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (focusedRef.current.index > 0) {\r\n setNewFocusedElement(focusedRef.current.index - 1);\r\n }\r\n } else if (e.key === 'ArrowDown' || e.key === 'Down') {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if(focusedRef.current.index < allRefs.length - 1)\r\n setNewFocusedElement(focusedRef.current.index + 1);\r\n } \r\n else\r\n if (e.key == 'Enter' || e.code == 'Space') {\r\n e.stopPropagation();\r\n if(focusedRef.current.index < 0)\r\n return;\r\n \r\n const focusedItem = item.items[focusedRef.current.index];\r\n if(focusedItem.type == 'desktopgroup')\r\n {\r\n dropdownMenusOpenedArray.current = [...dropdownMenusOpenedArray.current, focusedItem.id];\r\n forceUpdate({});\r\n }\r\n else\r\n {\r\n allRefs[focusedRef.current.index].current?.click();\r\n forceUpdate({});\r\n }\r\n\r\n //just trigger rerendering\r\n \r\n }\r\n };\r\n\r\n const setNewFocusedElement = (index: number) => {\r\n const newFocusedElement = index >= 0 ? allRefs[index] : null;\r\n const oldFocusedElement = focusedRef.current.index >= 0 ? allRefs[focusedRef.current.index] : null;\r\n focusedRef.current.index = index;\r\n\r\n if(oldFocusedElement)\r\n oldFocusedElement?.current?.classList.remove('dropdown-hover');\r\n\r\n if (newFocusedElement && newFocusedElement !== oldFocusedElement) {\r\n newFocusedElement.current?.classList.add('dropdown-hover');\r\n onItemFocused && onItemFocused(item.items[index].id ?? '');\r\n }\r\n else if(onItemFocused)\r\n onItemFocused('');\r\n };\r\n\r\n const onFocus = (event: React.FocusEvent<HTMLUListElement>) => {\r\n event.stopPropagation();\r\n dropdownMenusOpenedArray.current = [...(nestPath ?? [])];\r\n setNewFocusedElement(0);\r\n forceUpdate({});\r\n \r\n };\r\n\r\n const onBlur = (event: React.FocusEvent<HTMLUListElement>) => {\r\n event.stopPropagation();\r\n setNewFocusedElement(-1);\r\n };\r\n\r\n return (\r\n <SubMenuWrapper id={item.id} className={existingRef ? 'open' : '' } topLevel={topLevel} visible={Boolean(existingRef)}>\r\n <Menu role=\"group\" ref={ref} aria-labelledby={ariaLabelledBy} onBlur={onBlur} onFocus={onFocus} onKeyDown={(event) => onKeyDown(event)} tabIndex={0}>\r\n <MenuSection>\r\n <MenuSectionList>\r\n <Tabs size={Size.Medium}>\r\n {item.items.map((entry, index) => {\r\n const isGroup = entry.type == 'desktopgroup';\r\n const key = isGroup ? entry.id : entry.type == 'item' ? entry.to : '';\r\n const SubItemOpened = Boolean(dropdownMenusOpenedArray.current.find((x) => x == entry.id));\r\n if (isGroup) {\r\n return (\r\n <div style={{ position: 'relative' }} onMouseEnter={(event) => onMouseEnter(event, entry.id)} onMouseLeave={(event) => onMouseLeave(event, entry.id)}>\r\n <MenuItem\r\n id={entry.id + '_parentOption'}\r\n aria-expanded={Boolean(SubItemOpened)}\r\n aria-activedescendant={entry.items.find(x => x.id == focusedItemId)?.id ?? ''}\r\n tabIndex={-1}\r\n ref={allRefs[index] as React.Ref<HTMLButtonElement>}\r\n \r\n aria-controls={entry.id}\r\n role=\"group\"\r\n //id={entry.id} removing this can break something\r\n item={{\r\n value: entry.label ?? '',\r\n }}\r\n iconRight={<SystemIcons.ArrowDropRight size=\"24px\" />}\r\n active={SubItemOpened || (Boolean(activeItemId) && activeItemId != '' && checkIfContainsItem(entry, activeItemId!))}\r\n onClickHandler={() => {}}\r\n />\r\n <SubMenu\r\n ariaLabelledBy={entry.id + '_parentOption'}\r\n onItemFocused={onItemFocused}\r\n focusedItemId={focusedItemId}\r\n ref={subMenuRefs[index]}\r\n nestPath={[...(nestPath ?? []), entry.id]}\r\n onItemStateChanged={onItemStateChanged}\r\n activeItemId={activeItemId}\r\n dropdownMenusOpenedArray={dropdownMenusOpenedArray}\r\n item={entry as MenuNavigationItemTypeDesktopGroup}\r\n index={index + 1}\r\n topLevel={false}\r\n />\r\n </div>\r\n );\r\n }\r\n return (\r\n <>\r\n <TabLink\r\n id={entry.id}\r\n tabIndex={-1}\r\n key={key}\r\n to={isGroup ? '' : key}\r\n ref={allRefs[index] as React.Ref<HTMLAnchorElement>}\r\n onActiveStateChanged={(state) => onItemStateChanged && entry.type == 'item' && onItemStateChanged(entry.to, state)}\r\n forceDeactivate={isGroup}\r\n requiredLine={entry.label ?? ''}\r\n optionalLine={''}\r\n endLineIcon={isGroup ? <SystemIcons.ArrowDropRight size=\"24px\" /> : null}\r\n OptionalLineIcon={''}\r\n disabled={entry.disabled}\r\n showNotificationDot={false}\r\n size={Size.Medium}\r\n variant=\"positive\"\r\n />\r\n </>\r\n );\r\n })}\r\n </Tabs>\r\n </MenuSectionList>\r\n </MenuSection>\r\n </Menu>\r\n </SubMenuWrapper>\r\n );\r\n});\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SubMenu.js","names":["React","styled","Menu","MenuSection","MenuSectionList","Size","SystemIcons","checkIfContainsItem","Tabs","TabLink","MenuItem","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SubMenuWrapper","div","_templateObject","_taggedTemplateLiteral","props","topLevel","visible","SubMenu","forwardRef","_ref","ref","item","index","dropdownMenusOpenedArray","onSubMenuHidden","onSubMenuOpened","onItemStateChanged","focusedItemId","activeItemId","nestPath","ariaLabelledBy","onItemFocused","_React$useState","useState","_React$useState2","_slicedToArray","forceUpdate","focusedRef","useRef","_React$useState3","_React$useState4","allRefs","setAllRefs","_React$useState5","_React$useState6","subMenuRefs","setAllSubMenuRefs","useEffect","items","map","x","type","createRef","undefined","existingRef","current","find","id","onMouseLeave","event","_toConsumableArray","filter","containActiveItem","onMouseEnter","existingRefForId","concat","onKeyDown","e","key","stopPropagation","preventDefault","setNewFocusedElement","length","code","focusedItem","_allRefs$focusedRef$c","click","_oldFocusedElement$cu","newFocusedElement","oldFocusedElement","classList","remove","_newFocusedElement$cu","_item$items$index$id","add","console","log","onFocus","onBlur","className","Boolean","children","role","tabIndex","size","Medium","entry","_entry$label2","isGroup","to","SubItemOpened","_entry$items$find$id","_entry$items$find","_entry$label","style","position","value","label","iconRight","ArrowDropRight","active","onClickHandler","onActiveStateChanged","state","forceDeactivate","requiredLine","optionalLine","endLineIcon","OptionalLineIcon","disabled","showNotificationDot","variant","propTypes","_pt","number","isRequired","bool","func","string","arrayOf"],"sources":["../../../src/GlobalNavigationBar/desktop/SubMenu.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { Menu, MenuSection, MenuSectionList } from './ExtendedMainMenu';\r\nimport { MenuNavigationItemTypeDesktopGroup } from '../types';\r\nimport { Size } from '../../types';\r\nimport { SystemIcons } from '../../icons';\r\nimport { checkIfContainsItem } from '../utils';\r\nimport Tabs from '../../Tabs/Tabs';\r\nimport TabLink from '../../Tabs/TabLink';\r\nimport { MenuItem } from '../../MenuItem';\r\n\r\nexport type SubMenuProps = {\r\n item: MenuNavigationItemTypeDesktopGroup;\r\n index: number;\r\n topLevel: boolean;\r\n dropdownMenusOpenedArray: React.MutableRefObject<string[]>;\r\n onSubMenuOpened?: (item: string) => void;\r\n onSubMenuHidden?: (item: string) => void;\r\n onItemStateChanged?: (item: string, state: boolean) => void;\r\n onItemFocused?: (item: string) => void;\r\n focusedItemId?: string;\r\n activeItemId?: string;\r\n nestPath?: string[];\r\n ariaLabelledBy?: string;\r\n};\r\n\r\nexport const SubMenuWrapper = styled.div<{ topLevel: boolean; visible: boolean }>`\r\n ${Menu} {\r\n top: ${(props) => (props.topLevel ? '100%' : '0px')};\r\n left: ${(props) => (props.topLevel ? '0px' : 'calc(100% - 12px)')};\r\n }\r\n\r\n ${(props) => (!props.visible ? 'display: none;' : '')}\r\n\r\n button {\r\n padding-left: 0px;\r\n }\r\n`;\r\n\r\nexport const SubMenu = React.forwardRef<HTMLUListElement, SubMenuProps>(({\r\n item,\r\n index,\r\n topLevel,\r\n dropdownMenusOpenedArray,\r\n onSubMenuHidden,\r\n onSubMenuOpened,\r\n onItemStateChanged,\r\n focusedItemId,\r\n activeItemId,\r\n nestPath,\r\n ariaLabelledBy,\r\n onItemFocused\r\n}: SubMenuProps, ref): React.ReactElement<SubMenuProps> => {\r\n const [, forceUpdate] = React.useState({});\r\n const focusedRef = React.useRef<{ index: number }>({ index: -1 });\r\n const [allRefs, setAllRefs] = React.useState<React.RefObject<HTMLButtonElement | HTMLAnchorElement>[]>([]);\r\n const [subMenuRefs, setAllSubMenuRefs] = React.useState<(React.RefObject<HTMLUListElement> | undefined)[]>([]);\r\n\r\n React.useEffect(() => {\r\n setAllRefs(item.items.map((x) => (x.type == 'desktopgroup' ? React.createRef<HTMLButtonElement>() : React.createRef<HTMLAnchorElement>())));\r\n setAllSubMenuRefs(item.items.map((x) => (x.type == 'desktopgroup' ? React.createRef<HTMLUListElement>() : undefined)));\r\n }, [item]);\r\n\r\n const existingRef = dropdownMenusOpenedArray.current.find((x) => x == item.id);\r\n const onMouseLeave = (event: any, id: string) => {\r\n dropdownMenusOpenedArray.current = [...dropdownMenusOpenedArray.current.filter((x) => x != id)];\r\n //just trigger rerendering\r\n onSubMenuHidden && onSubMenuHidden(id);\r\n forceUpdate({});\r\n };\r\n let containActiveItem = false;\r\n if (item.type == 'desktopgroup' && activeItemId) containActiveItem = checkIfContainsItem(item, activeItemId);\r\n\r\n const onMouseEnter = (event: any, id: string) => {\r\n const existingRefForId = dropdownMenusOpenedArray.current.find((x) => x == id);\r\n if (existingRefForId == null) {\r\n dropdownMenusOpenedArray.current = [...dropdownMenusOpenedArray.current, id];\r\n //just trigger rerendering\r\n onSubMenuOpened && onSubMenuOpened(id);\r\n forceUpdate({});\r\n }\r\n };\r\n\r\n const onKeyDown = (e: React.KeyboardEvent<HTMLUListElement>) => {\r\n \r\n if (e.key === 'ArrowUp' || e.key === 'Up') {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (focusedRef.current.index > 0) {\r\n setNewFocusedElement(focusedRef.current.index - 1);\r\n }\r\n } else if (e.key === 'ArrowDown' || e.key === 'Down') {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if(focusedRef.current.index < allRefs.length - 1)\r\n setNewFocusedElement(focusedRef.current.index + 1);\r\n } \r\n else\r\n if (e.key == 'Enter' || e.code == 'Space') {\r\n e.stopPropagation();\r\n if(focusedRef.current.index < 0)\r\n return;\r\n \r\n const focusedItem = item.items[focusedRef.current.index];\r\n if(focusedItem.type == 'desktopgroup')\r\n {\r\n dropdownMenusOpenedArray.current = [...dropdownMenusOpenedArray.current, focusedItem.id];\r\n forceUpdate({});\r\n }\r\n else\r\n {\r\n allRefs[focusedRef.current.index].current?.click();\r\n forceUpdate({});\r\n }\r\n\r\n //just trigger rerendering\r\n \r\n }\r\n };\r\n\r\n const setNewFocusedElement = (index: number) => {\r\n const newFocusedElement = index >= 0 ? allRefs[index] : null;\r\n const oldFocusedElement = focusedRef.current.index >= 0 ? allRefs[focusedRef.current.index] : null;\r\n focusedRef.current.index = index;\r\n\r\n if(oldFocusedElement)\r\n oldFocusedElement?.current?.classList.remove('dropdown-hover');\r\n\r\n if (newFocusedElement && newFocusedElement !== oldFocusedElement) {\r\n newFocusedElement.current?.classList.add('dropdown-hover');\r\n console.log(item.items[index].id);\r\n onItemFocused && onItemFocused(item.items[index].id ?? '');\r\n }\r\n else if(onItemFocused)\r\n onItemFocused('');\r\n };\r\n\r\n const onFocus = (event: React.FocusEvent<HTMLUListElement>) => {\r\n event.stopPropagation();\r\n dropdownMenusOpenedArray.current = [...(nestPath ?? [])];\r\n setNewFocusedElement(0);\r\n forceUpdate({});\r\n \r\n };\r\n\r\n const onBlur = (event: React.FocusEvent<HTMLUListElement>) => {\r\n event.stopPropagation();\r\n setNewFocusedElement(-1);\r\n };\r\n\r\n return (\r\n <SubMenuWrapper id={item.id} className={existingRef ? 'open' : '' } topLevel={topLevel} visible={Boolean(existingRef)}>\r\n <Menu role=\"group\" ref={ref} aria-labelledby={ariaLabelledBy} onBlur={onBlur} onFocus={onFocus} onKeyDown={(event) => onKeyDown(event)} tabIndex={0}>\r\n <MenuSection>\r\n <MenuSectionList>\r\n <Tabs size={Size.Medium}>\r\n {item.items.map((entry, index) => {\r\n const isGroup = entry.type == 'desktopgroup';\r\n const key = isGroup ? entry.id : entry.type == 'item' ? entry.to : '';\r\n const SubItemOpened = Boolean(dropdownMenusOpenedArray.current.find((x) => x == entry.id));\r\n if (isGroup) {\r\n return (\r\n <div style={{ position: 'relative' }} onMouseEnter={(event) => onMouseEnter(event, entry.id)} onMouseLeave={(event) => onMouseLeave(event, entry.id)}>\r\n <MenuItem\r\n id={entry.id + '_parentOption'}\r\n aria-expanded={Boolean(SubItemOpened)}\r\n aria-activedescendant={entry.items.find(x => x.id == focusedItemId)?.id ?? ''}\r\n tabIndex={-1}\r\n ref={allRefs[index] as React.Ref<HTMLButtonElement>}\r\n \r\n aria-controls={entry.id}\r\n role=\"group\"\r\n //id={entry.id} removing this can break something\r\n item={{\r\n value: entry.label ?? '',\r\n }}\r\n iconRight={<SystemIcons.ArrowDropRight size=\"24px\" />}\r\n active={SubItemOpened || (Boolean(activeItemId) && activeItemId != '' && checkIfContainsItem(entry, activeItemId!))}\r\n onClickHandler={() => {}}\r\n />\r\n <SubMenu\r\n ariaLabelledBy={entry.id + '_parentOption'}\r\n onItemFocused={onItemFocused}\r\n focusedItemId={focusedItemId}\r\n ref={subMenuRefs[index]}\r\n nestPath={[...(nestPath ?? []), entry.id]}\r\n onItemStateChanged={onItemStateChanged}\r\n activeItemId={activeItemId}\r\n dropdownMenusOpenedArray={dropdownMenusOpenedArray}\r\n item={entry as MenuNavigationItemTypeDesktopGroup}\r\n index={index + 1}\r\n topLevel={false}\r\n />\r\n </div>\r\n );\r\n }\r\n return (\r\n <>\r\n <TabLink\r\n id={entry.id}\r\n tabIndex={-1}\r\n key={key}\r\n to={isGroup ? '' : key}\r\n ref={allRefs[index] as React.Ref<HTMLAnchorElement>}\r\n onActiveStateChanged={(state) => onItemStateChanged && entry.type == 'item' && onItemStateChanged(entry.to, state)}\r\n forceDeactivate={isGroup}\r\n requiredLine={entry.label ?? ''}\r\n optionalLine={''}\r\n endLineIcon={isGroup ? <SystemIcons.ArrowDropRight size=\"24px\" /> : null}\r\n OptionalLineIcon={''}\r\n disabled={entry.disabled}\r\n showNotificationDot={false}\r\n size={Size.Medium}\r\n variant=\"positive\"\r\n />\r\n </>\r\n );\r\n })}\r\n </Tabs>\r\n </MenuSectionList>\r\n </MenuSection>\r\n </Menu>\r\n </SubMenuWrapper>\r\n );\r\n});\r\n"],"mappings":";;;;;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,MAAM,MAAM,mBAAmB;AAEtC,SAASC,IAAI,EAAEC,WAAW,EAAEC,eAAe,QAAQ,oBAAoB;AAEvE,SAASC,IAAI,QAAQ,aAAa;AAClC,SAASC,WAAW,QAAQ,aAAa;AACzC,SAASC,mBAAmB,QAAQ,UAAU;AAC9C,OAAOC,IAAI,MAAM,iBAAiB;AAClC,OAAOC,OAAO,MAAM,oBAAoB;AACxC,SAASC,QAAQ,QAAQ,gBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAAA,SAAAC,QAAA,IAAAC,SAAA;AAiB1C,OAAO,IAAMC,cAAc,GAAGhB,MAAM,CAACiB,GAAG,CAAAC,eAAA,KAAAA,eAAA,GAAAC,sBAAA,gHACpClB,IAAI,EACG,UAACmB,KAAK;EAAA,OAAMA,KAAK,CAACC,QAAQ,GAAG,MAAM,GAAG,KAAK;AAAA,CAAC,EAC3C,UAACD,KAAK;EAAA,OAAMA,KAAK,CAACC,QAAQ,GAAG,KAAK,GAAG,mBAAmB;AAAA,CAAC,EAGjE,UAACD,KAAK;EAAA,OAAM,CAACA,KAAK,CAACE,OAAO,GAAG,gBAAgB,GAAG,EAAE;AAAA,CAAC,CAKtD;AAED,OAAO,IAAMC,OAAO,gBAAGxB,KAAK,CAACyB,UAAU,CAAiC,UAAAC,IAAA,EAavDC,GAAG,EAAuC;EAAA,IAZzDC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IACJC,KAAK,GAAAH,IAAA,CAALG,KAAK;IACLP,QAAQ,GAAAI,IAAA,CAARJ,QAAQ;IACRQ,wBAAwB,GAAAJ,IAAA,CAAxBI,wBAAwB;IACxBC,eAAe,GAAAL,IAAA,CAAfK,eAAe;IACfC,eAAe,GAAAN,IAAA,CAAfM,eAAe;IACfC,kBAAkB,GAAAP,IAAA,CAAlBO,kBAAkB;IAClBC,aAAa,GAAAR,IAAA,CAAbQ,aAAa;IACbC,YAAY,GAAAT,IAAA,CAAZS,YAAY;IACZC,QAAQ,GAAAV,IAAA,CAARU,QAAQ;IACRC,cAAc,GAAAX,IAAA,CAAdW,cAAc;IACdC,aAAa,GAAAZ,IAAA,CAAbY,aAAa;EAEb,IAAAC,eAAA,GAAwBvC,KAAK,CAACwC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAAAC,gBAAA,GAAAC,cAAA,CAAAH,eAAA;IAAjCI,WAAW,GAAAF,gBAAA;EACpB,IAAMG,UAAU,GAAG5C,KAAK,CAAC6C,MAAM,CAAoB;IAAEhB,KAAK,EAAE,CAAC;EAAE,CAAC,CAAC;EACjE,IAAAiB,gBAAA,GAA8B9C,KAAK,CAACwC,QAAQ,CAA2D,EAAE,CAAC;IAAAO,gBAAA,GAAAL,cAAA,CAAAI,gBAAA;IAAnGE,OAAO,GAAAD,gBAAA;IAAEE,UAAU,GAAAF,gBAAA;EAC1B,IAAAG,gBAAA,GAAyClD,KAAK,CAACwC,QAAQ,CAAoD,EAAE,CAAC;IAAAW,gBAAA,GAAAT,cAAA,CAAAQ,gBAAA;IAAvGE,WAAW,GAAAD,gBAAA;IAAEE,iBAAiB,GAAAF,gBAAA;EAErCnD,KAAK,CAACsD,SAAS,CAAC,YAAM;IACpBL,UAAU,CAACrB,IAAI,CAAC2B,KAAK,CAACC,GAAG,CAAC,UAACC,CAAC;MAAA,OAAMA,CAAC,CAACC,IAAI,IAAI,cAAc,gBAAG1D,KAAK,CAAC2D,SAAS,CAAoB,CAAC,gBAAG3D,KAAK,CAAC2D,SAAS,CAAoB,CAAC;IAAA,CAAC,CAAC,CAAC;IAC3IN,iBAAiB,CAACzB,IAAI,CAAC2B,KAAK,CAACC,GAAG,CAAC,UAACC,CAAC;MAAA,OAAMA,CAAC,CAACC,IAAI,IAAI,cAAc,gBAAG1D,KAAK,CAAC2D,SAAS,CAAmB,CAAC,GAAGC,SAAS;IAAA,CAAC,CAAC,CAAC;EACxH,CAAC,EAAE,CAAChC,IAAI,CAAC,CAAC;EAEV,IAAMiC,WAAW,GAAG/B,wBAAwB,CAACgC,OAAO,CAACC,IAAI,CAAC,UAACN,CAAC;IAAA,OAAKA,CAAC,IAAI7B,IAAI,CAACoC,EAAE;EAAA,EAAC;EAC9E,IAAMC,aAAY,GAAG,SAAfA,YAAYA,CAAIC,KAAU,EAAEF,EAAU,EAAK;IAC/ClC,wBAAwB,CAACgC,OAAO,GAAAK,kBAAA,CAAOrC,wBAAwB,CAACgC,OAAO,CAACM,MAAM,CAAC,UAACX,CAAC;MAAA,OAAKA,CAAC,IAAIO,EAAE;IAAA,EAAC,CAAC;IAC/F;IACAjC,eAAe,IAAIA,eAAe,CAACiC,EAAE,CAAC;IACtCrB,WAAW,CAAC,CAAC,CAAC,CAAC;EACjB,CAAC;EACD,IAAI0B,iBAAiB,GAAG,KAAK;EAC7B,IAAIzC,IAAI,CAAC8B,IAAI,IAAI,cAAc,IAAIvB,YAAY,EAAEkC,iBAAiB,GAAG9D,mBAAmB,CAACqB,IAAI,EAAEO,YAAY,CAAC;EAE5G,IAAMmC,aAAY,GAAG,SAAfA,YAAYA,CAAIJ,KAAU,EAAEF,EAAU,EAAK;IAC/C,IAAMO,gBAAgB,GAAGzC,wBAAwB,CAACgC,OAAO,CAACC,IAAI,CAAC,UAACN,CAAC;MAAA,OAAKA,CAAC,IAAIO,EAAE;IAAA,EAAC;IAC9E,IAAIO,gBAAgB,IAAI,IAAI,EAAE;MAC5BzC,wBAAwB,CAACgC,OAAO,MAAAU,MAAA,CAAAL,kBAAA,CAAOrC,wBAAwB,CAACgC,OAAO,IAAEE,EAAE,EAAC;MAC5E;MACAhC,eAAe,IAAIA,eAAe,CAACgC,EAAE,CAAC;MACtCrB,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB;EACF,CAAC;EAED,IAAM8B,UAAS,GAAG,SAAZA,SAASA,CAAIC,CAAwC,EAAK;IAE9D,IAAIA,CAAC,CAACC,GAAG,KAAK,SAAS,IAAID,CAAC,CAACC,GAAG,KAAK,IAAI,EAAE;MACzCD,CAAC,CAACE,eAAe,CAAC,CAAC;MACnBF,CAAC,CAACG,cAAc,CAAC,CAAC;MAClB,IAAIjC,UAAU,CAACkB,OAAO,CAACjC,KAAK,GAAG,CAAC,EAAE;QAChCiD,oBAAoB,CAAClC,UAAU,CAACkB,OAAO,CAACjC,KAAK,GAAG,CAAC,CAAC;MACpD;IACF,CAAC,MAAM,IAAI6C,CAAC,CAACC,GAAG,KAAK,WAAW,IAAID,CAAC,CAACC,GAAG,KAAK,MAAM,EAAE;MACpDD,CAAC,CAACE,eAAe,CAAC,CAAC;MACnBF,CAAC,CAACG,cAAc,CAAC,CAAC;MAClB,IAAGjC,UAAU,CAACkB,OAAO,CAACjC,KAAK,GAAGmB,OAAO,CAAC+B,MAAM,GAAG,CAAC,EAChDD,oBAAoB,CAAClC,UAAU,CAACkB,OAAO,CAACjC,KAAK,GAAG,CAAC,CAAC;IACpD,CAAC,MAED,IAAI6C,CAAC,CAACC,GAAG,IAAI,OAAO,IAAID,CAAC,CAACM,IAAI,IAAI,OAAO,EAAE;MACzCN,CAAC,CAACE,eAAe,CAAC,CAAC;MACnB,IAAGhC,UAAU,CAACkB,OAAO,CAACjC,KAAK,GAAG,CAAC,EAC7B;MAEF,IAAMoD,WAAW,GAAGrD,IAAI,CAAC2B,KAAK,CAACX,UAAU,CAACkB,OAAO,CAACjC,KAAK,CAAC;MACxD,IAAGoD,WAAW,CAACvB,IAAI,IAAI,cAAc,EACrC;QACE5B,wBAAwB,CAACgC,OAAO,MAAAU,MAAA,CAAAL,kBAAA,CAAOrC,wBAAwB,CAACgC,OAAO,IAAEmB,WAAW,CAACjB,EAAE,EAAC;QACxFrB,WAAW,CAAC,CAAC,CAAC,CAAC;MACjB,CAAC,MAED;QAAA,IAAAuC,qBAAA;QACE,CAAAA,qBAAA,GAAAlC,OAAO,CAACJ,UAAU,CAACkB,OAAO,CAACjC,KAAK,CAAC,CAACiC,OAAO,cAAAoB,qBAAA,uBAAzCA,qBAAA,CAA2CC,KAAK,CAAC,CAAC;QAClDxC,WAAW,CAAC,CAAC,CAAC,CAAC;MACjB;;MAEA;IAEF;EACF,CAAC;EAED,IAAMmC,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIjD,KAAa,EAAK;IAAA,IAAAuD,qBAAA;IAC9C,IAAMC,iBAAiB,GAAGxD,KAAK,IAAI,CAAC,GAAGmB,OAAO,CAACnB,KAAK,CAAC,GAAG,IAAI;IAC5D,IAAMyD,iBAAiB,GAAG1C,UAAU,CAACkB,OAAO,CAACjC,KAAK,IAAI,CAAC,GAAGmB,OAAO,CAACJ,UAAU,CAACkB,OAAO,CAACjC,KAAK,CAAC,GAAG,IAAI;IAClGe,UAAU,CAACkB,OAAO,CAACjC,KAAK,GAAGA,KAAK;IAEhC,IAAGyD,iBAAiB,EAClBA,iBAAiB,aAAjBA,iBAAiB,wBAAAF,qBAAA,GAAjBE,iBAAiB,CAAExB,OAAO,cAAAsB,qBAAA,uBAA1BA,qBAAA,CAA4BG,SAAS,CAACC,MAAM,CAAC,gBAAgB,CAAC;IAEhE,IAAIH,iBAAiB,IAAIA,iBAAiB,KAAKC,iBAAiB,EAAE;MAAA,IAAAG,qBAAA,EAAAC,oBAAA;MAChE,CAAAD,qBAAA,GAAAJ,iBAAiB,CAACvB,OAAO,cAAA2B,qBAAA,uBAAzBA,qBAAA,CAA2BF,SAAS,CAACI,GAAG,CAAC,gBAAgB,CAAC;MAC1DC,OAAO,CAACC,GAAG,CAACjE,IAAI,CAAC2B,KAAK,CAAC1B,KAAK,CAAC,CAACmC,EAAE,CAAC;MACjC1B,aAAa,IAAIA,aAAa,EAAAoD,oBAAA,GAAC9D,IAAI,CAAC2B,KAAK,CAAC1B,KAAK,CAAC,CAACmC,EAAE,cAAA0B,oBAAA,cAAAA,oBAAA,GAAI,EAAE,CAAC;IAC5D,CAAC,MACI,IAAGpD,aAAa,EACnBA,aAAa,CAAC,EAAE,CAAC;EACrB,CAAC;EAED,IAAMwD,OAAO,GAAG,SAAVA,OAAOA,CAAI5B,KAAyC,EAAK;IAC7DA,KAAK,CAACU,eAAe,CAAC,CAAC;IACvB9C,wBAAwB,CAACgC,OAAO,GAAAK,kBAAA,CAAQ/B,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAI,EAAE,CAAE;IACxD0C,oBAAoB,CAAC,CAAC,CAAC;IACvBnC,WAAW,CAAC,CAAC,CAAC,CAAC;EAEjB,CAAC;EAED,IAAMoD,MAAM,GAAG,SAATA,MAAMA,CAAI7B,KAAyC,EAAK;IAC5DA,KAAK,CAACU,eAAe,CAAC,CAAC;IACvBE,oBAAoB,CAAC,CAAC,CAAC,CAAC;EAC1B,CAAC;EAED,oBACElE,IAAA,CAACK,cAAc;IAAC+C,EAAE,EAAEpC,IAAI,CAACoC,EAAG;IAAEgC,SAAS,EAAEnC,WAAW,GAAG,MAAM,GAAG,EAAI;IAACvC,QAAQ,EAAEA,QAAS;IAACC,OAAO,EAAE0E,OAAO,CAACpC,WAAW,CAAE;IAAAqC,QAAA,eACrHtF,IAAA,CAACV,IAAI;MAACiG,IAAI,EAAC,OAAO;MAACxE,GAAG,EAAEA,GAAI;MAAC,mBAAiBU,cAAe;MAAC0D,MAAM,EAAEA,MAAO;MAACD,OAAO,EAAEA,OAAQ;MAACrB,SAAS,EAAE,SAAAA,UAACP,KAAK;QAAA,OAAKO,UAAS,CAACP,KAAK,CAAC;MAAA,CAAC;MAACkC,QAAQ,EAAE,CAAE;MAAAF,QAAA,eAClJtF,IAAA,CAACT,WAAW;QAAA+F,QAAA,eACVtF,IAAA,CAACR,eAAe;UAAA8F,QAAA,eACdtF,IAAA,CAACJ,IAAI;YAAC6F,IAAI,EAAEhG,IAAI,CAACiG,MAAO;YAAAJ,QAAA,EACrBtE,IAAI,CAAC2B,KAAK,CAACC,GAAG,CAAC,UAAC+C,KAAK,EAAE1E,KAAK,EAAK;cAAA,IAAA2E,aAAA;cAChC,IAAMC,OAAO,GAAGF,KAAK,CAAC7C,IAAI,IAAI,cAAc;cAC5C,IAAMiB,GAAG,GAAG8B,OAAO,GAAGF,KAAK,CAACvC,EAAE,GAAGuC,KAAK,CAAC7C,IAAI,IAAI,MAAM,GAAG6C,KAAK,CAACG,EAAE,GAAG,EAAE;cACrE,IAAMC,aAAa,GAAGV,OAAO,CAACnE,wBAAwB,CAACgC,OAAO,CAACC,IAAI,CAAC,UAACN,CAAC;gBAAA,OAAKA,CAAC,IAAI8C,KAAK,CAACvC,EAAE;cAAA,EAAC,CAAC;cAC1F,IAAIyC,OAAO,EAAE;gBAAA,IAAAG,oBAAA,EAAAC,iBAAA,EAAAC,YAAA;gBACX,oBACEhG,KAAA;kBAAKiG,KAAK,EAAE;oBAAEC,QAAQ,EAAE;kBAAW,CAAE;kBAAC1C,YAAY,EAAE,SAAAA,aAACJ,KAAK;oBAAA,OAAKI,aAAY,CAACJ,KAAK,EAAEqC,KAAK,CAACvC,EAAE,CAAC;kBAAA,CAAC;kBAACC,YAAY,EAAE,SAAAA,aAACC,KAAK;oBAAA,OAAKD,aAAY,CAACC,KAAK,EAAEqC,KAAK,CAACvC,EAAE,CAAC;kBAAA,CAAC;kBAAAkC,QAAA,gBACnJtF,IAAA,CAACF,QAAQ;oBACPsD,EAAE,EAAEuC,KAAK,CAACvC,EAAE,GAAG,eAAgB;oBAC/B,iBAAeiC,OAAO,CAACU,aAAa,CAAE;oBACtC,0BAAAC,oBAAA,IAAAC,iBAAA,GAAuBN,KAAK,CAAChD,KAAK,CAACQ,IAAI,CAAC,UAAAN,CAAC;sBAAA,OAAIA,CAAC,CAACO,EAAE,IAAI9B,aAAa;oBAAA,EAAC,cAAA2E,iBAAA,uBAA5CA,iBAAA,CAA8C7C,EAAE,cAAA4C,oBAAA,cAAAA,oBAAA,GAAI,EAAG;oBAC9ER,QAAQ,EAAE,CAAC,CAAE;oBACbzE,GAAG,EAAEqB,OAAO,CAACnB,KAAK,CAAkC;oBAEpD,iBAAe0E,KAAK,CAACvC,EAAG;oBACxBmC,IAAI,EAAC;oBACL;oBAAA;oBACAvE,IAAI,EAAE;sBACJqF,KAAK,GAAAH,YAAA,GAAEP,KAAK,CAACW,KAAK,cAAAJ,YAAA,cAAAA,YAAA,GAAI;oBACxB,CAAE;oBACFK,SAAS,eAAEvG,IAAA,CAACN,WAAW,CAAC8G,cAAc;sBAACf,IAAI,EAAC;oBAAM,CAAE,CAAE;oBACtDgB,MAAM,EAAEV,aAAa,IAAKV,OAAO,CAAC9D,YAAY,CAAC,IAAIA,YAAY,IAAI,EAAE,IAAI5B,mBAAmB,CAACgG,KAAK,EAAEpE,YAAa,CAAG;oBACpHmF,cAAc,EAAE,SAAAA,eAAA,EAAM,CAAC;kBAAE,CAC1B,CAAC,eACF1G,IAAA,CAACY,OAAO;oBACNa,cAAc,EAAEkE,KAAK,CAACvC,EAAE,GAAG,eAAgB;oBAC3C1B,aAAa,EAAEA,aAAc;oBAC7BJ,aAAa,EAAEA,aAAc;oBAC7BP,GAAG,EAAEyB,WAAW,CAACvB,KAAK,CAAE;oBACxBO,QAAQ,KAAAoC,MAAA,CAAAL,kBAAA,CAAO/B,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAI,EAAE,IAAGmE,KAAK,CAACvC,EAAE,EAAE;oBAC1C/B,kBAAkB,EAAEA,kBAAmB;oBACvCE,YAAY,EAAEA,YAAa;oBAC3BL,wBAAwB,EAAEA,wBAAyB;oBACnDF,IAAI,EAAE2E,KAA4C;oBAClD1E,KAAK,EAAEA,KAAK,GAAG,CAAE;oBACjBP,QAAQ,EAAE;kBAAM,CACjB,CAAC;gBAAA,CACC,CAAC;cAEV;cACA,oBACEV,IAAA,CAAAI,SAAA;gBAAAkF,QAAA,eACEtF,IAAA,CAACH,OAAO;kBACNuD,EAAE,EAAEuC,KAAK,CAACvC,EAAG;kBACboC,QAAQ,EAAE,CAAC,CAAE;kBAEbM,EAAE,EAAED,OAAO,GAAG,EAAE,GAAG9B,GAAI;kBACvBhD,GAAG,EAAEqB,OAAO,CAACnB,KAAK,CAAkC;kBACpD0F,oBAAoB,EAAE,SAAAA,qBAACC,KAAK;oBAAA,OAAKvF,kBAAkB,IAAIsE,KAAK,CAAC7C,IAAI,IAAI,MAAM,IAAIzB,kBAAkB,CAACsE,KAAK,CAACG,EAAE,EAAEc,KAAK,CAAC;kBAAA,CAAC;kBACnHC,eAAe,EAAEhB,OAAQ;kBACzBiB,YAAY,GAAAlB,aAAA,GAAED,KAAK,CAACW,KAAK,cAAAV,aAAA,cAAAA,aAAA,GAAI,EAAG;kBAChCmB,YAAY,EAAE,EAAG;kBACjBC,WAAW,EAAEnB,OAAO,gBAAG7F,IAAA,CAACN,WAAW,CAAC8G,cAAc;oBAACf,IAAI,EAAC;kBAAM,CAAE,CAAC,GAAG,IAAK;kBACzEwB,gBAAgB,EAAE,EAAG;kBACrBC,QAAQ,EAAEvB,KAAK,CAACuB,QAAS;kBACzBC,mBAAmB,EAAE,KAAM;kBAC3B1B,IAAI,EAAEhG,IAAI,CAACiG,MAAO;kBAClB0B,OAAO,EAAC;gBAAU,GAZbrD,GAaN;cAAC,CACF,CAAC;YAEP,CAAC;UAAC,CACE;QAAC,CACQ;MAAC,CACP;IAAC,CACV;EAAC,CACO,CAAC;AAErB,CAAC,CAAC;AAACnD,OAAA,CAAAyG,SAAA;EAnNDpG,KAAK,EAAAqG,GAAA,CAAAC,MAAA,CAAAC,UAAA;EACL9G,QAAQ,EAAA4G,GAAA,CAAAG,IAAA,CAAAD,UAAA;EAERpG,eAAe,EAAAkG,GAAA,CAAAI,IAAA;EACfvG,eAAe,EAAAmG,GAAA,CAAAI,IAAA;EACfrG,kBAAkB,EAAAiG,GAAA,CAAAI,IAAA;EAClBhG,aAAa,EAAA4F,GAAA,CAAAI,IAAA;EACbpG,aAAa,EAAAgG,GAAA,CAAAK,MAAA;EACbpG,YAAY,EAAA+F,GAAA,CAAAK,MAAA;EACZnG,QAAQ,EAAA8F,GAAA,CAAAM,OAAA,CAAAN,GAAA,CAAAK,MAAA;EACRlG,cAAc,EAAA6F,GAAA,CAAAK;AAAA","ignoreList":[]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import DesktopActions, {DesktopActionsRef} from '../DesktopActions';
|
|
3
|
+
import {act, render} from '../../../test-utils';
|
|
4
|
+
import {DesktopMenuButtonTypes} from '../../types';
|
|
5
|
+
import {SystemIcons} from '../../../icons';
|
|
6
|
+
import {IconButtonStyled} from '../../../Button/Iconbutton';
|
|
7
|
+
import {ProfileButtonContainer} from '../../../ProfileButton/ProfileButton';
|
|
8
|
+
|
|
9
|
+
describe('DesktopActions', () => {
|
|
10
|
+
const profileSpy = jest.fn();
|
|
11
|
+
const actionSpy = jest.fn();
|
|
12
|
+
const switcherSpy = jest.fn();
|
|
13
|
+
const showSubMenuSpy = jest.fn();
|
|
14
|
+
|
|
15
|
+
const profile: DesktopMenuButtonTypes = {
|
|
16
|
+
type: 'profile',
|
|
17
|
+
action: profileSpy,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const action: DesktopMenuButtonTypes = {
|
|
21
|
+
type: 'action',
|
|
22
|
+
action: actionSpy,
|
|
23
|
+
icon: <SystemIcons.Search/>,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const switcher: DesktopMenuButtonTypes = {
|
|
27
|
+
type: 'switcher',
|
|
28
|
+
action: switcherSpy,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
it('should render profile button', () => {
|
|
33
|
+
const wrapper = render(<DesktopActions buttons={[profile]} onShowUserMenu={showSubMenuSpy}/>)
|
|
34
|
+
|
|
35
|
+
expect(wrapper.container.querySelectorAll(`${ProfileButtonContainer}`)).toHaveLength(1);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('should render action button', () => {
|
|
39
|
+
const wrapper = render(<DesktopActions buttons={[action]} onShowUserMenu={showSubMenuSpy}/>)
|
|
40
|
+
|
|
41
|
+
expect(wrapper.container.querySelectorAll(`${IconButtonStyled}`)).toHaveLength(1);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('should render switcher button', () => {
|
|
45
|
+
const wrapper = render(<DesktopActions buttons={[switcher]} onShowUserMenu={showSubMenuSpy}/>)
|
|
46
|
+
|
|
47
|
+
expect(wrapper.container.querySelectorAll(`#globalNavAppsButton`)).toHaveLength(1);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('should call profile action on profile button click', () => {
|
|
51
|
+
const wrapper = render(<DesktopActions buttons={[profile]} onShowUserMenu={showSubMenuSpy}/>)
|
|
52
|
+
|
|
53
|
+
act(() => {
|
|
54
|
+
wrapper.container.querySelector('button')!.click();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
expect(profileSpy).toHaveBeenCalled();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('should call on sub menu open when action is not specified on profile button click', () => {
|
|
61
|
+
const wrapper = render(<DesktopActions buttons={[{...profile, action: undefined}]}
|
|
62
|
+
onShowUserMenu={showSubMenuSpy}/>)
|
|
63
|
+
|
|
64
|
+
act(() => {
|
|
65
|
+
wrapper.container.querySelector('button')!.click();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
expect(showSubMenuSpy).toHaveBeenCalled();
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('should call action on action button click', () => {
|
|
72
|
+
const wrapper = render(<DesktopActions buttons={[action]} onShowUserMenu={showSubMenuSpy}/>)
|
|
73
|
+
|
|
74
|
+
act(() => {
|
|
75
|
+
wrapper.container.querySelector('button')!.click();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
expect(actionSpy).toHaveBeenCalled();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('should call switcher action on switcher button click', () => {
|
|
82
|
+
const wrapper = render(<DesktopActions buttons={[switcher]} onShowUserMenu={showSubMenuSpy}/>)
|
|
83
|
+
|
|
84
|
+
act(() => {
|
|
85
|
+
wrapper.container.querySelector('button')!.click();
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
expect(switcherSpy).toHaveBeenCalled();
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
it('should not throw exceptions when buttons are removed', async () => {
|
|
93
|
+
const actionsRef = React.createRef<DesktopActionsRef>();
|
|
94
|
+
|
|
95
|
+
const wrapper = render(<DesktopActions ref={actionsRef}
|
|
96
|
+
buttons={[switcher, profile, action]}
|
|
97
|
+
onShowUserMenu={showSubMenuSpy}/>)
|
|
98
|
+
|
|
99
|
+
wrapper.rerender(<DesktopActions ref={actionsRef}
|
|
100
|
+
buttons={[]}
|
|
101
|
+
onShowUserMenu={showSubMenuSpy}/>)
|
|
102
|
+
|
|
103
|
+
expect(wrapper.container.querySelectorAll(`#globalNavAppsButton`)).toHaveLength(0);
|
|
104
|
+
expect(wrapper.container.querySelectorAll(`${ProfileButtonContainer}`)).toHaveLength(0);
|
|
105
|
+
expect(wrapper.container.querySelectorAll(`${IconButtonStyled}`)).toHaveLength(0);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import {MenuNavigationItemTypeItem} from '../../types';
|
|
3
|
+
import {render} from '../../../test-utils';
|
|
4
|
+
import ExtendedMainMenu from '../ExtendedMainMenu';
|
|
5
|
+
import { NavigationProvider } from '../../../Navigation';
|
|
6
|
+
|
|
7
|
+
describe('ExtendedMainMenu', () => {
|
|
8
|
+
const menuClickSpy = jest.fn();
|
|
9
|
+
const items = [{
|
|
10
|
+
label: 'item1',
|
|
11
|
+
to: '#1'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
label: 'item2',
|
|
15
|
+
to: '#2'
|
|
16
|
+
}] as MenuNavigationItemTypeItem[];
|
|
17
|
+
|
|
18
|
+
it('should render items', () => {
|
|
19
|
+
|
|
20
|
+
const wrapper = render(
|
|
21
|
+
<NavigationProvider currentPath='' isActiveRoute={() => false} navigate={(path: string, isExternal: boolean) => {}}>
|
|
22
|
+
<ExtendedMainMenu clickMenuAction={menuClickSpy} navigationOptions={items}/>
|
|
23
|
+
</NavigationProvider>);
|
|
24
|
+
|
|
25
|
+
expect(wrapper.getByText('item1')).toBeDefined();
|
|
26
|
+
expect(wrapper.getByText('item2')).toBeDefined();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import {MenuNavigationItemTypeItem} from '../../types';
|
|
3
|
+
import {fireEvent, render} from '../../../test-utils';
|
|
4
|
+
import {IconButtonStyled} from '../../../Button/Iconbutton';
|
|
5
|
+
import MainMenu from '../MainMenu';
|
|
6
|
+
import { act } from "react";
|
|
7
|
+
import { NavigationProvider } from '../../../Navigation';
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
describe('MainMenu', () => {
|
|
11
|
+
const menuClickSpy = jest.fn();
|
|
12
|
+
const navProps = {
|
|
13
|
+
currentPath: '',
|
|
14
|
+
isActiveRoute: () => false,
|
|
15
|
+
navigate: (path: string, isExternal: boolean) => {}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const items = [{
|
|
19
|
+
label: 'item1',
|
|
20
|
+
to: '#1'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
label: 'item2',
|
|
24
|
+
to: '#2'
|
|
25
|
+
}] as MenuNavigationItemTypeItem[];
|
|
26
|
+
|
|
27
|
+
it('should render items', () => {
|
|
28
|
+
const wrapper = render(<NavigationProvider {...navProps}><MainMenu rightSideRef={{current: {offsetLeft: 10000}} as any} items={items}/></NavigationProvider>);
|
|
29
|
+
|
|
30
|
+
expect(wrapper.getByText('item1')).toBeDefined();
|
|
31
|
+
expect(wrapper.getByText('item2')).toBeDefined();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('should not show extended menu if width is enough', () => {
|
|
35
|
+
const wrapper = render(
|
|
36
|
+
<NavigationProvider {...navProps}>
|
|
37
|
+
<MainMenu items={items} rightSideRef={{current: {offsetLeft: 10000}} as any}/>
|
|
38
|
+
</NavigationProvider>
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
act(() => {
|
|
42
|
+
global.dispatchEvent(new Event('resize'));
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
expect(wrapper.container.querySelectorAll(`${IconButtonStyled}`)).toHaveLength(0);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('should show extended menu if width is not enough', () => {
|
|
49
|
+
const wrapper = render(<NavigationProvider {...navProps}><MainMenu rightSideRef={{current: {offsetLeft: 0}} as any}
|
|
50
|
+
items={items}/></NavigationProvider>);
|
|
51
|
+
|
|
52
|
+
expect(wrapper.container.querySelectorAll(`${IconButtonStyled}`)).toHaveLength(1);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import {MenuNavigationItemTypeItem} from '../../types';
|
|
3
|
+
import {render} from '../../../test-utils';
|
|
4
|
+
import ExtendedMainMenu from '../ExtendedMainMenu';
|
|
5
|
+
import {IconButtonStyled} from '../../../Button/Iconbutton';
|
|
6
|
+
import MainMenu from '../MainMenu';
|
|
7
|
+
import RightSideNav from '../RightSideNav';
|
|
8
|
+
import { NavigationProvider } from '../../../Navigation';
|
|
9
|
+
|
|
10
|
+
describe('RightSideNav', () => {
|
|
11
|
+
|
|
12
|
+
const navProps = {
|
|
13
|
+
currentPath: '',
|
|
14
|
+
isActiveRoute: () => false,
|
|
15
|
+
navigate: (path: string, isExternal: boolean) => {}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
const items = [{
|
|
20
|
+
label: 'item1',
|
|
21
|
+
to: '#1'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
label: 'item2',
|
|
25
|
+
to: '#2'
|
|
26
|
+
}] as MenuNavigationItemTypeItem[];
|
|
27
|
+
|
|
28
|
+
it('should render items', () => {
|
|
29
|
+
const wrapper = render(<NavigationProvider {...navProps}><RightSideNav items={items}/></NavigationProvider>);
|
|
30
|
+
|
|
31
|
+
expect(wrapper.getByText('item1')).toBeDefined();
|
|
32
|
+
expect(wrapper.getByText('item2')).toBeDefined();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('should render action', () => {
|
|
36
|
+
const wrapper = render(
|
|
37
|
+
<NavigationProvider {...navProps}>
|
|
38
|
+
<RightSideNav items={[]}
|
|
39
|
+
action={{label: 'label', action: jest.fn()}}/>
|
|
40
|
+
</NavigationProvider>);
|
|
41
|
+
|
|
42
|
+
expect(wrapper.getByText('label')).toBeDefined();
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
});
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import UserMenu from '../UserMenu';
|
|
3
|
+
import {act, fireEvent, render} from '../../../test-utils';
|
|
4
|
+
import {ProfileMenu} from '../../types';
|
|
5
|
+
import {ProfileButtonContainer} from '../../../ProfileButton/ProfileButton';
|
|
6
|
+
import { NavigationProvider } from '../../../Navigation/NavigationProvider';
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
describe('UserMenu', () => {
|
|
11
|
+
|
|
12
|
+
const navProps = {
|
|
13
|
+
currentPath: '',
|
|
14
|
+
isActiveRoute: () => false,
|
|
15
|
+
navigate: (path: string, isExternal: boolean) => {}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
it('should render profile icon', function () {
|
|
19
|
+
const props: ProfileMenu = {
|
|
20
|
+
user: {
|
|
21
|
+
firstName: 'John',
|
|
22
|
+
lastName: 'Doe',
|
|
23
|
+
email: 'email'
|
|
24
|
+
},
|
|
25
|
+
sections: []
|
|
26
|
+
}
|
|
27
|
+
const wrapper = render(<NavigationProvider {...navProps}><UserMenu {...props} onHideUserMenu={jest.fn()}/></NavigationProvider>);
|
|
28
|
+
|
|
29
|
+
expect(wrapper.container.querySelectorAll(`${ProfileButtonContainer}`)).toHaveLength(1);
|
|
30
|
+
|
|
31
|
+
wrapper.unmount();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('should render label', function () {
|
|
35
|
+
const props: ProfileMenu = {
|
|
36
|
+
user: {
|
|
37
|
+
firstName: 'John',
|
|
38
|
+
lastName: 'Doe',
|
|
39
|
+
email: 'email'
|
|
40
|
+
},
|
|
41
|
+
sections: [],
|
|
42
|
+
label: 'label'
|
|
43
|
+
}
|
|
44
|
+
const wrapper = render(<NavigationProvider {...navProps}><UserMenu {...props} onHideUserMenu={jest.fn()}/></NavigationProvider>);
|
|
45
|
+
|
|
46
|
+
expect(wrapper.findByText('label')).toBeDefined();
|
|
47
|
+
|
|
48
|
+
wrapper.unmount();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('should render sign out button', function () {
|
|
52
|
+
const props: ProfileMenu = {
|
|
53
|
+
user: {
|
|
54
|
+
firstName: 'John',
|
|
55
|
+
lastName: 'Doe',
|
|
56
|
+
email: 'email'
|
|
57
|
+
},
|
|
58
|
+
sections: [],
|
|
59
|
+
signOut: {
|
|
60
|
+
action: jest.fn(),
|
|
61
|
+
label: 'sign out'
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const wrapper = render(<NavigationProvider {...navProps}><UserMenu {...props} onHideUserMenu={jest.fn()}/></NavigationProvider>);
|
|
65
|
+
|
|
66
|
+
expect(wrapper.findByText('sign out')).toBeDefined();
|
|
67
|
+
|
|
68
|
+
wrapper.unmount();
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('should render sections', function () {
|
|
72
|
+
const props: ProfileMenu = {
|
|
73
|
+
user: {
|
|
74
|
+
firstName: 'John',
|
|
75
|
+
lastName: 'Doe',
|
|
76
|
+
email: 'email'
|
|
77
|
+
},
|
|
78
|
+
sections: [{
|
|
79
|
+
label: 'label',
|
|
80
|
+
items: [{
|
|
81
|
+
label: 'item1',
|
|
82
|
+
to: '#'
|
|
83
|
+
}]
|
|
84
|
+
}],
|
|
85
|
+
}
|
|
86
|
+
const wrapper = render(<NavigationProvider {...navProps}>
|
|
87
|
+
<UserMenu {...props} onHideUserMenu={jest.fn()}/>
|
|
88
|
+
</NavigationProvider>);
|
|
89
|
+
|
|
90
|
+
expect(wrapper.getByText('item1')).toBeDefined();
|
|
91
|
+
expect(wrapper.getByText('label')).toBeDefined();
|
|
92
|
+
|
|
93
|
+
wrapper.unmount();
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it('should close when item is clicked', async function () {
|
|
97
|
+
const props: ProfileMenu = {
|
|
98
|
+
user: {
|
|
99
|
+
firstName: 'John',
|
|
100
|
+
lastName: 'Doe',
|
|
101
|
+
email: 'email'
|
|
102
|
+
},
|
|
103
|
+
sections: [{
|
|
104
|
+
label: 'label',
|
|
105
|
+
items: [{
|
|
106
|
+
label: 'item1',
|
|
107
|
+
to: 'http://localhost',
|
|
108
|
+
external: true
|
|
109
|
+
}]
|
|
110
|
+
}],
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const onClose = jest.fn();
|
|
114
|
+
const wrapper = render(<NavigationProvider {...navProps}> <UserMenu {...props} onHideUserMenu={onClose}/> </NavigationProvider>);
|
|
115
|
+
|
|
116
|
+
act(() => {
|
|
117
|
+
fireEvent.click(wrapper.getByText('item1'));
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
expect(onClose).toHaveBeenCalled();
|
|
121
|
+
|
|
122
|
+
wrapper.unmount();
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
});
|