@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.
Files changed (227) hide show
  1. package/dist/Accordion/__tests__/AccordionMenu.test.tsx +42 -0
  2. package/dist/Accordion/__tests__/ContentAccordion.test.tsx +150 -0
  3. package/dist/AuthPage/__tests__/AuthPage.test.tsx +27 -0
  4. package/dist/Banners/__tests__/Banner.test.tsx +47 -0
  5. package/dist/Banners/__tests__/OverviewBanner.test.tsx +20 -0
  6. package/dist/Breadcrumb/__tests__/Breadcrumb.test.tsx +78 -0
  7. package/dist/Button/TextButton.cjs +648 -0
  8. package/dist/Button/TextButton.cjs.map +1 -0
  9. package/dist/Button/TextButton.d.ts +77 -0
  10. package/dist/Button/TextButton.js +640 -0
  11. package/dist/Button/TextButton.js.map +1 -0
  12. package/dist/Button/__tests__/BackButton.test.tsx +32 -0
  13. package/dist/Button/__tests__/Button.test.tsx +45 -0
  14. package/dist/Button/__tests__/DualButton.test.tsx +119 -0
  15. package/dist/Button/__tests__/TextButton.test.tsx +45 -0
  16. package/dist/Card/HorizontalCard/__tests__/HorizontalCard.test.tsx +71 -0
  17. package/dist/Card/HorizontalCard/__tests__/VerticalCard.test.tsx +124 -0
  18. package/dist/Card/VerticalCard/VerticalCard.cjs +187 -0
  19. package/dist/Card/VerticalCard/VerticalCard.cjs.map +1 -0
  20. package/dist/Card/VerticalCard/VerticalCard.d.ts +25 -0
  21. package/dist/Card/VerticalCard/VerticalCard.js +178 -0
  22. package/dist/Card/VerticalCard/VerticalCard.js.map +1 -0
  23. package/dist/Card/VerticalCard/VerticalCardBottomSection.cjs +261 -0
  24. package/dist/Card/VerticalCard/VerticalCardBottomSection.cjs.map +1 -0
  25. package/dist/Card/VerticalCard/VerticalCardBottomSection.d.ts +53 -0
  26. package/dist/Card/VerticalCard/VerticalCardBottomSection.js +252 -0
  27. package/dist/Card/VerticalCard/VerticalCardBottomSection.js.map +1 -0
  28. package/dist/Card/VerticalCard/VerticalCardMiddleSection.cjs +145 -0
  29. package/dist/Card/VerticalCard/VerticalCardMiddleSection.cjs.map +1 -0
  30. package/dist/Card/VerticalCard/VerticalCardMiddleSection.d.ts +42 -0
  31. package/dist/Card/VerticalCard/VerticalCardMiddleSection.js +136 -0
  32. package/dist/Card/VerticalCard/VerticalCardMiddleSection.js.map +1 -0
  33. package/dist/Card/VerticalCard/VerticalCardTopSection.cjs +165 -0
  34. package/dist/Card/VerticalCard/VerticalCardTopSection.cjs.map +1 -0
  35. package/dist/Card/VerticalCard/VerticalCardTopSection.d.ts +45 -0
  36. package/dist/Card/VerticalCard/VerticalCardTopSection.js +156 -0
  37. package/dist/Card/VerticalCard/VerticalCardTopSection.js.map +1 -0
  38. package/dist/Card/VerticalCard/__tests__/VerticalCard.test.tsx +124 -0
  39. package/dist/Card/__tests__/Card.test.tsx +146 -0
  40. package/dist/Chips/ChoiceChips.cjs +0 -1
  41. package/dist/Chips/ChoiceChips.cjs.map +1 -1
  42. package/dist/Chips/ChoiceChips.js +0 -1
  43. package/dist/Chips/ChoiceChips.js.map +1 -1
  44. package/dist/Chips/__tests__/ActionChip.test.tsx +94 -0
  45. package/dist/Chips/__tests__/ChoiceChips.test.tsx +79 -0
  46. package/dist/Chips/__tests__/FilterChip.test.tsx +95 -0
  47. package/dist/Chips/__tests__/InputChip.test.tsx +155 -0
  48. package/dist/ChipsInput/ChipDropdownInput.cjs +1 -1
  49. package/dist/ChipsInput/ChipDropdownInput.cjs.map +1 -1
  50. package/dist/ChipsInput/ChipDropdownInput.js +1 -1
  51. package/dist/ChipsInput/ChipDropdownInput.js.map +1 -1
  52. package/dist/ChipsInput/__tests__/ChipDropdownInput.test.tsx +100 -0
  53. package/dist/ChipsInput/__tests__/ChipInputFields.test.tsx +155 -0
  54. package/dist/Dropdown/BasicDropdown.cjs +0 -2
  55. package/dist/Dropdown/BasicDropdown.cjs.map +1 -1
  56. package/dist/Dropdown/BasicDropdown.js +0 -2
  57. package/dist/Dropdown/BasicDropdown.js.map +1 -1
  58. package/dist/Dropdown/DropdownButton.cjs +0 -4
  59. package/dist/Dropdown/DropdownButton.cjs.map +1 -1
  60. package/dist/Dropdown/DropdownButton.js +0 -4
  61. package/dist/Dropdown/DropdownButton.js.map +1 -1
  62. package/dist/Dropdown/DropdownContent.cjs +1 -1
  63. package/dist/Dropdown/DropdownContent.cjs.map +1 -1
  64. package/dist/Dropdown/DropdownContent.js +1 -1
  65. package/dist/Dropdown/DropdownContent.js.map +1 -1
  66. package/dist/Dropdown/DropdownFilter.cjs +0 -2
  67. package/dist/Dropdown/DropdownFilter.cjs.map +1 -1
  68. package/dist/Dropdown/DropdownFilter.js +0 -2
  69. package/dist/Dropdown/DropdownFilter.js.map +1 -1
  70. package/dist/Dropdown/__tests__/DropdownFilter.test.tsx +39 -0
  71. package/dist/Footer/__tests__/Footer.test.tsx +182 -0
  72. package/dist/GlobalNavigationBar/__tests__/Logo.test.tsx +31 -0
  73. package/dist/GlobalNavigationBar/desktop/ExtendedMainMenu.cjs +1 -0
  74. package/dist/GlobalNavigationBar/desktop/ExtendedMainMenu.cjs.map +1 -1
  75. package/dist/GlobalNavigationBar/desktop/ExtendedMainMenu.js +1 -0
  76. package/dist/GlobalNavigationBar/desktop/ExtendedMainMenu.js.map +1 -1
  77. package/dist/GlobalNavigationBar/desktop/SubMenu.cjs +1 -0
  78. package/dist/GlobalNavigationBar/desktop/SubMenu.cjs.map +1 -1
  79. package/dist/GlobalNavigationBar/desktop/SubMenu.js +1 -0
  80. package/dist/GlobalNavigationBar/desktop/SubMenu.js.map +1 -1
  81. package/dist/GlobalNavigationBar/desktop/__tests__/DesktopActions.test.tsx +108 -0
  82. package/dist/GlobalNavigationBar/desktop/__tests__/ExtendedMainMenu.test.tsx +28 -0
  83. package/dist/GlobalNavigationBar/desktop/__tests__/MainMenu.test.tsx +55 -0
  84. package/dist/GlobalNavigationBar/desktop/__tests__/RightSideNav.test.tsx +45 -0
  85. package/dist/GlobalNavigationBar/desktop/__tests__/UserMenu.test.tsx +125 -0
  86. package/dist/GlobalNavigationBar/mobile/__tests__/MobileMenu.test.tsx +317 -0
  87. package/dist/GlobalNavigationBar/mobile/__tests__/MobileMenuContent.test.tsx +294 -0
  88. package/dist/GlobalNavigationBar/mobile/__tests__/MobileMenuHeader.test.tsx +195 -0
  89. package/dist/InputFields/QuickSearch.cjs +1 -1
  90. package/dist/InputFields/QuickSearch.cjs.map +1 -1
  91. package/dist/InputFields/QuickSearch.js +1 -1
  92. package/dist/InputFields/QuickSearch.js.map +1 -1
  93. package/dist/InputFields/__tests__/NumberField.test.tsx +67 -0
  94. package/dist/InputFields/__tests__/NumberInput.test.tsx +68 -0
  95. package/dist/InputFields/__tests__/QuickSearch.test.tsx +42 -0
  96. package/dist/LinearProgress/__tests__/LinearProgress.test.tsx +25 -0
  97. package/dist/List/__tests__/ListRow.test.tsx +18 -0
  98. package/dist/LoadingPage/__tests__/GlobalLoadingPage.test.tsx +23 -0
  99. package/dist/Modals/__tests__/Modal.test.tsx +169 -0
  100. package/dist/Modals/__tests__/ModalContainer.test.tsx +77 -0
  101. package/dist/Modals/__tests__/ModalContent.test.tsx +126 -0
  102. package/dist/NavItem/__tests__/NavItem.test.ts +6 -0
  103. package/dist/Navigation/NavigationProvider.cjs +43 -0
  104. package/dist/Navigation/NavigationProvider.cjs.map +1 -0
  105. package/dist/Navigation/NavigationProvider.d.ts +15 -0
  106. package/dist/Navigation/NavigationProvider.js +32 -0
  107. package/dist/Navigation/NavigationProvider.js.map +1 -0
  108. package/dist/Navigation/index.cjs +19 -0
  109. package/dist/Navigation/index.cjs.map +1 -0
  110. package/dist/Navigation/index.d.ts +2 -0
  111. package/dist/Navigation/index.js +2 -0
  112. package/dist/Navigation/index.js.map +1 -0
  113. package/dist/NotificationDot/__tests__/NotificationDot.test.tsx +33 -0
  114. package/dist/Paginator/__tests__/Paginator.test.tsx +33 -0
  115. package/dist/Popover/__tests__/Popover.test.tsx +64 -0
  116. package/dist/ProfileButton/__tests__/ProfileButton.test.tsx +31 -0
  117. package/dist/QuizButton/__tests__/QuizButton.test.tsx +53 -0
  118. package/dist/SegmentControl/__tests__/SegmentControl.test.tsx +145 -0
  119. package/dist/SideMenu/__tests__/SideMenu.test.tsx +99 -0
  120. package/dist/Switcher/__tests__/SwitcherMenuItem.tsx +14 -0
  121. package/dist/Table/Table.cjs +3 -1
  122. package/dist/Table/Table.cjs.map +1 -1
  123. package/dist/Table/Table.js +3 -1
  124. package/dist/Table/Table.js.map +1 -1
  125. package/dist/Table/TableBody.cjs +1 -1
  126. package/dist/Table/TableBody.cjs.map +1 -1
  127. package/dist/Table/TableBody.js +1 -1
  128. package/dist/Table/TableBody.js.map +1 -1
  129. package/dist/Table/TableFooter.cjs +0 -2
  130. package/dist/Table/TableFooter.cjs.map +1 -1
  131. package/dist/Table/TableFooter.js +0 -2
  132. package/dist/Table/TableFooter.js.map +1 -1
  133. package/dist/Table/__tests__/Table.test.tsx +499 -0
  134. package/dist/Tabs/__tests__/HorizontalTabs.test.tsx +95 -0
  135. package/dist/Tabs/__tests__/TabLink.test.tsx +40 -0
  136. package/dist/Tabs/__tests__/Tablist.test.tsx +37 -0
  137. package/dist/Tag/__tests__/Tag.test.tsx +86 -0
  138. package/dist/Toasters/__tests__/Toast.test.tsx +74 -0
  139. package/dist/Toggles/__tests__/ToggleButton.test.tsx +53 -0
  140. package/dist/Toggles/__tests__/ToggleSwitch.test.tsx +87 -0
  141. package/dist/Tooltips/__tests__/TooltipWrapper.test.tsx +16 -0
  142. package/dist/icons/systemicons/CreditCard.cjs +43 -0
  143. package/dist/icons/systemicons/CreditCard.cjs.map +1 -0
  144. package/dist/icons/systemicons/CreditCard.d.ts +3 -0
  145. package/dist/icons/systemicons/CreditCard.js +33 -0
  146. package/dist/icons/systemicons/CreditCard.js.map +1 -0
  147. package/dist/icons/systemicons/Discount.cjs +43 -0
  148. package/dist/icons/systemicons/Discount.cjs.map +1 -0
  149. package/dist/icons/systemicons/Discount.d.ts +3 -0
  150. package/dist/icons/systemicons/Discount.js +33 -0
  151. package/dist/icons/systemicons/Discount.js.map +1 -0
  152. package/dist/icons/systemicons/DocumentComplete.cjs +43 -0
  153. package/dist/icons/systemicons/DocumentComplete.cjs.map +1 -0
  154. package/dist/icons/systemicons/DocumentComplete.d.ts +3 -0
  155. package/dist/icons/systemicons/DocumentComplete.js +33 -0
  156. package/dist/icons/systemicons/DocumentComplete.js.map +1 -0
  157. package/dist/icons/systemicons/Folder.cjs +43 -0
  158. package/dist/icons/systemicons/Folder.cjs.map +1 -0
  159. package/dist/icons/systemicons/Folder.d.ts +3 -0
  160. package/dist/icons/systemicons/Folder.js +33 -0
  161. package/dist/icons/systemicons/Folder.js.map +1 -0
  162. package/dist/icons/systemicons/FolderNew.cjs +43 -0
  163. package/dist/icons/systemicons/FolderNew.cjs.map +1 -0
  164. package/dist/icons/systemicons/FolderNew.d.ts +3 -0
  165. package/dist/icons/systemicons/FolderNew.js +33 -0
  166. package/dist/icons/systemicons/FolderNew.js.map +1 -0
  167. package/dist/icons/systemicons/MoodHappy.cjs +43 -0
  168. package/dist/icons/systemicons/MoodHappy.cjs.map +1 -0
  169. package/dist/icons/systemicons/MoodHappy.d.ts +3 -0
  170. package/dist/icons/systemicons/MoodHappy.js +33 -0
  171. package/dist/icons/systemicons/MoodHappy.js.map +1 -0
  172. package/dist/icons/systemicons/MoodIndifferent.cjs +43 -0
  173. package/dist/icons/systemicons/MoodIndifferent.cjs.map +1 -0
  174. package/dist/icons/systemicons/MoodIndifferent.d.ts +3 -0
  175. package/dist/icons/systemicons/MoodIndifferent.js +33 -0
  176. package/dist/icons/systemicons/MoodIndifferent.js.map +1 -0
  177. package/dist/icons/systemicons/MoodSad.cjs +43 -0
  178. package/dist/icons/systemicons/MoodSad.cjs.map +1 -0
  179. package/dist/icons/systemicons/MoodSad.d.ts +3 -0
  180. package/dist/icons/systemicons/MoodSad.js +33 -0
  181. package/dist/icons/systemicons/MoodSad.js.map +1 -0
  182. package/dist/icons/systemicons/MoodVeryHappy.cjs +43 -0
  183. package/dist/icons/systemicons/MoodVeryHappy.cjs.map +1 -0
  184. package/dist/icons/systemicons/MoodVeryHappy.d.ts +3 -0
  185. package/dist/icons/systemicons/MoodVeryHappy.js +33 -0
  186. package/dist/icons/systemicons/MoodVeryHappy.js.map +1 -0
  187. package/dist/icons/systemicons/MoodVerySad.cjs +43 -0
  188. package/dist/icons/systemicons/MoodVerySad.cjs.map +1 -0
  189. package/dist/icons/systemicons/MoodVerySad.d.ts +3 -0
  190. package/dist/icons/systemicons/MoodVerySad.js +33 -0
  191. package/dist/icons/systemicons/MoodVerySad.js.map +1 -0
  192. package/dist/icons/systemicons/Orders.cjs +43 -0
  193. package/dist/icons/systemicons/Orders.cjs.map +1 -0
  194. package/dist/icons/systemicons/Orders.d.ts +3 -0
  195. package/dist/icons/systemicons/Orders.js +33 -0
  196. package/dist/icons/systemicons/Orders.js.map +1 -0
  197. package/dist/icons/systemicons/Palette.cjs +43 -0
  198. package/dist/icons/systemicons/Palette.cjs.map +1 -0
  199. package/dist/icons/systemicons/Palette.d.ts +3 -0
  200. package/dist/icons/systemicons/Palette.js +33 -0
  201. package/dist/icons/systemicons/Palette.js.map +1 -0
  202. package/dist/icons/systemicons/Stack.cjs +43 -0
  203. package/dist/icons/systemicons/Stack.cjs.map +1 -0
  204. package/dist/icons/systemicons/Stack.d.ts +3 -0
  205. package/dist/icons/systemicons/Stack.js +33 -0
  206. package/dist/icons/systemicons/Stack.js.map +1 -0
  207. package/dist/styles/design-tokens/dark/tokens.css +481 -0
  208. package/dist/styles/design-tokens/light/tokens.css +481 -0
  209. package/dist/styles/design-tokens/rqi_dark/tokens.css +481 -0
  210. package/dist/styles/design-tokens/rqi_light/tokens.css +481 -0
  211. package/dist/styles/react-datepicker.css +766 -0
  212. package/dist/styles/typography.cjs +35 -59
  213. package/dist/styles/typography.cjs.map +1 -1
  214. package/dist/styles/typography.d.ts +1 -1
  215. package/dist/styles/typography.js +35 -59
  216. package/dist/styles/typography.js.map +1 -1
  217. package/dist/test-utils.cjs +16 -10
  218. package/dist/test-utils.cjs.map +1 -1
  219. package/dist/test-utils.d.ts +5 -5
  220. package/dist/test-utils.js +14 -8
  221. package/dist/test-utils.js.map +1 -1
  222. package/dist/utils/color-tokens.cjs +91 -0
  223. package/dist/utils/color-tokens.cjs.map +1 -0
  224. package/dist/utils/color-tokens.d.ts +19 -0
  225. package/dist/utils/color-tokens.js +82 -0
  226. package/dist/utils/color-tokens.js.map +1 -0
  227. 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":"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","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
+ });