@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,195 @@
1
+ import * as React from 'react';
2
+ import {act, fireEvent, render} from '../../../test-utils';
3
+ import MobileMenuHeader, {MobileMenuHeaderActions, MobileMenuHeaderWrapper} from '../MobileMenuHeader';
4
+ import {IconButtonStyled} from '../../../Button/Iconbutton';
5
+ import {MobileMenuButtonTypes, ProfileMenu} from '../../types';
6
+ import {ProfileButtonContainer} from '../../../ProfileButton/ProfileButton';
7
+
8
+
9
+
10
+
11
+
12
+ describe('MobileMenuHeader', () => {
13
+ const backSpy = jest.fn();
14
+ const closeSpy = jest.fn();
15
+ const subMenuOpenSpy = jest.fn();
16
+ const profileSpy = jest.fn();
17
+ const buttonSpy = jest.fn();
18
+
19
+ const profileButton: MobileMenuButtonTypes = {
20
+ type: 'profile',
21
+ action: profileSpy
22
+ }
23
+
24
+ const subMenuButton: MobileMenuButtonTypes = {
25
+ type: 'submenu',
26
+ menu: {
27
+ type: 'custom',
28
+ custom: () => <div>custom</div>,
29
+ },
30
+ icon: <i></i>
31
+ }
32
+
33
+ const leftButton: MobileMenuButtonTypes = {
34
+ type: 'action',
35
+ action: buttonSpy,
36
+ icon: <i></i>,
37
+ placement: 'left'
38
+ };
39
+
40
+ const rightButton: MobileMenuButtonTypes = {
41
+ type: 'action',
42
+ action: buttonSpy,
43
+ icon: <i></i>,
44
+ placement: 'right'
45
+ };
46
+
47
+ beforeEach(() => {
48
+ backSpy.mockReset();
49
+ closeSpy.mockReset();
50
+ subMenuOpenSpy.mockReset();
51
+ buttonSpy.mockReset();
52
+ profileSpy.mockReset();
53
+ });
54
+
55
+ it('should render', () => {
56
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy}/>)
57
+
58
+ expect(wrapper.container.querySelector(`${MobileMenuHeaderWrapper}`)).toBeDefined();
59
+ });
60
+
61
+ it('should render only close button', () => {
62
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy}/>)
63
+
64
+ expect(wrapper.container.querySelectorAll(`${IconButtonStyled}`)).toHaveLength(1);
65
+ });
66
+
67
+ it('should render label', () => {
68
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy} label={'label'}/>)
69
+
70
+ expect(wrapper.queryByText('label')).toBeDefined();
71
+ });
72
+
73
+ it('should render close button and back button', () => {
74
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy} onGoBack={backSpy}/>)
75
+
76
+ expect(wrapper.container.querySelectorAll(`${IconButtonStyled}`)).toHaveLength(2);
77
+ });
78
+
79
+ it('should render profile button', () => {
80
+
81
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy} profile={
82
+ {
83
+ user:{
84
+ firstName: "name",
85
+ lastName: "last",
86
+ email: "mail",
87
+ },
88
+ sections:[]
89
+ }
90
+ } buttons={[profileButton]}/>)
91
+
92
+ expect(wrapper.container.querySelectorAll(`${ProfileButtonContainer}`)).toHaveLength(1);
93
+ });
94
+
95
+ it('should render button on the left', () => {
96
+
97
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy} buttons={[leftButton]}/>)
98
+
99
+ expect(wrapper.container.querySelectorAll(`${MobileMenuHeaderWrapper} ${IconButtonStyled}`)).toHaveLength(2);
100
+ expect(wrapper.container.querySelectorAll(`${MobileMenuHeaderActions} ${IconButtonStyled}`)).toHaveLength(1);
101
+ });
102
+
103
+ it('should render button on the right', () => {
104
+
105
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy} buttons={[rightButton]}/>)
106
+
107
+ expect(wrapper.container.querySelectorAll(`${MobileMenuHeaderWrapper} ${IconButtonStyled}`)).toHaveLength(2);
108
+ expect(wrapper.container.querySelectorAll(`${MobileMenuHeaderActions} ${IconButtonStyled}`)).toHaveLength(2);
109
+ });
110
+
111
+ it('should call onClose function when close button is clicked', () => {
112
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy}/>)
113
+
114
+ act(() => {
115
+ fireEvent.click(wrapper.container.querySelector(`${IconButtonStyled}`)!);
116
+ });
117
+
118
+ expect(closeSpy).toHaveBeenCalled();
119
+ });
120
+
121
+ it('should call onGoBack function when back button is clicked', () => {
122
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy} onGoBack={backSpy}/>)
123
+
124
+ act(() => {
125
+ fireEvent.click(wrapper.container.querySelectorAll(`${IconButtonStyled}`)[0]);
126
+ });
127
+
128
+ expect(backSpy).toHaveBeenCalled();
129
+ });
130
+
131
+ it('should call onSubMenuOpen function when submenu button is clicked', () => {
132
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy} buttons={[subMenuButton]}
133
+ onSubMenuOpen={subMenuOpenSpy}/>)
134
+
135
+ act(() => {
136
+ fireEvent.click(wrapper.container.querySelectorAll(`${IconButtonStyled}`)[0]);
137
+ });
138
+
139
+ expect(subMenuOpenSpy).toHaveBeenCalled();
140
+ });
141
+
142
+ it('should call action when icon button is clicked', () => {
143
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy} buttons={[leftButton]}/>)
144
+
145
+ act(() => {
146
+ fireEvent.click(wrapper.container.querySelectorAll(`${IconButtonStyled}`)[0]);
147
+ });
148
+
149
+ expect(buttonSpy).toHaveBeenCalled();
150
+ });
151
+
152
+ it('should call profile button action when profile button is clicked', () => {
153
+
154
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy} profile={
155
+ {
156
+ user:{
157
+ firstName: "name",
158
+ lastName: "last",
159
+ email: "mail",
160
+ },
161
+ sections:[]
162
+ }
163
+ } buttons={[profileButton]}/>)
164
+
165
+ act(() => {
166
+ fireEvent.click(wrapper.container.querySelectorAll(`${IconButtonStyled}`)[0]);
167
+ });
168
+
169
+ expect(profileSpy).toHaveBeenCalled();
170
+ });
171
+
172
+ it('should call onSubMenuOpen when profile button is clicked and action is not provided', () => {
173
+ const profile = {
174
+ label: 'profile label',
175
+ sections: [],
176
+ user: {
177
+ lastName: 'lastname',
178
+ firstName: 'firstname',
179
+ email: 'email@email.com'
180
+ },
181
+ } as ProfileMenu;
182
+ const wrapper = render(<MobileMenuHeader onClose={closeSpy}
183
+ buttons={[{...profileButton, action: undefined}]}
184
+ profile={profile}
185
+ onSubMenuOpen={subMenuOpenSpy}/>)
186
+
187
+ act(() => {
188
+ fireEvent.click(wrapper.container.querySelectorAll(`${IconButtonStyled}`)[0]);
189
+ });
190
+
191
+ expect(subMenuOpenSpy).toHaveBeenCalled();
192
+ });
193
+
194
+
195
+ });
@@ -107,7 +107,7 @@ var QuickSearch = function QuickSearch(_ref) {
107
107
  return function () {
108
108
  document.removeEventListener('click', handleClickOutside);
109
109
  };
110
- });
110
+ }, []);
111
111
 
112
112
  // focus search input on visibility change
113
113
  React.useEffect(function () {
@@ -1 +1 @@
1
- {"version":3,"file":"QuickSearch.cjs","names":["React","_interopRequireWildcard","require","_styledComponents","_Iconbutton","_styling","_types","_","_icons","_SearchBarInput","_interopRequireDefault","_SearchField","_jsxRuntime","_templateObject","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","_typeof","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","Wrapper","styled","div","_taggedTemplateLiteral2","StyledSearchField","props","COLORS","getColor","theme","IconButtonStyledSecondary","shouldNotInteract","QuickSearch","_ref","id","searchTerm","setSearchTerm","enterSearch","removeSearch","placeholder","performSearchLabel","disabled","onKeyDown","size","margin","loading","useTheme","searchFieldRef","useRef","searchFieldInputRef","_React$useState","useState","visible","_React$useState2","_slicedToArray2","searchFieldVisible","setSearchFieldVisible","handleClickOutside","current","contains","target","length","handleKeyDown","key","handleBlur","_searchFieldRef$curre","relatedTarget","handleSearchIconAction","focus","detail","useEffect","document","addEventListener","removeEventListener","_searchFieldInputRef$","focusVisible","jsx","children","jsxs","ref","style","onBlur","className","term","focusParentRefs","SearchIconWrapper","role","concat","dataTestId","variant","shape","tabIndex","action","SystemIcons","Search","color","StyledIcon","hidden","_searchFieldInputRef$2","Clear","LoadingIndicator","Size","Small","propTypes","_propTypes","string","isRequired","func","bool","_default","exports"],"sources":["../../src/InputFields/QuickSearch.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport styled, { useTheme } from 'styled-components';\r\n\r\nimport IconButton, { IconButtonStyledSecondary } from '../Button/Iconbutton';\r\nimport { SearchIconWrapper, StyledIcon } from './styling';\r\nimport { Size } from '../types';\r\nimport { COLORS, LoadingIndicator } from '..';\r\nimport { SystemIcons } from '../icons';\r\nimport SearchBarInput from './components/SearchBarInput';\r\nimport SearchField, { StyledSearchField } from './components/SearchField';\r\n\r\nconst Wrapper = styled.div<{shouldNotInteract: boolean}>`\r\n width: 100%;\r\n\r\n ${StyledSearchField} {\r\n transition: box-shadow 0.2s ease-in-out, width 0.2s ease-in-out;\r\n\r\n background-color: transparent;\r\n\r\n &.small {\r\n width: 48px;\r\n }\r\n\r\n &.medium {\r\n width: 56px;\r\n }\r\n\r\n &.expanded {\r\n width: 100%;\r\n }\r\n\r\n box-shadow: none;\r\n\r\n &:hover {\r\n box-shadow: none;\r\n }\r\n\r\n &.expanded {\r\n background-color: ${props => COLORS.getColor('white', props.theme)};\r\n box-shadow: inset 0 0 0 1px ${props => COLORS.getColor('neutral_400', props.theme)};\r\n }\r\n\r\n &.expanded:hover,\r\n &.expanded:focus-within {\r\n box-shadow: inset 0 0 0 2px ${props => COLORS.getColor('primary_800', props.theme)};\r\n }\r\n }\r\n\r\n ${IconButtonStyledSecondary} {\r\n pointer-events: ${(props) => (props.shouldNotInteract ? 'none' : 'auto')};\r\n }\r\n`;\r\n\r\nexport type QuickSearchProps = {\r\n /** Required. Id of the component. */\r\n id: string;\r\n /** Optional. Current search term entered by the user. */\r\n searchTerm?: string;\r\n /** Required. Handler to be called when user modified input. */\r\n setSearchTerm: (term: string) => void;\r\n /** Required. Handler to be called when user triggers search. */\r\n enterSearch: (e: any) => void;\r\n /** Required. Handler to be called when user clears input field. */\r\n removeSearch: (e: any) => void;\r\n /** Optional. Placeholder text to be shown in the input field when there is no input. */\r\n placeholder?: string;\r\n /** Optional. ARIA label to set on the input field. */\r\n performSearchLabel?: string;\r\n /** Optional. If disabled user can not interact with the search bar. */\r\n disabled?: boolean;\r\n /** Optional. Optional onkeydown handler to be set on the input field. */\r\n onKeyDown?: (e: React.KeyboardEvent) => void;\r\n /** Optional. Size of the component. Defaults to 'medium'. */\r\n size?: Size.Small | Size.Medium;\r\n /** Optional. Margin style attribute to be set on the input field. */\r\n margin?: string;\r\n /** Optional. If set then loading indicator will be shown on the right side of the input field. */\r\n loading?: boolean;\r\n};\r\n\r\nconst QuickSearch: React.FunctionComponent<QuickSearchProps> = ({\r\n id,\r\n searchTerm,\r\n setSearchTerm,\r\n enterSearch,\r\n removeSearch,\r\n placeholder,\r\n performSearchLabel,\r\n disabled,\r\n onKeyDown,\r\n size,\r\n margin,\r\n loading,\r\n}: QuickSearchProps) => {\r\n const theme = useTheme();\r\n const searchFieldRef = React.useRef<HTMLDivElement>(null);\r\n const searchFieldInputRef = React.useRef<HTMLInputElement>(null);\r\n\r\n const [searchFieldVisible, setSearchFieldVisible] = React.useState<{ visible: boolean; focus?: boolean }>({\r\n visible: false,\r\n });\r\n\r\n const handleClickOutside = (e: any) => {\r\n if (searchFieldRef?.current && !searchFieldRef.current.contains(e.target)) {\r\n if (searchFieldVisible?.visible && !searchTerm?.length) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: any) => {\r\n if (onKeyDown) {\r\n onKeyDown(e);\r\n }\r\n if (e.key === 'Escape') {\r\n if (searchFieldVisible?.visible && !searchTerm?.length) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n }\r\n };\r\n\r\n const handleBlur = (e: any) => {\r\n if (!searchTerm && (!e.relatedTarget || !searchFieldRef.current?.contains(e.relatedTarget))) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n };\r\n\r\n const handleSearchIconAction = (e: any) => {\r\n if (!searchFieldVisible?.visible) {\r\n setSearchFieldVisible({\r\n visible: !searchFieldVisible.visible,\r\n focus: !searchFieldVisible.visible && e?.detail !== 1,\r\n });\r\n }\r\n };\r\n\r\n // set search field visibility on search term change\r\n React.useEffect(() => {\r\n if (!!searchTerm?.length && !searchFieldVisible?.visible) {\r\n setSearchFieldVisible({ visible: true, focus: false });\r\n }\r\n }, [searchTerm, searchFieldVisible]);\r\n\r\n // register click outside handler\r\n React.useEffect(() => {\r\n document.addEventListener('click', handleClickOutside);\r\n return () => {\r\n document.removeEventListener('click', handleClickOutside);\r\n };\r\n });\r\n\r\n // focus search input on visibility change\r\n React.useEffect(() => {\r\n if (searchFieldVisible?.visible) {\r\n searchFieldInputRef?.current?.focus({ focusVisible: searchFieldVisible.focus } as any);\r\n }\r\n }, [searchFieldVisible.visible, searchFieldInputRef]);\r\n\r\n return (\r\n <Wrapper shouldNotInteract={searchFieldVisible?.visible}>\r\n <SearchField\r\n ref={searchFieldRef}\r\n id={id}\r\n size={size}\r\n searchTerm={searchTerm}\r\n style={{\r\n margin: margin,\r\n }}\r\n onBlur={handleBlur}\r\n className={searchFieldVisible?.visible ? 'expanded' : ''}>\r\n {searchFieldVisible?.visible && (\r\n <SearchBarInput\r\n placeholder={disabled ? '' : placeholder}\r\n id={id}\r\n ref={searchFieldInputRef}\r\n disabled={disabled}\r\n onKeyDown={handleKeyDown}\r\n size={size}\r\n setSearchTerm={(term: string) => setSearchTerm(term)}\r\n searchTerm={searchTerm}\r\n enterSearch={enterSearch}\r\n focusParentRefs={[searchFieldRef]}\r\n />\r\n )}\r\n <SearchIconWrapper className={size ? size : ''} role=\"button\" aria-label={performSearchLabel}>\r\n <IconButton\r\n id={`${id}_Searchbutton`}\r\n dataTestId={`${id}_Searchbutton`}\r\n variant=\"secondary\"\r\n shape=\"circular\"\r\n tabIndex={searchFieldVisible?.visible ? -1 : 0}\r\n action={handleSearchIconAction}>\r\n <SystemIcons.Search size=\"24px\" color={disabled ? COLORS.getColor('neutral_300', theme) : COLORS.getColor('neutral_600', theme)} />\r\n </IconButton>\r\n </SearchIconWrapper>\r\n <StyledIcon className={size ? size : ''} role=\"button\" hidden={!searchTerm || !searchFieldVisible?.visible}>\r\n <IconButton\r\n id={`${id}_Clearicon`}\r\n dataTestId={`${id}_Clearicon`}\r\n variant=\"secondary\"\r\n shape=\"circular\"\r\n action={(e) => {\r\n removeSearch(e);\r\n searchFieldInputRef?.current?.focus();\r\n }}>\r\n <SystemIcons.Clear size=\"24px\" color={disabled ? COLORS.getColor('neutral_300', theme) : COLORS.getColor('neutral_600', theme)} />\r\n </IconButton>\r\n </StyledIcon>\r\n {loading && searchFieldVisible?.visible && (\r\n <StyledIcon className={size ? size : ''}>\r\n <LoadingIndicator size={Size.Small} color={COLORS.getColor('neutral_600', theme)} />\r\n </StyledIcon>\r\n )}\r\n </SearchField>\r\n </Wrapper>\r\n );\r\n};\r\n\r\nexport default QuickSearch;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"QuickSearch.cjs","names":["React","_interopRequireWildcard","require","_styledComponents","_Iconbutton","_styling","_types","_","_icons","_SearchBarInput","_interopRequireDefault","_SearchField","_jsxRuntime","_templateObject","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","_typeof","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","Wrapper","styled","div","_taggedTemplateLiteral2","StyledSearchField","props","COLORS","getColor","theme","IconButtonStyledSecondary","shouldNotInteract","QuickSearch","_ref","id","searchTerm","setSearchTerm","enterSearch","removeSearch","placeholder","performSearchLabel","disabled","onKeyDown","size","margin","loading","useTheme","searchFieldRef","useRef","searchFieldInputRef","_React$useState","useState","visible","_React$useState2","_slicedToArray2","searchFieldVisible","setSearchFieldVisible","handleClickOutside","current","contains","target","length","handleKeyDown","key","handleBlur","_searchFieldRef$curre","relatedTarget","handleSearchIconAction","focus","detail","useEffect","document","addEventListener","removeEventListener","_searchFieldInputRef$","focusVisible","jsx","children","jsxs","ref","style","onBlur","className","term","focusParentRefs","SearchIconWrapper","role","concat","dataTestId","variant","shape","tabIndex","action","SystemIcons","Search","color","StyledIcon","hidden","_searchFieldInputRef$2","Clear","LoadingIndicator","Size","Small","propTypes","_propTypes","string","isRequired","func","bool","_default","exports"],"sources":["../../src/InputFields/QuickSearch.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport styled, { useTheme } from 'styled-components';\r\n\r\nimport IconButton, { IconButtonStyledSecondary } from '../Button/Iconbutton';\r\nimport { SearchIconWrapper, StyledIcon } from './styling';\r\nimport { Size } from '../types';\r\nimport { COLORS, LoadingIndicator } from '..';\r\nimport { SystemIcons } from '../icons';\r\nimport SearchBarInput from './components/SearchBarInput';\r\nimport SearchField, { StyledSearchField } from './components/SearchField';\r\n\r\nconst Wrapper = styled.div<{shouldNotInteract: boolean}>`\r\n width: 100%;\r\n\r\n ${StyledSearchField} {\r\n transition: box-shadow 0.2s ease-in-out, width 0.2s ease-in-out;\r\n\r\n background-color: transparent;\r\n\r\n &.small {\r\n width: 48px;\r\n }\r\n\r\n &.medium {\r\n width: 56px;\r\n }\r\n\r\n &.expanded {\r\n width: 100%;\r\n }\r\n\r\n box-shadow: none;\r\n\r\n &:hover {\r\n box-shadow: none;\r\n }\r\n\r\n &.expanded {\r\n background-color: ${props => COLORS.getColor('white', props.theme)};\r\n box-shadow: inset 0 0 0 1px ${props => COLORS.getColor('neutral_400', props.theme)};\r\n }\r\n\r\n &.expanded:hover,\r\n &.expanded:focus-within {\r\n box-shadow: inset 0 0 0 2px ${props => COLORS.getColor('primary_800', props.theme)};\r\n }\r\n }\r\n\r\n ${IconButtonStyledSecondary} {\r\n pointer-events: ${(props) => (props.shouldNotInteract ? 'none' : 'auto')};\r\n }\r\n`;\r\n\r\nexport type QuickSearchProps = {\r\n /** Required. Id of the component. */\r\n id: string;\r\n /** Optional. Current search term entered by the user. */\r\n searchTerm?: string;\r\n /** Required. Handler to be called when user modified input. */\r\n setSearchTerm: (term: string) => void;\r\n /** Required. Handler to be called when user triggers search. */\r\n enterSearch: (e: any) => void;\r\n /** Required. Handler to be called when user clears input field. */\r\n removeSearch: (e: any) => void;\r\n /** Optional. Placeholder text to be shown in the input field when there is no input. */\r\n placeholder?: string;\r\n /** Optional. ARIA label to set on the input field. */\r\n performSearchLabel?: string;\r\n /** Optional. If disabled user can not interact with the search bar. */\r\n disabled?: boolean;\r\n /** Optional. Optional onkeydown handler to be set on the input field. */\r\n onKeyDown?: (e: React.KeyboardEvent) => void;\r\n /** Optional. Size of the component. Defaults to 'medium'. */\r\n size?: Size.Small | Size.Medium;\r\n /** Optional. Margin style attribute to be set on the input field. */\r\n margin?: string;\r\n /** Optional. If set then loading indicator will be shown on the right side of the input field. */\r\n loading?: boolean;\r\n};\r\n\r\nconst QuickSearch: React.FunctionComponent<QuickSearchProps> = ({\r\n id,\r\n searchTerm,\r\n setSearchTerm,\r\n enterSearch,\r\n removeSearch,\r\n placeholder,\r\n performSearchLabel,\r\n disabled,\r\n onKeyDown,\r\n size,\r\n margin,\r\n loading,\r\n}: QuickSearchProps) => {\r\n const theme = useTheme();\r\n const searchFieldRef = React.useRef<HTMLDivElement>(null);\r\n const searchFieldInputRef = React.useRef<HTMLInputElement>(null);\r\n\r\n const [searchFieldVisible, setSearchFieldVisible] = React.useState<{ visible: boolean; focus?: boolean }>({\r\n visible: false,\r\n });\r\n\r\n const handleClickOutside = (e: any) => {\r\n if (searchFieldRef?.current && !searchFieldRef.current.contains(e.target)) {\r\n if (searchFieldVisible?.visible && !searchTerm?.length) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: any) => {\r\n if (onKeyDown) {\r\n onKeyDown(e);\r\n }\r\n if (e.key === 'Escape') {\r\n if (searchFieldVisible?.visible && !searchTerm?.length) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n }\r\n };\r\n\r\n const handleBlur = (e: any) => {\r\n if (!searchTerm && (!e.relatedTarget || !searchFieldRef.current?.contains(e.relatedTarget))) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n };\r\n\r\n const handleSearchIconAction = (e: any) => {\r\n if (!searchFieldVisible?.visible) {\r\n setSearchFieldVisible({\r\n visible: !searchFieldVisible.visible,\r\n focus: !searchFieldVisible.visible && e?.detail !== 1,\r\n });\r\n }\r\n };\r\n\r\n // set search field visibility on search term change\r\n React.useEffect(() => {\r\n if (!!searchTerm?.length && !searchFieldVisible?.visible) {\r\n setSearchFieldVisible({ visible: true, focus: false });\r\n }\r\n }, [searchTerm, searchFieldVisible]);\r\n\r\n // register click outside handler\r\n React.useEffect(() => {\r\n document.addEventListener('click', handleClickOutside);\r\n return () => {\r\n document.removeEventListener('click', handleClickOutside);\r\n };\r\n }, []);\r\n\r\n // focus search input on visibility change\r\n React.useEffect(() => {\r\n if (searchFieldVisible?.visible) {\r\n searchFieldInputRef?.current?.focus({ focusVisible: searchFieldVisible.focus } as any);\r\n }\r\n }, [searchFieldVisible.visible, searchFieldInputRef]);\r\n\r\n return (\r\n <Wrapper shouldNotInteract={searchFieldVisible?.visible}>\r\n <SearchField\r\n ref={searchFieldRef}\r\n id={id}\r\n size={size}\r\n searchTerm={searchTerm}\r\n style={{\r\n margin: margin,\r\n }}\r\n onBlur={handleBlur}\r\n className={searchFieldVisible?.visible ? 'expanded' : ''}>\r\n {searchFieldVisible?.visible && (\r\n <SearchBarInput\r\n placeholder={disabled ? '' : placeholder}\r\n id={id}\r\n ref={searchFieldInputRef}\r\n disabled={disabled}\r\n onKeyDown={handleKeyDown}\r\n size={size}\r\n setSearchTerm={(term: string) => setSearchTerm(term)}\r\n searchTerm={searchTerm}\r\n enterSearch={enterSearch}\r\n focusParentRefs={[searchFieldRef]}\r\n />\r\n )}\r\n <SearchIconWrapper className={size ? size : ''} role=\"button\" aria-label={performSearchLabel}>\r\n <IconButton\r\n id={`${id}_Searchbutton`}\r\n dataTestId={`${id}_Searchbutton`}\r\n variant=\"secondary\"\r\n shape=\"circular\"\r\n tabIndex={searchFieldVisible?.visible ? -1 : 0}\r\n action={handleSearchIconAction}>\r\n <SystemIcons.Search size=\"24px\" color={disabled ? COLORS.getColor('neutral_300', theme) : COLORS.getColor('neutral_600', theme)} />\r\n </IconButton>\r\n </SearchIconWrapper>\r\n <StyledIcon className={size ? size : ''} role=\"button\" hidden={!searchTerm || !searchFieldVisible?.visible}>\r\n <IconButton\r\n id={`${id}_Clearicon`}\r\n dataTestId={`${id}_Clearicon`}\r\n variant=\"secondary\"\r\n shape=\"circular\"\r\n action={(e) => {\r\n removeSearch(e);\r\n searchFieldInputRef?.current?.focus();\r\n }}>\r\n <SystemIcons.Clear size=\"24px\" color={disabled ? COLORS.getColor('neutral_300', theme) : COLORS.getColor('neutral_600', theme)} />\r\n </IconButton>\r\n </StyledIcon>\r\n {loading && searchFieldVisible?.visible && (\r\n <StyledIcon className={size ? size : ''}>\r\n <LoadingIndicator size={Size.Small} color={COLORS.getColor('neutral_600', theme)} />\r\n </StyledIcon>\r\n )}\r\n </SearchField>\r\n </Wrapper>\r\n );\r\n};\r\n\r\nexport default QuickSearch;\r\n"],"mappings":"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","ignoreList":[]}
@@ -98,7 +98,7 @@ var QuickSearch = function QuickSearch(_ref) {
98
98
  return function () {
99
99
  document.removeEventListener('click', handleClickOutside);
100
100
  };
101
- });
101
+ }, []);
102
102
 
103
103
  // focus search input on visibility change
104
104
  React.useEffect(function () {
@@ -1 +1 @@
1
- {"version":3,"file":"QuickSearch.js","names":["React","styled","useTheme","IconButton","IconButtonStyledSecondary","SearchIconWrapper","StyledIcon","Size","COLORS","LoadingIndicator","SystemIcons","SearchBarInput","SearchField","StyledSearchField","jsx","_jsx","jsxs","_jsxs","Wrapper","div","_templateObject","_taggedTemplateLiteral","props","getColor","theme","shouldNotInteract","QuickSearch","_ref","id","searchTerm","setSearchTerm","enterSearch","removeSearch","placeholder","performSearchLabel","disabled","onKeyDown","size","margin","loading","searchFieldRef","useRef","searchFieldInputRef","_React$useState","useState","visible","_React$useState2","_slicedToArray","searchFieldVisible","setSearchFieldVisible","handleClickOutside","e","current","contains","target","length","handleKeyDown","key","handleBlur","_searchFieldRef$curre","relatedTarget","handleSearchIconAction","focus","detail","useEffect","document","addEventListener","removeEventListener","_searchFieldInputRef$","focusVisible","children","ref","style","onBlur","className","term","focusParentRefs","role","concat","dataTestId","variant","shape","tabIndex","action","Search","color","hidden","_searchFieldInputRef$2","Clear","Small","propTypes","_pt","string","isRequired","func","bool"],"sources":["../../src/InputFields/QuickSearch.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport styled, { useTheme } from 'styled-components';\r\n\r\nimport IconButton, { IconButtonStyledSecondary } from '../Button/Iconbutton';\r\nimport { SearchIconWrapper, StyledIcon } from './styling';\r\nimport { Size } from '../types';\r\nimport { COLORS, LoadingIndicator } from '..';\r\nimport { SystemIcons } from '../icons';\r\nimport SearchBarInput from './components/SearchBarInput';\r\nimport SearchField, { StyledSearchField } from './components/SearchField';\r\n\r\nconst Wrapper = styled.div<{shouldNotInteract: boolean}>`\r\n width: 100%;\r\n\r\n ${StyledSearchField} {\r\n transition: box-shadow 0.2s ease-in-out, width 0.2s ease-in-out;\r\n\r\n background-color: transparent;\r\n\r\n &.small {\r\n width: 48px;\r\n }\r\n\r\n &.medium {\r\n width: 56px;\r\n }\r\n\r\n &.expanded {\r\n width: 100%;\r\n }\r\n\r\n box-shadow: none;\r\n\r\n &:hover {\r\n box-shadow: none;\r\n }\r\n\r\n &.expanded {\r\n background-color: ${props => COLORS.getColor('white', props.theme)};\r\n box-shadow: inset 0 0 0 1px ${props => COLORS.getColor('neutral_400', props.theme)};\r\n }\r\n\r\n &.expanded:hover,\r\n &.expanded:focus-within {\r\n box-shadow: inset 0 0 0 2px ${props => COLORS.getColor('primary_800', props.theme)};\r\n }\r\n }\r\n\r\n ${IconButtonStyledSecondary} {\r\n pointer-events: ${(props) => (props.shouldNotInteract ? 'none' : 'auto')};\r\n }\r\n`;\r\n\r\nexport type QuickSearchProps = {\r\n /** Required. Id of the component. */\r\n id: string;\r\n /** Optional. Current search term entered by the user. */\r\n searchTerm?: string;\r\n /** Required. Handler to be called when user modified input. */\r\n setSearchTerm: (term: string) => void;\r\n /** Required. Handler to be called when user triggers search. */\r\n enterSearch: (e: any) => void;\r\n /** Required. Handler to be called when user clears input field. */\r\n removeSearch: (e: any) => void;\r\n /** Optional. Placeholder text to be shown in the input field when there is no input. */\r\n placeholder?: string;\r\n /** Optional. ARIA label to set on the input field. */\r\n performSearchLabel?: string;\r\n /** Optional. If disabled user can not interact with the search bar. */\r\n disabled?: boolean;\r\n /** Optional. Optional onkeydown handler to be set on the input field. */\r\n onKeyDown?: (e: React.KeyboardEvent) => void;\r\n /** Optional. Size of the component. Defaults to 'medium'. */\r\n size?: Size.Small | Size.Medium;\r\n /** Optional. Margin style attribute to be set on the input field. */\r\n margin?: string;\r\n /** Optional. If set then loading indicator will be shown on the right side of the input field. */\r\n loading?: boolean;\r\n};\r\n\r\nconst QuickSearch: React.FunctionComponent<QuickSearchProps> = ({\r\n id,\r\n searchTerm,\r\n setSearchTerm,\r\n enterSearch,\r\n removeSearch,\r\n placeholder,\r\n performSearchLabel,\r\n disabled,\r\n onKeyDown,\r\n size,\r\n margin,\r\n loading,\r\n}: QuickSearchProps) => {\r\n const theme = useTheme();\r\n const searchFieldRef = React.useRef<HTMLDivElement>(null);\r\n const searchFieldInputRef = React.useRef<HTMLInputElement>(null);\r\n\r\n const [searchFieldVisible, setSearchFieldVisible] = React.useState<{ visible: boolean; focus?: boolean }>({\r\n visible: false,\r\n });\r\n\r\n const handleClickOutside = (e: any) => {\r\n if (searchFieldRef?.current && !searchFieldRef.current.contains(e.target)) {\r\n if (searchFieldVisible?.visible && !searchTerm?.length) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: any) => {\r\n if (onKeyDown) {\r\n onKeyDown(e);\r\n }\r\n if (e.key === 'Escape') {\r\n if (searchFieldVisible?.visible && !searchTerm?.length) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n }\r\n };\r\n\r\n const handleBlur = (e: any) => {\r\n if (!searchTerm && (!e.relatedTarget || !searchFieldRef.current?.contains(e.relatedTarget))) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n };\r\n\r\n const handleSearchIconAction = (e: any) => {\r\n if (!searchFieldVisible?.visible) {\r\n setSearchFieldVisible({\r\n visible: !searchFieldVisible.visible,\r\n focus: !searchFieldVisible.visible && e?.detail !== 1,\r\n });\r\n }\r\n };\r\n\r\n // set search field visibility on search term change\r\n React.useEffect(() => {\r\n if (!!searchTerm?.length && !searchFieldVisible?.visible) {\r\n setSearchFieldVisible({ visible: true, focus: false });\r\n }\r\n }, [searchTerm, searchFieldVisible]);\r\n\r\n // register click outside handler\r\n React.useEffect(() => {\r\n document.addEventListener('click', handleClickOutside);\r\n return () => {\r\n document.removeEventListener('click', handleClickOutside);\r\n };\r\n });\r\n\r\n // focus search input on visibility change\r\n React.useEffect(() => {\r\n if (searchFieldVisible?.visible) {\r\n searchFieldInputRef?.current?.focus({ focusVisible: searchFieldVisible.focus } as any);\r\n }\r\n }, [searchFieldVisible.visible, searchFieldInputRef]);\r\n\r\n return (\r\n <Wrapper shouldNotInteract={searchFieldVisible?.visible}>\r\n <SearchField\r\n ref={searchFieldRef}\r\n id={id}\r\n size={size}\r\n searchTerm={searchTerm}\r\n style={{\r\n margin: margin,\r\n }}\r\n onBlur={handleBlur}\r\n className={searchFieldVisible?.visible ? 'expanded' : ''}>\r\n {searchFieldVisible?.visible && (\r\n <SearchBarInput\r\n placeholder={disabled ? '' : placeholder}\r\n id={id}\r\n ref={searchFieldInputRef}\r\n disabled={disabled}\r\n onKeyDown={handleKeyDown}\r\n size={size}\r\n setSearchTerm={(term: string) => setSearchTerm(term)}\r\n searchTerm={searchTerm}\r\n enterSearch={enterSearch}\r\n focusParentRefs={[searchFieldRef]}\r\n />\r\n )}\r\n <SearchIconWrapper className={size ? size : ''} role=\"button\" aria-label={performSearchLabel}>\r\n <IconButton\r\n id={`${id}_Searchbutton`}\r\n dataTestId={`${id}_Searchbutton`}\r\n variant=\"secondary\"\r\n shape=\"circular\"\r\n tabIndex={searchFieldVisible?.visible ? -1 : 0}\r\n action={handleSearchIconAction}>\r\n <SystemIcons.Search size=\"24px\" color={disabled ? COLORS.getColor('neutral_300', theme) : COLORS.getColor('neutral_600', theme)} />\r\n </IconButton>\r\n </SearchIconWrapper>\r\n <StyledIcon className={size ? size : ''} role=\"button\" hidden={!searchTerm || !searchFieldVisible?.visible}>\r\n <IconButton\r\n id={`${id}_Clearicon`}\r\n dataTestId={`${id}_Clearicon`}\r\n variant=\"secondary\"\r\n shape=\"circular\"\r\n action={(e) => {\r\n removeSearch(e);\r\n searchFieldInputRef?.current?.focus();\r\n }}>\r\n <SystemIcons.Clear size=\"24px\" color={disabled ? COLORS.getColor('neutral_300', theme) : COLORS.getColor('neutral_600', theme)} />\r\n </IconButton>\r\n </StyledIcon>\r\n {loading && searchFieldVisible?.visible && (\r\n <StyledIcon className={size ? size : ''}>\r\n <LoadingIndicator size={Size.Small} color={COLORS.getColor('neutral_600', theme)} />\r\n </StyledIcon>\r\n )}\r\n </SearchField>\r\n </Wrapper>\r\n );\r\n};\r\n\r\nexport default QuickSearch;\r\n"],"mappings":";;;;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,MAAM,IAAIC,QAAQ,QAAQ,mBAAmB;AAEpD,OAAOC,UAAU,IAAIC,yBAAyB,QAAQ,sBAAsB;AAC5E,SAASC,iBAAiB,EAAEC,UAAU,QAAQ,WAAW;AACzD,SAASC,IAAI,QAAQ,UAAU;AAC/B,SAASC,MAAM,EAAEC,gBAAgB,QAAQ,IAAI;AAC7C,SAASC,WAAW,QAAQ,UAAU;AACtC,OAAOC,cAAc,MAAM,6BAA6B;AACxD,OAAOC,WAAW,IAAIC,iBAAiB,QAAQ,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAE1E,IAAMC,OAAO,GAAGjB,MAAM,CAACkB,GAAG,CAAAC,eAAA,KAAAA,eAAA,GAAAC,sBAAA,imBAGtBR,iBAAiB,EAwBK,UAAAS,KAAK;EAAA,OAAId,MAAM,CAACe,QAAQ,CAAC,OAAO,EAAED,KAAK,CAACE,KAAK,CAAC;AAAA,GACpC,UAAAF,KAAK;EAAA,OAAId,MAAM,CAACe,QAAQ,CAAC,aAAa,EAAED,KAAK,CAACE,KAAK,CAAC;AAAA,GAKpD,UAAAF,KAAK;EAAA,OAAId,MAAM,CAACe,QAAQ,CAAC,aAAa,EAAED,KAAK,CAACE,KAAK,CAAC;AAAA,GAIpFpB,yBAAyB,EACP,UAACkB,KAAK;EAAA,OAAMA,KAAK,CAACG,iBAAiB,GAAG,MAAM,GAAG,MAAM;AAAA,CAAC,CAE3E;AA6BD,IAAMC,WAAsD,GAAG,SAAzDA,WAAsDA,CAAAC,IAAA,EAapC;EAAA,IAZtBC,EAAE,GAAAD,IAAA,CAAFC,EAAE;IACFC,UAAU,GAAAF,IAAA,CAAVE,UAAU;IACVC,cAAa,GAAAH,IAAA,CAAbG,aAAa;IACbC,WAAW,GAAAJ,IAAA,CAAXI,WAAW;IACXC,YAAY,GAAAL,IAAA,CAAZK,YAAY;IACZC,WAAW,GAAAN,IAAA,CAAXM,WAAW;IACXC,kBAAkB,GAAAP,IAAA,CAAlBO,kBAAkB;IAClBC,QAAQ,GAAAR,IAAA,CAARQ,QAAQ;IACRC,SAAS,GAAAT,IAAA,CAATS,SAAS;IACTC,IAAI,GAAAV,IAAA,CAAJU,IAAI;IACJC,MAAM,GAAAX,IAAA,CAANW,MAAM;IACNC,OAAO,GAAAZ,IAAA,CAAPY,OAAO;EAEP,IAAMf,KAAK,GAAGtB,QAAQ,CAAC,CAAC;EACxB,IAAMsC,cAAc,GAAGxC,KAAK,CAACyC,MAAM,CAAiB,IAAI,CAAC;EACzD,IAAMC,mBAAmB,GAAG1C,KAAK,CAACyC,MAAM,CAAmB,IAAI,CAAC;EAEhE,IAAAE,eAAA,GAAoD3C,KAAK,CAAC4C,QAAQ,CAAwC;MACxGC,OAAO,EAAE;IACX,CAAC,CAAC;IAAAC,gBAAA,GAAAC,cAAA,CAAAJ,eAAA;IAFKK,kBAAkB,GAAAF,gBAAA;IAAEG,qBAAqB,GAAAH,gBAAA;EAIhD,IAAMI,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIC,CAAM,EAAK;IACrC,IAAIX,cAAc,aAAdA,cAAc,eAAdA,cAAc,CAAEY,OAAO,IAAI,CAACZ,cAAc,CAACY,OAAO,CAACC,QAAQ,CAACF,CAAC,CAACG,MAAM,CAAC,EAAE;MACzE,IAAIN,kBAAkB,aAAlBA,kBAAkB,eAAlBA,kBAAkB,CAAEH,OAAO,IAAI,EAAChB,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAE0B,MAAM,GAAE;QACtDN,qBAAqB,CAAC;UAAEJ,OAAO,EAAE;QAAM,CAAC,CAAC;MAC3C;IACF;EACF,CAAC;EAED,IAAMW,aAAa,GAAG,SAAhBA,aAAaA,CAAIL,CAAM,EAAK;IAChC,IAAIf,SAAS,EAAE;MACbA,SAAS,CAACe,CAAC,CAAC;IACd;IACA,IAAIA,CAAC,CAACM,GAAG,KAAK,QAAQ,EAAE;MACtB,IAAIT,kBAAkB,aAAlBA,kBAAkB,eAAlBA,kBAAkB,CAAEH,OAAO,IAAI,EAAChB,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAE0B,MAAM,GAAE;QACtDN,qBAAqB,CAAC;UAAEJ,OAAO,EAAE;QAAM,CAAC,CAAC;MAC3C;IACF;EACF,CAAC;EAED,IAAMa,UAAU,GAAG,SAAbA,UAAUA,CAAIP,CAAM,EAAK;IAAA,IAAAQ,qBAAA;IAC7B,IAAI,CAAC9B,UAAU,KAAK,CAACsB,CAAC,CAACS,aAAa,IAAI,GAAAD,qBAAA,GAACnB,cAAc,CAACY,OAAO,cAAAO,qBAAA,eAAtBA,qBAAA,CAAwBN,QAAQ,CAACF,CAAC,CAACS,aAAa,CAAC,EAAC,EAAE;MAC3FX,qBAAqB,CAAC;QAAEJ,OAAO,EAAE;MAAM,CAAC,CAAC;IAC3C;EACF,CAAC;EAED,IAAMgB,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAIV,CAAM,EAAK;IACzC,IAAI,EAACH,kBAAkB,aAAlBA,kBAAkB,eAAlBA,kBAAkB,CAAEH,OAAO,GAAE;MAChCI,qBAAqB,CAAC;QACpBJ,OAAO,EAAE,CAACG,kBAAkB,CAACH,OAAO;QACpCiB,KAAK,EAAE,CAACd,kBAAkB,CAACH,OAAO,IAAI,CAAAM,CAAC,aAADA,CAAC,uBAADA,CAAC,CAAEY,MAAM,MAAK;MACtD,CAAC,CAAC;IACJ;EACF,CAAC;;EAED;EACA/D,KAAK,CAACgE,SAAS,CAAC,YAAM;IACpB,IAAI,CAAC,EAACnC,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAE0B,MAAM,KAAI,EAACP,kBAAkB,aAAlBA,kBAAkB,eAAlBA,kBAAkB,CAAEH,OAAO,GAAE;MACxDI,qBAAqB,CAAC;QAAEJ,OAAO,EAAE,IAAI;QAAEiB,KAAK,EAAE;MAAM,CAAC,CAAC;IACxD;EACF,CAAC,EAAE,CAACjC,UAAU,EAAEmB,kBAAkB,CAAC,CAAC;;EAEpC;EACAhD,KAAK,CAACgE,SAAS,CAAC,YAAM;IACpBC,QAAQ,CAACC,gBAAgB,CAAC,OAAO,EAAEhB,kBAAkB,CAAC;IACtD,OAAO,YAAM;MACXe,QAAQ,CAACE,mBAAmB,CAAC,OAAO,EAAEjB,kBAAkB,CAAC;IAC3D,CAAC;EACH,CAAC,CAAC;;EAEF;EACAlD,KAAK,CAACgE,SAAS,CAAC,YAAM;IACpB,IAAIhB,kBAAkB,aAAlBA,kBAAkB,eAAlBA,kBAAkB,CAAEH,OAAO,EAAE;MAAA,IAAAuB,qBAAA;MAC/B1B,mBAAmB,aAAnBA,mBAAmB,wBAAA0B,qBAAA,GAAnB1B,mBAAmB,CAAEU,OAAO,cAAAgB,qBAAA,uBAA5BA,qBAAA,CAA8BN,KAAK,CAAC;QAAEO,YAAY,EAAErB,kBAAkB,CAACc;MAAM,CAAQ,CAAC;IACxF;EACF,CAAC,EAAE,CAACd,kBAAkB,CAACH,OAAO,EAAEH,mBAAmB,CAAC,CAAC;EAErD,oBACE3B,IAAA,CAACG,OAAO;IAACO,iBAAiB,EAAEuB,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAEH,OAAQ;IAAAyB,QAAA,eACtDrD,KAAA,CAACL,WAAW;MACV2D,GAAG,EAAE/B,cAAe;MACpBZ,EAAE,EAAEA,EAAG;MACPS,IAAI,EAAEA,IAAK;MACXR,UAAU,EAAEA,UAAW;MACvB2C,KAAK,EAAE;QACLlC,MAAM,EAAEA;MACV,CAAE;MACFmC,MAAM,EAAEf,UAAW;MACnBgB,SAAS,EAAE1B,kBAAkB,aAAlBA,kBAAkB,eAAlBA,kBAAkB,CAAEH,OAAO,GAAG,UAAU,GAAG,EAAG;MAAAyB,QAAA,GACxD,CAAAtB,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAEH,OAAO,kBAC1B9B,IAAA,CAACJ,cAAc;QACbsB,WAAW,EAAEE,QAAQ,GAAG,EAAE,GAAGF,WAAY;QACzCL,EAAE,EAAEA,EAAG;QACP2C,GAAG,EAAE7B,mBAAoB;QACzBP,QAAQ,EAAEA,QAAS;QACnBC,SAAS,EAAEoB,aAAc;QACzBnB,IAAI,EAAEA,IAAK;QACXP,aAAa,EAAE,SAAAA,cAAC6C,IAAY;UAAA,OAAK7C,cAAa,CAAC6C,IAAI,CAAC;QAAA,CAAC;QACrD9C,UAAU,EAAEA,UAAW;QACvBE,WAAW,EAAEA,WAAY;QACzB6C,eAAe,EAAE,CAACpC,cAAc;MAAE,CACnC,CACF,eACDzB,IAAA,CAACV,iBAAiB;QAACqE,SAAS,EAAErC,IAAI,GAAGA,IAAI,GAAG,EAAG;QAACwC,IAAI,EAAC,QAAQ;QAAC,cAAY3C,kBAAmB;QAAAoC,QAAA,eAC3FvD,IAAA,CAACZ,UAAU;UACTyB,EAAE,KAAAkD,MAAA,CAAKlD,EAAE,kBAAgB;UACzBmD,UAAU,KAAAD,MAAA,CAAKlD,EAAE,kBAAgB;UACjCoD,OAAO,EAAC,WAAW;UACnBC,KAAK,EAAC,UAAU;UAChBC,QAAQ,EAAElC,kBAAkB,aAAlBA,kBAAkB,eAAlBA,kBAAkB,CAAEH,OAAO,GAAG,CAAC,CAAC,GAAG,CAAE;UAC/CsC,MAAM,EAAEtB,sBAAuB;UAAAS,QAAA,eAC/BvD,IAAA,CAACL,WAAW,CAAC0E,MAAM;YAAC/C,IAAI,EAAC,MAAM;YAACgD,KAAK,EAAElD,QAAQ,GAAG3B,MAAM,CAACe,QAAQ,CAAC,aAAa,EAAEC,KAAK,CAAC,GAAGhB,MAAM,CAACe,QAAQ,CAAC,aAAa,EAAEC,KAAK;UAAE,CAAE;QAAC,CACzH;MAAC,CACI,CAAC,eACpBT,IAAA,CAACT,UAAU;QAACoE,SAAS,EAAErC,IAAI,GAAGA,IAAI,GAAG,EAAG;QAACwC,IAAI,EAAC,QAAQ;QAACS,MAAM,EAAE,CAACzD,UAAU,IAAI,EAACmB,kBAAkB,aAAlBA,kBAAkB,eAAlBA,kBAAkB,CAAEH,OAAO,CAAC;QAAAyB,QAAA,eACzGvD,IAAA,CAACZ,UAAU;UACTyB,EAAE,KAAAkD,MAAA,CAAKlD,EAAE,eAAa;UACtBmD,UAAU,KAAAD,MAAA,CAAKlD,EAAE,eAAa;UAC9BoD,OAAO,EAAC,WAAW;UACnBC,KAAK,EAAC,UAAU;UAChBE,MAAM,EAAE,SAAAA,OAAChC,CAAC,EAAK;YAAA,IAAAoC,sBAAA;YACbvD,YAAY,CAACmB,CAAC,CAAC;YACfT,mBAAmB,aAAnBA,mBAAmB,wBAAA6C,sBAAA,GAAnB7C,mBAAmB,CAAEU,OAAO,cAAAmC,sBAAA,uBAA5BA,sBAAA,CAA8BzB,KAAK,CAAC,CAAC;UACvC,CAAE;UAAAQ,QAAA,eACFvD,IAAA,CAACL,WAAW,CAAC8E,KAAK;YAACnD,IAAI,EAAC,MAAM;YAACgD,KAAK,EAAElD,QAAQ,GAAG3B,MAAM,CAACe,QAAQ,CAAC,aAAa,EAAEC,KAAK,CAAC,GAAGhB,MAAM,CAACe,QAAQ,CAAC,aAAa,EAAEC,KAAK;UAAE,CAAE;QAAC,CACxH;MAAC,CACH,CAAC,EACZe,OAAO,KAAIS,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAEH,OAAO,kBACrC9B,IAAA,CAACT,UAAU;QAACoE,SAAS,EAAErC,IAAI,GAAGA,IAAI,GAAG,EAAG;QAAAiC,QAAA,eACtCvD,IAAA,CAACN,gBAAgB;UAAC4B,IAAI,EAAE9B,IAAI,CAACkF,KAAM;UAACJ,KAAK,EAAE7E,MAAM,CAACe,QAAQ,CAAC,aAAa,EAAEC,KAAK;QAAE,CAAE;MAAC,CAC1E,CACb;IAAA,CACU;EAAC,CACP,CAAC;AAEd,CAAC;AAACE,WAAA,CAAAgE,SAAA;EAjKA9D,EAAE,EAAA+D,GAAA,CAAAC,MAAA,CAAAC,UAAA;EAEFhE,UAAU,EAAA8D,GAAA,CAAAC,MAAA;EAEV9D,aAAa,EAAA6D,GAAA,CAAAG,IAAA,CAAAD,UAAA;EAEb9D,WAAW,EAAA4D,GAAA,CAAAG,IAAA,CAAAD,UAAA;EAEX7D,YAAY,EAAA2D,GAAA,CAAAG,IAAA,CAAAD,UAAA;EAEZ5D,WAAW,EAAA0D,GAAA,CAAAC,MAAA;EAEX1D,kBAAkB,EAAAyD,GAAA,CAAAC,MAAA;EAElBzD,QAAQ,EAAAwD,GAAA,CAAAI,IAAA;EAER3D,SAAS,EAAAuD,GAAA,CAAAG,IAAA;EAITxD,MAAM,EAAAqD,GAAA,CAAAC,MAAA;EAENrD,OAAO,EAAAoD,GAAA,CAAAI;AAAA;AA6IT,eAAerE,WAAW","ignoreList":[]}
1
+ {"version":3,"file":"QuickSearch.js","names":["React","styled","useTheme","IconButton","IconButtonStyledSecondary","SearchIconWrapper","StyledIcon","Size","COLORS","LoadingIndicator","SystemIcons","SearchBarInput","SearchField","StyledSearchField","jsx","_jsx","jsxs","_jsxs","Wrapper","div","_templateObject","_taggedTemplateLiteral","props","getColor","theme","shouldNotInteract","QuickSearch","_ref","id","searchTerm","setSearchTerm","enterSearch","removeSearch","placeholder","performSearchLabel","disabled","onKeyDown","size","margin","loading","searchFieldRef","useRef","searchFieldInputRef","_React$useState","useState","visible","_React$useState2","_slicedToArray","searchFieldVisible","setSearchFieldVisible","handleClickOutside","e","current","contains","target","length","handleKeyDown","key","handleBlur","_searchFieldRef$curre","relatedTarget","handleSearchIconAction","focus","detail","useEffect","document","addEventListener","removeEventListener","_searchFieldInputRef$","focusVisible","children","ref","style","onBlur","className","term","focusParentRefs","role","concat","dataTestId","variant","shape","tabIndex","action","Search","color","hidden","_searchFieldInputRef$2","Clear","Small","propTypes","_pt","string","isRequired","func","bool"],"sources":["../../src/InputFields/QuickSearch.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport styled, { useTheme } from 'styled-components';\r\n\r\nimport IconButton, { IconButtonStyledSecondary } from '../Button/Iconbutton';\r\nimport { SearchIconWrapper, StyledIcon } from './styling';\r\nimport { Size } from '../types';\r\nimport { COLORS, LoadingIndicator } from '..';\r\nimport { SystemIcons } from '../icons';\r\nimport SearchBarInput from './components/SearchBarInput';\r\nimport SearchField, { StyledSearchField } from './components/SearchField';\r\n\r\nconst Wrapper = styled.div<{shouldNotInteract: boolean}>`\r\n width: 100%;\r\n\r\n ${StyledSearchField} {\r\n transition: box-shadow 0.2s ease-in-out, width 0.2s ease-in-out;\r\n\r\n background-color: transparent;\r\n\r\n &.small {\r\n width: 48px;\r\n }\r\n\r\n &.medium {\r\n width: 56px;\r\n }\r\n\r\n &.expanded {\r\n width: 100%;\r\n }\r\n\r\n box-shadow: none;\r\n\r\n &:hover {\r\n box-shadow: none;\r\n }\r\n\r\n &.expanded {\r\n background-color: ${props => COLORS.getColor('white', props.theme)};\r\n box-shadow: inset 0 0 0 1px ${props => COLORS.getColor('neutral_400', props.theme)};\r\n }\r\n\r\n &.expanded:hover,\r\n &.expanded:focus-within {\r\n box-shadow: inset 0 0 0 2px ${props => COLORS.getColor('primary_800', props.theme)};\r\n }\r\n }\r\n\r\n ${IconButtonStyledSecondary} {\r\n pointer-events: ${(props) => (props.shouldNotInteract ? 'none' : 'auto')};\r\n }\r\n`;\r\n\r\nexport type QuickSearchProps = {\r\n /** Required. Id of the component. */\r\n id: string;\r\n /** Optional. Current search term entered by the user. */\r\n searchTerm?: string;\r\n /** Required. Handler to be called when user modified input. */\r\n setSearchTerm: (term: string) => void;\r\n /** Required. Handler to be called when user triggers search. */\r\n enterSearch: (e: any) => void;\r\n /** Required. Handler to be called when user clears input field. */\r\n removeSearch: (e: any) => void;\r\n /** Optional. Placeholder text to be shown in the input field when there is no input. */\r\n placeholder?: string;\r\n /** Optional. ARIA label to set on the input field. */\r\n performSearchLabel?: string;\r\n /** Optional. If disabled user can not interact with the search bar. */\r\n disabled?: boolean;\r\n /** Optional. Optional onkeydown handler to be set on the input field. */\r\n onKeyDown?: (e: React.KeyboardEvent) => void;\r\n /** Optional. Size of the component. Defaults to 'medium'. */\r\n size?: Size.Small | Size.Medium;\r\n /** Optional. Margin style attribute to be set on the input field. */\r\n margin?: string;\r\n /** Optional. If set then loading indicator will be shown on the right side of the input field. */\r\n loading?: boolean;\r\n};\r\n\r\nconst QuickSearch: React.FunctionComponent<QuickSearchProps> = ({\r\n id,\r\n searchTerm,\r\n setSearchTerm,\r\n enterSearch,\r\n removeSearch,\r\n placeholder,\r\n performSearchLabel,\r\n disabled,\r\n onKeyDown,\r\n size,\r\n margin,\r\n loading,\r\n}: QuickSearchProps) => {\r\n const theme = useTheme();\r\n const searchFieldRef = React.useRef<HTMLDivElement>(null);\r\n const searchFieldInputRef = React.useRef<HTMLInputElement>(null);\r\n\r\n const [searchFieldVisible, setSearchFieldVisible] = React.useState<{ visible: boolean; focus?: boolean }>({\r\n visible: false,\r\n });\r\n\r\n const handleClickOutside = (e: any) => {\r\n if (searchFieldRef?.current && !searchFieldRef.current.contains(e.target)) {\r\n if (searchFieldVisible?.visible && !searchTerm?.length) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: any) => {\r\n if (onKeyDown) {\r\n onKeyDown(e);\r\n }\r\n if (e.key === 'Escape') {\r\n if (searchFieldVisible?.visible && !searchTerm?.length) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n }\r\n };\r\n\r\n const handleBlur = (e: any) => {\r\n if (!searchTerm && (!e.relatedTarget || !searchFieldRef.current?.contains(e.relatedTarget))) {\r\n setSearchFieldVisible({ visible: false });\r\n }\r\n };\r\n\r\n const handleSearchIconAction = (e: any) => {\r\n if (!searchFieldVisible?.visible) {\r\n setSearchFieldVisible({\r\n visible: !searchFieldVisible.visible,\r\n focus: !searchFieldVisible.visible && e?.detail !== 1,\r\n });\r\n }\r\n };\r\n\r\n // set search field visibility on search term change\r\n React.useEffect(() => {\r\n if (!!searchTerm?.length && !searchFieldVisible?.visible) {\r\n setSearchFieldVisible({ visible: true, focus: false });\r\n }\r\n }, [searchTerm, searchFieldVisible]);\r\n\r\n // register click outside handler\r\n React.useEffect(() => {\r\n document.addEventListener('click', handleClickOutside);\r\n return () => {\r\n document.removeEventListener('click', handleClickOutside);\r\n };\r\n }, []);\r\n\r\n // focus search input on visibility change\r\n React.useEffect(() => {\r\n if (searchFieldVisible?.visible) {\r\n searchFieldInputRef?.current?.focus({ focusVisible: searchFieldVisible.focus } as any);\r\n }\r\n }, [searchFieldVisible.visible, searchFieldInputRef]);\r\n\r\n return (\r\n <Wrapper shouldNotInteract={searchFieldVisible?.visible}>\r\n <SearchField\r\n ref={searchFieldRef}\r\n id={id}\r\n size={size}\r\n searchTerm={searchTerm}\r\n style={{\r\n margin: margin,\r\n }}\r\n onBlur={handleBlur}\r\n className={searchFieldVisible?.visible ? 'expanded' : ''}>\r\n {searchFieldVisible?.visible && (\r\n <SearchBarInput\r\n placeholder={disabled ? '' : placeholder}\r\n id={id}\r\n ref={searchFieldInputRef}\r\n disabled={disabled}\r\n onKeyDown={handleKeyDown}\r\n size={size}\r\n setSearchTerm={(term: string) => setSearchTerm(term)}\r\n searchTerm={searchTerm}\r\n enterSearch={enterSearch}\r\n focusParentRefs={[searchFieldRef]}\r\n />\r\n )}\r\n <SearchIconWrapper className={size ? size : ''} role=\"button\" aria-label={performSearchLabel}>\r\n <IconButton\r\n id={`${id}_Searchbutton`}\r\n dataTestId={`${id}_Searchbutton`}\r\n variant=\"secondary\"\r\n shape=\"circular\"\r\n tabIndex={searchFieldVisible?.visible ? -1 : 0}\r\n action={handleSearchIconAction}>\r\n <SystemIcons.Search size=\"24px\" color={disabled ? COLORS.getColor('neutral_300', theme) : COLORS.getColor('neutral_600', theme)} />\r\n </IconButton>\r\n </SearchIconWrapper>\r\n <StyledIcon className={size ? size : ''} role=\"button\" hidden={!searchTerm || !searchFieldVisible?.visible}>\r\n <IconButton\r\n id={`${id}_Clearicon`}\r\n dataTestId={`${id}_Clearicon`}\r\n variant=\"secondary\"\r\n shape=\"circular\"\r\n action={(e) => {\r\n removeSearch(e);\r\n searchFieldInputRef?.current?.focus();\r\n }}>\r\n <SystemIcons.Clear size=\"24px\" color={disabled ? COLORS.getColor('neutral_300', theme) : COLORS.getColor('neutral_600', theme)} />\r\n </IconButton>\r\n </StyledIcon>\r\n {loading && searchFieldVisible?.visible && (\r\n <StyledIcon className={size ? size : ''}>\r\n <LoadingIndicator size={Size.Small} color={COLORS.getColor('neutral_600', theme)} />\r\n </StyledIcon>\r\n )}\r\n </SearchField>\r\n </Wrapper>\r\n );\r\n};\r\n\r\nexport default QuickSearch;\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+ import {render} from '../../test-utils';
3
+ import {Size, States} from '../../types';
4
+ import 'jest-styled-components';
5
+ import {COLORS, NumberField} from '../..';
6
+
7
+
8
+ describe('<NumberField />', () => {
9
+
10
+ it('renders note field', async () => {
11
+ const { getByText } = render(
12
+ <NumberField type='NumberField' note='test note' size={Size.Medium}/>
13
+ );
14
+ expect(getByText('test note')).toBeDefined();
15
+ });
16
+
17
+ it('renders required asterisk', async () => {
18
+ const { queryByTestId } = render(
19
+ <NumberField type='NumberField' dataTestId='numberInput' required size={Size.Medium}/>
20
+ );
21
+ expect(queryByTestId('labelIcon')).toBeDefined();
22
+ });
23
+
24
+ it('does not renders required asterisk', async () => {
25
+ const { queryByTestId } = render(
26
+ <NumberField type='NumberField' dataTestId='numberInput' size={Size.Medium}/>
27
+ );
28
+ expect(queryByTestId('labelIcon')).toBeNull();
29
+ });
30
+
31
+ it('renders positive note and input container', async () => {
32
+ const { container, getByTestId } = render(
33
+ <NumberField type='NumberField' dataTestId='numberInput' note='test note' state={States.Valid} size={Size.Medium}/>
34
+ );
35
+ expect(container.getElementsByClassName('valid').length).toBe(1);
36
+ });
37
+
38
+ it('renders warning note and input container', async () => {
39
+ const { container, getByTestId } = render(
40
+ <NumberField type='NumberField' dataTestId='numberInput' note='test note' state={States.Invalid} size={Size.Medium}/>
41
+ );
42
+ expect(container.getElementsByClassName('invalid').length).toBe(1);
43
+ });
44
+
45
+ it('renders correct disabled input container', async () => {
46
+ const { getByTestId } = render(
47
+ <NumberField type='NumberField' dataTestId='numberInput' size={Size.Small}/>
48
+ );
49
+ expect(getByTestId('numberInput')).toHaveStyleRule('cursor', `not-allowed`, {modifier:'&.disabled'});
50
+ });
51
+
52
+ it('renders correct readonly input container', async () => {
53
+ const { getByTestId } = render(
54
+ <NumberField type='NumberField' dataTestId='numberInput' size={Size.Small}/>
55
+ );
56
+ expect(getByTestId('numberInput')).toHaveStyleRule('cursor', `not-allowed`, {modifier:'&.readOnly'});
57
+ });
58
+
59
+ it('renders operators in the input container', async () => {
60
+ const { getByTestId } = render(
61
+ <NumberField type='NumberField' dataTestId='numberInput' size={Size.Medium}/>
62
+ );
63
+ expect(getByTestId('operators').childElementCount).toBe(3);
64
+ expect(getByTestId('operators').firstChild).toBeDefined();
65
+ expect(getByTestId('operators').lastChild).toBeDefined();
66
+ })
67
+ })
@@ -0,0 +1,68 @@
1
+ import React from 'react';
2
+ import { render } from '../../test-utils';
3
+ import {Size, States} from '../../types';
4
+ import 'jest-styled-components';
5
+ import { COLORS, NumberField } from '../..';
6
+
7
+
8
+ describe('<NumberField />', () => {
9
+
10
+ it('renders note field', async () => {
11
+ const { getByText } = render(
12
+ <NumberField type='NumberInput' note='test note' size={Size.Medium}/>
13
+ );
14
+ expect(getByText('test note')).toBeDefined();
15
+ });
16
+
17
+ it('renders required asterisk', async () => {
18
+ const { queryByTestId } = render(
19
+ <NumberField type='NumberInput' required size={Size.Medium}/>
20
+ );
21
+ expect(queryByTestId('labelIcon')).toBeDefined();
22
+ });
23
+
24
+ it('does not renders required asterisk', async () => {
25
+ const { queryByTestId } = render(
26
+ <NumberField type='NumberInput' size={Size.Medium}/>
27
+ );
28
+ expect(queryByTestId('labelIcon')).toBeNull();
29
+ });
30
+
31
+ it('renders positive note and input container', async () => {
32
+ const { container, getByTestId } = render(
33
+ <NumberField type='NumberInput' dataTestId='numberInput' note='test note' state={States.Valid} size={Size.Medium}/>
34
+ );
35
+ expect(container.getElementsByClassName('valid').length).toBe(1);
36
+ });
37
+
38
+ it('renders warning note and input container', async () => {
39
+ const { container, getByTestId } = render(
40
+ <NumberField type='NumberInput' dataTestId='numberInput' note='test note' state={States.Invalid} size={Size.Medium}/>
41
+ );
42
+ expect(container.getElementsByClassName('invalid').length).toBe(1);
43
+ });
44
+
45
+ it('renders correct disabled input container', async () => {
46
+ const { getByTestId } = render(
47
+ <NumberField type='NumberInput' dataTestId='numberInput' size={Size.Small}/>
48
+ );
49
+ expect(getByTestId('numberInput')).toHaveStyleRule('cursor', `not-allowed`, {modifier:'&.disabled'});
50
+ });
51
+
52
+ it('renders correct readonly input container', async () => {
53
+ const { getByTestId } = render(
54
+ <NumberField type='NumberInput' dataTestId='numberInput' size={Size.Small}/>
55
+ );
56
+ expect(getByTestId('numberInput')).toHaveStyleRule('cursor', `not-allowed`, {modifier:'&.readOnly'});
57
+ });
58
+
59
+ it('renders operators in the input container', async () => {
60
+ const { getByTestId } = render(
61
+ <NumberField type='NumberInput' size={Size.Medium}/>
62
+ );
63
+ expect(getByTestId('leftOperator')).toHaveStyleRule('left', '0');
64
+ expect(getByTestId('leftOperator')).toHaveStyleRule('top', '4px');
65
+ expect(getByTestId('rightOperator')).toHaveStyleRule('right', '0');
66
+ expect(getByTestId('rightOperator')).toHaveStyleRule('top', '4px');
67
+ })
68
+ })
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import { findByTestId, render } from '../../test-utils';
3
+ import {Size} from '../../types';
4
+ import 'jest-styled-components';
5
+ import { QuickSearch } from '..';
6
+ import { ThemeProvider } from 'styled-components';
7
+
8
+ describe('<QuickSearch />', () => {
9
+
10
+
11
+ it('Renders quick search', async () => {
12
+ let search = '';
13
+ let searchEntered = false;
14
+ const { queryByText, getByTestId, queryAllByTestId, container } = render(
15
+ <ThemeProvider theme={{}}>
16
+ <div style={{ width: '400px' }}>
17
+ <QuickSearch
18
+ id="QuickSearch"
19
+ size={Size.Small}
20
+ enterSearch={() => {
21
+ searchEntered = true;
22
+ }}
23
+ removeSearch={() => {
24
+ search = '';
25
+ }}
26
+ setSearchTerm={(term) => {
27
+ search = term;
28
+ }}
29
+ />
30
+ </div></ThemeProvider>,
31
+ );
32
+ expect(getByTestId('QuickSearch_main').classList.contains('small')).toBeTruthy();
33
+ expect(getByTestId('QuickSearch_Searchbutton')).toBeDefined();
34
+
35
+ // Test click on icon and check that input field shows
36
+ expect(queryAllByTestId('QuickSearch').length).toBe(0);
37
+ (await findByTestId(container, 'QuickSearch_Searchbutton') as HTMLButtonElement)?.click();
38
+ expect(await findByTestId(container, 'QuickSearch_main')).toBeDefined();
39
+ expect(getByTestId('QuickSearch_main').classList.contains('expanded')).toBeTruthy();
40
+ expect(getByTestId('QuickSearch_Clearicon').parentElement).toHaveProperty('hidden');
41
+ });
42
+ });
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import {render} from '../../test-utils';
3
+ import LinearProgress, {Bar, Dot, Line, LinearProgressType, LineFill} from '../LinearProgress';
4
+
5
+
6
+
7
+ describe('LinearProgress', () => {
8
+ it('should render dots', () => {
9
+ const wrapper = render(<LinearProgress type={LinearProgressType.Dots} max={11} value={6}/>);
10
+ expect(wrapper.container.querySelectorAll(`${Dot}`)).toHaveLength(11)
11
+ expect(wrapper.container.querySelectorAll(`${Dot}.active`)).toHaveLength(6)
12
+ });
13
+
14
+ it('should render bars', () => {
15
+ const wrapper = render(<LinearProgress type={LinearProgressType.Bars} max={11} value={6}/>);
16
+ expect(wrapper.container.querySelectorAll(`${Bar}`)).toHaveLength(11)
17
+ expect(wrapper.container.querySelectorAll(`${Bar}.active`)).toHaveLength(6)
18
+ });
19
+
20
+ it('should render line', () => {
21
+ const wrapper = render(<LinearProgress type={LinearProgressType.Line} max={11} value={6}/>);
22
+ expect(wrapper.container.querySelectorAll(`${Line}`)).toHaveLength(1)
23
+ expect(wrapper.container.querySelectorAll(`${LineFill}`).item(0).getAttribute('style')).toEqual(`width: ${6 / 11 * 100}%;`)
24
+ });
25
+ });
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import {render} from '../../test-utils';
3
+ import {ListRow} from '../index';
4
+ import {Size} from '../../types';
5
+ import {SystemIcons} from '../../icons';
6
+
7
+ describe('<ListRow />', () => {
8
+ it('Renders', async () => {
9
+ const {getByText} = render(
10
+ <ListRow
11
+ icon={<SystemIcons.Institute/>}
12
+ mainText={'Laerdal Medical AS'}
13
+ size={Size.Small}
14
+ disabled={false}/>,
15
+ );
16
+ expect(getByText('Laerdal Medical AS')).toBeDefined();
17
+ });
18
+ });
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { render } from '../../test-utils';
3
+ import { GlobalLoadingPage } from '../index';
4
+ import 'jest-styled-components';
5
+ import { COLORS } from '../../styles';
6
+
7
+
8
+
9
+
10
+ describe('<GlobalLoadingPage />', () => {
11
+ it('Renders GlobalLoadingPage', async () => {
12
+ const optionalMessage = 'This is the optional message';
13
+ const { queryByText, getByTestId } = render(<GlobalLoadingPage optionalMessage={optionalMessage} />);
14
+ expect(queryByText(optionalMessage)).toBeDefined();
15
+ expect(getByTestId('TestLoadingMain')).toBeDefined();
16
+ expect(getByTestId('TestLoadingMain')).toHaveStyleRule('background-color', COLORS.primary_20);
17
+ expect(getByTestId('TestLoadingMain')).toHaveStyleRule('height', '100%');
18
+ expect(getByTestId('TestLoadingLogoAndMessage')).toBeDefined();
19
+ expect(getByTestId('TestLoadingLogoAndMessage')).toHaveStyleRule('position', 'absolute');
20
+ expect(getByTestId('TestLoadingLogoAndMessage')).toHaveStyleRule('align-items', 'center');
21
+ expect(getByTestId('TestLoadingLogoAndMessage')).toHaveStyleRule('bottom', '36px');
22
+ });
23
+ });