Added multi invite functionality

This commit is contained in:
wmwragg 2016-09-13 16:06:04 +01:00
parent f7f907a0c7
commit 272dd82b9d
2 changed files with 49 additions and 27 deletions

View file

@ -56,7 +56,7 @@ export function inviteToRoom(roomId, addr) {
*/ */
export function inviteMultipleToRoom(roomId, addrs) { export function inviteMultipleToRoom(roomId, addrs) {
this.inviter = new MultiInviter(roomId); this.inviter = new MultiInviter(roomId);
return inviter.invite(addrs); return this.inviter.invite(addrs);
} }
export function isValidAddress(addr) { export function isValidAddress(addr) {

View file

@ -71,30 +71,28 @@ module.exports = React.createClass({
}, },
onButtonClick: function() { onButtonClick: function() {
var addr; if (this.state.inviteList.length > 0) {
if (this._isDmChat()) {
// Either an address tile was created, or text input is being used // Direct Message chat
if (this.state.inviteList[0]) { var room = this._getDirectMessageRoom(this.state.inviteList[0]);
addr = this.state.inviteList[0]; if (room) {
} // A Direct Message room already exists for this user and you
// so go straight to that room
if (this.state.inviteList.length === 1 && Invite.getAddressType(addr) === "mx" && !this.props.roomId) { dis.dispatch({
// Direct Message chat action: 'view_room',
var room = this._getDirectMessageRoom(addr); room_id: room.roomId,
if (room) { });
// A Direct Message room already exists for this user and you this.props.onFinished(true, this.state.inviteList[0]);
// so go straight to that room } else {
dis.dispatch({ this._startChat(this.state.inviteList);
action: 'view_room', }
room_id: room.roomId,
});
this.props.onFinished(true, addr);
} else { } else {
this._startChat(addr); // Multi invite chat
this._startChat(this.state.inviteList);
} }
} else { } else {
// Multi invite chat // No addresses supplied
this._startChat(addr); this.setState({ error: true });
} }
}, },
@ -198,9 +196,22 @@ module.exports = React.createClass({
return null; return null;
}, },
_startChat: function(addr) { _startChat: function(addrs) {
if (this.props.roomId) { if (this.props.roomId) {
Invite.inviteToRoom(this.props.roomId, addr) // Invite new user to a room
Invite.inviteMultipleToRoom(this.props.roomId, addrs)
.catch(function(err) {
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createDialog(ErrorDialog, {
title: "Failure to invite user",
description: err.toString()
});
return null;
})
.done();
} else if (this._isDmChat()) {
// Start the DM chat
createRoom({dmUserId: addrs[0]})
.catch(function(err) { .catch(function(err) {
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createDialog(ErrorDialog, { Modal.createDialog(ErrorDialog, {
@ -211,8 +222,11 @@ module.exports = React.createClass({
}) })
.done(); .done();
} else { } else {
// Start the chat // Start multi user chat
createRoom({dmUserId: addr}) var self = this;
createRoom().then(function(roomId) {
return Invite.inviteMultipleToRoom(self.props.roomId, addrs);
})
.catch(function(err) { .catch(function(err) {
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createDialog(ErrorDialog, { Modal.createDialog(ErrorDialog, {
@ -225,7 +239,7 @@ module.exports = React.createClass({
} }
// Close - this will happen before the above, as that is async // Close - this will happen before the above, as that is async
this.props.onFinished(true, addr); this.props.onFinished(true, addrs);
}, },
_updateUserList: new rate_limited_func(function() { _updateUserList: new rate_limited_func(function() {
@ -273,6 +287,14 @@ module.exports = React.createClass({
return false; return false;
}, },
_isDmChat: function() {
if (this.state.inviteList.length === 1 && Invite.getAddressType(this.state.inviteList[0]) === "mx" && !this.props.roomId) {
return true;
} else {
return false;
}
},
render: function() { render: function() {
var TintableSvg = sdk.getComponent("elements.TintableSvg"); var TintableSvg = sdk.getComponent("elements.TintableSvg");
var AddressSelector = sdk.getComponent("elements.AddressSelector"); var AddressSelector = sdk.getComponent("elements.AddressSelector");