@laerdal/life-react-components 6.0.0-dev.10.full → 6.0.0-dev.13.full

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 (62) 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/__tests__/BackButton.test.tsx +32 -0
  8. package/dist/Button/__tests__/Button.test.tsx +45 -0
  9. package/dist/Button/__tests__/DualButton.test.tsx +119 -0
  10. package/dist/Card/HorizontalCard/__tests__/HorizontalCard.test.tsx +71 -0
  11. package/dist/Card/HorizontalCard/__tests__/VerticalCard.test.tsx +124 -0
  12. package/dist/Card/__tests__/Card.test.tsx +146 -0
  13. package/dist/Chips/__tests__/ActionChip.test.tsx +94 -0
  14. package/dist/Chips/__tests__/ChoiceChips.test.tsx +79 -0
  15. package/dist/Chips/__tests__/FilterChip.test.tsx +95 -0
  16. package/dist/Chips/__tests__/InputChip.test.tsx +155 -0
  17. package/dist/ChipsInput/__tests__/ChipDropdownInput.test.tsx +100 -0
  18. package/dist/ChipsInput/__tests__/ChipInputFields.test.tsx +155 -0
  19. package/dist/Dropdown/__tests__/DropdownFilter.test.tsx +39 -0
  20. package/dist/Footer/__tests__/Footer.test.tsx +182 -0
  21. package/dist/GlobalNavigationBar/__tests__/Logo.test.tsx +39 -0
  22. package/dist/GlobalNavigationBar/desktop/__tests__/DesktopActions.test.tsx +108 -0
  23. package/dist/GlobalNavigationBar/desktop/__tests__/ExtendedMainMenu.test.tsx +28 -0
  24. package/dist/GlobalNavigationBar/desktop/__tests__/MainMenu.test.tsx +55 -0
  25. package/dist/GlobalNavigationBar/desktop/__tests__/RightSideNav.test.tsx +45 -0
  26. package/dist/GlobalNavigationBar/desktop/__tests__/UserMenu.test.tsx +125 -0
  27. package/dist/GlobalNavigationBar/mobile/__tests__/MobileMenu.test.tsx +317 -0
  28. package/dist/GlobalNavigationBar/mobile/__tests__/MobileMenuContent.test.tsx +294 -0
  29. package/dist/GlobalNavigationBar/mobile/__tests__/MobileMenuHeader.test.tsx +195 -0
  30. package/dist/InputFields/__tests__/NumberField.test.tsx +67 -0
  31. package/dist/InputFields/__tests__/NumberInput.test.tsx +68 -0
  32. package/dist/InputFields/__tests__/QuickSearch.test.tsx +42 -0
  33. package/dist/LinearProgress/__tests__/LinearProgress.test.tsx +25 -0
  34. package/dist/List/__tests__/ListRow.test.tsx +18 -0
  35. package/dist/LoadingPage/__tests__/GlobalLoadingPage.test.tsx +23 -0
  36. package/dist/Modals/__tests__/Modal.test.tsx +169 -0
  37. package/dist/Modals/__tests__/ModalContainer.test.tsx +77 -0
  38. package/dist/Modals/__tests__/ModalContent.test.tsx +126 -0
  39. package/dist/NavItem/__tests__/NavItem.test.ts +6 -0
  40. package/dist/NotificationDot/__tests__/NotificationDot.test.tsx +33 -0
  41. package/dist/Paginator/__tests__/Paginator.test.tsx +39 -0
  42. package/dist/Popover/__tests__/Popover.test.tsx +64 -0
  43. package/dist/ProfileButton/__tests__/ProfileButton.test.tsx +31 -0
  44. package/dist/QuizButton/__tests__/QuizButton.test.tsx +53 -0
  45. package/dist/SegmentControl/__tests__/SegmentControl.test.tsx +145 -0
  46. package/dist/SideMenu/__tests__/SideMenu.test.tsx +99 -0
  47. package/dist/Switcher/__tests__/SwitcherMenuItem.tsx +14 -0
  48. package/dist/Table/__tests__/Table.test.tsx +499 -0
  49. package/dist/Tabs/VerticalTabs.cjs +1 -0
  50. package/dist/Tabs/VerticalTabs.cjs.map +1 -1
  51. package/dist/Tabs/VerticalTabs.js +1 -0
  52. package/dist/Tabs/VerticalTabs.js.map +1 -1
  53. package/dist/Tabs/__tests__/HorizontalTabs.test.tsx +95 -0
  54. package/dist/Tabs/__tests__/TabLink.test.tsx +40 -0
  55. package/dist/Tabs/__tests__/Tablist.test.tsx +37 -0
  56. package/dist/Tag/__tests__/Tag.test.tsx +86 -0
  57. package/dist/Toasters/__tests__/Toast.test.tsx +74 -0
  58. package/dist/Toggles/__tests__/ToggleButton.test.tsx +53 -0
  59. package/dist/Toggles/__tests__/ToggleSwitch.test.tsx +87 -0
  60. package/dist/Tooltips/__tests__/TooltipWrapper.test.tsx +16 -0
  61. package/dist/styles/react-datepicker.css +766 -0
  62. package/package.json +4 -3
@@ -0,0 +1,499 @@
1
+ import React from 'react';
2
+ /**
3
+ * Import React libraries.
4
+ */
5
+ import { render } from '../../test-utils';
6
+
7
+ /**
8
+ * Import custom components.
9
+ */
10
+ import { Table } from '../index';
11
+
12
+ /**
13
+ * Import third-party libraries.
14
+ */
15
+ import 'jest-styled-components';
16
+
17
+ /**
18
+ * Import custom types.
19
+ */
20
+ import { TableColumn } from '../TableTypes';
21
+ import {StyledTableBodyRow, StyledTableFooterCollapseButton} from '../TableStyles';
22
+ import { act } from "react";
23
+
24
+
25
+
26
+ describe('<Table />', () => {
27
+ it('Renders the Table', () => {
28
+ const columns: TableColumn[] = [
29
+ {
30
+ key: 'column1',
31
+ name: 'Column 1',
32
+ },
33
+ {
34
+ key: 'column2',
35
+ name: 'Column 2',
36
+ },
37
+ ];
38
+ const rows: any[] = [
39
+ {
40
+ column1: 'Test content',
41
+ column2: 'Test content 2',
42
+ },
43
+ ];
44
+ const { getByTestId } = render(<Table rows={rows} columns={columns} title="Test title" />);
45
+ expect(getByTestId('TestTable')).toBeDefined();
46
+ });
47
+
48
+ describe('Table Header Row Tests', () => {
49
+ it('Should render table header row in case title is passed', () => {
50
+ const columns: TableColumn[] = [
51
+ {
52
+ key: 'column1',
53
+ name: 'Column 1',
54
+ },
55
+ {
56
+ key: 'column2',
57
+ name: 'Column 2',
58
+ },
59
+ ];
60
+ const rows: any[] = [
61
+ {
62
+ column1: 'Test content',
63
+ column2: 'Test content 2',
64
+ },
65
+ ];
66
+ const { queryByTestId } = render(<Table rows={rows} columns={columns} title="Test title" />);
67
+ expect(queryByTestId('TestTableHeaderRow')).not.toBeNull();
68
+ });
69
+
70
+ it('Should not render table header row in case title is passed', () => {
71
+ const columns: TableColumn[] = [
72
+ {
73
+ key: 'column1',
74
+ name: 'Column 1',
75
+ },
76
+ {
77
+ key: 'column2',
78
+ name: 'Column 2',
79
+ },
80
+ ];
81
+ const rows: any[] = [
82
+ {
83
+ column1: 'Test content',
84
+ column2: 'Test content 2',
85
+ },
86
+ ];
87
+ const { queryByTestId } = render(<Table rows={rows} columns={columns} />);
88
+ expect(queryByTestId('TestTableHeaderRow')).toBeNull();
89
+ });
90
+
91
+ describe('Table Header Row functional tests', () => {
92
+ it('Should have title', () => {
93
+ const columns: TableColumn[] = [
94
+ {
95
+ key: 'column1',
96
+ name: 'Column 1',
97
+ },
98
+ {
99
+ key: 'column2',
100
+ name: 'Column 2',
101
+ },
102
+ ];
103
+ const rows: any[] = [
104
+ {
105
+ column1: 'Test content',
106
+ column2: 'Test content 2',
107
+ },
108
+ ];
109
+ const { queryByTestId } = render(<Table rows={rows} columns={columns} title="Test Title" />);
110
+ const tableHeaderRow = queryByTestId('TestTableHeaderRow');
111
+ expect(tableHeaderRow?.children[0].children[0].textContent).toContain('Test Title');
112
+ });
113
+
114
+ it('Should have options menu', () => {
115
+ const columns: TableColumn[] = [
116
+ {
117
+ key: 'column1',
118
+ name: 'Column 1',
119
+ },
120
+ {
121
+ key: 'column2',
122
+ name: 'Column 2',
123
+ },
124
+ ];
125
+ const rows: any[] = [
126
+ {
127
+ column1: 'Test content',
128
+ column2: 'Test content 2',
129
+ },
130
+ ];
131
+ const { queryByTestId } = render(<Table rows={rows} columns={columns} title="Test Title" />);
132
+ expect(queryByTestId('TestTableHeaderRow')?.getElementsByTagName('svg')).not.toBeNull();
133
+ });
134
+ });
135
+ });
136
+
137
+ describe('Table Column Header Row Tests', () => {
138
+ it('Should render column header row', () => {
139
+ const columns: TableColumn[] = [
140
+ {
141
+ key: 'column1',
142
+ name: 'Column 1',
143
+ },
144
+ {
145
+ key: 'column2',
146
+ name: 'Column 2',
147
+ },
148
+ ];
149
+ const rows: any[] = [
150
+ {
151
+ column1: 'Test content',
152
+ column2: 'Test content 2',
153
+ },
154
+ ];
155
+ const { getByTestId } = render(<Table rows={rows} columns={columns} />);
156
+ expect(getByTestId('TestTableColumnHeaderRow')).not.toBeNull();
157
+ });
158
+
159
+ it('Should render two columns in the column header row', () => {
160
+ const columns: TableColumn[] = [
161
+ {
162
+ key: 'column1',
163
+ name: 'Column 1',
164
+ },
165
+ {
166
+ key: 'column2',
167
+ name: 'Column 2',
168
+ },
169
+ ];
170
+ const rows: any[] = [
171
+ {
172
+ column1: 'Test content',
173
+ column2: 'Test content 2',
174
+ },
175
+ ];
176
+ const { getByTestId } = render(<Table rows={rows} columns={columns} />);
177
+ expect(getByTestId('TestTableColumnHeaderRow').children.length).toEqual(2);
178
+ });
179
+
180
+ it('Should render correct column names in the column header row', () => {
181
+ const columns: TableColumn[] = [
182
+ {
183
+ key: 'column1',
184
+ name: 'Column 1',
185
+ },
186
+ {
187
+ key: 'column2',
188
+ name: 'Column 2',
189
+ },
190
+ ];
191
+ const rows: any[] = [
192
+ {
193
+ column1: 'Test content',
194
+ column2: 'Test content 2',
195
+ },
196
+ ];
197
+ const { getByTestId } = render(<Table rows={rows} columns={columns} />);
198
+ expect(getByTestId('TestTableColumnHeaderRow').children[0].textContent).toEqual('Column 1');
199
+ expect(getByTestId('TestTableColumnHeaderRow').children[1].textContent).toEqual('Column 2');
200
+ });
201
+
202
+ it('Should render columns without no-border class in the column header row, in case title is passed', () => {
203
+ const columns: TableColumn[] = [
204
+ {
205
+ key: 'column1',
206
+ name: 'Column 1',
207
+ },
208
+ {
209
+ key: 'column2',
210
+ name: 'Column 2',
211
+ },
212
+ ];
213
+ const rows: any[] = [
214
+ {
215
+ column1: 'Test content',
216
+ column2: 'Test content 2',
217
+ },
218
+ ];
219
+ const { getByTestId } = render(<Table rows={rows} columns={columns} title="test title" />);
220
+ expect(getByTestId('TestTableColumnHeaderRow').children[0].classList.contains('no-border')).toBe(false);
221
+ expect(getByTestId('TestTableColumnHeaderRow').children[1].classList.contains('no-border')).toBe(false);
222
+ });
223
+
224
+ });
225
+
226
+ describe('Table Body Row tests', () => {
227
+ it('Should not render "No Data" row in case there are rows', () => {
228
+ const columns: TableColumn[] = [
229
+ {
230
+ key: 'column1',
231
+ name: 'Column 1',
232
+ },
233
+ {
234
+ key: 'column2',
235
+ name: 'Column 2',
236
+ },
237
+ ];
238
+ const rows: any[] = [
239
+ {
240
+ column1: 'Test content',
241
+ column2: 'Test content 2',
242
+ },
243
+ ];
244
+ const { queryByTestId } = render(<Table rows={rows} columns={columns} />);
245
+ expect(queryByTestId('TestTableNoDataRow')).toBeNull();
246
+ });
247
+
248
+ it('Should render "No Data" row in case there are no rows', () => {
249
+ const columns: TableColumn[] = [
250
+ {
251
+ key: 'column1',
252
+ name: 'Column 1',
253
+ },
254
+ {
255
+ key: 'column2',
256
+ name: 'Column 2',
257
+ },
258
+ ];
259
+ const rows: any[] = [];
260
+ const { queryByTestId } = render(<Table rows={rows} columns={columns} />);
261
+ expect(queryByTestId('TestTableNoDataRow')).not.toBeNull();
262
+ expect(queryByTestId('TestTableNoDataRow')?.textContent).toEqual('There are no rows to display');
263
+ });
264
+
265
+ it('Should render a data row with correct content for each row that is passed', () => {
266
+ const columns: TableColumn[] = [
267
+ {
268
+ key: 'column1',
269
+ name: 'Column 1',
270
+ },
271
+ {
272
+ key: 'column2',
273
+ name: 'Column 2',
274
+ },
275
+ ];
276
+ const rows: any[] = [
277
+ {
278
+ column1: 'Test content',
279
+ column2: 'Test content 2',
280
+ },
281
+ ];
282
+ const { getByTestId } = render(<Table rows={rows} columns={columns} />);
283
+ expect(getByTestId('TestTableDataRow')).toBeDefined();
284
+ expect(getByTestId('TestTableDataRow').children.length).toEqual(2);
285
+ expect(getByTestId('TestTableDataRow').children[0].textContent).toEqual('Test content');
286
+ expect(getByTestId('TestTableDataRow').children[1].textContent).toEqual('Test content 2');
287
+ });
288
+ });
289
+
290
+ it('Should render footer row', () => {
291
+ const columns: TableColumn[] = [
292
+ {
293
+ key: 'column1',
294
+ name: 'Column 1',
295
+ },
296
+ {
297
+ key: 'column2',
298
+ name: 'Column 2',
299
+ },
300
+ ];
301
+ const rows: any[] = [
302
+ {
303
+ column1: 'Test content',
304
+ column2: 'Test content 2',
305
+ },
306
+ ];
307
+ const { getByTestId } = render(<Table rows={rows} columns={columns} />);
308
+ expect(getByTestId('TestTableFooterRow')).toBeDefined();
309
+ });
310
+
311
+ describe('Table Accordion tests', () => {
312
+ it('Should render collapse button when configured as accordion', () => {
313
+ const columns: TableColumn[] = [
314
+ {
315
+ key: 'column1',
316
+ name: 'Column 1',
317
+ },
318
+ {
319
+ key: 'column2',
320
+ name: 'Column 2',
321
+ },
322
+ ];
323
+ const rows: any[] = [
324
+ {
325
+ column1: 'Test content',
326
+ column2: 'Test content 2',
327
+ },
328
+ {
329
+ column1: 'Test content',
330
+ column2: 'Test content 2',
331
+ },
332
+ {
333
+ column1: 'Test content',
334
+ column2: 'Test content 2',
335
+ },
336
+ {
337
+ column1: 'Test content',
338
+ column2: 'Test content 2',
339
+ },
340
+ ];
341
+ const wrapper = render(<Table rows={rows} columns={columns} accordion={true} collapsedRows={3}/>);
342
+
343
+ expect(wrapper.container.querySelectorAll(`${StyledTableFooterCollapseButton}`)).toHaveLength(1);
344
+ });
345
+
346
+ it('Should not render all items when collapsed', () => {
347
+ const columns: TableColumn[] = [
348
+ {
349
+ key: 'column1',
350
+ name: 'Column 1',
351
+ },
352
+ {
353
+ key: 'column2',
354
+ name: 'Column 2',
355
+ },
356
+ ];
357
+ const rows: any[] = [
358
+ {
359
+ column1: 'Test content',
360
+ column2: 'Test content 2',
361
+ },
362
+ {
363
+ column1: 'Test content',
364
+ column2: 'Test content 2',
365
+ },
366
+ {
367
+ column1: 'Test content',
368
+ column2: 'Test content 2',
369
+ },
370
+ {
371
+ column1: 'Test content',
372
+ column2: 'Test content 2',
373
+ },
374
+ ];
375
+ const wrapper = render(<Table rows={rows} columns={columns} accordion={true} collapsedRows={3}/>);
376
+
377
+ expect(wrapper.container.querySelectorAll(`${StyledTableBodyRow}`)).toHaveLength(3);
378
+ });
379
+
380
+ it('Should render all items when not collapsed', () => {
381
+ const columns: TableColumn[] = [
382
+ {
383
+ key: 'column1',
384
+ name: 'Column 1',
385
+ },
386
+ {
387
+ key: 'column2',
388
+ name: 'Column 2',
389
+ },
390
+ ];
391
+ const rows: any[] = [
392
+ {
393
+ column1: 'Test content',
394
+ column2: 'Test content 2',
395
+ },
396
+ {
397
+ column1: 'Test content',
398
+ column2: 'Test content 2',
399
+ },
400
+ {
401
+ column1: 'Test content',
402
+ column2: 'Test content 2',
403
+ },
404
+ {
405
+ column1: 'Test content',
406
+ column2: 'Test content 2',
407
+ },
408
+ ];
409
+ const wrapper = render(<Table rows={rows} columns={columns} accordion={true} collapsedRows={3}
410
+ collapsed={false}/>);
411
+
412
+ expect(wrapper.container.querySelectorAll(`${StyledTableBodyRow}`)).toHaveLength(4);
413
+ });
414
+
415
+ it('Should expand when show more button is clicked', () => {
416
+ const columns: TableColumn[] = [
417
+ {
418
+ key: 'column1',
419
+ name: 'Column 1',
420
+ },
421
+ {
422
+ key: 'column2',
423
+ name: 'Column 2',
424
+ },
425
+ ];
426
+ const rows: any[] = [
427
+ {
428
+ column1: 'Test content',
429
+ column2: 'Test content 2',
430
+ },
431
+ {
432
+ column1: 'Test content',
433
+ column2: 'Test content 2',
434
+ },
435
+ {
436
+ column1: 'Test content',
437
+ column2: 'Test content 2',
438
+ },
439
+ {
440
+ column1: 'Test content',
441
+ column2: 'Test content 2',
442
+ },
443
+ ];
444
+ const wrapper = render(<Table rows={rows} columns={columns} accordion={true} collapsedRows={3}
445
+ collapsed={true}/>);
446
+
447
+ expect(wrapper.container.querySelectorAll(`${StyledTableBodyRow}`)).toHaveLength(3);
448
+
449
+ act(() => {
450
+ let button = wrapper.container.querySelectorAll(`${StyledTableFooterCollapseButton}`)[0] as HTMLButtonElement;
451
+ button.click();
452
+ })
453
+
454
+ expect(wrapper.container.querySelectorAll(`${StyledTableBodyRow}`)).toHaveLength(4);
455
+ });
456
+
457
+ it('Should collapse when show less button is clicked', () => {
458
+ const columns: TableColumn[] = [
459
+ {
460
+ key: 'column1',
461
+ name: 'Column 1',
462
+ },
463
+ {
464
+ key: 'column2',
465
+ name: 'Column 2',
466
+ },
467
+ ];
468
+ const rows: any[] = [
469
+ {
470
+ column1: 'Test content',
471
+ column2: 'Test content 2',
472
+ },
473
+ {
474
+ column1: 'Test content',
475
+ column2: 'Test content 2',
476
+ },
477
+ {
478
+ column1: 'Test content',
479
+ column2: 'Test content 2',
480
+ },
481
+ {
482
+ column1: 'Test content',
483
+ column2: 'Test content 2',
484
+ },
485
+ ];
486
+ const wrapper = render(<Table rows={rows} columns={columns} accordion={true} collapsedRows={3}
487
+ collapsed={false}/>);
488
+
489
+ expect(wrapper.container.querySelectorAll(`${StyledTableBodyRow}`)).toHaveLength(4);
490
+
491
+ act(() => {
492
+ let button = wrapper.container.querySelectorAll(`${StyledTableFooterCollapseButton}`)[0] as HTMLButtonElement;
493
+ button.click();
494
+ })
495
+
496
+ expect(wrapper.container.querySelectorAll(`${StyledTableBodyRow}`)).toHaveLength(3);
497
+ });
498
+ });
499
+ });
@@ -33,6 +33,7 @@ const VerticalTabs = _ref => {
33
33
  onLinkClick: e => {
34
34
  if (entry.onClick) {
35
35
  entry.onClick(e);
36
+ e.preventDefault && e.preventDefault();
36
37
  }
37
38
  }
38
39
  }, entry.to))
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalTabs.cjs","names":["React","_interopRequireWildcard","require","_Tabs","_interopRequireDefault","_TabLink","_types","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","VerticalTabs","_ref","size","entries","jsx","Size","Large","children","map","entry","href","to","requiredLine","optionalLine","endLineIcon","OptionalLineIcon","optionalLineIcon","disabled","showNotificationDot","variant","onLinkClick","onClick","propTypes","_propTypes","arrayOf","shape","string","isRequired","node","bool","func","oneOf","_default","exports"],"sources":["../../src/Tabs/VerticalTabs.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport Tabs from './Tabs';\r\nimport TabLink from './TabLink';\r\nimport { BaseProps } from '../icons';\r\nimport { Size } from '../types';\r\n\r\nexport interface VerticalTabEntry {\r\n /**\r\n * Required. The main text to be displayed on the tab.\r\n */\r\n requiredLine: string;\r\n\r\n /**\r\n * Optional. The secondary text to be displayed on the tab link under the required line.\r\n */\r\n optionalLine?: string;\r\n\r\n /**\r\n * Optional. The icon to be displayed next to the secondary text on the tab link under the required line.\r\n */\r\n optionalLineIcon?: React.ReactNode;\r\n\r\n /**\r\n * Optional. The icon to be displayed at the end of the tab.\r\n */\r\n endLineIcon?: React.ReactNode;\r\n\r\n /**\r\n * Required. The URL to which the tab links.\r\n */\r\n to: string;\r\n\r\n /**\r\n * Optional. A boolean indicating whether the tab is disabled.\r\n * If true, the tab will be unclickable and will have a disabled appearance.\r\n */\r\n disabled?: boolean;\r\n\r\n /**\r\n * Optional. The handler function to be called when the tab is clicked.\r\n */\r\n onClick?: (e: React.MouseEvent) => void;\r\n\r\n /**\r\n * Optional. A boolean indicating whether a notification dot should be shown on the tab.\r\n */\r\n showNotificationDot?: boolean;\r\n\r\n /**\r\n * Optional. The variant of the notification dot. It can be 'critical' or 'positive'. Defaults to 'Critical'\r\n */\r\n variant?: 'critical' | 'positive';\r\n}\r\n\r\nexport interface VerticalTabsProps {\r\n size?: Size.Small | Size.Medium | Size.Large;\r\n entries: VerticalTabEntry[];\r\n}\r\n\r\nconst VerticalTabs = ({ size, entries }: VerticalTabsProps) => {\r\n return (\r\n <Tabs size={size ?? Size.Large}>\r\n {entries?.map((entry: VerticalTabEntry) => (\r\n <TabLink\r\n key={entry.to}\r\n href={entry.to}\r\n requiredLine={entry.requiredLine}\r\n optionalLine={entry.optionalLine}\r\n endLineIcon={entry.endLineIcon}\r\n OptionalLineIcon={entry.optionalLineIcon}\r\n disabled={entry.disabled}\r\n showNotificationDot={entry.showNotificationDot}\r\n size={size}\r\n variant={entry.variant}\r\n onLinkClick={(e) => {\r\n if (entry.onClick) {\r\n entry.onClick(e);\r\n }\r\n }}/>\r\n ))}\r\n </Tabs>\r\n );\r\n};\r\n\r\nexport default VerticalTabs;\r\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VerticalTabs.cjs","names":["React","_interopRequireWildcard","require","_Tabs","_interopRequireDefault","_TabLink","_types","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","VerticalTabs","_ref","size","entries","jsx","Size","Large","children","map","entry","href","to","requiredLine","optionalLine","endLineIcon","OptionalLineIcon","optionalLineIcon","disabled","showNotificationDot","variant","onLinkClick","onClick","preventDefault","propTypes","_propTypes","arrayOf","shape","string","isRequired","node","bool","func","oneOf","_default","exports"],"sources":["../../src/Tabs/VerticalTabs.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport Tabs from './Tabs';\r\nimport TabLink from './TabLink';\r\nimport { BaseProps } from '../icons';\r\nimport { Size } from '../types';\r\n\r\nexport interface VerticalTabEntry {\r\n /**\r\n * Required. The main text to be displayed on the tab.\r\n */\r\n requiredLine: string;\r\n\r\n /**\r\n * Optional. The secondary text to be displayed on the tab link under the required line.\r\n */\r\n optionalLine?: string;\r\n\r\n /**\r\n * Optional. The icon to be displayed next to the secondary text on the tab link under the required line.\r\n */\r\n optionalLineIcon?: React.ReactNode;\r\n\r\n /**\r\n * Optional. The icon to be displayed at the end of the tab.\r\n */\r\n endLineIcon?: React.ReactNode;\r\n\r\n /**\r\n * Required. The URL to which the tab links.\r\n */\r\n to: string;\r\n\r\n /**\r\n * Optional. A boolean indicating whether the tab is disabled.\r\n * If true, the tab will be unclickable and will have a disabled appearance.\r\n */\r\n disabled?: boolean;\r\n\r\n /**\r\n * Optional. The handler function to be called when the tab is clicked.\r\n */\r\n onClick?: (e: React.MouseEvent) => void;\r\n\r\n /**\r\n * Optional. A boolean indicating whether a notification dot should be shown on the tab.\r\n */\r\n showNotificationDot?: boolean;\r\n\r\n /**\r\n * Optional. The variant of the notification dot. It can be 'critical' or 'positive'. Defaults to 'Critical'\r\n */\r\n variant?: 'critical' | 'positive';\r\n}\r\n\r\nexport interface VerticalTabsProps {\r\n size?: Size.Small | Size.Medium | Size.Large;\r\n entries: VerticalTabEntry[];\r\n}\r\n\r\nconst VerticalTabs = ({ size, entries }: VerticalTabsProps) => {\r\n return (\r\n <Tabs size={size ?? Size.Large}>\r\n {entries?.map((entry: VerticalTabEntry) => (\r\n <TabLink\r\n key={entry.to}\r\n href={entry.to}\r\n requiredLine={entry.requiredLine}\r\n optionalLine={entry.optionalLine}\r\n endLineIcon={entry.endLineIcon}\r\n OptionalLineIcon={entry.optionalLineIcon}\r\n disabled={entry.disabled}\r\n showNotificationDot={entry.showNotificationDot}\r\n size={size}\r\n variant={entry.variant}\r\n onLinkClick={(e) => {\r\n if (entry.onClick) {\r\n entry.onClick(e);\r\n e.preventDefault && e.preventDefault();\r\n }\r\n }}/>\r\n ))}\r\n </Tabs>\r\n );\r\n};\r\n\r\nexport default VerticalTabs;\r\n"],"mappings":"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","ignoreList":[]}
@@ -24,6 +24,7 @@ const VerticalTabs = _ref => {
24
24
  onLinkClick: e => {
25
25
  if (entry.onClick) {
26
26
  entry.onClick(e);
27
+ e.preventDefault && e.preventDefault();
27
28
  }
28
29
  }
29
30
  }, entry.to))
@@ -1 +1 @@
1
- {"version":3,"file":"VerticalTabs.js","names":["React","Tabs","TabLink","Size","jsx","_jsx","VerticalTabs","_ref","size","entries","Large","children","map","entry","href","to","requiredLine","optionalLine","endLineIcon","OptionalLineIcon","optionalLineIcon","disabled","showNotificationDot","variant","onLinkClick","e","onClick","propTypes","_pt","arrayOf","shape","string","isRequired","node","bool","func","oneOf"],"sources":["../../src/Tabs/VerticalTabs.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport Tabs from './Tabs';\r\nimport TabLink from './TabLink';\r\nimport { BaseProps } from '../icons';\r\nimport { Size } from '../types';\r\n\r\nexport interface VerticalTabEntry {\r\n /**\r\n * Required. The main text to be displayed on the tab.\r\n */\r\n requiredLine: string;\r\n\r\n /**\r\n * Optional. The secondary text to be displayed on the tab link under the required line.\r\n */\r\n optionalLine?: string;\r\n\r\n /**\r\n * Optional. The icon to be displayed next to the secondary text on the tab link under the required line.\r\n */\r\n optionalLineIcon?: React.ReactNode;\r\n\r\n /**\r\n * Optional. The icon to be displayed at the end of the tab.\r\n */\r\n endLineIcon?: React.ReactNode;\r\n\r\n /**\r\n * Required. The URL to which the tab links.\r\n */\r\n to: string;\r\n\r\n /**\r\n * Optional. A boolean indicating whether the tab is disabled.\r\n * If true, the tab will be unclickable and will have a disabled appearance.\r\n */\r\n disabled?: boolean;\r\n\r\n /**\r\n * Optional. The handler function to be called when the tab is clicked.\r\n */\r\n onClick?: (e: React.MouseEvent) => void;\r\n\r\n /**\r\n * Optional. A boolean indicating whether a notification dot should be shown on the tab.\r\n */\r\n showNotificationDot?: boolean;\r\n\r\n /**\r\n * Optional. The variant of the notification dot. It can be 'critical' or 'positive'. Defaults to 'Critical'\r\n */\r\n variant?: 'critical' | 'positive';\r\n}\r\n\r\nexport interface VerticalTabsProps {\r\n size?: Size.Small | Size.Medium | Size.Large;\r\n entries: VerticalTabEntry[];\r\n}\r\n\r\nconst VerticalTabs = ({ size, entries }: VerticalTabsProps) => {\r\n return (\r\n <Tabs size={size ?? Size.Large}>\r\n {entries?.map((entry: VerticalTabEntry) => (\r\n <TabLink\r\n key={entry.to}\r\n href={entry.to}\r\n requiredLine={entry.requiredLine}\r\n optionalLine={entry.optionalLine}\r\n endLineIcon={entry.endLineIcon}\r\n OptionalLineIcon={entry.optionalLineIcon}\r\n disabled={entry.disabled}\r\n showNotificationDot={entry.showNotificationDot}\r\n size={size}\r\n variant={entry.variant}\r\n onLinkClick={(e) => {\r\n if (entry.onClick) {\r\n entry.onClick(e);\r\n }\r\n }}/>\r\n ))}\r\n </Tabs>\r\n );\r\n};\r\n\r\nexport default VerticalTabs;\r\n"],"mappings":";AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,IAAI,MAAM,QAAQ;AACzB,OAAOC,OAAO,MAAM,WAAW;AAE/B,SAASC,IAAI,QAAQ,UAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAuDhC,MAAMC,YAAY,GAAGC,IAAA,IAA0C;EAAA,IAAzC;IAAEC,IAAI;IAAEC;EAA2B,CAAC,GAAAF,IAAA;EACxD,oBACEF,IAAA,CAACJ,IAAI;IAACO,IAAI,EAAEA,IAAI,IAAIL,IAAI,CAACO,KAAM;IAAAC,QAAA,EAC5BF,OAAO,EAAEG,GAAG,CAAEC,KAAuB,iBACpCR,IAAA,CAACH,OAAO;MAENY,IAAI,EAAED,KAAK,CAACE,EAAG;MACfC,YAAY,EAAEH,KAAK,CAACG,YAAa;MACjCC,YAAY,EAAEJ,KAAK,CAACI,YAAa;MACjCC,WAAW,EAAEL,KAAK,CAACK,WAAY;MAC/BC,gBAAgB,EAAEN,KAAK,CAACO,gBAAiB;MACzCC,QAAQ,EAAER,KAAK,CAACQ,QAAS;MACzBC,mBAAmB,EAAET,KAAK,CAACS,mBAAoB;MAC/Cd,IAAI,EAAEA,IAAK;MACXe,OAAO,EAAEV,KAAK,CAACU,OAAQ;MACvBC,WAAW,EAAGC,CAAC,IAAK;QAClB,IAAIZ,KAAK,CAACa,OAAO,EAAE;UACjBb,KAAK,CAACa,OAAO,CAACD,CAAC,CAAC;QAClB;MACF;IAAE,GAdGZ,KAAK,CAACE,EAcR,CACN;EAAC,CACE,CAAC;AAEX,CAAC;AAACT,YAAA,CAAAqB,SAAA;EA1BAlB,OAAO,EAAAmB,GAAA,CAAAC,OAAA,CAAAD,GAAA,CAAAE,KAAA;IA9CPd,YAAY,EAAAY,GAAA,CAAAG,MAAA,CAAAC,UAAA;IAKZf,YAAY,EAAAW,GAAA,CAAAG,MAAA;IAKZX,gBAAgB,EAAAQ,GAAA,CAAAK,IAAA;IAKhBf,WAAW,EAAAU,GAAA,CAAAK,IAAA;IAKXlB,EAAE,EAAAa,GAAA,CAAAG,MAAA,CAAAC,UAAA;IAMFX,QAAQ,EAAAO,GAAA,CAAAM,IAAA;IAKRR,OAAO,EAAAE,GAAA,CAAAO,IAAA;IAKPb,mBAAmB,EAAAM,GAAA,CAAAM,IAAA;IAKnBX,OAAO,EAAAK,GAAA,CAAAQ,KAAA,EAAG,UAAU,EAAG,UAAU;EAAA,IAAAJ;AAAA;AAiCnC,eAAe1B,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"VerticalTabs.js","names":["React","Tabs","TabLink","Size","jsx","_jsx","VerticalTabs","_ref","size","entries","Large","children","map","entry","href","to","requiredLine","optionalLine","endLineIcon","OptionalLineIcon","optionalLineIcon","disabled","showNotificationDot","variant","onLinkClick","e","onClick","preventDefault","propTypes","_pt","arrayOf","shape","string","isRequired","node","bool","func","oneOf"],"sources":["../../src/Tabs/VerticalTabs.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport Tabs from './Tabs';\r\nimport TabLink from './TabLink';\r\nimport { BaseProps } from '../icons';\r\nimport { Size } from '../types';\r\n\r\nexport interface VerticalTabEntry {\r\n /**\r\n * Required. The main text to be displayed on the tab.\r\n */\r\n requiredLine: string;\r\n\r\n /**\r\n * Optional. The secondary text to be displayed on the tab link under the required line.\r\n */\r\n optionalLine?: string;\r\n\r\n /**\r\n * Optional. The icon to be displayed next to the secondary text on the tab link under the required line.\r\n */\r\n optionalLineIcon?: React.ReactNode;\r\n\r\n /**\r\n * Optional. The icon to be displayed at the end of the tab.\r\n */\r\n endLineIcon?: React.ReactNode;\r\n\r\n /**\r\n * Required. The URL to which the tab links.\r\n */\r\n to: string;\r\n\r\n /**\r\n * Optional. A boolean indicating whether the tab is disabled.\r\n * If true, the tab will be unclickable and will have a disabled appearance.\r\n */\r\n disabled?: boolean;\r\n\r\n /**\r\n * Optional. The handler function to be called when the tab is clicked.\r\n */\r\n onClick?: (e: React.MouseEvent) => void;\r\n\r\n /**\r\n * Optional. A boolean indicating whether a notification dot should be shown on the tab.\r\n */\r\n showNotificationDot?: boolean;\r\n\r\n /**\r\n * Optional. The variant of the notification dot. It can be 'critical' or 'positive'. Defaults to 'Critical'\r\n */\r\n variant?: 'critical' | 'positive';\r\n}\r\n\r\nexport interface VerticalTabsProps {\r\n size?: Size.Small | Size.Medium | Size.Large;\r\n entries: VerticalTabEntry[];\r\n}\r\n\r\nconst VerticalTabs = ({ size, entries }: VerticalTabsProps) => {\r\n return (\r\n <Tabs size={size ?? Size.Large}>\r\n {entries?.map((entry: VerticalTabEntry) => (\r\n <TabLink\r\n key={entry.to}\r\n href={entry.to}\r\n requiredLine={entry.requiredLine}\r\n optionalLine={entry.optionalLine}\r\n endLineIcon={entry.endLineIcon}\r\n OptionalLineIcon={entry.optionalLineIcon}\r\n disabled={entry.disabled}\r\n showNotificationDot={entry.showNotificationDot}\r\n size={size}\r\n variant={entry.variant}\r\n onLinkClick={(e) => {\r\n if (entry.onClick) {\r\n entry.onClick(e);\r\n e.preventDefault && e.preventDefault();\r\n }\r\n }}/>\r\n ))}\r\n </Tabs>\r\n );\r\n};\r\n\r\nexport default VerticalTabs;\r\n"],"mappings":";AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,IAAI,MAAM,QAAQ;AACzB,OAAOC,OAAO,MAAM,WAAW;AAE/B,SAASC,IAAI,QAAQ,UAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAuDhC,MAAMC,YAAY,GAAGC,IAAA,IAA0C;EAAA,IAAzC;IAAEC,IAAI;IAAEC;EAA2B,CAAC,GAAAF,IAAA;EACxD,oBACEF,IAAA,CAACJ,IAAI;IAACO,IAAI,EAAEA,IAAI,IAAIL,IAAI,CAACO,KAAM;IAAAC,QAAA,EAC5BF,OAAO,EAAEG,GAAG,CAAEC,KAAuB,iBACpCR,IAAA,CAACH,OAAO;MAENY,IAAI,EAAED,KAAK,CAACE,EAAG;MACfC,YAAY,EAAEH,KAAK,CAACG,YAAa;MACjCC,YAAY,EAAEJ,KAAK,CAACI,YAAa;MACjCC,WAAW,EAAEL,KAAK,CAACK,WAAY;MAC/BC,gBAAgB,EAAEN,KAAK,CAACO,gBAAiB;MACzCC,QAAQ,EAAER,KAAK,CAACQ,QAAS;MACzBC,mBAAmB,EAAET,KAAK,CAACS,mBAAoB;MAC/Cd,IAAI,EAAEA,IAAK;MACXe,OAAO,EAAEV,KAAK,CAACU,OAAQ;MACvBC,WAAW,EAAGC,CAAC,IAAK;QAClB,IAAIZ,KAAK,CAACa,OAAO,EAAE;UACjBb,KAAK,CAACa,OAAO,CAACD,CAAC,CAAC;UAChBA,CAAC,CAACE,cAAc,IAAIF,CAAC,CAACE,cAAc,CAAC,CAAC;QACxC;MACF;IAAE,GAfGd,KAAK,CAACE,EAeR,CACN;EAAC,CACE,CAAC;AAEX,CAAC;AAACT,YAAA,CAAAsB,SAAA;EA3BAnB,OAAO,EAAAoB,GAAA,CAAAC,OAAA,CAAAD,GAAA,CAAAE,KAAA;IA9CPf,YAAY,EAAAa,GAAA,CAAAG,MAAA,CAAAC,UAAA;IAKZhB,YAAY,EAAAY,GAAA,CAAAG,MAAA;IAKZZ,gBAAgB,EAAAS,GAAA,CAAAK,IAAA;IAKhBhB,WAAW,EAAAW,GAAA,CAAAK,IAAA;IAKXnB,EAAE,EAAAc,GAAA,CAAAG,MAAA,CAAAC,UAAA;IAMFZ,QAAQ,EAAAQ,GAAA,CAAAM,IAAA;IAKRT,OAAO,EAAAG,GAAA,CAAAO,IAAA;IAKPd,mBAAmB,EAAAO,GAAA,CAAAM,IAAA;IAKnBZ,OAAO,EAAAM,GAAA,CAAAQ,KAAA,EAAG,UAAU,EAAG,UAAU;EAAA,IAAAJ;AAAA;AAkCnC,eAAe3B,YAAY","ignoreList":[]}
@@ -0,0 +1,95 @@
1
+ import React from 'react';
2
+ import { fireEvent, render } from '../../test-utils';
3
+ import HorizontalTabs from '../HorizontalTabs';
4
+ import { Size } from '../../types';
5
+ import 'jest-styled-components';
6
+ import '@testing-library/jest-dom';
7
+
8
+ const tabs = [
9
+ {
10
+ value: 'Tab1',
11
+ selected: false,
12
+ to: 'tab1',
13
+ },
14
+ {
15
+ value: 'Tab2',
16
+ selected: true,
17
+ to: 'tab2',
18
+ },
19
+ {
20
+ value: 'Tab3',
21
+ selected: false,
22
+ to: 'tab3',
23
+ disabled: true,
24
+ },
25
+ ];
26
+
27
+
28
+
29
+
30
+ describe('<HorizontalTabs />', () => {
31
+ it('Renders tabs component', async () => {
32
+ const { queryByTestId } = render(<HorizontalTabs size={Size.Small} tabs={tabs} onTabChange={(to) => {}}></HorizontalTabs>);
33
+ expect(queryByTestId('horizontal-tabs-container')).toBeTruthy();
34
+ expect(queryByTestId('horizontal-tabs-container')?.querySelectorAll('[data-testid*="tab_"]')).toHaveLength(3);
35
+ });
36
+
37
+ it('Renders tabs component with side fill', async () => {
38
+ const { queryByTestId } = render(<HorizontalTabs size={Size.Small} sideFill={true} tabs={tabs} onTabChange={(to) => {}}></HorizontalTabs>);
39
+ expect(queryByTestId('horizontal-tabs-container')).toBeTruthy();
40
+ expect(queryByTestId('horizontal-tabs-container')?.querySelector('.fill')).toBeTruthy();
41
+ });
42
+
43
+ it('Renders tabs component with no tabs provided', async () => {
44
+ const { queryByTestId } = render(<HorizontalTabs size={Size.Small} tabs={[]} onTabChange={(to) => {}}></HorizontalTabs>);
45
+ expect(queryByTestId('horizontal-tabs-container')).toBeTruthy();
46
+ expect(queryByTestId('horizontal-tabs-container')?.querySelectorAll('[data-testid*="tab_"]')).toHaveLength(0);
47
+ });
48
+
49
+ it('Check disabled tabs rendered correctly', async () => {
50
+ const { queryByTestId } = render(<HorizontalTabs size={Size.Small} tabs={tabs} onTabChange={(to) => {}}></HorizontalTabs>);
51
+ const disabledTab = tabs.find((t) => t.disabled);
52
+ const notDisabledTab = tabs.find((t) => !t.disabled);
53
+ expect(queryByTestId('horizontal-tabs-container')).toBeTruthy();
54
+
55
+ const disabledTabElem = queryByTestId('horizontal-tabs-container')?.querySelector(`[data-testid="tab_${disabledTab?.value}"]`);
56
+ const notDisabledTabElem = queryByTestId('horizontal-tabs-container')?.querySelector(`[data-testid="tab_${notDisabledTab?.value}"]`);
57
+
58
+ //check disabled/non-disabled rendered
59
+ expect(disabledTabElem).toBeTruthy();
60
+ expect(notDisabledTabElem).toBeTruthy();
61
+
62
+ //check tab index prop set correct
63
+ expect(disabledTabElem).toHaveAttribute('tabindex', '-1');
64
+ expect(notDisabledTabElem).not.toHaveClass('disabled');
65
+ });
66
+
67
+ it('Check tab change callback called on tab click', async () => {
68
+ const tabChangeFn = jest.fn();
69
+ const { queryByTestId } = render(<HorizontalTabs size={Size.Small} tabs={tabs} onTabChange={tabChangeFn}></HorizontalTabs>);
70
+
71
+ const notDisabledTab = tabs.find((t) => !t.disabled);
72
+ const notDisabledTabElem = queryByTestId('horizontal-tabs-container')?.querySelector(`[data-testid="tab_${notDisabledTab?.value}"]`);
73
+
74
+ //fire click tab click event
75
+ fireEvent(
76
+ notDisabledTabElem as HTMLButtonElement,
77
+ new MouseEvent('click', {
78
+ bubbles: true,
79
+ cancelable: true,
80
+ }),
81
+ );
82
+
83
+ //check has been called
84
+ expect(tabChangeFn).toHaveBeenCalledTimes(1);
85
+ });
86
+
87
+ it('Check tab width calculed correctly when fullWidth prop set', async () => {
88
+ const { queryByTestId, queryByText } = render(<HorizontalTabs fullWidth={true} size={Size.Small} tabs={tabs} onTabChange={() => {}}></HorizontalTabs>);
89
+
90
+ const tabElement = queryByTestId('horizontal-tabs-container')?.querySelector(`[data-testid="tab_Tab1"]`) as HTMLButtonElement;
91
+
92
+ expect(tabElement).toBeTruthy();
93
+ expect(tabElement.style).toHaveProperty('width', `${100 / tabs.length}%`);
94
+ });
95
+ });