diff --git a/src/Modal.js b/src/Modal.js
index d3a5404e1e..44072b9278 100644
--- a/src/Modal.js
+++ b/src/Modal.js
@@ -35,36 +35,13 @@ module.exports = {
return container;
},
- createDialogWithElement: function(element, props, className) {
- var self = this;
-
- var closeDialog = function() {
- ReactDOM.unmountComponentAtNode(self.getOrCreateContainer());
-
- if (props && props.onFinished) props.onFinished.apply(null, arguments);
- };
-
- var dialog = (
-
- );
-
- ReactDOM.render(dialog, this.getOrCreateContainer());
-
- return {close: closeDialog};
- },
-
createDialog: function (Element, props, className) {
var self = this;
+ // never call this via modal.close() from onFinished() otherwise it will loop
var closeDialog = function() {
- ReactDOM.unmountComponentAtNode(self.getOrCreateContainer());
-
if (props && props.onFinished) props.onFinished.apply(null, arguments);
+ ReactDOM.unmountComponentAtNode(self.getOrCreateContainer());
};
// FIXME: If a dialog uses getDefaultProps it clobbers the onFinished
@@ -74,7 +51,7 @@ module.exports = {
-
+
);
diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js
index 389d7be9fb..1cb576d14f 100644
--- a/src/components/structures/RoomView.js
+++ b/src/components/structures/RoomView.js
@@ -522,16 +522,22 @@ module.exports = React.createClass({
var SetDisplayNameDialog = sdk.getComponent('views.dialogs.SetDisplayNameDialog');
var dialog_defer = q.defer();
var dialog_ref;
- var modal;
- var dialog_instance = {
+ Modal.createDialog(SetDisplayNameDialog, {
+ currentDisplayName: result.displayname,
+ ref: (r) => {
dialog_ref = r;
- }} onFinished={() => {
- cli.setDisplayName(dialog_ref.getValue()).done(() => {
- dialog_defer.resolve();
- });
- modal.close();
- }} />
- modal = Modal.createDialogWithElement(dialog_instance);
+ },
+ onFinished: (submitted) => {
+ if (submitted) {
+ cli.setDisplayName(dialog_ref.getValue()).done(() => {
+ dialog_defer.resolve();
+ });
+ }
+ else {
+ dialog_defer.reject();
+ }
+ }
+ });
return dialog_defer.promise;
}
});
@@ -561,6 +567,8 @@ module.exports = React.createClass({
joining: false,
joinError: error
});
+
+ if (!error) return;
var msg = error.message ? error.message : JSON.stringify(error);
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createDialog(ErrorDialog, {