From 26f683edc4f940b29f09c3d8f456a8d282afd127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B8egh?= Date: Wed, 22 Nov 2023 14:38:25 +0100 Subject: [PATCH] fix(ToggleButtonGroup): omit rendering label when not given (#2929) --- ...-to-match-horizontal-aligned-tabs.snap.png | Bin 12329 -> 12302 bytes ...-to-match-horizontal-aligned-tabs.snap.png | Bin 12186 -> 12223 bytes .../toggle-button/ToggleButtonGroup.js | 22 +- .../__tests__/ToggleButton.test.tsx | 436 ---------------- .../__tests__/ToggleButtonGroup.test.tsx | 481 ++++++++++++++++++ 5 files changed, 494 insertions(+), 445 deletions(-) create mode 100644 packages/dnb-eufemia/src/components/toggle-button/__tests__/ToggleButtonGroup.test.tsx diff --git a/packages/dnb-eufemia/src/components/tabs/__tests__/__image_snapshots__/tabs-for-sbanken-have-to-match-horizontal-aligned-tabs.snap.png b/packages/dnb-eufemia/src/components/tabs/__tests__/__image_snapshots__/tabs-for-sbanken-have-to-match-horizontal-aligned-tabs.snap.png index 1f591ff8c0120babed55e236f583030832bf7dd4..2ec12273a93d02d2e8b536441761c8e8002ccf02 100644 GIT binary patch literal 12302 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 diff --git a/packages/dnb-eufemia/src/components/tabs/__tests__/__image_snapshots__/tabs-for-ui-have-to-match-horizontal-aligned-tabs.snap.png b/packages/dnb-eufemia/src/components/tabs/__tests__/__image_snapshots__/tabs-for-ui-have-to-match-horizontal-aligned-tabs.snap.png index 4e8cf32b762c77ab299a28dc5a09272bcbfeeb1e..6a5e0bb7d665d85c1f072b16798c16fe8c0b79a2 100644 GIT binary patch literal 12223 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 literal 12186 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 diff --git a/packages/dnb-eufemia/src/components/toggle-button/ToggleButtonGroup.js b/packages/dnb-eufemia/src/components/toggle-button/ToggleButtonGroup.js index c4edc78734c..495e30bba29 100644 --- a/packages/dnb-eufemia/src/components/toggle-button/ToggleButtonGroup.js +++ b/packages/dnb-eufemia/src/components/toggle-button/ToggleButtonGroup.js @@ -287,11 +287,13 @@ export default class ToggleButtonGroup extends React.PureComponent { onChange: this.onChangeHandler, } + const Fieldset = label ? 'fieldset' : 'div' + return (
-
+
- - {label} - + {label && ( + + {label} + + )} -
+
) diff --git a/packages/dnb-eufemia/src/components/toggle-button/__tests__/ToggleButton.test.tsx b/packages/dnb-eufemia/src/components/toggle-button/__tests__/ToggleButton.test.tsx index 0c1d6fa1e1a..02405ebb98b 100644 --- a/packages/dnb-eufemia/src/components/toggle-button/__tests__/ToggleButton.test.tsx +++ b/packages/dnb-eufemia/src/components/toggle-button/__tests__/ToggleButton.test.tsx @@ -274,442 +274,6 @@ describe('ToggleButton component', () => { }) }) -describe('ToggleButton group component', () => { - it('should support vertical label', () => { - const { rerender } = render( - - - - ) - - const element = document.querySelector('.dnb-toggle-button-group') - const flexElement = element.querySelector('.dnb-flex-container') - - expect(Array.from(flexElement.classList)).toEqual([ - 'dnb-space', - 'dnb-flex-container', - 'dnb-flex-container--direction-vertical', - 'dnb-flex-container--justify-flex-start', - 'dnb-flex-container--align-baseline', - 'dnb-flex-container--spacing-x-small', - 'dnb-flex-container--wrap', - 'dnb-flex-container--divider-space', - ]) - - rerender( - - - - ) - - expect(Array.from(flexElement.classList)).toEqual([ - 'dnb-space', - 'dnb-flex-container', - 'dnb-flex-container--direction-vertical', - 'dnb-flex-container--justify-flex-start', - 'dnb-flex-container--align-baseline', - 'dnb-flex-container--spacing-small', - 'dnb-flex-container--wrap', - 'dnb-flex-container--divider-space', - ]) - }) - - it('has to have variant="radio', () => { - render( - - - - - ) - expect( - document.querySelector('.dnb-radio__button') - ).toBeInTheDocument() - }) - - it('has to have correct aria-pressed', () => { - render( - - - - - ) - expect( - document.querySelector('button#toggle-button-2') - ).toHaveAttribute('aria-pressed') - }) - - it('has "on_change" event which will trigger on a button click', () => { - const my_event = jest.fn() - const myEvent = jest.fn() - render( - - - - - ) - - // first click - fireEvent.click(document.querySelector('button#toggle-button-1')) - expect(my_event).toHaveBeenCalled() - expect(my_event.mock.calls[0][0].value).toBe('first') - - expect(myEvent.mock.calls.length).toBe(1) - expect(myEvent.mock.calls[0][0]).toHaveProperty('value') - expect(myEvent.mock.calls[0][0].value).toBe('first') - expect(myEvent.mock.calls[0][0].event).toBeType('object') - expect(myEvent.mock.calls[0][0].event.target.dataset).toMatchObject({ - attr: 'value', - prop: 'value-1', - }) - - fireEvent.click(document.querySelector('button#toggle-button-2')) - expect(my_event.mock.calls[1][0].value).toBe('second') - expect(my_event.mock.calls[1][0].event.target.dataset).toMatchObject({ - attr: 'value', - prop: 'value-2', - }) - }) - - it('has multiselect "on_change" event which will trigger on a button click', () => { - const my_event = jest.fn() - render( - - - - - ) - - // first click - fireEvent.click(document.querySelector('button#toggle-button-1')) - - expect(my_event).toHaveBeenCalled() - expect(my_event.mock.calls.length).toBe(1) - expect(my_event.mock.calls[0][0]).toHaveProperty('values') - expect(my_event.mock.calls[0][0].values).toEqual(['second', 'first']) - expect( - document - .querySelector('#toggle-button-1') - .getAttribute('aria-pressed') - ).toBe('true') - expect( - document - .querySelector('#toggle-button-2') - .getAttribute('aria-pressed') - ).toBe('true') - - // second click - fireEvent.click(document.querySelector('button#toggle-button-1')) - expect(my_event.mock.calls[1][0].values).toEqual(['second']) - expect( - document - .querySelector('#toggle-button-1') - .getAttribute('aria-pressed') - ).toBe('false') - expect( - document - .querySelector('#toggle-button-2') - .getAttribute('aria-pressed') - ).toBe('true') - - // third click - fireEvent.click(document.querySelector('button#toggle-button-2')) - expect(my_event.mock.calls[2][0].values).toEqual([]) - expect( - document - .querySelector('#toggle-button-1') - .getAttribute('aria-pressed') - ).toBe('false') - expect( - document - .querySelector('#toggle-button-2') - .getAttribute('aria-pressed') - ).toBe('false') - }) - - it('can be changed from props', () => { - const GroupOf = () => { - const [values, setValues] = React.useState(['second']) - - const selectAll = () => setValues(['first', 'second']) - const deselectAll = () => setValues([]) - - return ( - <> - - - - - - - - ) - } - - render() - - const first = document.querySelector('button#toggle-button-1') - const second = document.querySelector('button#toggle-button-2') - - expect(first.getAttribute('aria-pressed')).toBe('false') - expect(second.getAttribute('aria-pressed')).toBe('true') - - fireEvent.click(document.querySelector('button#select-all')) - - expect(first.getAttribute('aria-pressed')).toBe('true') - expect(second.getAttribute('aria-pressed')).toBe('true') - - fireEvent.click(document.querySelector('button#deselect-all')) - - expect(first.getAttribute('aria-pressed')).toBe('false') - expect(second.getAttribute('aria-pressed')).toBe('false') - }) - - it('will let their items to be check/uncheck by its siblings', () => { - const TestComp = () => { - return ( - - - - - ) - } - - const TestButton = (Comp, id) => { - render(Comp) - - const sel = `button#${id}` - - expect( - document - .querySelector(sel) - .querySelector('.dnb-checkbox__input') - .getAttribute('data-checked') - ).toBe('false') - - fireEvent.click(document.querySelector(sel)) - expect( - document - .querySelector(sel) - .querySelector('.dnb-checkbox__input') - .getAttribute('data-checked') - ).toBe('true') - expect( - document.querySelector(sel).getAttribute('aria-pressed') - ).toBe('true') - - fireEvent.click(document.querySelector(sel)) - expect( - document.querySelector(sel).getAttribute('aria-pressed') - ).toBe('false') - expect( - document.querySelector('.dnb-toggle-button--checked') - ).not.toBeInTheDocument() - expect( - document - .querySelector(sel) - .querySelector('.dnb-checkbox__input') - .getAttribute('data-checked') - ).toBe('false') - - fireEvent.click(document.querySelector(sel)) - expect( - document - .querySelector(sel) - .querySelector('.dnb-checkbox__input') - .getAttribute('data-checked') - ).toBe('true') - - cleanup() - } - - TestButton(, 'toggle-button-1') - - TestButton(, 'toggle-button-2') - }) - - it('should support spacing props', () => { - render( - - - - - ) - - const element = document.querySelector('.dnb-toggle-button-group') - - expect(Array.from(element.classList)).toEqual([ - 'dnb-toggle-button-group', - 'dnb-toggle-button-group--row', - 'dnb-form-component', - 'dnb-space__top--large', - 'dnb-toggle-button-group--no-label', - ]) - }) - - it('should inherit formElement vertical label', () => { - render( - - - - - - - ) - - const element = document.querySelector('.dnb-toggle-button-group') - const attributes = Array.from(element.attributes).map( - (attr) => attr.name - ) - - expect(attributes).toEqual(['class']) - expect(Array.from(element.classList)).toEqual([ - 'dnb-toggle-button-group', - 'dnb-toggle-button-group--row', - 'dnb-form-component', - ]) - expect( - Array.from( - document.querySelector( - '.dnb-toggle-button-group .dnb-flex-container' - ).classList - ) - ).toEqual([ - 'dnb-space', - 'dnb-flex-container', - 'dnb-flex-container--direction-vertical', - 'dnb-flex-container--justify-flex-start', - 'dnb-flex-container--align-baseline', - 'dnb-flex-container--spacing-small', - 'dnb-flex-container--wrap', - 'dnb-flex-container--divider-space', - ]) - expect( - Array.from(document.querySelector('.dnb-flex-container').classList) - ).toEqual([ - 'dnb-space', - 'dnb-flex-container', - 'dnb-flex-container--direction-vertical', - 'dnb-flex-container--justify-flex-start', - 'dnb-flex-container--align-baseline', - 'dnb-flex-container--spacing-small', - 'dnb-flex-container--wrap', - 'dnb-flex-container--divider-space', - ]) - }) - - it('should validate with ARIA rules', async () => { - const Comp = render( - - - - - ) - expect(await axeComponent(Comp)).toHaveNoViolations() - }) -}) - describe('ToggleButton scss', () => { it('has to match style dependencies css', () => { const css = loadScss(require.resolve('../style/deps.scss')) diff --git a/packages/dnb-eufemia/src/components/toggle-button/__tests__/ToggleButtonGroup.test.tsx b/packages/dnb-eufemia/src/components/toggle-button/__tests__/ToggleButtonGroup.test.tsx new file mode 100644 index 00000000000..7af1ff90f04 --- /dev/null +++ b/packages/dnb-eufemia/src/components/toggle-button/__tests__/ToggleButtonGroup.test.tsx @@ -0,0 +1,481 @@ +/** + * ToggleButton Test + * + */ + +import { fireEvent, render, cleanup } from '@testing-library/react' +import React from 'react' +import { axeComponent } from '../../../core/jest/jestSetup' +import ToggleButton from '../ToggleButton' +import { Provider } from '../../../shared' + +describe('ToggleButton group component', () => { + it('should support vertical label', () => { + const { rerender } = render( + + + + ) + + const element = document.querySelector('.dnb-toggle-button-group') + const flexElement = element.querySelector('.dnb-flex-container') + + expect(Array.from(flexElement.classList)).toEqual([ + 'dnb-space', + 'dnb-flex-container', + 'dnb-flex-container--direction-vertical', + 'dnb-flex-container--justify-flex-start', + 'dnb-flex-container--align-baseline', + 'dnb-flex-container--spacing-x-small', + 'dnb-flex-container--wrap', + 'dnb-flex-container--divider-space', + ]) + + rerender( + + + + ) + + expect(Array.from(flexElement.classList)).toEqual([ + 'dnb-space', + 'dnb-flex-container', + 'dnb-flex-container--direction-vertical', + 'dnb-flex-container--justify-flex-start', + 'dnb-flex-container--align-baseline', + 'dnb-flex-container--spacing-small', + 'dnb-flex-container--wrap', + 'dnb-flex-container--divider-space', + ]) + }) + + it('has to have variant="radio', () => { + render( + + + + + ) + expect( + document.querySelector('.dnb-radio__button') + ).toBeInTheDocument() + }) + + it('has to have correct aria-pressed', () => { + render( + + + + + ) + expect( + document.querySelector('button#toggle-button-2') + ).toHaveAttribute('aria-pressed') + }) + + it('has "on_change" event which will trigger on a button click', () => { + const my_event = jest.fn() + const myEvent = jest.fn() + render( + + + + + ) + + // first click + fireEvent.click(document.querySelector('button#toggle-button-1')) + expect(my_event).toHaveBeenCalled() + expect(my_event.mock.calls[0][0].value).toBe('first') + + expect(myEvent.mock.calls.length).toBe(1) + expect(myEvent.mock.calls[0][0]).toHaveProperty('value') + expect(myEvent.mock.calls[0][0].value).toBe('first') + expect(myEvent.mock.calls[0][0].event).toBeType('object') + expect(myEvent.mock.calls[0][0].event.target.dataset).toMatchObject({ + attr: 'value', + prop: 'value-1', + }) + + fireEvent.click(document.querySelector('button#toggle-button-2')) + expect(my_event.mock.calls[1][0].value).toBe('second') + expect(my_event.mock.calls[1][0].event.target.dataset).toMatchObject({ + attr: 'value', + prop: 'value-2', + }) + }) + + it('should use formset/legend when label was given', () => { + const { rerender } = render( + + + + + ) + + expect(document.querySelectorAll('fieldset')).toHaveLength(1) + expect(document.querySelectorAll('legend')).toHaveLength(1) + expect(document.querySelectorAll('label')).toHaveLength(0) + + rerender( + + + + + ) + + expect(document.querySelector('fieldset')).not.toBeInTheDocument() + expect(document.querySelector('legend')).not.toBeInTheDocument() + expect(document.querySelector('label')).not.toBeInTheDocument() + }) + + it('should not render label when not label given', () => { + render( + + + + + ) + + expect(document.querySelector('label')).not.toBeInTheDocument() + }) + + it('has multiselect "on_change" event which will trigger on a button click', () => { + const my_event = jest.fn() + render( + + + + + ) + + // first click + fireEvent.click(document.querySelector('button#toggle-button-1')) + + expect(my_event).toHaveBeenCalled() + expect(my_event.mock.calls.length).toBe(1) + expect(my_event.mock.calls[0][0]).toHaveProperty('values') + expect(my_event.mock.calls[0][0].values).toEqual(['second', 'first']) + expect( + document + .querySelector('#toggle-button-1') + .getAttribute('aria-pressed') + ).toBe('true') + expect( + document + .querySelector('#toggle-button-2') + .getAttribute('aria-pressed') + ).toBe('true') + + // second click + fireEvent.click(document.querySelector('button#toggle-button-1')) + expect(my_event.mock.calls[1][0].values).toEqual(['second']) + expect( + document + .querySelector('#toggle-button-1') + .getAttribute('aria-pressed') + ).toBe('false') + expect( + document + .querySelector('#toggle-button-2') + .getAttribute('aria-pressed') + ).toBe('true') + + // third click + fireEvent.click(document.querySelector('button#toggle-button-2')) + expect(my_event.mock.calls[2][0].values).toEqual([]) + expect( + document + .querySelector('#toggle-button-1') + .getAttribute('aria-pressed') + ).toBe('false') + expect( + document + .querySelector('#toggle-button-2') + .getAttribute('aria-pressed') + ).toBe('false') + }) + + it('can be changed from props', () => { + const GroupOf = () => { + const [values, setValues] = React.useState(['second']) + + const selectAll = () => setValues(['first', 'second']) + const deselectAll = () => setValues([]) + + return ( + <> + + + + + + + + ) + } + + render() + + const first = document.querySelector('button#toggle-button-1') + const second = document.querySelector('button#toggle-button-2') + + expect(first.getAttribute('aria-pressed')).toBe('false') + expect(second.getAttribute('aria-pressed')).toBe('true') + + fireEvent.click(document.querySelector('button#select-all')) + + expect(first.getAttribute('aria-pressed')).toBe('true') + expect(second.getAttribute('aria-pressed')).toBe('true') + + fireEvent.click(document.querySelector('button#deselect-all')) + + expect(first.getAttribute('aria-pressed')).toBe('false') + expect(second.getAttribute('aria-pressed')).toBe('false') + }) + + it('will let their items to be check/uncheck by its siblings', () => { + const TestComp = () => { + return ( + + + + + ) + } + + const TestButton = (Comp, id) => { + render(Comp) + + const sel = `button#${id}` + + expect( + document + .querySelector(sel) + .querySelector('.dnb-checkbox__input') + .getAttribute('data-checked') + ).toBe('false') + + fireEvent.click(document.querySelector(sel)) + expect( + document + .querySelector(sel) + .querySelector('.dnb-checkbox__input') + .getAttribute('data-checked') + ).toBe('true') + expect( + document.querySelector(sel).getAttribute('aria-pressed') + ).toBe('true') + + fireEvent.click(document.querySelector(sel)) + expect( + document.querySelector(sel).getAttribute('aria-pressed') + ).toBe('false') + expect( + document.querySelector('.dnb-toggle-button--checked') + ).not.toBeInTheDocument() + expect( + document + .querySelector(sel) + .querySelector('.dnb-checkbox__input') + .getAttribute('data-checked') + ).toBe('false') + + fireEvent.click(document.querySelector(sel)) + expect( + document + .querySelector(sel) + .querySelector('.dnb-checkbox__input') + .getAttribute('data-checked') + ).toBe('true') + + cleanup() + } + + TestButton(, 'toggle-button-1') + + TestButton(, 'toggle-button-2') + }) + + it('should support spacing props', () => { + render( + + + + + ) + + const element = document.querySelector('.dnb-toggle-button-group') + + expect(Array.from(element.classList)).toEqual([ + 'dnb-toggle-button-group', + 'dnb-toggle-button-group--row', + 'dnb-form-component', + 'dnb-space__top--large', + 'dnb-toggle-button-group--no-label', + ]) + }) + + it('should inherit formElement vertical label', () => { + render( + + + + + + + ) + + const element = document.querySelector('.dnb-toggle-button-group') + const attributes = Array.from(element.attributes).map( + (attr) => attr.name + ) + + expect(attributes).toEqual(['class']) + expect(Array.from(element.classList)).toEqual([ + 'dnb-toggle-button-group', + 'dnb-toggle-button-group--row', + 'dnb-form-component', + ]) + expect( + Array.from( + document.querySelector( + '.dnb-toggle-button-group .dnb-flex-container' + ).classList + ) + ).toEqual([ + 'dnb-space', + 'dnb-flex-container', + 'dnb-flex-container--direction-vertical', + 'dnb-flex-container--justify-flex-start', + 'dnb-flex-container--align-baseline', + 'dnb-flex-container--spacing-small', + 'dnb-flex-container--wrap', + 'dnb-flex-container--divider-space', + ]) + expect( + Array.from(document.querySelector('.dnb-flex-container').classList) + ).toEqual([ + 'dnb-space', + 'dnb-flex-container', + 'dnb-flex-container--direction-vertical', + 'dnb-flex-container--justify-flex-start', + 'dnb-flex-container--align-baseline', + 'dnb-flex-container--spacing-small', + 'dnb-flex-container--wrap', + 'dnb-flex-container--divider-space', + ]) + }) + + it('should validate with ARIA rules', async () => { + const Comp = render( + + + + + ) + expect(await axeComponent(Comp)).toHaveNoViolations() + }) +})