diff --git a/src/Dropdown.js b/src/Dropdown.js index 112a7c650..8f35a915b 100644 --- a/src/Dropdown.js +++ b/src/Dropdown.js @@ -52,10 +52,11 @@ class Dropdown extends React.Component { getContextValue() { return { - toggle: this.props.toggle, + toggle: this.toggle, isOpen: this.props.isOpen, direction: (this.props.direction === 'down' && this.props.dropup) ? 'up' : this.props.direction, inNavbar: this.props.inNavbar, + disabled: this.props.disabled }; } diff --git a/src/DropdownContext.js b/src/DropdownContext.js index 80a021164..8426a24cd 100644 --- a/src/DropdownContext.js +++ b/src/DropdownContext.js @@ -7,6 +7,7 @@ import React from 'react'; * isOpen: PropTypes.bool.isRequired, * direction: PropTypes.oneOf(['up', 'down', 'left', 'right']).isRequired, * inNavbar: PropTypes.bool.isRequired, + * disabled: PropTypes.bool * } */ export const DropdownContext = React.createContext({}); \ No newline at end of file diff --git a/src/DropdownToggle.js b/src/DropdownToggle.js index a8cd30464..6fcb6eeee 100644 --- a/src/DropdownToggle.js +++ b/src/DropdownToggle.js @@ -33,7 +33,7 @@ class DropdownToggle extends React.Component { } onClick(e) { - if (this.props.disabled) { + if (this.props.disabled || this.context.disabled) { e.preventDefault(); return; } diff --git a/src/__tests__/Dropdown.spec.js b/src/__tests__/Dropdown.spec.js index 565c840ff..b34b02a98 100644 --- a/src/__tests__/Dropdown.spec.js +++ b/src/__tests__/Dropdown.spec.js @@ -735,7 +735,7 @@ describe('Dropdown', () => { wrapper.find('#first').hostNodes().simulate('keydown', { which: keyCodes.space }); - expect(Dropdown.prototype.toggle.mock.calls.length).toBe(0); + expect(Dropdown.prototype.toggle.mock.calls.length).toBe(1); expect(click.mock.calls.length).toBe(1); wrapper.detach(); @@ -761,7 +761,7 @@ describe('Dropdown', () => { wrapper.find('#first').hostNodes().simulate('keydown', { which: keyCodes.space }); - expect(Dropdown.prototype.toggle.mock.calls.length).toBe(0); + expect(Dropdown.prototype.toggle.mock.calls.length).toBe(1); expect(click.mock.calls.length).toBe(1); wrapper.detach();