diff --git a/src/GroupInvite.js b/src/GroupInvite.js index 64b0b255e5..c526ace188 100644 --- a/src/GroupInvite.js +++ b/src/GroupInvite.js @@ -27,8 +27,8 @@ export function showGroupInviteDialog(groupId) { placeholder: _t("Name or matrix ID"), button: _t("Invite to Group"), validAddressTypes: ['mx'], - onFinished: (shouldInvite, addrs) => { - if (!shouldInvite) return; + onFinished: (success, addrs) => { + if (!success) return; _onGroupInviteFinished(groupId, addrs); }, diff --git a/src/components/structures/GroupView.js b/src/components/structures/GroupView.js index dac0071155..2c24c398e0 100644 --- a/src/components/structures/GroupView.js +++ b/src/components/structures/GroupView.js @@ -461,12 +461,12 @@ export default React.createClass({ - {_t('Accept')} + {_t("Accept")} - {_t('Decline')} + {_t("Decline")} ; @@ -477,7 +477,7 @@ export default React.createClass({ - {_t('Leave')} + {_t("Leave")} ; diff --git a/src/components/structures/LoggedInView.js b/src/components/structures/LoggedInView.js index ab5d97373d..c6ac8e58cd 100644 --- a/src/components/structures/LoggedInView.js +++ b/src/components/structures/LoggedInView.js @@ -241,10 +241,10 @@ export default React.createClass({ eventPixelOffset={this.props.initialEventPixelOffset} key={this.props.currentRoomId || 'roomview'} opacity={this.props.middleOpacity} - collapsedRhs={this.props.collapse_rhs} + collapsedRhs={this.props.collapseRhs} ConferenceHandler={this.props.ConferenceHandler} />; - if (!this.props.collapse_rhs) right_panel = ; + if (!this.props.collapseRhs) right_panel = ; break; case PageTypes.UserSettings: @@ -255,7 +255,7 @@ export default React.createClass({ referralBaseUrl={this.props.config.referralBaseUrl} teamToken={this.props.teamToken} />; - if (!this.props.collapse_rhs) right_panel = ; + if (!this.props.collapseRhs) right_panel = ; break; case PageTypes.MyGroups: @@ -265,9 +265,9 @@ export default React.createClass({ case PageTypes.CreateRoom: page_element = ; - if (!this.props.collapse_rhs) right_panel = ; + if (!this.props.collapseRhs) right_panel = ; break; case PageTypes.RoomDirectory: @@ -300,9 +300,9 @@ export default React.createClass({ case PageTypes.GroupView: page_element = ; - if (!this.props.collapse_rhs) right_panel = ; + if (!this.props.collapseRhs) right_panel = ; break; } @@ -334,7 +334,7 @@ export default React.createClass({
diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index 314146083b..4787d76be1 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -143,8 +143,8 @@ module.exports = React.createClass({ // If we're trying to just view a user ID (i.e. /user URL), this is it viewUserId: null, - collapse_lhs: false, - collapse_rhs: false, + collapseLhs: false, + collapseRhs: false, leftOpacity: 1.0, middleOpacity: 1.0, rightOpacity: 1.0, @@ -434,7 +434,7 @@ module.exports = React.createClass({ break; case 'view_user': // FIXME: ugly hack to expand the RightPanel and then re-dispatch. - if (this.state.collapse_rhs) { + if (this.state.collapseRhs) { setTimeout(()=>{ dis.dispatch({ action: 'show_right_panel', @@ -516,22 +516,22 @@ module.exports = React.createClass({ break; case 'hide_left_panel': this.setState({ - collapse_lhs: true, + collapseLhs: true, }); break; case 'show_left_panel': this.setState({ - collapse_lhs: false, + collapseLhs: false, }); break; case 'hide_right_panel': this.setState({ - collapse_rhs: true, + collapseRhs: true, }); break; case 'show_right_panel': this.setState({ - collapse_rhs: false, + collapseRhs: false, }); break; case 'ui_opacity': { @@ -993,8 +993,8 @@ module.exports = React.createClass({ this.setStateForNewView({ view: VIEWS.LOGIN, ready: false, - collapse_lhs: false, - collapse_rhs: false, + collapseLhs: false, + collapseRhs: false, currentRoomId: null, page_type: PageTypes.RoomDirectory, }); diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 2a6cf0aee4..e0332b1b19 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -123,6 +123,9 @@ module.exports = React.createClass({ // store the error here. roomLoadError: null, + // Have we sent a request to join the room that we're waiting to complete? + joining: false, + // this is true if we are fully scrolled-down, and are looking at // the end of the live timeline. It has the effect of hiding the // 'scroll to bottom' knob, among a couple of other things. @@ -185,10 +188,6 @@ module.exports = React.createClass({ shouldPeek: RoomViewStore.shouldPeek(), }; - // finished joining, start waiting for a room and show a spinner. See onRoom. - newState.waitingForRoom = this.state.joining && !newState.joining && - !RoomViewStore.getJoinError(); - // Temporary logging to diagnose https://github.com/vector-im/riot-web/issues/4307 console.log( 'RVS update:', @@ -197,7 +196,6 @@ module.exports = React.createClass({ 'loading?', newState.roomLoading, 'joining?', newState.joining, 'initial?', initial, - 'waiting?', newState.waitingForRoom, 'shouldPeek?', newState.shouldPeek, ); @@ -650,7 +648,6 @@ module.exports = React.createClass({ } this.setState({ room: room, - waitingForRoom: false, }, () => { this._onRoomLoaded(room); }); @@ -706,14 +703,7 @@ module.exports = React.createClass({ onRoomMemberMembership: function(ev, member, oldMembership) { if (member.userId == MatrixClientPeg.get().credentials.userId) { - - if (member.membership === 'join') { - this.setState({ - waitingForRoom: false, - }); - } else { - this.forceUpdate(); - } + this.forceUpdate(); } }, @@ -1463,10 +1453,6 @@ module.exports = React.createClass({ const Loader = sdk.getComponent("elements.Spinner"); const TimelinePanel = sdk.getComponent("structures.TimelinePanel"); - // Whether the preview bar spinner should be shown. We do this when joining or - // when waiting for a room to be returned by js-sdk when joining - const previewBarSpinner = this.state.joining || this.state.waitingForRoom; - if (!this.state.room) { if (this.state.roomLoading || this.state.peekLoading) { return ( @@ -1500,7 +1486,7 @@ module.exports = React.createClass({ onRejectClick={ this.onRejectThreepidInviteButtonClicked } canPreview={ false } error={ this.state.roomLoadError } roomAlias={roomAlias} - spinner={previewBarSpinner} + spinner={this.state.joining} inviterName={inviterName} invitedEmail={invitedEmail} room={this.state.room} @@ -1543,7 +1529,7 @@ module.exports = React.createClass({ onRejectClick={ this.onRejectButtonClicked } inviterName={ inviterName } canPreview={ false } - spinner={previewBarSpinner} + spinner={this.state.joining} room={this.state.room} />
@@ -1618,7 +1604,7 @@ module.exports = React.createClass({ ; + avatar = ; name = this.props.groupMember.userId; userId = this.props.groupMember.userId; } diff --git a/src/components/views/groups/GroupMemberInfo.js b/src/components/views/groups/GroupMemberInfo.js index 5cb9f9f7b4..8bf63e635a 100644 --- a/src/components/views/groups/GroupMemberInfo.js +++ b/src/components/views/groups/GroupMemberInfo.js @@ -1,5 +1,6 @@ /* Copyright 2017 Vector Creations Ltd +Copyright 2017 New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -33,14 +34,14 @@ module.exports = withMatrixClient(React.createClass({ propTypes: { matrixClient: PropTypes.object.isRequired, groupId: PropTypes.string, - member: GroupMemberType, + groupMember: GroupMemberType, }, getInitialState: function() { return { fetching: false, removingUser: false, - members: null, + groupMembers: null, }; }, @@ -52,28 +53,31 @@ module.exports = withMatrixClient(React.createClass({ this.setState({fetching: true}); this.props.matrixClient.getGroupUsers(this.props.groupId).then((result) => { this.setState({ - members: result.chunk.map((apiMember) => { + groupMembers: result.chunk.map((apiMember) => { return groupMemberFromApiObject(apiMember); }), fetching: false, }); }).catch((e) => { this.setState({fetching: false}); - console.error("Failed to get group member list: " + e); + console.error("Failed to get group groupMember list: ", e); }); }, _onKick: function() { const ConfirmUserActionDialog = sdk.getComponent("dialogs.ConfirmUserActionDialog"); Modal.createDialog(ConfirmUserActionDialog, { - groupMember: this.props.member, + groupMember: this.props.groupMember, action: _t('Remove from group'), danger: true, onFinished: (proceed) => { if (!proceed) return; this.setState({removingUser: true}); - this.props.matrixClient.removeUserFromGroup(this.props.groupId, this.props.member.userId).then(() => { + this.props.matrixClient.removeUserFromGroup( + this.props.groupId, this.props.groupMember.userId, + ).then(() => { + // return to the user list dis.dispatch({ action: "view_user", member: null, @@ -92,6 +96,7 @@ module.exports = withMatrixClient(React.createClass({ }, _onCancel: function(e) { + // Go back to the user list dis.dispatch({ action: "view_user", member: null, @@ -107,17 +112,14 @@ module.exports = withMatrixClient(React.createClass({ render: function() { if (this.state.fetching || this.state.removingUser) { - const Loader = sdk.getComponent("elements.Spinner"); - return ; + const Spinner = sdk.getComponent("elements.Spinner"); + return ; } - if (!this.state.members) return null; + if (!this.state.groupMembers) return null; - let targetIsInGroup = false; - for (const m of this.state.members) { - if (m.userId == this.props.member.userId) { - targetIsInGroup = true; - } - } + const targetIsInGroup = this.state.groupMembers.some((m) => { + return m.userId === this.props.groupMember.userId; + }); let kickButton; let adminButton; @@ -140,8 +142,8 @@ module.exports = withMatrixClient(React.createClass({ let adminTools; if (kickButton || adminButton) { adminTools = -
-

{_t("Admin tools")}

+
+

{_t("Admin Tools")}

{kickButton} @@ -152,25 +154,27 @@ module.exports = withMatrixClient(React.createClass({ const BaseAvatar = sdk.getComponent('avatars.BaseAvatar'); const avatar = ( - + ); - const memberName = this.props.member.userId; + const groupMemberName = this.props.groupMember.userId; const EmojiText = sdk.getComponent('elements.EmojiText'); return (
- + + +
{avatar}
- {memberName} + {groupMemberName}
- { this.props.member.userId } + { this.props.groupMember.userId }
diff --git a/src/components/views/groups/GroupMemberList.js b/src/components/views/groups/GroupMemberList.js index ae726d4d88..85e17a5bb3 100644 --- a/src/components/views/groups/GroupMemberList.js +++ b/src/components/views/groups/GroupMemberList.js @@ -1,5 +1,6 @@ /* Copyright 2017 Vector Creations Ltd. +Copyright 2017 New Vector Ltd. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -86,25 +87,29 @@ export default withMatrixClient(React.createClass({ const GroupMemberTile = sdk.getComponent("groups.GroupMemberTile"); query = (query || "").toLowerCase(); - const memberList = this.state.members.filter((m) => { - if (query) { + let memberList = this.state.members; + if (query) { + memberList = memberList.filter((m) => { + // TODO: add this when we have this info from the API //const matchesName = m.name.toLowerCase().indexOf(query) !== -1; - const matchesId = m.userId.toLowerCase().indexOf(query) !== -1; + const matchesId = m.userId.toLowerCase().includes(query); if (/*!matchesName &&*/ !matchesId) { return false; } - } - return true; - }).map((m) => { + return true; + }); + } + + memberList = memberList.map((m) => { return ( ); }); memberList.sort((a, b) => { - // should put admins at the top: we don't yet have that info + // TODO: should put admins at the top: we don't yet have that info if (a < b) { return -1; } else if (a > b) { diff --git a/src/components/views/groups/GroupMemberTile.js b/src/components/views/groups/GroupMemberTile.js index bccb954607..9ffde967f0 100644 --- a/src/components/views/groups/GroupMemberTile.js +++ b/src/components/views/groups/GroupMemberTile.js @@ -1,5 +1,6 @@ /* Copyright 2017 Vector Creations Ltd +Copyright 2017 New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/components/views/rooms/MemberInfo.js b/src/components/views/rooms/MemberInfo.js index e21fd22e64..f705cf97d2 100644 --- a/src/components/views/rooms/MemberInfo.js +++ b/src/components/views/rooms/MemberInfo.js @@ -751,7 +751,7 @@ module.exports = withMatrixClient(React.createClass({ if (kickButton || banButton || muteButton || giveModButton) { adminTools =
-

{_t("Admin tools")}

+

{_t("Admin Tools")}

{muteButton} diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 74b086e6ff..b459e2e289 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -790,7 +790,7 @@ "a room": "einen Raum", "Accept": "Akzeptieren", "Active call (%(roomName)s)": "Aktiver Anruf (%(roomName)s)", - "Admin tools": "Admin-Werkzeuge", + "Admin Tools": "Admin-Werkzeuge", "And %(count)s more...": "Und %(count)s weitere...", "Alias (optional)": "Alias (optional)", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Verbindung zum Heimserver fehlgeschlagen - bitte überprüfe die Internetverbindung und stelle sicher, dass dem SSL-Zertifikat deines Heimservers vertraut wird und dass Anfragen nicht durch eine Browser-Erweiterung blockiert werden.", diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index afe064dd8e..c0b0e76ec8 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -265,7 +265,7 @@ "Accept": "Αποδοχή", "Active call (%(roomName)s)": "Ενεργή κλήση (%(roomName)s)", "Add": "Προσθήκη", - "Admin tools": "Εργαλεία διαχειριστή", + "Admin Tools": "Εργαλεία διαχειριστή", "And %(count)s more...": "Και %(count)s περισσότερα...", "No media permissions": "Χωρίς δικαιώματα πολυμέσων", "Alias (optional)": "Ψευδώνυμο (προαιρετικό)", diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index d0df48886c..464ab63683 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -13,7 +13,7 @@ "Add email address": "Add email address", "Add phone number": "Add phone number", "Admin": "Admin", - "Admin tools": "Admin tools", + "Admin Tools": "Admin tools", "Allow": "Allow", "And %(count)s more...": "And %(count)s more...", "VoIP": "VoIP", @@ -863,6 +863,8 @@ "Hide avatars in user and room mentions": "Hide avatars in user and room mentions", "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s widget added by %(senderName)s", "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget removed by %(senderName)s", + "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s widget modified by %(senderName)s", + "Robot check is currently unavailable on desktop - please use a web browser": "Robot check is currently unavailable on desktop - please use a web browser", "Description": "Description", "Filter group members": "Filter group members", "Remove from group": "Remove from group", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index ce76d2f2c8..4377251beb 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -724,7 +724,7 @@ "Accept": "Accept", "a room": "a room", "Add": "Add", - "Admin tools": "Admin tools", + "Admin Tools": "Admin tools", "And %(count)s more...": "And %(count)s more...", "Alias (optional)": "Alias (optional)", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.", diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index ad86301529..179bd047b7 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -204,7 +204,7 @@ "Low priority": "Baja prioridad", "Accept": "Aceptar", "Add": "Añadir", - "Admin tools": "Herramientas de administración", + "Admin Tools": "Herramientas de administración", "VoIP": "Voz IP", "No Microphones detected": "No se ha detectado micrófono", "No Webcams detected": "No se ha detectado cámara", diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index 6a278748b7..98f7547b6a 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -167,7 +167,7 @@ "Add": "Gehitu", "Add a topic": "Gehitu gai bat", "Admin": "Kudeatzailea", - "Admin tools": "Kudeaketa tresnak", + "Admin Tools": "Kudeaketa tresnak", "And %(count)s more...": "Eta %(count)s gehiago...", "VoIP": "VoIP", "Missing Media Permissions, click here to request.": "Media baimenak falta dira, egin klik eskatzeko.", diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 7e9118c0e4..00c42a6ef5 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -39,7 +39,7 @@ "Add email address": "E-mail cím megadása", "Add phone number": "Telefonszám megadása", "Admin": "Adminisztrátor", - "Admin tools": "Admin. eszközök", + "Admin Tools": "Admin. eszközök", "And %(count)s more...": "És még %(count)s...", "VoIP": "VoIP", "Missing Media Permissions, click here to request.": "Hiányzó Média jogosultság, kattintson ide az igényléshez.", diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index ff68107594..c8b82c22f7 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -172,7 +172,7 @@ "Access Token:": "Token Akses:", "Active call (%(roomName)s)": "Panggilan aktif (%(roomName)s)", "Admin": "Admin", - "Admin tools": "Alat admin", + "Admin Tools": "Alat admin", "And %(count)s more...": "Dan %(count)s lagi...", "VoIP": "VoIP", "Missing Media Permissions, click here to request.": "Tidak ada Izin Media, klik disini untuk meminta.", diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 1b02709cdf..454cef9771 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -42,7 +42,7 @@ "Add email address": "Aggiungi indirizzo email", "Add phone number": "Aggiungi numero di telefono", "Admin": "Amministratore", - "Admin tools": "Strumenti di amministrazione", + "Admin Tools": "Strumenti di amministrazione", "VoIP": "VoIP", "No Microphones detected": "Nessun Microfono rilevato", "No Webcams detected": "Nessuna Webcam rilevata", diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index f68dc9e837..dc748676c5 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -33,7 +33,7 @@ "Add email address": "이메일 주소 추가하기", "Add phone number": "전화번호 추가하기", "Admin": "관리자", - "Admin tools": "관리 도구", + "Admin Tools": "관리 도구", "VoIP": "인터넷전화", "No Microphones detected": "마이크를 찾지 못했어요", "No Webcams detected": "카메라를 찾지 못했어요", diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index 52f5dc6f96..ea70ed1eb7 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -12,7 +12,7 @@ "Add email address": "Pievieno Epasta adresi", "Add phone number": "Pievieno tālruņa numuru", "Admin": "Administrators", - "Admin tools": "Administratora rīki", + "Admin Tools": "Administratora rīki", "And %(count)s more...": "Un vēl %(count)s citi...", "VoIP": "VoIP", "Missing Media Permissions, click here to request.": "Nav pieejas medija saturam. Klikšķini šeit, lai pieprasītu.", diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 338bf6e9a2..5fb69338bd 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -79,7 +79,7 @@ "Active call (%(roomName)s)": "Actief gesprek (%(roomName)s)", "Add": "Toevoegen", "Add a topic": "Een onderwerp toevoegen", - "Admin tools": "Beheerhulpmiddelen", + "Admin Tools": "Beheerhulpmiddelen", "And %(count)s more...": "Nog %(count)s andere...", "VoIP": "VoiP", "Missing Media Permissions, click here to request.": "Ontbrekende mediatoestemmingen, klik hier om aan te vragen.", diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index 7e1a30d754..8389afa160 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -123,7 +123,7 @@ "Active call (%(roomName)s)": "Aktywne połączenie (%(roomName)s)", "Add email address": "Dodaj adres e-mail", "Admin": "Administrator", - "Admin tools": "Narzędzia administracyjne", + "Admin Tools": "Narzędzia administracyjne", "And %(count)s more...": "Oraz %(count)s więcej...", "VoIP": "VoIP (połączenie głosowe)", "No Microphones detected": "Nie wykryto żadnego mikrofonu", diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index 75df37b91f..be183106ab 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -772,7 +772,7 @@ "Public Chat": "Conversa pública", "Uploading %(filename)s and %(count)s others|zero": "Enviando o arquivo %(filename)s", "Room contains unknown devices": "Esta sala contém dispositivos desconhecidos", - "Admin tools": "Ferramentas de administração", + "Admin Tools": "Ferramentas de administração", "You have been kicked from %(roomName)s by %(userName)s.": "Você foi removido(a) da sala %(roomName)s por %(userName)s.", "Undecryptable": "Não é possível descriptografar", "Incoming video call from %(name)s": "Chamada de vídeo de %(name)s recebida", diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 4461aff5b7..3b45f73858 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -783,7 +783,7 @@ "a room": "uma sala", "Accept": "Aceitar", "Active call (%(roomName)s)": "Chamada ativa (%(roomName)s)", - "Admin tools": "Ferramentas de administração", + "Admin Tools": "Ferramentas de administração", "And %(count)s more...": "E mais %(count)s...", "Alias (optional)": "Apelido (opcional)", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Não foi possível conectar ao Servidor de Base. Por favor, confira sua conectividade à internet, garanta que o certificado SSL do Servidor de Base é confiável, e que uma extensão do navegador não esteja bloqueando as requisições de rede.", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index a92fa6b178..5d964f8b17 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -767,7 +767,7 @@ "a room": "комната", "Accept": "Принять", "Active call (%(roomName)s)": "Активный вызов (%(roomName)s)", - "Admin tools": "Инструменты администратора", + "Admin Tools": "Инструменты администратора", "And %(count)s more...": "И %(count)s больше...", "Alias (optional)": "Псевдоним (опционально)", "Click here to join the discussion!": "Нажмите здесь, чтобы присоединиться к обсуждению!", diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index 9a5ae6dfc6..68a3b240fc 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -171,7 +171,7 @@ "Access Token:": "Åtkomsttoken:", "Active call (%(roomName)s)": "Aktiv samtal (%(roomName)s)", "Add": "Lägg till", - "Admin tools": "Admin verktyg", + "Admin Tools": "Admin verktyg", "And %(count)s more...": "Och %(count)s till...", "Alias (optional)": "Alias (valfri)", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Det gick inte att ansluta till servern - kontrollera anslutningen, försäkra att din hemservers TLS-certifikat är betrott, och att inget webbläsartillägg blockerar förfrågningar.", diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json index f8987f606c..db9a6e29c2 100644 --- a/src/i18n/strings/te.json +++ b/src/i18n/strings/te.json @@ -11,7 +11,7 @@ "Add email address": "ఇమెయిల్ చిరునామాను జోడించండి", "Add phone number": "ఫోన్ నంబర్ను జోడించండి", "Admin": "అడ్మిన్", - "Admin tools": "నిర్వాహక ఉపకరణాలు", + "Admin Tools": "నిర్వాహక ఉపకరణాలు", "VoIP": "విఒఐపి", "Missing Media Permissions, click here to request.": "మీడియా అనుమతులు మిస్ అయయి, అభ్యర్థించడానికి ఇక్కడ క్లిక్ చేయండి.", "No Microphones detected": "మైక్రోఫోన్లు కనుగొనబడలేదు", diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 76169998f6..4b3bdbd6a2 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -12,7 +12,7 @@ "Add email address": "E-posta adresi ekle", "Add phone number": "Telefon numarası ekle", "Admin": "Admin", - "Admin tools": "Admin araçları", + "Admin Tools": "Admin araçları", "And %(count)s more...": "Ve %(count)s fazlası...", "VoIP": "VoIP", "Missing Media Permissions, click here to request.": "Medya İzinleri Yok , talep etmek için burayı tıklayın.", diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index e9c1bc7005..5ddb41830d 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -45,7 +45,7 @@ "Add email address": "Додати адресу е-пошти", "Add phone number": "Додати номер телефону", "Admin": "Адміністратор", - "Admin tools": "Засоби адміністрування", + "Admin Tools": "Засоби адміністрування", "And %(count)s more...": "І %(count)s більше...", "VoIP": "VoIP", "Missing Media Permissions, click here to request.": "Відсутні дозволи, натисніть для запиту.", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index f1153cf3d7..1d3c685ed5 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -190,7 +190,7 @@ "New password": "新密码", "Add a topic": "添加一个主题", "Admin": "管理员", - "Admin tools": "管理工具", + "Admin Tools": "管理工具", "VoIP": "IP 电话", "Missing Media Permissions, click here to request.": "没有媒体存储权限,点此获取。", "No Microphones detected": "未检测到麦克风", diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 979997ea3d..6e3b089e8f 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -302,7 +302,7 @@ "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s 已接受 %(displayName)s 的邀請。", "Active call (%(roomName)s)": "活躍的通話(%(roomName)s)", "Add": "新增", - "Admin tools": "管理員工具", + "Admin Tools": "管理員工具", "And %(count)s more...": "還有 %(count)s 個...", "Missing Media Permissions, click here to request.": "遺失媒體權限,點選這裡來要求。", "No Microphones detected": "未偵測到麥克風", diff --git a/src/stores/RoomViewStore.js b/src/stores/RoomViewStore.js index 024b1fddb7..795345242e 100644 --- a/src/stores/RoomViewStore.js +++ b/src/stores/RoomViewStore.js @@ -21,7 +21,7 @@ import Modal from '../Modal'; import { _t } from '../languageHandler'; const INITIAL_STATE = { - // Whether we're joining the currently viewed room + // Whether we're joining the currently viewed room (see isJoining()) joining: false, // Any error that has occurred during joining joinError: null, @@ -90,9 +90,6 @@ class RoomViewStore extends Store { case 'join_room': this._joinRoom(payload); break; - case 'joined_room': - this._joinedRoom(payload); - break; case 'join_room_error': this._joinRoomError(payload); break; @@ -185,9 +182,11 @@ class RoomViewStore extends Store { MatrixClientPeg.get().joinRoom( this._state.roomAlias || this._state.roomId, payload.opts, ).done(() => { - dis.dispatch({ - action: 'joined_room', - }); + // We don't actually need to do anything here: we do *not* + // clear the 'joining' flag because the Room object and/or + // our 'joined' member event may not have come down the sync + // stream yet, and that's the point at which we'd consider + // the user joined to the room. }, (err) => { dis.dispatch({ action: 'join_room_error', @@ -202,12 +201,6 @@ class RoomViewStore extends Store { }); } - _joinedRoom(payload) { - this._setState({ - joining: false, - }); - } - _joinRoomError(payload) { this._setState({ joining: false, @@ -249,7 +242,29 @@ class RoomViewStore extends Store { return this._state.roomLoadError; } - // Whether we're joining the currently viewed room + // True if we're expecting the user to be joined to the room currently being + // viewed. Note that this is left true after the join request has finished, + // since we should still consider a join to be in progress until the room + // & member events come down the sync. + // + // This flag remains true after the room has been sucessfully joined, + // (this store doesn't listen for the appropriate member events) + // so you should always observe the joined state from the member event + // if a room object is present. + // ie. The correct logic is: + // if (room) { + // if (myMember.membership == 'joined') { + // // user is joined to the room + // } else { + // // Not joined + // } + // } else { + // if (RoomViewStore.isJoining()) { + // // show spinner + // } else { + // // show join prompt + // } + // } isJoining() { return this._state.joining; }