From 48cfd08ea65b7895ecb4987edc3075f5ec088dd0 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 11 Dec 2018 12:42:52 +0100 Subject: [PATCH 1/3] move logout dialog to own component so we can reuse it --- src/components/structures/UserSettings.js | 28 +-------- src/components/views/dialogs/LogoutDialog.js | 61 ++++++++++++++++++++ 2 files changed, 63 insertions(+), 26 deletions(-) create mode 100644 src/components/views/dialogs/LogoutDialog.js diff --git a/src/components/structures/UserSettings.js b/src/components/structures/UserSettings.js index 07d726e3aa..3a3d6e1e91 100644 --- a/src/components/structures/UserSettings.js +++ b/src/components/structures/UserSettings.js @@ -382,32 +382,8 @@ module.exports = React.createClass({ }, onLogoutClicked: function(ev) { - const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); - Modal.createTrackedDialog('Logout E2E Export', '', QuestionDialog, { - title: _t("Sign out"), - description: -
- { _t("For security, logging out will delete any end-to-end " + - "encryption keys from this browser. If you want to be able " + - "to decrypt your conversation history from future Riot sessions, " + - "please export your room keys for safe-keeping.") } -
, - button: _t("Sign out"), - extraButtons: [ - , - ], - onFinished: (confirmed) => { - if (confirmed) { - dis.dispatch({action: 'logout'}); - if (this.props.onFinished) { - this.props.onFinished(); - } - } - }, - }); + const LogoutDialog = sdk.getComponent("dialogs.LogoutDialog"); + Modal.createTrackedDialog('Logout E2E Export', '', LogoutDialog); }, onPasswordChangeError: function(err) { diff --git a/src/components/views/dialogs/LogoutDialog.js b/src/components/views/dialogs/LogoutDialog.js new file mode 100644 index 0000000000..0c72279f3a --- /dev/null +++ b/src/components/views/dialogs/LogoutDialog.js @@ -0,0 +1,61 @@ +/* +Copyright 2018 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. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React from 'react'; +import QuestionDialog from './QuestionDialog'; +import Modal from '../../../Modal'; +import dis from '../../../dispatcher'; +import { _t } from '../../../languageHandler'; +import MatrixClientPeg from '../../../MatrixClientPeg'; + +export default (props) => { + const description = _t("For security, logging out will delete any end-to-end " + + "encryption keys from this browser. If you want to be able " + + "to decrypt your conversation history from future Riot sessions, " + + "please export your room keys for safe-keeping."); + + const onExportE2eKeysClicked = () => { + Modal.createTrackedDialogAsync('Export E2E Keys', '', + import('../../../async-components/views/dialogs/ExportE2eKeysDialog'), + { + matrixClient: MatrixClientPeg.get(), + }, + ); + }; + + const onFinished = (confirmed) => { + if (confirmed) { + dis.dispatch({action: 'logout'}); + if (props.onFinished) { + props.onFinished(); + } + } + }; + + return ({description}} + button={_t("Sign out")} + extraButtons={[ + (), + ]} + onFinished={onFinished} + />); +}; From fc57109c541ca6581ce8d6dc4eccb26a6e066ec2 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 11 Dec 2018 12:43:17 +0100 Subject: [PATCH 2/3] use logout dialog in topleft menu instead of dispatching logout --- src/components/views/context_menus/TopLeftMenu.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/views/context_menus/TopLeftMenu.js b/src/components/views/context_menus/TopLeftMenu.js index 76ac10399c..b8e82a92e4 100644 --- a/src/components/views/context_menus/TopLeftMenu.js +++ b/src/components/views/context_menus/TopLeftMenu.js @@ -17,6 +17,8 @@ limitations under the License. import React from 'react'; import dis from '../../../dispatcher'; import { _t } from '../../../languageHandler'; +import LogoutDialog from "../dialogs/LogoutDialog"; +import Modal from "../../../Modal"; export class TopLeftMenu extends React.Component { constructor() { @@ -42,7 +44,7 @@ export class TopLeftMenu extends React.Component { } signOut() { - dis.dispatch({action: 'logout'}); + Modal.createTrackedDialog('Logout E2E Export', '', LogoutDialog); this.closeMenu(); } From a31dacc4bc1abe66c3a49e6c9541696490db7b30 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 11 Dec 2018 12:43:56 +0100 Subject: [PATCH 3/3] allow logout dialog to be cancelled (can't see why not?) --- src/components/views/dialogs/LogoutDialog.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/views/dialogs/LogoutDialog.js b/src/components/views/dialogs/LogoutDialog.js index 0c72279f3a..3c4872188a 100644 --- a/src/components/views/dialogs/LogoutDialog.js +++ b/src/components/views/dialogs/LogoutDialog.js @@ -39,14 +39,15 @@ export default (props) => { const onFinished = (confirmed) => { if (confirmed) { dis.dispatch({action: 'logout'}); - if (props.onFinished) { - props.onFinished(); - } + } + // close dialog + if (props.onFinished) { + props.onFinished(); } }; return ({description}} button={_t("Sign out")}