mirror of
https://github.com/facebook/react.git
synced 2026-02-24 20:53:03 +00:00
1. Add a handleHidden method to the BootstrapModal component. 2. Add an event listener for 'hidden.bs.modal' on the modal root 3. Add a new onHidden prop to the BootstrapModal component. 4. Add a new 'handleModalDidClose' method to the Example component to be used as the onHidden prop of it's modal component.
140 lines
3.6 KiB
JavaScript
140 lines
3.6 KiB
JavaScript
'use strict';
|
|
|
|
// Simple pure-React component so we don't have to remember
|
|
// Bootstrap's classes
|
|
var BootstrapButton = React.createClass({
|
|
render: function() {
|
|
return (
|
|
<a {...this.props}
|
|
href="javascript:;"
|
|
role="button"
|
|
className={(this.props.className || '') + ' btn'} />
|
|
);
|
|
}
|
|
});
|
|
|
|
var BootstrapModal = React.createClass({
|
|
// The following two methods are the only places we need to
|
|
// integrate Bootstrap or jQuery with the components lifecycle methods.
|
|
componentDidMount: function() {
|
|
// When the component is added, turn it into a modal
|
|
$(this.refs.root).modal({backdrop: 'static', keyboard: false, show: false});
|
|
|
|
// Bootstrap's modal class exposes a few events for hooking into modal
|
|
// functionality. Lets hook into one of them:
|
|
$(this.refs.root).on('hidden.bs.modal', this.handleHidden);
|
|
},
|
|
componentWillUnmount: function() {
|
|
$(this.refs.root).off('hidden.bs.modal', this.handleHidden);
|
|
},
|
|
close: function() {
|
|
$(this.refs.root).modal('hide');
|
|
},
|
|
open: function() {
|
|
$(this.refs.root).modal('show');
|
|
},
|
|
render: function() {
|
|
var confirmButton = null;
|
|
var cancelButton = null;
|
|
|
|
if (this.props.confirm) {
|
|
confirmButton = (
|
|
<BootstrapButton
|
|
onClick={this.handleConfirm}
|
|
className="btn-primary">
|
|
{this.props.confirm}
|
|
</BootstrapButton>
|
|
);
|
|
}
|
|
if (this.props.cancel) {
|
|
cancelButton = (
|
|
<BootstrapButton onClick={this.handleCancel} className="btn-default">
|
|
{this.props.cancel}
|
|
</BootstrapButton>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<div className="modal fade" ref="root">
|
|
<div className="modal-dialog">
|
|
<div className="modal-content">
|
|
<div className="modal-header">
|
|
<button
|
|
type="button"
|
|
className="close"
|
|
onClick={this.handleCancel}>
|
|
×
|
|
</button>
|
|
<h3>{this.props.title}</h3>
|
|
</div>
|
|
<div className="modal-body">
|
|
{this.props.children}
|
|
</div>
|
|
<div className="modal-footer">
|
|
{cancelButton}
|
|
{confirmButton}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
},
|
|
handleCancel: function() {
|
|
if (this.props.onCancel) {
|
|
this.props.onCancel();
|
|
}
|
|
},
|
|
handleConfirm: function() {
|
|
if (this.props.onConfirm) {
|
|
this.props.onConfirm();
|
|
}
|
|
},
|
|
handleHidden: function() {
|
|
if (this.props.onHidden) {
|
|
this.props.onHidden();
|
|
}
|
|
}
|
|
});
|
|
|
|
var Example = React.createClass({
|
|
handleCancel: function() {
|
|
if (confirm('Are you sure you want to cancel?')) {
|
|
this.refs.modal.close();
|
|
}
|
|
},
|
|
render: function() {
|
|
var modal = null;
|
|
modal = (
|
|
<BootstrapModal
|
|
ref="modal"
|
|
confirm="OK"
|
|
cancel="Cancel"
|
|
onCancel={this.handleCancel}
|
|
onConfirm={this.closeModal}
|
|
onHidden={this.handleModalDidClose}
|
|
title="Hello, Bootstrap!">
|
|
This is a React component powered by jQuery and Bootstrap!
|
|
</BootstrapModal>
|
|
);
|
|
return (
|
|
<div className="example">
|
|
{modal}
|
|
<BootstrapButton onClick={this.openModal} className="btn-default">
|
|
Open modal
|
|
</BootstrapButton>
|
|
</div>
|
|
);
|
|
},
|
|
openModal: function() {
|
|
this.refs.modal.open();
|
|
},
|
|
closeModal: function() {
|
|
this.refs.modal.close();
|
|
},
|
|
handleModalDidClose: function() {
|
|
alert("The modal has been dismissed!");
|
|
}
|
|
});
|
|
|
|
ReactDOM.render(<Example />, document.getElementById('jqueryexample'));
|