diff --git a/src/ActionBar/ActionBar.test.js b/src/ActionBar/ActionBar.test.js index d2d1d73bd..debb28f45 100644 --- a/src/ActionBar/ActionBar.test.js +++ b/src/ActionBar/ActionBar.test.js @@ -74,6 +74,20 @@ describe('', () => { expect(tree).toMatchSnapshot(); }); + describe('ActionBar Header', () => { + test('should allow customization of header level', () => { + const element = mount( + + ); + expect( + element.find('.fd-action-bar__title').type() + ).toBe('h2'); + }); + }); + describe('Prop spreading', () => { test('should allow props to be spread to the ActionBar component', () => { const element = mount(); @@ -121,7 +135,7 @@ describe('', () => { ).toBe('Sample'); }); - test('should allow props to be spread to the ActionBarHeader component\'s h1 element', () => { + test('should allow props to be spread to the ActionBarHeader component\'s heading element', () => { const element = mount( ', () => { ); expect( - element.find('h1').getDOMNode().attributes['data-sample'].value + element.find('h3').getDOMNode().attributes['data-sample'].value ).toBe('Sample'); }); diff --git a/src/ActionBar/_ActionBarHeader.js b/src/ActionBar/_ActionBarHeader.js index fe8e29ea4..d8792a889 100644 --- a/src/ActionBar/_ActionBarHeader.js +++ b/src/ActionBar/_ActionBarHeader.js @@ -1,18 +1,21 @@ import classnames from 'classnames'; +import CustomPropTypes from '../utils/CustomPropTypes/CustomPropTypes'; import PropTypes from 'prop-types'; import React from 'react'; -const ActionBarHeader = ({ className, description, descriptionProps, title, titleProps, ...props }) => { +const ActionBarHeader = ({ className, description, descriptionProps, headingLevel, title, titleProps, ...props }) => { const actionBarHeaderClasses = classnames( 'fd-action-bar__header', className ); + const HeadingTag = `h${headingLevel}`; + return (
-

{title}

+ className='fd-action-bar__title'>{title} {description &&

` element.' + descriptionProps: 'Additional props to be spread to the description\'s `

` element.', + headingLevel: 'Heading level. `

` is reserved for the page title.' }; export default ActionBarHeader; diff --git a/src/ActionBar/__snapshots__/ActionBar.test.js.snap b/src/ActionBar/__snapshots__/ActionBar.test.js.snap index 33da7a377..633b954b1 100644 --- a/src/ActionBar/__snapshots__/ActionBar.test.js.snap +++ b/src/ActionBar/__snapshots__/ActionBar.test.js.snap @@ -14,11 +14,11 @@ exports[` create basic Action Bar 1`] = `
-

Page Title -

+

@@ -49,11 +49,11 @@ exports[` create basic Action Bar 2`] = `

-

Page Title -

+

@@ -91,11 +91,11 @@ exports[` create basic mobile Action Bar 1`] = `

-

Page Title -

+

@@ -134,11 +134,11 @@ exports[` create basic mobile Action Bar 2`] = `

-

Page Title -

+

diff --git a/src/Menu/Menu.test.js b/src/Menu/Menu.test.js index c87253031..5aa05331b 100644 --- a/src/Menu/Menu.test.js +++ b/src/Menu/Menu.test.js @@ -131,6 +131,16 @@ describe('

', () => { expect(tree).toMatchSnapshot(); }); + describe('MenuGroup', () => { + test('should allow customization of header level', () => { + const element = mount(); + + expect( + element.find('.fd-menu__title').type() + ).toBe('h2'); + }); + }); + describe('Prop spreading', () => { test('should allow props to be spread to the Menu component', () => { const element = mount(); @@ -221,11 +231,11 @@ describe('', () => { ).toBe('Sample'); }); - test('should allow props to be spread to the MenuGroup h1 component', () => { + test('should allow props to be spread to the MenuGroup heading component', () => { const element = mount(); expect( - element.find('h1').getDOMNode().attributes['data-sample'].value + element.find('h3').getDOMNode().attributes['data-sample'].value ).toBe('Sample'); }); }); diff --git a/src/Menu/_MenuGroup.js b/src/Menu/_MenuGroup.js index 750d535c7..ac067fad8 100644 --- a/src/Menu/_MenuGroup.js +++ b/src/Menu/_MenuGroup.js @@ -1,16 +1,19 @@ import classnames from 'classnames'; +import CustomPropTypes from '../utils/CustomPropTypes/CustomPropTypes'; import PropTypes from 'prop-types'; import React from 'react'; -const MenuGroup = ({ title, children, className, titleProps, ...props }) => { +const MenuGroup = ({ title, children, className, headingLevel, titleProps, ...props }) => { const menuGroupClasses = classnames( 'fd-menu__group', className ); + const HeadingTag = `h${headingLevel}`; + return (
-

{title}

+ {title} {children}
); @@ -21,7 +24,12 @@ MenuGroup.displayName = 'Menu.Group'; MenuGroup.propTypes = { title: PropTypes.string.isRequired, className: PropTypes.string, + headingLevel: CustomPropTypes.range(2, 6), titleProps: PropTypes.object }; +MenuGroup.defaultProps = { + headingLevel: 3 +}; + export default MenuGroup; diff --git a/src/Menu/__snapshots__/Menu.test.js.snap b/src/Menu/__snapshots__/Menu.test.js.snap index f866fae19..6bb13bc0e 100644 --- a/src/Menu/__snapshots__/Menu.test.js.snap +++ b/src/Menu/__snapshots__/Menu.test.js.snap @@ -144,11 +144,11 @@ exports[` create menu group component 1`] = `
-

Group Header -

+
    @@ -184,11 +184,11 @@ exports[` create menu group component 1`] = `
    -

    Group Header 2 -

    +
      diff --git a/src/Modal/Modal.js b/src/Modal/Modal.js index 502b44f6c..fd0bb3de3 100644 --- a/src/Modal/Modal.js +++ b/src/Modal/Modal.js @@ -30,7 +30,7 @@ class Modal extends Component { } render() { - const { localizedText, children, title, actions, className, show, titleProps, closeProps, contentProps, headerProps, footerProps, bodyProps, ...rest } = this.props; + const { localizedText, children, title, actions, className, headingLevel, show, titleProps, closeProps, contentProps, headerProps, footerProps, bodyProps, ...rest } = this.props; const modalClasses = classnames( 'fd-ui__overlay', @@ -39,6 +39,8 @@ class Modal extends Component { className ); + const HeadingTag = `h${headingLevel}`; + if (!show) { return null; } @@ -63,9 +65,9 @@ class Modal extends Component { className='fd-modal__content' role='document'>
      -

      + {title} -

      +