diff --git a/src/components/delete-button/delete-button.jsx b/src/components/delete-button/delete-button.jsx index acbb365a444469fe9a4413812519ebfd3930ba9e..62dfcc08a44c041549ffbb606d69497f24ce4b02 100644 --- a/src/components/delete-button/delete-button.jsx +++ b/src/components/delete-button/delete-button.jsx @@ -1,31 +1,58 @@ import PropTypes from 'prop-types'; import React from 'react'; +import bindAll from 'lodash.bindall'; import classNames from 'classnames'; import styles from './delete-button.css'; import deleteIcon from './icon--delete.svg'; -const DeleteButton = props => ( - <div - aria-label="Delete" - className={classNames( - styles.deleteButton, - props.className - )} - role="button" - tabIndex={props.tabIndex} - onClick={props.onClick} - > - <div className={styles.deleteButtonVisible}> - <img - className={styles.deleteIcon} - draggable={false} - src={deleteIcon} - /> - </div> - </div> - -); +class DeleteButton extends React.Component { + constructor (props) { + super(props); + bindAll(this, [ + 'handleKeyPress', + 'setRef' + ]); + } + componentDidMount () { + document.addEventListener('keydown', this.handleKeyPress); + } + componentWillUnmount () { + document.removeEventListener('keydown', this.handleKeyPress); + } + setRef (ref) { + this.ref = ref; + } + handleKeyPress (event) { + if (this.ref === event.currentTarget.activeElement && (event.key === 'Enter' || event.key === ' ')) { + this.props.onClick(event); + event.preventDefault(); + } + } + render () { + return ( + <div + aria-label="Delete" + className={classNames( + styles.deleteButton, + this.props.className + )} + ref={this.setRef} + role="button" + tabIndex={this.props.tabIndex} + onClick={this.props.onClick} + > + <div className={styles.deleteButtonVisible}> + <img + className={styles.deleteIcon} + draggable={false} + src={deleteIcon} + /> + </div> + </div> + ); + } +} DeleteButton.propTypes = { className: PropTypes.string,