diff --git a/README.md b/README.md
index c0ce889f..0370e406 100644
--- a/README.md
+++ b/README.md
@@ -82,6 +82,7 @@ API
| minuteStep | Number | 1 | interval between minutes in picker |
| secondStep | Number | 1 | interval between seconds in picker |
| focusOnOpen | Boolean | false | automatically focus the input when the picker opens |
+| closeOnEsc | Boolean | true | whether esc should close the picker |
| inputReadOnly | Boolean | false | set input to read only |
## Test Case
diff --git a/src/Header.jsx b/src/Header.jsx
index 21d557ed..50fecb82 100644
--- a/src/Header.jsx
+++ b/src/Header.jsx
@@ -141,7 +141,7 @@ class Header extends Component {
onKeyDown = (e) => {
const { onEsc, onKeyDown } = this.props;
- if (e.keyCode === 27) {
+ if (e.keyCode === 27 && onEsc) {
onEsc();
}
diff --git a/src/Panel.jsx b/src/Panel.jsx
index 648944d5..1bfe883a 100644
--- a/src/Panel.jsx
+++ b/src/Panel.jsx
@@ -45,6 +45,7 @@ class Panel extends Component {
secondStep: PropTypes.number,
addon: PropTypes.func,
focusOnOpen: PropTypes.bool,
+ closeOnEsc: PropTypes.bool,
onKeyDown: PropTypes.func,
};
@@ -60,6 +61,7 @@ class Panel extends Component {
addon: noop,
onKeyDown: noop,
inputReadOnly: false,
+ closeOnEsc: true,
};
constructor(props) {
@@ -117,6 +119,7 @@ class Panel extends Component {
disabledSeconds, hideDisabledOptions, allowEmpty, showHour, showMinute, showSecond,
format, defaultOpenValue, clearText, onEsc, addon, use12Hours, onClear,
focusOnOpen, onKeyDown, hourStep, minuteStep, secondStep, inputReadOnly,
+ closeOnEsc,
} = this.props;
const {
value, currentSelectPanel,
@@ -143,7 +146,7 @@ class Panel extends Component {
defaultOpenValue={defaultOpenValue}
value={value}
currentSelectPanel={currentSelectPanel}
- onEsc={onEsc}
+ onEsc={closeOnEsc ? onEsc : undefined}
format={format}
placeholder={placeholder}
hourOptions={hourOptions}
diff --git a/src/TimePicker.jsx b/src/TimePicker.jsx
index 26166f48..1a374f20 100644
--- a/src/TimePicker.jsx
+++ b/src/TimePicker.jsx
@@ -53,6 +53,7 @@ export default class Picker extends Component {
minuteStep: PropTypes.number,
secondStep: PropTypes.number,
focusOnOpen: PropTypes.bool,
+ closeOnEsc: PropTypes.bool,
onKeyDown: PropTypes.func,
autoFocus: PropTypes.bool,
id: PropTypes.string,
@@ -86,6 +87,7 @@ export default class Picker extends Component {
addon: noop,
use12Hours: false,
focusOnOpen: false,
+ closeOnEsc: true,
onKeyDown: noop,
};
@@ -173,7 +175,7 @@ export default class Picker extends Component {
prefixCls, placeholder, disabledHours,
disabledMinutes, disabledSeconds, hideDisabledOptions, inputReadOnly,
allowEmpty, showHour, showMinute, showSecond, defaultOpenValue, clearText,
- addon, use12Hours, focusOnOpen, onKeyDown, hourStep, minuteStep, secondStep,
+ addon, use12Hours, focusOnOpen, closeOnEsc, onKeyDown, hourStep, minuteStep, secondStep,
} = this.props;
return (
);
diff --git a/tests/Header.spec.jsx b/tests/Header.spec.jsx
index 4b27abb8..291f9387 100644
--- a/tests/Header.spec.jsx
+++ b/tests/Header.spec.jsx
@@ -335,8 +335,8 @@ describe('Header', () => {
});
});
- it('exit correctly', (done) => {
- const picker = renderPicker();
+ const closeOnEscSpec = (closeOnEsc) => (done) => {
+ const picker = renderPicker({ closeOnEsc });
expect(picker.state.open).not.to.be.ok();
const input = TestUtils.scryRenderedDOMComponentsWithClass(picker,
'rc-time-picker-input')[0];
@@ -359,7 +359,7 @@ describe('Header', () => {
});
setTimeout(next, 100);
}, (next) => {
- expect(picker.state.open).to.be(false);
+ expect(picker.state.open).to.be(!closeOnEsc);
expect((header).value).to.be('01:02:03');
expect((input).value).to.be('01:02:03');
@@ -367,7 +367,11 @@ describe('Header', () => {
}], () => {
done();
});
- });
+ };
+
+ it('exit correctly', closeOnEscSpec(true));
+
+ it('stays open if `closeOnEsc` is `false`', closeOnEscSpec(false));
it('focus on open', (done) => {
const picker = renderPicker({