From b5a41cbbc3e80456533d5772829dd0156ae1a020 Mon Sep 17 00:00:00 2001 From: pseo Date: Thu, 25 Feb 2016 16:37:21 +0800 Subject: [PATCH 1/3] fix#16 --- src/Dialog.jsx | 2 +- src/DialogWrap.jsx | 4 +++- tests/index.spec.js | 30 ++++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/Dialog.jsx b/src/Dialog.jsx index 95d2df37..9ad478a9 100644 --- a/src/Dialog.jsx +++ b/src/Dialog.jsx @@ -88,7 +88,7 @@ const Dialog = React.createClass({ }, onMaskClick(e) { - if (this.props.closable) { + if (this.props.closable && this.props.maskClosable) { this.close(e); } ReactDOM.findDOMNode(this.refs.dialog).focus(); diff --git a/src/DialogWrap.jsx b/src/DialogWrap.jsx index ce785d3b..1121b1d5 100644 --- a/src/DialogWrap.jsx +++ b/src/DialogWrap.jsx @@ -78,7 +78,7 @@ class DialogWrap extends React.Component { getDialogElement(extra) { const props = this.props; let dialogProps = copy(props, [ - 'className', 'closable', 'align', + 'className', 'closable','maskClosable', 'align', 'title', 'footer', 'mask', 'animation', 'transitionName', 'maskAnimation', 'maskTransitionName', 'mousePosition', @@ -120,6 +120,7 @@ DialogWrap.defaultProps = { }, mask: true, closable: true, + maskClosable: true, prefixCls: 'rc-dialog', onClose: noop, }; @@ -132,6 +133,7 @@ DialogWrap.propTypes = { }), mask: React.PropTypes.bool, closable: React.PropTypes.bool, + maskClosable: React.PropTypes.bool, prefixCls: React.PropTypes.string, visible: React.PropTypes.bool, onClose: React.PropTypes.func, diff --git a/tests/index.spec.js b/tests/index.spec.js index 5fe28be8..9afc50b2 100644 --- a/tests/index.spec.js +++ b/tests/index.spec.js @@ -110,6 +110,36 @@ describe('dialog', function() { }], finish); }); + it('mask to close', function (finish) { + async.series([function (done) { + dialog.setState({ + visible: true + }); + setTimeout(done, 10); + }, function(done) { + const mask = $('.rc-dialog-mask')[0]; + Simulate.click(mask); + setTimeout(done, 10); + }, function(done) { + //dialog should closed after mask click + expect(callback1).to.be(1); + expect($('.rc-dialog').hasClass('rc-dialog-hidden')).to.be.ok(); + done(); + }, function(done) { + dialog.setState({ + visible: true, + maskClosable: false + }); + + setTimeout(done, 10); + }, function(done) { + //dialog should stay on visible after mask click if set maskClosable to false + //expect(callback1).to.be(0); + expect($('.rc-dialog').hasClass('rc-dialog-hidden')).not.to.be.ok(); + done(); + }], finish) + }); + it('renderToBody', function() { const d = ReactDOM.render(

1

From 966efe1cbb2936dfb23f60e8c8dba7aaeae07ed4 Mon Sep 17 00:00:00 2001 From: pseo Date: Fri, 26 Feb 2016 19:45:56 +0800 Subject: [PATCH 2/3] fix#16 --- README.md | 6 ++++++ src/Dialog.jsx | 1 + src/DialogWrap.jsx | 2 +- tests/index.spec.js | 16 ++++++++-------- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 7d88df24..b61cccc0 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,12 @@ ReactDOM.render( true whether show close button and click mask to close + + maskClosable + Boolean + true + whether click mask to close, this props will ignored if set closable prop to false + mousePosition {x:number,y:number} diff --git a/src/Dialog.jsx b/src/Dialog.jsx index 9ad478a9..83cf46be 100644 --- a/src/Dialog.jsx +++ b/src/Dialog.jsx @@ -48,6 +48,7 @@ const Dialog = React.createClass({ onAfterClose: PropTypes.func, onClose: PropTypes.func, closable: PropTypes.bool, + maskClosable: PropTypes.bool, visible: PropTypes.bool, mousePosition: PropTypes.object, }, diff --git a/src/DialogWrap.jsx b/src/DialogWrap.jsx index 1121b1d5..df872762 100644 --- a/src/DialogWrap.jsx +++ b/src/DialogWrap.jsx @@ -78,7 +78,7 @@ class DialogWrap extends React.Component { getDialogElement(extra) { const props = this.props; let dialogProps = copy(props, [ - 'className', 'closable','maskClosable', 'align', + 'className', 'closable', 'maskClosable', 'align', 'title', 'footer', 'mask', 'animation', 'transitionName', 'maskAnimation', 'maskTransitionName', 'mousePosition', diff --git a/tests/index.spec.js b/tests/index.spec.js index 9afc50b2..ef77bff9 100644 --- a/tests/index.spec.js +++ b/tests/index.spec.js @@ -110,10 +110,10 @@ describe('dialog', function() { }], finish); }); - it('mask to close', function (finish) { - async.series([function (done) { + it('mask to close', function(finish) { + async.series([function(done) { dialog.setState({ - visible: true + visible: true, }); setTimeout(done, 10); }, function(done) { @@ -121,23 +121,23 @@ describe('dialog', function() { Simulate.click(mask); setTimeout(done, 10); }, function(done) { - //dialog should closed after mask click + // dialog should closed after mask click expect(callback1).to.be(1); expect($('.rc-dialog').hasClass('rc-dialog-hidden')).to.be.ok(); done(); }, function(done) { dialog.setState({ visible: true, - maskClosable: false + maskClosable: false, }); setTimeout(done, 10); }, function(done) { - //dialog should stay on visible after mask click if set maskClosable to false - //expect(callback1).to.be(0); + // dialog should stay on visible after mask click if set maskClosable to false + // expect(callback1).to.be(0); expect($('.rc-dialog').hasClass('rc-dialog-hidden')).not.to.be.ok(); done(); - }], finish) + }], finish); }); it('renderToBody', function() { From 5176efdc3f492ff087f69a2e9a4678843ce122df Mon Sep 17 00:00:00 2001 From: pseo Date: Fri, 26 Feb 2016 20:58:46 +0800 Subject: [PATCH 3/3] update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b61cccc0..8b7631c6 100644 --- a/README.md +++ b/README.md @@ -115,7 +115,7 @@ ReactDOM.render( maskClosable Boolean true - whether click mask to close, this props will ignored if set closable prop to false + whether click mask to close, this prop will be ignored if set closable prop to false mousePosition