@arbor-education/design-system.components 0.1.5 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yml +1 -1
- package/CHANGELOG.md +12 -0
- package/dist/components/formField/fieldset/Fieldset.d.ts +6 -0
- package/dist/components/formField/fieldset/Fieldset.d.ts.map +1 -0
- package/dist/components/formField/fieldset/Fieldset.js +7 -0
- package/dist/components/formField/fieldset/Fieldset.js.map +1 -0
- package/dist/components/formField/fieldset/Fieldset.stories.d.ts +28 -0
- package/dist/components/formField/fieldset/Fieldset.stories.d.ts.map +1 -0
- package/dist/components/formField/fieldset/Fieldset.stories.js +51 -0
- package/dist/components/formField/fieldset/Fieldset.stories.js.map +1 -0
- package/dist/components/formField/fieldset/Fieldset.test.d.ts +2 -0
- package/dist/components/formField/fieldset/Fieldset.test.d.ts.map +1 -0
- package/dist/components/formField/fieldset/Fieldset.test.js +62 -0
- package/dist/components/formField/fieldset/Fieldset.test.js.map +1 -0
- package/dist/components/formField/inputs/checkbox/CheckboxGroup.d.ts +8 -0
- package/dist/components/formField/inputs/checkbox/CheckboxGroup.d.ts.map +1 -0
- package/dist/components/formField/inputs/checkbox/CheckboxGroup.js +8 -0
- package/dist/components/formField/inputs/checkbox/CheckboxGroup.js.map +1 -0
- package/dist/components/formField/inputs/checkbox/CheckboxGroup.test.d.ts +2 -0
- package/dist/components/formField/inputs/checkbox/CheckboxGroup.test.d.ts.map +1 -0
- package/dist/components/formField/inputs/checkbox/CheckboxGroup.test.js +86 -0
- package/dist/components/formField/inputs/checkbox/CheckboxGroup.test.js.map +1 -0
- package/dist/components/formField/inputs/checkbox/CheckboxInput.stories.d.ts +3 -1
- package/dist/components/formField/inputs/checkbox/CheckboxInput.stories.d.ts.map +1 -1
- package/dist/components/formField/inputs/checkbox/CheckboxInput.stories.js +7 -0
- package/dist/components/formField/inputs/checkbox/CheckboxInput.stories.js.map +1 -1
- package/dist/components/formField/inputs/radio/RadioButtonGroup.d.ts +11 -0
- package/dist/components/formField/inputs/radio/RadioButtonGroup.d.ts.map +1 -0
- package/dist/components/formField/inputs/radio/RadioButtonGroup.js +8 -0
- package/dist/components/formField/inputs/radio/RadioButtonGroup.js.map +1 -0
- package/dist/components/formField/inputs/radio/RadioButtonGroup.test.d.ts +2 -0
- package/dist/components/formField/inputs/radio/RadioButtonGroup.test.d.ts.map +1 -0
- package/dist/components/formField/inputs/radio/RadioButtonGroup.test.js +86 -0
- package/dist/components/formField/inputs/radio/RadioButtonGroup.test.js.map +1 -0
- package/dist/components/formField/inputs/radio/RadioButtonInput.stories.d.ts.map +1 -1
- package/dist/components/formField/inputs/radio/RadioButtonInput.stories.js +8 -2
- package/dist/components/formField/inputs/radio/RadioButtonInput.stories.js.map +1 -1
- package/dist/components/modal/Modal.d.ts +25 -0
- package/dist/components/modal/Modal.d.ts.map +1 -0
- package/dist/components/modal/Modal.js +22 -0
- package/dist/components/modal/Modal.js.map +1 -0
- package/dist/components/modal/Modal.stories.d.ts +13 -0
- package/dist/components/modal/Modal.stories.d.ts.map +1 -0
- package/dist/components/modal/Modal.stories.js +23 -0
- package/dist/components/modal/Modal.stories.js.map +1 -0
- package/dist/components/modal/Modal.test.d.ts +2 -0
- package/dist/components/modal/Modal.test.d.ts.map +1 -0
- package/dist/components/modal/Modal.test.js +131 -0
- package/dist/components/modal/Modal.test.js.map +1 -0
- package/dist/components/modal/ModalBody.d.ts +7 -0
- package/dist/components/modal/ModalBody.d.ts.map +1 -0
- package/dist/components/modal/ModalBody.js +7 -0
- package/dist/components/modal/ModalBody.js.map +1 -0
- package/dist/components/modal/ModalCloseButton.d.ts +3 -0
- package/dist/components/modal/ModalCloseButton.d.ts.map +1 -0
- package/dist/components/modal/ModalCloseButton.js +25 -0
- package/dist/components/modal/ModalCloseButton.js.map +1 -0
- package/dist/components/modal/ModalFooter.d.ts +7 -0
- package/dist/components/modal/ModalFooter.d.ts.map +1 -0
- package/dist/components/modal/ModalFooter.js +7 -0
- package/dist/components/modal/ModalFooter.js.map +1 -0
- package/dist/components/modal/ModalHeader.d.ts +7 -0
- package/dist/components/modal/ModalHeader.d.ts.map +1 -0
- package/dist/components/modal/ModalHeader.js +8 -0
- package/dist/components/modal/ModalHeader.js.map +1 -0
- package/dist/components/modal/ModalTitle.d.ts +3 -0
- package/dist/components/modal/ModalTitle.d.ts.map +1 -0
- package/dist/components/modal/ModalTitle.js +8 -0
- package/dist/components/modal/ModalTitle.js.map +1 -0
- package/dist/components/modal/modalManager/ModalManager.d.ts +7 -0
- package/dist/components/modal/modalManager/ModalManager.d.ts.map +1 -0
- package/dist/components/modal/modalManager/ModalManager.js +22 -0
- package/dist/components/modal/modalManager/ModalManager.js.map +1 -0
- package/dist/components/modal/modalManager/ModalManager.stories.d.ts +13 -0
- package/dist/components/modal/modalManager/ModalManager.stories.d.ts.map +1 -0
- package/dist/components/modal/modalManager/ModalManager.stories.js +110 -0
- package/dist/components/modal/modalManager/ModalManager.stories.js.map +1 -0
- package/dist/components/modal/modalManager/ModalManager.test.d.ts +2 -0
- package/dist/components/modal/modalManager/ModalManager.test.d.ts.map +1 -0
- package/dist/components/modal/modalManager/ModalManager.test.js +191 -0
- package/dist/components/modal/modalManager/ModalManager.test.js.map +1 -0
- package/dist/components/separator/Separator.d.ts +7 -0
- package/dist/components/separator/Separator.d.ts.map +1 -0
- package/dist/components/separator/Separator.js +8 -0
- package/dist/components/separator/Separator.js.map +1 -0
- package/dist/components/separator/Separator.stories.d.ts +10 -0
- package/dist/components/separator/Separator.stories.d.ts.map +1 -0
- package/dist/components/separator/Separator.stories.js +12 -0
- package/dist/components/separator/Separator.stories.js.map +1 -0
- package/dist/components/separator/Separator.test.d.ts +2 -0
- package/dist/components/separator/Separator.test.d.ts.map +1 -0
- package/dist/components/separator/Separator.test.js +10 -0
- package/dist/components/separator/Separator.test.js.map +1 -0
- package/dist/components/table/Table.d.ts +20 -0
- package/dist/components/table/Table.d.ts.map +1 -1
- package/dist/components/table/Table.js +45 -7
- package/dist/components/table/Table.js.map +1 -1
- package/dist/components/table/Table.stories.d.ts.map +1 -1
- package/dist/components/table/Table.stories.js +14 -1
- package/dist/components/table/Table.stories.js.map +1 -1
- package/dist/components/table/Table.test.js +315 -2
- package/dist/components/table/Table.test.js.map +1 -1
- package/dist/components/table/pagination/TableSettingsDropdown.d.ts +2 -0
- package/dist/components/table/pagination/TableSettingsDropdown.d.ts.map +1 -0
- package/dist/components/table/pagination/TableSettingsDropdown.js +43 -0
- package/dist/components/table/pagination/TableSettingsDropdown.js.map +1 -0
- package/dist/components/table/useTableSettings.d.ts +22 -0
- package/dist/components/table/useTableSettings.d.ts.map +1 -0
- package/dist/components/table/useTableSettings.js +36 -0
- package/dist/components/table/useTableSettings.js.map +1 -0
- package/dist/index.css +102 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/Constants.d.ts +5 -0
- package/dist/utils/Constants.d.ts.map +1 -1
- package/dist/utils/Constants.js +5 -0
- package/dist/utils/Constants.js.map +1 -1
- package/dist/utils/ModalUtils.d.ts +7 -0
- package/dist/utils/ModalUtils.d.ts.map +1 -0
- package/dist/utils/ModalUtils.js +14 -0
- package/dist/utils/ModalUtils.js.map +1 -0
- package/dist/utils/hooks/useComponentDidUpdate.d.ts +7 -0
- package/dist/utils/hooks/useComponentDidUpdate.d.ts.map +1 -0
- package/dist/utils/hooks/useComponentDidUpdate.js +18 -0
- package/dist/utils/hooks/useComponentDidUpdate.js.map +1 -0
- package/dist/utils/hooks/useComponentDidUpdate.test.d.ts +2 -0
- package/dist/utils/hooks/useComponentDidUpdate.test.d.ts.map +1 -0
- package/dist/utils/hooks/useComponentDidUpdate.test.js +69 -0
- package/dist/utils/hooks/useComponentDidUpdate.test.js.map +1 -0
- package/package.json +1 -1
- package/src/components/formField/fieldset/Fieldset.stories.tsx +89 -0
- package/src/components/formField/fieldset/Fieldset.test.tsx +85 -0
- package/src/components/formField/fieldset/Fieldset.tsx +17 -0
- package/src/components/formField/fieldset/fieldset.scss +19 -0
- package/src/components/formField/inputs/checkbox/CheckboxGroup.test.tsx +127 -0
- package/src/components/formField/inputs/checkbox/CheckboxGroup.tsx +17 -0
- package/src/components/formField/inputs/checkbox/CheckboxInput.stories.tsx +12 -1
- package/src/components/formField/inputs/radio/RadioButtonGroup.test.tsx +190 -0
- package/src/components/formField/inputs/radio/RadioButtonGroup.tsx +22 -0
- package/src/components/formField/inputs/radio/RadioButtonInput.stories.tsx +16 -7
- package/src/components/formField/label/label.scss +1 -1
- package/src/components/modal/Modal.stories.tsx +37 -0
- package/src/components/modal/Modal.test.tsx +244 -0
- package/src/components/modal/Modal.tsx +65 -0
- package/src/components/modal/ModalBody.tsx +16 -0
- package/src/components/modal/ModalCloseButton.tsx +39 -0
- package/src/components/modal/ModalFooter.tsx +14 -0
- package/src/components/modal/ModalHeader.tsx +20 -0
- package/src/components/modal/ModalTitle.tsx +12 -0
- package/src/components/modal/modal.scss +74 -0
- package/src/components/modal/modalManager/ModalManager.stories.tsx +497 -0
- package/src/components/modal/modalManager/ModalManager.test.tsx +255 -0
- package/src/components/modal/modalManager/ModalManager.tsx +40 -0
- package/src/components/modal/modalManager/modalManager.scss +4 -0
- package/src/components/separator/Separator.stories.tsx +15 -0
- package/src/components/separator/Separator.test.tsx +10 -0
- package/src/components/separator/Separator.tsx +15 -0
- package/src/components/separator/separator.scss +6 -0
- package/src/components/table/Table.stories.tsx +14 -1
- package/src/components/table/Table.test.tsx +553 -1
- package/src/components/table/Table.tsx +80 -24
- package/src/components/table/pagination/TableSettingsDropdown.tsx +90 -0
- package/src/components/table/table.scss +8 -0
- package/src/components/table/useTableSettings.ts +59 -0
- package/src/index.scss +4 -0
- package/src/index.ts +4 -0
- package/src/tokens.scss +1 -0
- package/src/utils/Constants.ts +6 -0
- package/src/utils/ModalUtils.ts +17 -0
- package/src/utils/hooks/useComponentDidUpdate.test.ts +107 -0
- package/src/utils/hooks/useComponentDidUpdate.ts +19 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { describe, expect, expectTypeOf, test, vi } from 'vitest';
|
|
2
2
|
import { render, screen, waitFor } from '@testing-library/react';
|
|
3
|
-
import { Table } from './Table';
|
|
3
|
+
import { Table, TABLE_SPACING } from './Table';
|
|
4
4
|
import '@testing-library/jest-dom/vitest';
|
|
5
5
|
import { BulkActionsDropdown } from 'Components/table/BulkActionsDropdown';
|
|
6
6
|
import { HideColumnsDropdown } from 'Components/table/HideColumnsDropdown';
|
|
7
|
+
import { TableSettingsDropdown } from './pagination/TableSettingsDropdown';
|
|
7
8
|
import userEvent from '@testing-library/user-event';
|
|
8
9
|
import type { GridApi } from 'ag-grid-enterprise';
|
|
9
10
|
|
|
@@ -409,4 +410,555 @@ describe('Table', () => {
|
|
|
409
410
|
expect(container.querySelector('button')).toBeNull();
|
|
410
411
|
});
|
|
411
412
|
});
|
|
413
|
+
|
|
414
|
+
describe('TableSettingsDropdown', () => {
|
|
415
|
+
test('renders settings dropdown button in header', async () => {
|
|
416
|
+
render(
|
|
417
|
+
<Table
|
|
418
|
+
headerContent={<TableSettingsDropdown />}
|
|
419
|
+
/>,
|
|
420
|
+
);
|
|
421
|
+
|
|
422
|
+
await waitFor(() => {
|
|
423
|
+
const button = screen.getByRole('button', { name: /Table settings/i });
|
|
424
|
+
expect(button).toBeInTheDocument();
|
|
425
|
+
});
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
test('opens dropdown when settings button is clicked', async () => {
|
|
429
|
+
render(
|
|
430
|
+
<Table
|
|
431
|
+
headerContent={<TableSettingsDropdown />}
|
|
432
|
+
/>,
|
|
433
|
+
);
|
|
434
|
+
|
|
435
|
+
const settingsButton = screen.getByRole('button', { name: /Table settings/i });
|
|
436
|
+
await userEvent.click(settingsButton);
|
|
437
|
+
|
|
438
|
+
await waitFor(() => {
|
|
439
|
+
expect(screen.getByText('Table spacing')).toBeInTheDocument();
|
|
440
|
+
expect(screen.getByText('Style')).toBeInTheDocument();
|
|
441
|
+
expect(screen.getByText('Reset Table Settings')).toBeInTheDocument();
|
|
442
|
+
});
|
|
443
|
+
});
|
|
444
|
+
|
|
445
|
+
test('displays all table spacing options', async () => {
|
|
446
|
+
render(
|
|
447
|
+
<Table
|
|
448
|
+
headerContent={<TableSettingsDropdown />}
|
|
449
|
+
/>,
|
|
450
|
+
);
|
|
451
|
+
|
|
452
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
453
|
+
|
|
454
|
+
await waitFor(() => {
|
|
455
|
+
expect(screen.getByLabelText('X-Small')).toBeInTheDocument();
|
|
456
|
+
expect(screen.getByLabelText('Small')).toBeInTheDocument();
|
|
457
|
+
expect(screen.getByLabelText('Medium')).toBeInTheDocument();
|
|
458
|
+
expect(screen.getByLabelText('Large')).toBeInTheDocument();
|
|
459
|
+
});
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
test('Medium spacing is selected by default', async () => {
|
|
463
|
+
render(
|
|
464
|
+
<Table
|
|
465
|
+
headerContent={<TableSettingsDropdown />}
|
|
466
|
+
/>,
|
|
467
|
+
);
|
|
468
|
+
|
|
469
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
470
|
+
|
|
471
|
+
await waitFor(() => {
|
|
472
|
+
const mediumRadio = screen.getByLabelText('Medium') as HTMLInputElement;
|
|
473
|
+
expect(mediumRadio.checked).toBe(true);
|
|
474
|
+
});
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
test('can change table spacing to Small', async () => {
|
|
478
|
+
render(
|
|
479
|
+
<Table
|
|
480
|
+
headerContent={<TableSettingsDropdown />}
|
|
481
|
+
/>,
|
|
482
|
+
);
|
|
483
|
+
|
|
484
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
485
|
+
|
|
486
|
+
await waitFor(() => {
|
|
487
|
+
expect(screen.getByLabelText('Small')).toBeInTheDocument();
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
const smallRadio = screen.getByLabelText('Small');
|
|
491
|
+
await userEvent.click(smallRadio);
|
|
492
|
+
|
|
493
|
+
await waitFor(() => {
|
|
494
|
+
expect((smallRadio as HTMLInputElement).checked).toBe(true);
|
|
495
|
+
});
|
|
496
|
+
});
|
|
497
|
+
|
|
498
|
+
test('can change table spacing to Large', async () => {
|
|
499
|
+
render(
|
|
500
|
+
<Table
|
|
501
|
+
headerContent={<TableSettingsDropdown />}
|
|
502
|
+
/>,
|
|
503
|
+
);
|
|
504
|
+
|
|
505
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
506
|
+
|
|
507
|
+
const largeRadio = screen.getByLabelText('Large');
|
|
508
|
+
await userEvent.click(largeRadio);
|
|
509
|
+
|
|
510
|
+
await waitFor(() => {
|
|
511
|
+
expect((largeRadio as HTMLInputElement).checked).toBe(true);
|
|
512
|
+
});
|
|
513
|
+
});
|
|
514
|
+
|
|
515
|
+
test('can change table spacing to X-Small', async () => {
|
|
516
|
+
render(
|
|
517
|
+
<Table
|
|
518
|
+
headerContent={<TableSettingsDropdown />}
|
|
519
|
+
/>,
|
|
520
|
+
);
|
|
521
|
+
|
|
522
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
523
|
+
|
|
524
|
+
const xsmallRadio = screen.getByLabelText('X-Small');
|
|
525
|
+
await userEvent.click(xsmallRadio);
|
|
526
|
+
|
|
527
|
+
await waitFor(() => {
|
|
528
|
+
expect((xsmallRadio as HTMLInputElement).checked).toBe(true);
|
|
529
|
+
});
|
|
530
|
+
});
|
|
531
|
+
|
|
532
|
+
test('displays style options with Column borders and Cell colours', async () => {
|
|
533
|
+
render(
|
|
534
|
+
<Table
|
|
535
|
+
headerContent={<TableSettingsDropdown />}
|
|
536
|
+
/>,
|
|
537
|
+
);
|
|
538
|
+
|
|
539
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
540
|
+
|
|
541
|
+
await waitFor(() => {
|
|
542
|
+
expect(screen.getByLabelText('Column borders')).toBeInTheDocument();
|
|
543
|
+
expect(screen.getByLabelText('Cell colours')).toBeInTheDocument();
|
|
544
|
+
});
|
|
545
|
+
});
|
|
546
|
+
|
|
547
|
+
test('Column borders checkbox is unchecked by default', async () => {
|
|
548
|
+
render(
|
|
549
|
+
<Table
|
|
550
|
+
headerContent={<TableSettingsDropdown />}
|
|
551
|
+
/>,
|
|
552
|
+
);
|
|
553
|
+
|
|
554
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
555
|
+
|
|
556
|
+
await waitFor(() => {
|
|
557
|
+
const columnBordersCheckbox = screen.getByLabelText('Column borders') as HTMLInputElement;
|
|
558
|
+
expect(columnBordersCheckbox.checked).toBe(false);
|
|
559
|
+
});
|
|
560
|
+
});
|
|
561
|
+
|
|
562
|
+
test('can toggle Column borders checkbox on', async () => {
|
|
563
|
+
render(
|
|
564
|
+
<Table
|
|
565
|
+
headerContent={<TableSettingsDropdown />}
|
|
566
|
+
/>,
|
|
567
|
+
);
|
|
568
|
+
|
|
569
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
570
|
+
|
|
571
|
+
const columnBordersCheckbox = screen.getByLabelText('Column borders');
|
|
572
|
+
await userEvent.click(columnBordersCheckbox);
|
|
573
|
+
|
|
574
|
+
await waitFor(() => {
|
|
575
|
+
expect((columnBordersCheckbox as HTMLInputElement).checked).toBe(true);
|
|
576
|
+
});
|
|
577
|
+
});
|
|
578
|
+
|
|
579
|
+
test('can toggle Column borders checkbox off after turning it on', async () => {
|
|
580
|
+
render(
|
|
581
|
+
<Table
|
|
582
|
+
headerContent={<TableSettingsDropdown />}
|
|
583
|
+
/>,
|
|
584
|
+
);
|
|
585
|
+
|
|
586
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
587
|
+
|
|
588
|
+
const columnBordersCheckbox = screen.getByLabelText('Column borders');
|
|
589
|
+
await userEvent.click(columnBordersCheckbox);
|
|
590
|
+
await userEvent.click(columnBordersCheckbox);
|
|
591
|
+
|
|
592
|
+
await waitFor(() => {
|
|
593
|
+
expect((columnBordersCheckbox as HTMLInputElement).checked).toBe(false);
|
|
594
|
+
});
|
|
595
|
+
});
|
|
596
|
+
|
|
597
|
+
test('Cell colours checkbox is unchecked by default', async () => {
|
|
598
|
+
render(
|
|
599
|
+
<Table
|
|
600
|
+
headerContent={<TableSettingsDropdown />}
|
|
601
|
+
/>,
|
|
602
|
+
);
|
|
603
|
+
|
|
604
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
605
|
+
|
|
606
|
+
await waitFor(() => {
|
|
607
|
+
const cellColoursCheckbox = screen.getByLabelText('Cell colours') as HTMLInputElement;
|
|
608
|
+
expect(cellColoursCheckbox.checked).toBe(false);
|
|
609
|
+
});
|
|
610
|
+
});
|
|
611
|
+
|
|
612
|
+
test('can toggle Cell colours checkbox on', async () => {
|
|
613
|
+
render(
|
|
614
|
+
<Table
|
|
615
|
+
headerContent={<TableSettingsDropdown />}
|
|
616
|
+
/>,
|
|
617
|
+
);
|
|
618
|
+
|
|
619
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
620
|
+
|
|
621
|
+
const cellColoursCheckbox = screen.getByLabelText('Cell colours');
|
|
622
|
+
await userEvent.click(cellColoursCheckbox);
|
|
623
|
+
|
|
624
|
+
await waitFor(() => {
|
|
625
|
+
expect((cellColoursCheckbox as HTMLInputElement).checked).toBe(true);
|
|
626
|
+
});
|
|
627
|
+
});
|
|
628
|
+
|
|
629
|
+
test('can toggle Cell colours checkbox off after turning it on', async () => {
|
|
630
|
+
render(
|
|
631
|
+
<Table
|
|
632
|
+
headerContent={<TableSettingsDropdown />}
|
|
633
|
+
/>,
|
|
634
|
+
);
|
|
635
|
+
|
|
636
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
637
|
+
|
|
638
|
+
const cellColoursCheckbox = screen.getByLabelText('Cell colours');
|
|
639
|
+
await userEvent.click(cellColoursCheckbox);
|
|
640
|
+
await userEvent.click(cellColoursCheckbox);
|
|
641
|
+
|
|
642
|
+
await waitFor(() => {
|
|
643
|
+
expect((cellColoursCheckbox as HTMLInputElement).checked).toBe(false);
|
|
644
|
+
});
|
|
645
|
+
});
|
|
646
|
+
|
|
647
|
+
test('displays Reset Table Settings button', async () => {
|
|
648
|
+
render(
|
|
649
|
+
<Table
|
|
650
|
+
headerContent={<TableSettingsDropdown />}
|
|
651
|
+
/>,
|
|
652
|
+
);
|
|
653
|
+
|
|
654
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
655
|
+
|
|
656
|
+
await waitFor(() => {
|
|
657
|
+
expect(screen.getByRole('button', { name: /Reset Table Settings/i })).toBeInTheDocument();
|
|
658
|
+
});
|
|
659
|
+
});
|
|
660
|
+
|
|
661
|
+
test('reset button resets table spacing to default (Medium)', async () => {
|
|
662
|
+
render(
|
|
663
|
+
<Table
|
|
664
|
+
headerContent={<TableSettingsDropdown />}
|
|
665
|
+
/>,
|
|
666
|
+
);
|
|
667
|
+
|
|
668
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
669
|
+
|
|
670
|
+
// Change to Large
|
|
671
|
+
const largeRadio = screen.getByLabelText('Large');
|
|
672
|
+
await userEvent.click(largeRadio);
|
|
673
|
+
|
|
674
|
+
await waitFor(() => {
|
|
675
|
+
expect((largeRadio as HTMLInputElement).checked).toBe(true);
|
|
676
|
+
});
|
|
677
|
+
|
|
678
|
+
// Click reset button
|
|
679
|
+
const resetButton = screen.getByRole('button', { name: /Reset Table Settings/i });
|
|
680
|
+
await userEvent.click(resetButton);
|
|
681
|
+
|
|
682
|
+
await waitFor(() => {
|
|
683
|
+
const mediumRadio = screen.getByLabelText('Medium') as HTMLInputElement;
|
|
684
|
+
expect(mediumRadio.checked).toBe(true);
|
|
685
|
+
});
|
|
686
|
+
});
|
|
687
|
+
|
|
688
|
+
test('reset button resets column borders to default (off)', async () => {
|
|
689
|
+
render(
|
|
690
|
+
<Table
|
|
691
|
+
headerContent={<TableSettingsDropdown />}
|
|
692
|
+
/>,
|
|
693
|
+
);
|
|
694
|
+
|
|
695
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
696
|
+
|
|
697
|
+
// Turn on column borders
|
|
698
|
+
const columnBordersCheckbox = screen.getByLabelText('Column borders');
|
|
699
|
+
await userEvent.click(columnBordersCheckbox);
|
|
700
|
+
|
|
701
|
+
await waitFor(() => {
|
|
702
|
+
expect((columnBordersCheckbox as HTMLInputElement).checked).toBe(true);
|
|
703
|
+
});
|
|
704
|
+
|
|
705
|
+
// Click reset button
|
|
706
|
+
const resetButton = screen.getByRole('button', { name: /Reset Table Settings/i });
|
|
707
|
+
await userEvent.click(resetButton);
|
|
708
|
+
|
|
709
|
+
await waitFor(() => {
|
|
710
|
+
expect((columnBordersCheckbox as HTMLInputElement).checked).toBe(false);
|
|
711
|
+
});
|
|
712
|
+
});
|
|
713
|
+
|
|
714
|
+
test('reset button resets all settings together', async () => {
|
|
715
|
+
render(
|
|
716
|
+
<Table
|
|
717
|
+
headerContent={<TableSettingsDropdown />}
|
|
718
|
+
/>,
|
|
719
|
+
);
|
|
720
|
+
|
|
721
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
722
|
+
|
|
723
|
+
// Change multiple settings
|
|
724
|
+
const largeRadio = screen.getByLabelText('Large');
|
|
725
|
+
await userEvent.click(largeRadio);
|
|
726
|
+
|
|
727
|
+
const columnBordersCheckbox = screen.getByLabelText('Column borders');
|
|
728
|
+
await userEvent.click(columnBordersCheckbox);
|
|
729
|
+
|
|
730
|
+
await waitFor(() => {
|
|
731
|
+
expect((largeRadio as HTMLInputElement).checked).toBe(true);
|
|
732
|
+
expect((columnBordersCheckbox as HTMLInputElement).checked).toBe(true);
|
|
733
|
+
});
|
|
734
|
+
|
|
735
|
+
// Click reset button
|
|
736
|
+
const resetButton = screen.getByRole('button', { name: /Reset Table Settings/i });
|
|
737
|
+
await userEvent.click(resetButton);
|
|
738
|
+
|
|
739
|
+
await waitFor(() => {
|
|
740
|
+
const mediumRadio = screen.getByLabelText('Medium') as HTMLInputElement;
|
|
741
|
+
expect(mediumRadio.checked).toBe(true);
|
|
742
|
+
expect((columnBordersCheckbox as HTMLInputElement).checked).toBe(false);
|
|
743
|
+
});
|
|
744
|
+
});
|
|
745
|
+
|
|
746
|
+
test('can combine settings dropdown with other header content', async () => {
|
|
747
|
+
render(
|
|
748
|
+
<Table
|
|
749
|
+
headerContent={(
|
|
750
|
+
<>
|
|
751
|
+
<BulkActionsDropdown
|
|
752
|
+
actions={[
|
|
753
|
+
{
|
|
754
|
+
displayName: 'Test Action',
|
|
755
|
+
callback: () => {},
|
|
756
|
+
},
|
|
757
|
+
]}
|
|
758
|
+
/>
|
|
759
|
+
<TableSettingsDropdown />
|
|
760
|
+
</>
|
|
761
|
+
)}
|
|
762
|
+
/>,
|
|
763
|
+
);
|
|
764
|
+
|
|
765
|
+
await waitFor(() => {
|
|
766
|
+
expect(screen.getByText('Actions (1)')).toBeInTheDocument();
|
|
767
|
+
expect(screen.getByRole('button', { name: /Table settings/i })).toBeInTheDocument();
|
|
768
|
+
});
|
|
769
|
+
});
|
|
770
|
+
|
|
771
|
+
test('settings persist when dropdown is closed and reopened', async () => {
|
|
772
|
+
render(
|
|
773
|
+
<Table
|
|
774
|
+
headerContent={<TableSettingsDropdown />}
|
|
775
|
+
/>,
|
|
776
|
+
);
|
|
777
|
+
|
|
778
|
+
// Open dropdown and change settings
|
|
779
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
780
|
+
|
|
781
|
+
const smallRadio = screen.getByLabelText('Small');
|
|
782
|
+
await userEvent.click(smallRadio);
|
|
783
|
+
|
|
784
|
+
const columnBordersCheckbox = screen.getByLabelText('Column borders');
|
|
785
|
+
await userEvent.click(columnBordersCheckbox);
|
|
786
|
+
|
|
787
|
+
// Close dropdown
|
|
788
|
+
await userEvent.keyboard('{Escape}');
|
|
789
|
+
|
|
790
|
+
// Reopen dropdown
|
|
791
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
792
|
+
|
|
793
|
+
// Check settings persisted
|
|
794
|
+
await waitFor(() => {
|
|
795
|
+
expect((screen.getByLabelText('Small') as HTMLInputElement).checked).toBe(true);
|
|
796
|
+
expect((screen.getByLabelText('Column borders') as HTMLInputElement).checked).toBe(true);
|
|
797
|
+
});
|
|
798
|
+
});
|
|
799
|
+
|
|
800
|
+
test('onTableSettingsChanged gets called appropriately', async () => {
|
|
801
|
+
const onTableSettingsChanged = vi.fn();
|
|
802
|
+
|
|
803
|
+
render(
|
|
804
|
+
<Table
|
|
805
|
+
headerContent={<TableSettingsDropdown />}
|
|
806
|
+
onTableSettingsChanged={onTableSettingsChanged}
|
|
807
|
+
/>,
|
|
808
|
+
);
|
|
809
|
+
|
|
810
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
811
|
+
|
|
812
|
+
const largeRadio = screen.getByLabelText('Large');
|
|
813
|
+
await userEvent.click(largeRadio);
|
|
814
|
+
|
|
815
|
+
await waitFor(() => {
|
|
816
|
+
expect((largeRadio as HTMLInputElement).checked).toBe(true);
|
|
817
|
+
});
|
|
818
|
+
expect(onTableSettingsChanged).toHaveBeenCalledExactlyOnceWith(expect.objectContaining({
|
|
819
|
+
tableSpacing: TABLE_SPACING.L,
|
|
820
|
+
}));
|
|
821
|
+
|
|
822
|
+
const columnBordersCheckbox = screen.getByLabelText('Column borders');
|
|
823
|
+
await userEvent.click(columnBordersCheckbox);
|
|
824
|
+
|
|
825
|
+
expect(onTableSettingsChanged).toHaveBeenCalledTimes(2);
|
|
826
|
+
expect(onTableSettingsChanged).toHaveBeenNthCalledWith(2, expect.objectContaining({ hasColumnBorders: true }));
|
|
827
|
+
});
|
|
828
|
+
|
|
829
|
+
test('resetSettings is called appropriately', async () => {
|
|
830
|
+
const onTableSettingsReset = vi.fn();
|
|
831
|
+
|
|
832
|
+
render(
|
|
833
|
+
<Table
|
|
834
|
+
headerContent={<TableSettingsDropdown />}
|
|
835
|
+
onTableSettingsReset={onTableSettingsReset}
|
|
836
|
+
/>,
|
|
837
|
+
);
|
|
838
|
+
|
|
839
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
840
|
+
|
|
841
|
+
const largeRadio = screen.getByLabelText('Large');
|
|
842
|
+
await userEvent.click(largeRadio);
|
|
843
|
+
|
|
844
|
+
await waitFor(() => {
|
|
845
|
+
expect((largeRadio as HTMLInputElement).checked).toBe(true);
|
|
846
|
+
});
|
|
847
|
+
|
|
848
|
+
// Click reset button
|
|
849
|
+
const resetButton = screen.getByRole('button', { name: /Reset Table Settings/i });
|
|
850
|
+
await userEvent.click(resetButton);
|
|
851
|
+
|
|
852
|
+
expect(onTableSettingsReset).toHaveBeenCalledOnce();
|
|
853
|
+
});
|
|
854
|
+
|
|
855
|
+
test('onColumnBordersChanged gets called when column borders toggle', async () => {
|
|
856
|
+
const onColumnBordersChanged = vi.fn();
|
|
857
|
+
|
|
858
|
+
render(
|
|
859
|
+
<Table
|
|
860
|
+
headerContent={<TableSettingsDropdown />}
|
|
861
|
+
onColumnBordersChanged={onColumnBordersChanged}
|
|
862
|
+
/>,
|
|
863
|
+
);
|
|
864
|
+
|
|
865
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
866
|
+
|
|
867
|
+
const columnBordersCheckbox = screen.getByLabelText('Column borders');
|
|
868
|
+
await userEvent.click(columnBordersCheckbox);
|
|
869
|
+
|
|
870
|
+
await waitFor(() => {
|
|
871
|
+
expect(onColumnBordersChanged).toHaveBeenCalledExactlyOnceWith(true);
|
|
872
|
+
});
|
|
873
|
+
|
|
874
|
+
await userEvent.click(columnBordersCheckbox);
|
|
875
|
+
|
|
876
|
+
await waitFor(() => {
|
|
877
|
+
expect(onColumnBordersChanged).toHaveBeenCalledTimes(2);
|
|
878
|
+
expect(onColumnBordersChanged).toHaveBeenNthCalledWith(2, false);
|
|
879
|
+
});
|
|
880
|
+
});
|
|
881
|
+
|
|
882
|
+
test('onTableSpacingChanged gets called when spacing changes', async () => {
|
|
883
|
+
const onTableSpacingChanged = vi.fn();
|
|
884
|
+
|
|
885
|
+
render(
|
|
886
|
+
<Table
|
|
887
|
+
headerContent={<TableSettingsDropdown />}
|
|
888
|
+
onTableSpacingChanged={onTableSpacingChanged}
|
|
889
|
+
/>,
|
|
890
|
+
);
|
|
891
|
+
|
|
892
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
893
|
+
|
|
894
|
+
const largeRadio = screen.getByLabelText('Large');
|
|
895
|
+
await userEvent.click(largeRadio);
|
|
896
|
+
|
|
897
|
+
await waitFor(() => {
|
|
898
|
+
expect(onTableSpacingChanged).toHaveBeenCalledExactlyOnceWith(TABLE_SPACING.L);
|
|
899
|
+
});
|
|
900
|
+
|
|
901
|
+
const xsmallRadio = screen.getByLabelText('X-Small');
|
|
902
|
+
await userEvent.click(xsmallRadio);
|
|
903
|
+
|
|
904
|
+
await waitFor(() => {
|
|
905
|
+
expect(onTableSpacingChanged).toHaveBeenCalledTimes(2);
|
|
906
|
+
expect(onTableSpacingChanged).toHaveBeenNthCalledWith(2, TABLE_SPACING.XS);
|
|
907
|
+
});
|
|
908
|
+
});
|
|
909
|
+
|
|
910
|
+
test('onTableSpacingChanged is called when reset button is clicked', async () => {
|
|
911
|
+
const onTableSpacingChanged = vi.fn();
|
|
912
|
+
|
|
913
|
+
render(
|
|
914
|
+
<Table
|
|
915
|
+
headerContent={<TableSettingsDropdown />}
|
|
916
|
+
onTableSpacingChanged={onTableSpacingChanged}
|
|
917
|
+
/>,
|
|
918
|
+
);
|
|
919
|
+
|
|
920
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
921
|
+
|
|
922
|
+
const largeRadio = screen.getByLabelText('Large');
|
|
923
|
+
await userEvent.click(largeRadio);
|
|
924
|
+
|
|
925
|
+
await waitFor(() => {
|
|
926
|
+
expect(onTableSpacingChanged).toHaveBeenCalledWith(TABLE_SPACING.L);
|
|
927
|
+
});
|
|
928
|
+
|
|
929
|
+
const resetButton = screen.getByRole('button', { name: /Reset Table Settings/i });
|
|
930
|
+
await userEvent.click(resetButton);
|
|
931
|
+
|
|
932
|
+
await waitFor(() => {
|
|
933
|
+
expect(onTableSpacingChanged).toHaveBeenCalledWith(TABLE_SPACING.M);
|
|
934
|
+
});
|
|
935
|
+
});
|
|
936
|
+
|
|
937
|
+
test('onColumnBordersChanged is called when reset button is clicked', async () => {
|
|
938
|
+
const onColumnBordersChanged = vi.fn();
|
|
939
|
+
|
|
940
|
+
render(
|
|
941
|
+
<Table
|
|
942
|
+
headerContent={<TableSettingsDropdown />}
|
|
943
|
+
onColumnBordersChanged={onColumnBordersChanged}
|
|
944
|
+
/>,
|
|
945
|
+
);
|
|
946
|
+
|
|
947
|
+
await userEvent.click(screen.getByRole('button', { name: /Table settings/i }));
|
|
948
|
+
|
|
949
|
+
const columnBordersCheckbox = screen.getByLabelText('Column borders');
|
|
950
|
+
await userEvent.click(columnBordersCheckbox);
|
|
951
|
+
|
|
952
|
+
await waitFor(() => {
|
|
953
|
+
expect(onColumnBordersChanged).toHaveBeenCalledWith(true);
|
|
954
|
+
});
|
|
955
|
+
|
|
956
|
+
const resetButton = screen.getByRole('button', { name: /Reset Table Settings/i });
|
|
957
|
+
await userEvent.click(resetButton);
|
|
958
|
+
|
|
959
|
+
await waitFor(() => {
|
|
960
|
+
expect(onColumnBordersChanged).toHaveBeenCalledWith(false);
|
|
961
|
+
});
|
|
962
|
+
});
|
|
963
|
+
});
|
|
412
964
|
});
|