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/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(); } diff --git a/src/components/views/dialogs/LogoutDialog.js b/src/components/views/dialogs/LogoutDialog.js new file mode 100644 index 0000000000..3c4872188a --- /dev/null +++ b/src/components/views/dialogs/LogoutDialog.js @@ -0,0 +1,62 @@ +/* +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'}); + } + // close dialog + if (props.onFinished) { + props.onFinished(); + } + }; + + return ({description}} + button={_t("Sign out")} + extraButtons={[ + (), + ]} + onFinished={onFinished} + />); +};