Skip to content

Commit 1306eb2

Browse files
Jmenachemartijnrusschen
authored andcommitted
Added preventOpenOnFocus prop (Hacker0x01#1181)
* Added preventOpenOnFocus prop * Added tests for preventOpenOnFocus prop
1 parent f8c9868 commit 1306eb2

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

Diff for: src/index.jsx

+6-2
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ export default class DatePicker extends React.Component {
9494
popperClassName: PropTypes.string, // <PopperComponent/> props
9595
popperModifiers: PropTypes.object, // <PopperComponent/> props
9696
popperPlacement: PropTypes.oneOf(popperPlacementPositions), // <PopperComponent/> props
97+
preventOpenOnFocus: PropTypes.bool,
9798
readOnly: PropTypes.bool,
9899
required: PropTypes.bool,
99100
scrollableYearDropdown: PropTypes.bool,
@@ -139,6 +140,7 @@ export default class DatePicker extends React.Component {
139140
onSelect () {},
140141
onClickOutside () {},
141142
onMonthChange () {},
143+
preventOpenOnFocus: false,
142144
onYearChange () {},
143145
monthsShown: 1,
144146
withPortal: false,
@@ -215,7 +217,9 @@ export default class DatePicker extends React.Component {
215217
handleFocus = (event) => {
216218
if (!this.state.preventFocus) {
217219
this.props.onFocus(event)
218-
this.setOpen(true)
220+
if (!this.props.preventOpenOnFocus) {
221+
this.setOpen(true)
222+
}
219223
}
220224
}
221225

@@ -344,7 +348,7 @@ export default class DatePicker extends React.Component {
344348
onInputKeyDown = (event) => {
345349
this.props.onKeyDown(event)
346350
const eventKey = event.key
347-
if (!this.state.open && !this.props.inline) {
351+
if (!this.state.open && !this.props.inline && !this.props.preventOpenOnFocus) {
348352
if (eventKey !== 'Enter' && eventKey !== 'Escape' && eventKey !== 'Tab') {
349353
this.onInputClick()
350354
}

Diff for: test/datepicker_test.js

+16
Original file line numberDiff line numberDiff line change
@@ -784,4 +784,20 @@ describe('DatePicker', () => {
784784
datePicker.setProps({ selected: future })
785785
expect(utils.formatDate(datePicker.state('preSelection'), 'YYYY-MM-DD')).to.equal(utils.formatDate(future, 'YYYY-MM-DD'))
786786
})
787+
it('should not set open state when focusing on the date input and the preventOpenOnFocus prop is set', () => {
788+
const datePicker = TestUtils.renderIntoDocument(
789+
<DatePicker preventOpenOnFocus />
790+
)
791+
const dateInput = datePicker.input
792+
TestUtils.Simulate.focus(ReactDOM.findDOMNode(dateInput))
793+
expect(datePicker.state.open).to.be.false
794+
})
795+
it('should not set open state onInputKeyDown when preventOpenOnFocus prop is set', () => {
796+
const datePicker = TestUtils.renderIntoDocument(
797+
<DatePicker preventOpenOnFocus />
798+
)
799+
const dateInput = datePicker.input
800+
TestUtils.Simulate.keyDown(ReactDOM.findDOMNode(dateInput), getKey('ArrowLeft'))
801+
expect(datePicker.state.open).to.be.false
802+
})
787803
})

0 commit comments

Comments
 (0)