summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Borton <digitaltoad@gmail.com>2016-11-15 14:23:26 -0500
committerJoram Wilander <jwawilander@gmail.com>2016-11-15 14:23:26 -0500
commit0b296dd8c2aefefe89787be5cc627d44cf431150 (patch)
tree3e7770111c93e8dfbee55482115ff9ffe943d5c4
parentb7a063446b932922f8830c1a0590c8f1f2bca65b (diff)
downloadchat-0b296dd8c2aefefe89787be5cc627d44cf431150.tar.gz
chat-0b296dd8c2aefefe89787be5cc627d44cf431150.tar.bz2
chat-0b296dd8c2aefefe89787be5cc627d44cf431150.zip
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.
-rw-r--r--webapp/components/change_url_modal.jsx2
-rw-r--r--webapp/components/new_channel_flow.jsx14
-rw-r--r--webapp/components/new_channel_modal.jsx2
3 files changed, 17 insertions, 1 deletions
diff --git a/webapp/components/change_url_modal.jsx b/webapp/components/change_url_modal.jsx
index fa115cf36..c9d2f3245 100644
--- a/webapp/components/change_url_modal.jsx
+++ b/webapp/components/change_url_modal.jsx
@@ -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
};
diff --git a/webapp/components/new_channel_flow.jsx b/webapp/components/new_channel_flow.jsx
index c6c265725..b37e6cf35 100644
--- a/webapp/components/new_channel_flow.jsx
+++ b/webapp/components/new_channel_flow.jsx
@@ -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>
);
diff --git a/webapp/components/new_channel_modal.jsx b/webapp/components/new_channel_modal.jsx
index 4122c3bfb..6ca8911c5 100644
--- a/webapp/components/new_channel_modal.jsx
+++ b/webapp/components/new_channel_modal.jsx
@@ -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