From 8612b91204a3abd004ddfbcbe9b380f91081ea79 Mon Sep 17 00:00:00 2001 From: Jimmy Jia Date: Fri, 16 Oct 2015 19:38:49 -0400 Subject: [PATCH] [fixed] Respect onClick on MenuItem --- src/MenuItem.js | 23 ++++++++++++----------- test/MenuItemSpec.js | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/MenuItem.js b/src/MenuItem.js index e2f6777301..a6ff69de23 100644 --- a/src/MenuItem.js +++ b/src/MenuItem.js @@ -1,7 +1,9 @@ -import React from 'react'; import classnames from 'classnames'; +import React from 'react'; import all from 'react-prop-types/lib/all'; + import SafeAnchor from './SafeAnchor'; +import createChainedFunction from './utils/createChainedFunction'; export default class MenuItem extends React.Component { constructor(props) { @@ -35,6 +37,8 @@ export default class MenuItem extends React.Component { ); } + const {className, style, href, onClick, ...props} = this.props; + const classes = { disabled: this.props.disabled, active: this.props.active @@ -42,20 +46,16 @@ export default class MenuItem extends React.Component { return (
  • - {this.props.children} - + href={href || ''} + onClick={createChainedFunction(onClick, this.handleClick)} + />
  • ); } @@ -80,6 +80,7 @@ MenuItem.propTypes = { href: React.PropTypes.string, target: React.PropTypes.string, title: React.PropTypes.string, + onClick: React.PropTypes.func, onKeyDown: React.PropTypes.func, onSelect: React.PropTypes.func, id: React.PropTypes.oneOfType([ diff --git a/test/MenuItemSpec.js b/test/MenuItemSpec.js index e8a88395ef..7fb7037220 100644 --- a/test/MenuItemSpec.js +++ b/test/MenuItemSpec.js @@ -82,6 +82,21 @@ describe('MenuItem', () => { ReactTestUtils.Simulate.click(anchor); }); + it('should call custom onClick', () => { + const handleClick = sinon.spy(); + const handleSelect = sinon.spy(); + + const instance = ReactTestUtils.renderIntoDocument( + Item + ); + const anchor = ReactTestUtils.findRenderedDOMComponentWithTag(instance, 'A'); + + ReactTestUtils.Simulate.click(anchor); + + expect(handleClick).to.have.been.called; + expect(handleSelect).to.have.been.called; + }); + it('does not fire onSelect when divider is clicked', () => { const handleSelect = () => { throw new Error('Should not invoke onSelect with divider flag applied');