Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Commit

Permalink
Improve Reviews by Product accessibility (#861)
Browse files Browse the repository at this point in the history
* Improve Reviews by Product accessibility

* Make 'onClick' prop not required in <LoadMoreButton>

* Wrap Reviews by Product editor block with <Disabled>
  • Loading branch information
Aljullu authored Aug 15, 2019
1 parent e8fef34 commit cdb9d26
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 13 deletions.
36 changes: 28 additions & 8 deletions assets/js/base/components/load-more-button/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,44 @@
* External dependencies
*/
import { __ } from '@wordpress/i18n';
import { Fragment } from 'react';
import PropTypes from 'prop-types';

/**
* Internal dependencies
*/
import './style.scss';

export const LoadMoreButton = ( { onClick } ) => (
<button
className="wc-block-load-more"
onClick={ onClick }
>
{ __( 'Load more', 'woo-gutenberg-products-block' ) }
</button>
);
export const LoadMoreButton = ( { onClick, label, screenReaderLabel } ) => {
const labelNode = ( screenReaderLabel && label !== screenReaderLabel ) ? (
<Fragment>
<span aria-hidden>
{ label }
</span>
<span className="screen-reader-text">
{ screenReaderLabel }
</span>
</Fragment>
) : label;

return (
<button
className="wc-block-load-more"
onClick={ onClick }
>
{ labelNode }
</button>
);
};

LoadMoreButton.propTypes = {
label: PropTypes.string,
onClick: PropTypes.func,
screenReaderLabel: PropTypes.string,
};

LoadMoreButton.defaultProps = {
label: __( 'Load more', 'woo-gutenberg-products-block' ),
};

export default LoadMoreButton;
7 changes: 6 additions & 1 deletion assets/js/base/components/review-order-select/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@ const ReviewOrderSelect = ( { componentId, onChange, readOnly, value } ) => {
return (
<p className="wc-block-review-order-select">
<label className="wc-block-review-order-select__label" htmlFor={ selectId }>
{ __( 'Order by', 'woo-gutenberg-products-block' ) }
<span aria-hidden>
{ __( 'Order by', 'woo-gutenberg-products-block' ) }
</span>
<span className="screen-reader-text">
{ __( 'Order reviews by', 'woo-gutenberg-products-block' ) }
</span>
</label>
<select // eslint-disable-line jsx-a11y/no-onchange
id={ selectId }
Expand Down
9 changes: 6 additions & 3 deletions assets/js/blocks/reviews-by-product/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
} from '@wordpress/editor';
import {
Button,
Disabled,
Notice,
PanelBody,
Placeholder,
Expand Down Expand Up @@ -292,9 +293,11 @@ const ReviewsByProductEditor = ( { attributes, debouncedSpeak, error, getProduct
} } />
</Placeholder>
) : (
<div className={ classes }>
<EditorBlock attributes={ attributes } />
</div>
<Disabled>
<div className={ classes }>
<EditorBlock attributes={ attributes } />
</div>
</Disabled>
) }
</Fragment>
);
Expand Down
5 changes: 4 additions & 1 deletion assets/js/blocks/reviews-by-product/editor-block.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/**
* External dependencies
*/
import { __ } from '@wordpress/i18n';
import { Component, Fragment } from 'react';
import PropTypes from 'prop-types';
import { debounce } from 'lodash';
Expand Down Expand Up @@ -85,7 +86,9 @@ class EditorBlock extends Component {
reviews={ reviews }
/>
{ ( attributes.showLoadMore && totalReviews > reviews.length ) && (
<LoadMoreButton />
<LoadMoreButton
screenReaderLabel={ __( 'Load more reviews', 'woo-gutenberg-products-block' ) }
/>
) }
</Fragment>
);
Expand Down
23 changes: 23 additions & 0 deletions assets/js/blocks/reviews-by-product/frontend-block.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
/**
* External dependencies
*/
import { __, _n, sprintf } from '@wordpress/i18n';
import { Component, Fragment } from 'react';
import PropTypes from 'prop-types';
import { speak } from '@wordpress/a11y';

/**
* Internal dependencies
Expand Down Expand Up @@ -55,6 +57,9 @@ class FrontendBlock extends Component {
this.setState( { reviews, totalReviews } );
} ).catch( () => {
this.setState( { reviews: [] } );
speak(
__( 'There was an error loading the reviews.', 'woo-gutenberg-products-block' )
);
} );
}

Expand All @@ -76,8 +81,21 @@ class FrontendBlock extends Component {
reviews: reviews.filter( ( review ) => Object.keys( review ).length ).concat( newReviews ),
totalReviews: newTotalReviews,
} );
speak(
sprintf(
_n(
'%d review loaded.',
'%d reviews loaded.',
'woo-gutenberg-products-block'
),
newReviews.length
)
);
} ).catch( () => {
this.setState( { reviews: [] } );
speak(
__( 'There was an error loading the reviews.', 'woo-gutenberg-products-block' )
);
} );
}

Expand All @@ -101,8 +119,12 @@ class FrontendBlock extends Component {
};
getReviews( args ).then( ( { reviews, totalReviews: newTotalReviews } ) => {
this.setState( { reviews, totalReviews: newTotalReviews } );
speak( __( 'Reviews order updated.', 'woo-gutenberg-products-block' ) );
} ).catch( () => {
this.setState( { reviews: [] } );
speak(
__( 'There was an error loading the reviews.', 'woo-gutenberg-products-block' )
);
} );
}

Expand All @@ -127,6 +149,7 @@ class FrontendBlock extends Component {
{ ( attributes.showLoadMore && totalReviews > reviews.length ) && (
<LoadMoreButton
onClick={ this.appendReviews }
screenReaderLabel={ __( 'Load more reviews', 'woo-gutenberg-products-block' ) }
/>
) }
</Fragment>
Expand Down

0 comments on commit cdb9d26

Please sign in to comment.