@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
@@ -0,0 +1,317 @@
1
+ import * as React from 'react';
2
+ import {act, render, waitFor} from '../../../test-utils';
3
+ import {
4
+ DesktopMenuButtonTypes,
5
+ MenuNavigationItemTypeGroup,
6
+ MenuNavigationItemTypeItem,
7
+ MobileMenuButtonTypes
8
+ } from '../../types';
9
+ import {SystemIcons} from '../../../icons';
10
+ import MobileMenu from '../MobileMenu';
11
+ import { NavigationProvider } from '../../../Navigation';
12
+
13
+ const navigateSpy = jest.fn();
14
+ const isActiveRouteSpy = jest.fn();
15
+
16
+ jest.mock('rooks', () => ({
17
+ useDimensionsRef: () => [],
18
+ useMediaMatch: () => true
19
+
20
+ }));
21
+
22
+
23
+
24
+ describe('MobileMenu', () => {
25
+
26
+
27
+ const navProps = {
28
+ currentPath: '',
29
+ isActiveRoute: () => false,
30
+ navigate: (path: string, isExternal: boolean) => {}
31
+ };
32
+
33
+
34
+ const mainNavigationOptions = [
35
+ {
36
+ label: 'Overview',
37
+ to: '/',
38
+ exact: true,
39
+ onClick: () => {
40
+ console.log('Clicked on overview page');
41
+ },
42
+ },
43
+ {
44
+ label: 'Services',
45
+ to: '/services',
46
+ },
47
+ {
48
+ label: 'Products',
49
+ to: '/products',
50
+ },
51
+ ];
52
+
53
+ const secondaryNavigationOptions = [
54
+ {
55
+ label: 'Pinned Tab',
56
+ to: 'pinned',
57
+ pinned: true
58
+ },
59
+ ];
60
+
61
+ const headerActions: DesktopMenuButtonTypes[] = [
62
+ {
63
+ type: 'action',
64
+ action: (e) => {
65
+ console.log('search');
66
+ },
67
+ icon: <SystemIcons.Search/>,
68
+ },
69
+ {
70
+ type: 'action',
71
+ action: (e) => {
72
+ console.log('notifications');
73
+ },
74
+ icon: <SystemIcons.Notification/>,
75
+ },
76
+ {
77
+ type: 'action',
78
+ action: (e) => {
79
+ console.log('language');
80
+ },
81
+ icon: <SystemIcons.Language/>,
82
+ },
83
+ {
84
+ type: 'action',
85
+ action: (e) => {
86
+ console.log('settings');
87
+ },
88
+ icon: <SystemIcons.GearSettings/>,
89
+ },
90
+ {
91
+ type: 'profile',
92
+ },
93
+ {
94
+ type: 'action',
95
+ action: (e) => {
96
+ console.log('shop');
97
+ },
98
+ icon: <SystemIcons.ShoppingCart/>,
99
+ },
100
+ {
101
+ type: 'switcher',
102
+ action: (e) => {
103
+ // @ts-ignore
104
+ window.portalNav.toggle();
105
+ console.log('switcher')
106
+ },
107
+ }
108
+ ];
109
+
110
+ const notifications: MenuNavigationItemTypeItem[] = [
111
+ {
112
+ label: 'First',
113
+ note: 'This is a note',
114
+ to: '/n7',
115
+ },
116
+ {
117
+ label: 'Second',
118
+ note: 'This is a note',
119
+ to: '/n6',
120
+ },
121
+ {
122
+ label: 'Third',
123
+ note: 'This is a note',
124
+ to: '/n5',
125
+ },
126
+ {
127
+ label: 'Fourth',
128
+ note: 'This is a note',
129
+ to: '/n4',
130
+ },
131
+ {
132
+ label: 'Fifth',
133
+ note: 'This is a note',
134
+ to: '/n3',
135
+ },
136
+ {
137
+ label: 'Sixth',
138
+ note: 'This is a note',
139
+ to: '/n2',
140
+ },
141
+ {
142
+ label: 'Seventh',
143
+ note: 'This is a note',
144
+ to: '/n1',
145
+ },
146
+ ];
147
+
148
+ const mobileActions: MobileMenuButtonTypes[] = [
149
+ {
150
+ type: 'submenu',
151
+ menu: {
152
+ type: 'custom',
153
+ label: 'Search',
154
+ custom: () => 'custom'
155
+ },
156
+ icon: <SystemIcons.Search/>,
157
+ },
158
+ {
159
+ type: 'submenu',
160
+ menu: {
161
+ type: 'group',
162
+ label: 'Notifications',
163
+ items: notifications
164
+ },
165
+ icon: <SystemIcons.Notification/>,
166
+ },
167
+ {
168
+ type: 'action',
169
+ action: (e) => {
170
+ console.log('language');
171
+ return true;
172
+ },
173
+ icon: <SystemIcons.Language/>,
174
+ },
175
+ {
176
+ type: 'profile',
177
+ placement: 'left'
178
+ },
179
+ {
180
+ type: 'switcher',
181
+ action: (e) => {
182
+ // @ts-ignore
183
+ window.portalNav.toggle();
184
+ console.log('switcher')
185
+ },
186
+ }
187
+ ];
188
+
189
+ const mobileStickyNav = [
190
+ {
191
+ label: 'Help',
192
+ to: '/help',
193
+ pinned: true,
194
+ icon: <SystemIcons.Help/>,
195
+ },
196
+ {
197
+ label: 'Support',
198
+ to: '/support',
199
+ pinned: true,
200
+ icon: <SystemIcons.Support/>,
201
+ },
202
+ ];
203
+
204
+ const accountSection = [
205
+ {label: 'My Account', to: '/account/myaccount', icon: <SystemIcons.User/>, external: false},
206
+ {label: 'Language & Region', to: '/account/language', icon: <SystemIcons.Language/>, external: false},
207
+ {label: 'Settings', to: '/account/settings', icon: <SystemIcons.GearSettings/>, external: false},
208
+ ];
209
+
210
+ const organizationSection = [
211
+ {
212
+ label: 'Organization details',
213
+ to: '/organization/myorganization',
214
+ icon: <SystemIcons.Institute/>,
215
+ external: false
216
+ },
217
+ {label: 'People', to: '/organization/user-management', icon: <SystemIcons.Team/>, external: false},
218
+ ];
219
+
220
+ const supportSection = [
221
+ {
222
+ label: 'Help',
223
+ to: 'https://laerdal.force.com/HelpCenter',
224
+ icon: <SystemIcons.Help/>,
225
+ external: true,
226
+ pinned: true
227
+ },
228
+ {
229
+ label: 'Support',
230
+ to: 'https://www.laerdal.com/support/',
231
+ icon: <SystemIcons.Support/>,
232
+ external: true,
233
+ pinned: true
234
+ },
235
+ ];
236
+
237
+ const mobileNavigationSubGroup = {
238
+ type: 'group',
239
+ items: [...organizationSection, ...supportSection],
240
+ note: 'This is a note',
241
+ header: {
242
+ header: 'Title',
243
+ note: 'Note Text'
244
+ },
245
+ footer: {
246
+ header: 'Title',
247
+ note: 'Note text',
248
+ link: {
249
+ label: 'Link text',
250
+ href: '#',
251
+ external: false
252
+ }
253
+ },
254
+ action: {
255
+ label: 'Sign out',
256
+ action: () => {
257
+ console.log('Sign out');
258
+ },
259
+ icon: <SystemIcons.Logout/>
260
+ },
261
+ label: 'Organization',
262
+ icon: <SystemIcons.Institute/>,
263
+ } as MenuNavigationItemTypeGroup;
264
+
265
+ it('should render label', () => {
266
+ const wrapper = render(<NavigationProvider {...navProps}><MobileMenu show={true} label={'label'} onClose={jest.fn()}/></NavigationProvider>)
267
+
268
+ expect(wrapper.findByText('label')).toBeDefined();
269
+ });
270
+
271
+ it('should render header', () => {
272
+ const wrapper = render(<NavigationProvider {...navProps}><MobileMenu show={true} header={{header: 'header', note: 'note'}} onClose={jest.fn()}/></NavigationProvider>)
273
+
274
+ expect(wrapper.findByText('header')).toBeDefined();
275
+ expect(wrapper.findByText('note')).toBeDefined();
276
+ });
277
+
278
+ it('should render footer', () => {
279
+ const wrapper = render(<NavigationProvider {...navProps}><MobileMenu
280
+ onClose={jest.fn()}
281
+ show={true}
282
+ footer={{header: 'header', note: 'note', link: {label: 'link', href: '#'}}}/></NavigationProvider>)
283
+
284
+ expect(wrapper.findByText('header')).toBeDefined();
285
+ expect(wrapper.findByText('note')).toBeDefined();
286
+ expect(wrapper.findByText('link')).toBeDefined();
287
+ });
288
+
289
+ it('should render action', () => {
290
+ const wrapper = render(<NavigationProvider {...navProps}><MobileMenu
291
+ onClose={jest.fn()}
292
+ show={true}
293
+ action={{action: jest.fn(), label: 'action'}}/></NavigationProvider>)
294
+
295
+ expect(wrapper.findByText('action')).toBeDefined();
296
+ });
297
+
298
+ it('should render items', () => {
299
+ const items = [mobileNavigationSubGroup, ...mainNavigationOptions, ...mobileStickyNav]
300
+ const wrapper = render(<NavigationProvider {...navProps}><MobileMenu show={true} onClose={jest.fn()} items={items}/></NavigationProvider>)
301
+
302
+ items.forEach(item => {
303
+ expect(wrapper.findByText(item.label)).toBeDefined();
304
+ });
305
+ });
306
+
307
+ it('should call on close when close button is clicked', () => {
308
+ const close = jest.fn();
309
+ const wrapper = render(<NavigationProvider {...navProps}><MobileMenu show={true} label={'label'} onClose={close}/></NavigationProvider>)
310
+
311
+ act(() => {
312
+ wrapper.container.querySelector('button')!.click();
313
+ });
314
+ expect(close).toHaveBeenCalled();
315
+ });
316
+
317
+ });
@@ -0,0 +1,294 @@
1
+ import * as React from 'react';
2
+ import {render} from '../../../test-utils';
3
+ import MobileMenuContent from '../MobileMenuContent';
4
+ import {
5
+ DesktopMenuButtonTypes,
6
+ MenuNavigationItemTypeGroup,
7
+ MenuNavigationItemTypeItem,
8
+ MobileMenuButtonTypes
9
+ } from '../../types';
10
+ import {SystemIcons} from '../../../icons';
11
+ import { NavigationProvider } from '../../../Navigation';
12
+
13
+ const navigateSpy = jest.fn();
14
+ const isActiveRouteSpy = jest.fn();
15
+
16
+
17
+ jest.mock('rooks', () => ({
18
+ useDimensionsRef: () => [],
19
+ useMediaMatch: () => true
20
+ }));
21
+
22
+ describe('MobileMenuContent', () => {
23
+
24
+ const navProps = {
25
+ currentPath: '',
26
+ isActiveRoute: () => false,
27
+ navigate: (path: string, isExternal: boolean) => {}
28
+ };
29
+
30
+ const mainNavigationOptions = [
31
+ {
32
+ label: 'Overview',
33
+ to: '/',
34
+ exact: true,
35
+ onClick: () => {
36
+ console.log('Clicked on overview page');
37
+ },
38
+ },
39
+ {
40
+ label: 'Services',
41
+ to: '/services',
42
+ },
43
+ {
44
+ label: 'Products',
45
+ to: '/products',
46
+ },
47
+ ];
48
+
49
+ const secondaryNavigationOptions = [
50
+ {
51
+ label: 'Pinned Tab',
52
+ to: 'pinned',
53
+ pinned: true
54
+ },
55
+ ];
56
+
57
+ const headerActions: DesktopMenuButtonTypes[] = [
58
+ {
59
+ type: 'action',
60
+ action: (e) => {
61
+ console.log('search');
62
+ },
63
+ icon: <SystemIcons.Search/>,
64
+ },
65
+ {
66
+ type: 'action',
67
+ action: (e) => {
68
+ console.log('notifications');
69
+ },
70
+ icon: <SystemIcons.Notification/>,
71
+ },
72
+ {
73
+ type: 'action',
74
+ action: (e) => {
75
+ console.log('language');
76
+ },
77
+ icon: <SystemIcons.Language/>,
78
+ },
79
+ {
80
+ type: 'action',
81
+ action: (e) => {
82
+ console.log('settings');
83
+ },
84
+ icon: <SystemIcons.GearSettings/>,
85
+ },
86
+ {
87
+ type: 'profile',
88
+ },
89
+ {
90
+ type: 'action',
91
+ action: (e) => {
92
+ console.log('shop');
93
+ },
94
+ icon: <SystemIcons.ShoppingCart/>,
95
+ },
96
+ {
97
+ type: 'switcher',
98
+ action: (e) => {
99
+ // @ts-ignore
100
+ window.portalNav.toggle();
101
+ console.log('switcher')
102
+ },
103
+ }
104
+ ];
105
+
106
+ const notifications: MenuNavigationItemTypeItem[] = [
107
+ {
108
+ label: 'First',
109
+ note: 'This is a note',
110
+ to: '/n7',
111
+ },
112
+ {
113
+ label: 'Second',
114
+ note: 'This is a note',
115
+ to: '/n6',
116
+ },
117
+ {
118
+ label: 'Third',
119
+ note: 'This is a note',
120
+ to: '/n5',
121
+ },
122
+ {
123
+ label: 'Fourth',
124
+ note: 'This is a note',
125
+ to: '/n4',
126
+ },
127
+ {
128
+ label: 'Fifth',
129
+ note: 'This is a note',
130
+ to: '/n3',
131
+ },
132
+ {
133
+ label: 'Sixth',
134
+ note: 'This is a note',
135
+ to: '/n2',
136
+ },
137
+ {
138
+ label: 'Seventh',
139
+ note: 'This is a note',
140
+ to: '/n1',
141
+ },
142
+ ];
143
+
144
+ const mobileActions: MobileMenuButtonTypes[] = [
145
+ {
146
+ type: 'submenu',
147
+ menu: {
148
+ type: 'custom',
149
+ label: 'Search',
150
+ custom: () => 'custom'
151
+ },
152
+ icon: <SystemIcons.Search/>,
153
+ },
154
+ {
155
+ type: 'submenu',
156
+ menu: {
157
+ type: 'group',
158
+ label: 'Notifications',
159
+ items: notifications
160
+ },
161
+ icon: <SystemIcons.Notification/>,
162
+ },
163
+ {
164
+ type: 'action',
165
+ action: (e) => {
166
+ console.log('language');
167
+ return true;
168
+ },
169
+ icon: <SystemIcons.Language/>,
170
+ },
171
+ {
172
+ type: 'profile',
173
+ placement: 'left'
174
+ },
175
+ {
176
+ type: 'switcher',
177
+ action: (e) => {
178
+ // @ts-ignore
179
+ window.portalNav.toggle();
180
+ console.log('switcher')
181
+ },
182
+ }
183
+ ];
184
+
185
+ const mobileStickyNav = [
186
+ {
187
+ label: 'Help',
188
+ to: '/help',
189
+ pinned: true,
190
+ icon: <SystemIcons.Help/>,
191
+ },
192
+ {
193
+ label: 'Support',
194
+ to: '/support',
195
+ pinned: true,
196
+ icon: <SystemIcons.Support/>,
197
+ },
198
+ ];
199
+
200
+ const accountSection = [
201
+ {label: 'My Account', to: '/account/myaccount', icon: <SystemIcons.User/>, external: false},
202
+ {label: 'Language & Region', to: '/account/language', icon: <SystemIcons.Language/>, external: false},
203
+ {label: 'Settings', to: '/account/settings', icon: <SystemIcons.GearSettings/>, external: false},
204
+ ];
205
+
206
+ const organizationSection = [
207
+ {
208
+ label: 'Organization details',
209
+ to: '/organization/myorganization',
210
+ icon: <SystemIcons.Institute/>,
211
+ external: false
212
+ },
213
+ {label: 'People', to: '/organization/user-management', icon: <SystemIcons.Team/>, external: false},
214
+ ];
215
+
216
+ const supportSection = [
217
+ {
218
+ label: 'Help',
219
+ to: 'https://laerdal.force.com/HelpCenter',
220
+ icon: <SystemIcons.Help/>,
221
+ external: true,
222
+ pinned: true
223
+ },
224
+ {
225
+ label: 'Support',
226
+ to: 'https://www.laerdal.com/support/',
227
+ icon: <SystemIcons.Support/>,
228
+ external: true,
229
+ pinned: true
230
+ },
231
+ ];
232
+
233
+ const mobileNavigationSubGroup = {
234
+ type: 'group',
235
+ items: [...organizationSection, ...supportSection],
236
+ note: 'This is a note',
237
+ header: {
238
+ header: 'Title',
239
+ note: 'Note Text'
240
+ },
241
+ footer: {
242
+ header: 'Title',
243
+ note: 'Note text',
244
+ link: {
245
+ label: 'Link text',
246
+ href: '#',
247
+ external: false
248
+ }
249
+ },
250
+ action: {
251
+ label: 'Sign out',
252
+ action: () => {
253
+ console.log('Sign out');
254
+ },
255
+ icon: <SystemIcons.Logout/>
256
+ },
257
+ label: 'Organization',
258
+ icon: <SystemIcons.Institute/>,
259
+ } as MenuNavigationItemTypeGroup;
260
+
261
+ it('should render header', () => {
262
+ const wrapper = render(<NavigationProvider {...navProps}><MobileMenuContent header={{header: 'header', note: 'note'}}/> </NavigationProvider>)
263
+
264
+ expect(wrapper.getByText('header')).toBeDefined();
265
+ expect(wrapper.getByText('note')).toBeDefined();
266
+ });
267
+
268
+ it('should render footer', () => {
269
+ const wrapper = render(<NavigationProvider {...navProps}><MobileMenuContent
270
+ footer={{header: 'header', note: 'note', link: {label: 'link', href: '#'}}}/></NavigationProvider>)
271
+
272
+ expect(wrapper.getByText('header')).toBeDefined();
273
+ expect(wrapper.getByText('note')).toBeDefined();
274
+ expect(wrapper.getByText('link')).toBeDefined();
275
+ });
276
+
277
+ it('should render action', () => {
278
+ const wrapper = render(<NavigationProvider {...navProps}><MobileMenuContent
279
+ action={{action: jest.fn(), label: 'action'}}/></NavigationProvider>)
280
+
281
+ expect(wrapper.getByText('action')).toBeDefined();
282
+ });
283
+
284
+ it('should render items', () => {
285
+ const items = [mobileNavigationSubGroup, ...mainNavigationOptions, ...mobileStickyNav]
286
+ const wrapper = render(<NavigationProvider {...navProps}><MobileMenuContent
287
+ items={items}/></NavigationProvider>)
288
+
289
+ items.forEach(item => {
290
+ expect(wrapper.getByText(item.label)).toBeDefined();
291
+ });
292
+ });
293
+
294
+ });