Initial implementation: SetDisplayName -> SetMxIdDialog

- Replaces SetDisplayNameDialog with SetMxIdDialog. This new dialog will use InteractiveAuth to authenticate a user with their chosen mxid.

De-scoped:
 - style tweaks for the InteractiveAuth in the dialog (capcha) and error message.
 - checking for mxid availability
This commit is contained in:
Luke Barnard 2017-04-28 13:22:55 +01:00
parent 19482d751d
commit 8774100508
6 changed files with 182 additions and 121 deletions

View file

@ -43,6 +43,10 @@ export default React.createClass({
onRoomCreated: React.PropTypes.func,
onUserSettingsClose: React.PropTypes.func,
// Called with the credentials of a registered user (if they were a ROU that
// transitioned to PWLU)
onRegistered: React.PropTypes.func,
teamToken: React.PropTypes.string,
// and lots and lots of other stuff.
@ -184,6 +188,7 @@ export default React.createClass({
roomAddress={this.props.currentRoomAlias || this.props.currentRoomId}
autoJoin={this.props.autoJoin}
onRoomIdResolved={this.props.onRoomIdResolved}
onRegistered={this.props.onRegistered}
eventId={this.props.initialEventId}
thirdPartyInvite={this.props.thirdPartyInvite}
oobData={this.props.roomOobData}

View file

@ -1166,6 +1166,7 @@ module.exports = React.createClass({
onRoomIdResolved={this.onRoomIdResolved}
onRoomCreated={this.onRoomCreated}
onUserSettingsClose={this.onUserSettingsClose}
onRegistered={this.onRegistered}
teamToken={this._teamToken}
{...this.props}
{...this.state}

View file

@ -69,6 +69,10 @@ module.exports = React.createClass({
// once it has been resolved.
onRoomIdResolved: React.PropTypes.func,
// Called with the credentials of a registered user (if they were a ROU that
// transitioned to PWLU)
onRegistered: React.PropTypes.func,
// An object representing a third party invite to join this room
// Fields:
// * inviteSignUrl (string) The URL used to join this room from an email invite
@ -764,38 +768,27 @@ module.exports = React.createClass({
var self = this;
var cli = MatrixClientPeg.get();
var display_name_promise = q();
// if this is the first room we're joining, check the user has a display name
// and if they don't, prompt them to set one.
// NB. This unfortunately does not re-use the ChangeDisplayName component because
// it doesn't behave quite as desired here (we want an input field here rather than
// content-editable, and we want a default).
if (cli.getRooms().filter((r) => {
return r.hasMembershipState(cli.credentials.userId, "join");
})) {
display_name_promise = cli.getProfileInfo(cli.credentials.userId).then((result) => {
if (!result.displayname) {
var SetDisplayNameDialog = sdk.getComponent('views.dialogs.SetDisplayNameDialog');
var dialog_defer = q.defer();
Modal.createDialog(SetDisplayNameDialog, {
currentDisplayName: result.displayname,
onFinished: (submitted, newDisplayName) => {
if (submitted) {
cli.setDisplayName(newDisplayName).done(() => {
dialog_defer.resolve();
});
}
else {
dialog_defer.reject();
}
}
});
return dialog_defer.promise;
var mxIdPromise = q();
// If the user is a ROU, allow them to transition to a PWLU
if (cli.isGuest()) {
const SetMxIdDialog = sdk.getComponent('views.dialogs.SetMxIdDialog');
mxIdPromise = q.defer();
Modal.createDialog(SetMxIdDialog, {
onFinished: (submitted, credentials) => {
if (!submitted) {
mxIdPromise.reject();
}
this.props.onRegistered(credentials);
mxIdPromise.resolve();
}
});
}
display_name_promise.then(() => {
mxIdPromise.then(() => {
this.setState({
joining: true
});
// if this is an invite and has the 'direct' hint set, mark it as a DM room now.
if (this.state.room) {
const me = this.state.room.getMember(MatrixClientPeg.get().credentials.userId);
@ -870,10 +863,6 @@ module.exports = React.createClass({
});
}
}).done();
this.setState({
joining: true
});
},
onMessageListScroll: function(ev) {