Add Add onExit hook to new_channel_modal (#4344)

This delays updating the url with the new channel until after the modal
is exited which bypasses a state where the center textarea is focused
and then focus is removed due to how react-overlays handles restoring
focus to the last element focused before the modal was shown.
Этот коммит содержится в:
Joshua Borton
2016-11-15 14:23:26 -05:00
коммит произвёл Joram Wilander
родитель b7a063446b
Коммит 0b296dd8c2
3 изменённых файлов: 17 добавлений и 1 удалений

Просмотреть файл

@@ -145,6 +145,7 @@ export default class ChangeUrlModal extends React.Component {
<Modal
show={this.props.show}
onHide={this.doCancel}
onExited={this.props.onModalExited}
>
<Modal.Header closeButton={true}>
<Modal.Title>{this.props.title}</Modal.Title>
@@ -226,5 +227,6 @@ ChangeUrlModal.propTypes = {
currentURL: React.PropTypes.string,
serverError: React.PropTypes.node,
onModalSubmit: React.PropTypes.func.isRequired,
onModalExited: React.PropTypes.func.optional,
onModalDismissed: React.PropTypes.func.isRequired
};

Просмотреть файл

@@ -53,6 +53,7 @@ class NewChannelFlow extends React.Component {
super(props);
this.doSubmit = this.doSubmit.bind(this);
this.onModalExited = this.onModalExited.bind(this);
this.typeSwitched = this.typeSwitched.bind(this);
this.urlChangeRequested = this.urlChangeRequested.bind(this);
this.urlChangeSubmitted = this.urlChangeSubmitted.bind(this);
@@ -117,8 +118,11 @@ class NewChannelFlow extends React.Component {
member: data2.member
});
this.doOnModalExited = () => {
browserHistory.push(TeamStore.getCurrentTeamRelativeUrl() + '/channels/' + data2.channel.name);
};
this.props.onModalDismissed();
browserHistory.push(TeamStore.getCurrentTeamRelativeUrl() + '/channels/' + data2.channel.name);
}
);
},
@@ -143,6 +147,11 @@ class NewChannelFlow extends React.Component {
}
);
}
onModalExited() {
if (this.doOnModalExited) {
this.doOnModalExited();
}
}
typeSwitched() {
if (this.state.channelType === 'P') {
this.setState({channelType: 'O'});
@@ -223,6 +232,7 @@ class NewChannelFlow extends React.Component {
serverError={this.state.serverError}
onSubmitChannel={this.doSubmit}
onModalDismissed={this.props.onModalDismissed}
onModalExited={this.onModalExited}
onTypeSwitched={this.typeSwitched}
onChangeURLPressed={this.urlChangeRequested}
onDataChanged={this.channelDataChanged}
@@ -233,6 +243,7 @@ class NewChannelFlow extends React.Component {
channelData={channelData}
serverError={this.state.serverError}
onSubmitChannel={this.doSubmit}
onModalExited={this.onModalExited}
onModalDismissed={this.props.onModalDismissed}
onTypeSwitched={this.typeSwitched}
onChangeURLPressed={this.urlChangeRequested}
@@ -248,6 +259,7 @@ class NewChannelFlow extends React.Component {
serverError={this.state.serverError}
onModalSubmit={this.urlChangeSubmitted}
onModalDismissed={this.urlChangeDismissed}
onModalExited={this.onModalExited}
/>
</span>
);

Просмотреть файл

@@ -209,6 +209,7 @@ class NewChannelModal extends React.Component {
show={this.props.show}
bsSize='large'
onHide={this.props.onModalDismissed}
onExited={this.props.onModalExited}
>
<Modal.Header closeButton={true}>
<Modal.Title>
@@ -382,6 +383,7 @@ NewChannelModal.propTypes = {
serverError: React.PropTypes.node,
onSubmitChannel: React.PropTypes.func.isRequired,
onModalDismissed: React.PropTypes.func.isRequired,
onModalExited: React.PropTypes.func.optional,
onTypeSwitched: React.PropTypes.func.isRequired,
onChangeURLPressed: React.PropTypes.func.isRequired,
onDataChanged: React.PropTypes.func.isRequired