diff --git a/src/components/structures/UserSettings.js b/src/components/structures/UserSettings.js index 2622d7bd89..6397e73434 100644 --- a/src/components/structures/UserSettings.js +++ b/src/components/structures/UserSettings.js @@ -429,7 +429,6 @@ module.exports = React.createClass({ "push notifications on other devices until you log back in to them", ) + ".", }); - dis.dispatch({action: 'password_changed'}); }, _onAddEmailEditFinished: function(value, shouldSubmit) { diff --git a/src/components/views/dialogs/SetEmailDialog.js b/src/components/views/dialogs/SetEmailDialog.js index d80574804f..e643ddbc34 100644 --- a/src/components/views/dialogs/SetEmailDialog.js +++ b/src/components/views/dialogs/SetEmailDialog.js @@ -1,5 +1,6 @@ /* Copyright 2017 Vector Creations Ltd +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. @@ -36,7 +37,7 @@ export default React.createClass({ getInitialState: function() { return { - emailAddress: null, + emailAddress: '', emailBusy: false, }; }, @@ -127,6 +128,7 @@ export default React.createClass({ const EditableText = sdk.getComponent('elements.EditableText'); const emailInput = this.state.emailBusy ? : { - this._onContinueClicked(); + this.props.onFinished(); }, }); }, - _onContinueClicked: function() { - this.props.onFinished(true); - }, - _onPasswordChangeError: function(err) { let errMsg = err.error || ""; if (err.httpStatus === 403) { diff --git a/src/components/views/elements/EditableText.js b/src/components/views/elements/EditableText.js index ce1817c272..1f49bcddae 100644 --- a/src/components/views/elements/EditableText.js +++ b/src/components/views/elements/EditableText.js @@ -1,5 +1,6 @@ /* Copyright 2015, 2016 OpenMarket Ltd +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. @@ -14,15 +15,9 @@ See the License for the specific language governing permissions and limitations under the License. */ -'use strict'; - -const React = require('react'); +import React from 'react'; import PropTypes from 'prop-types'; -const KEY_TAB = 9; -const KEY_SHIFT = 16; -const KEY_WINDOWS = 91; - module.exports = React.createClass({ displayName: 'EditableText', @@ -66,9 +61,7 @@ module.exports = React.createClass({ }, componentWillReceiveProps: function(nextProps) { - if (nextProps.initialValue !== this.props.initialValue || - nextProps.initialValue !== this.value - ) { + if (nextProps.initialValue !== this.props.initialValue || nextProps.initialValue !== this.value) { this.value = nextProps.initialValue; if (this.refs.editable_div) { this.showPlaceholder(!this.value); @@ -139,7 +132,7 @@ module.exports = React.createClass({ this.showPlaceholder(false); } - if (ev.key == "Enter") { + if (ev.key === "Enter") { ev.stopPropagation(); ev.preventDefault(); } @@ -156,9 +149,9 @@ module.exports = React.createClass({ this.value = ev.target.textContent; } - if (ev.key == "Enter") { + if (ev.key === "Enter") { this.onFinish(ev); - } else if (ev.key == "Escape") { + } else if (ev.key === "Escape") { this.cancelEdit(); } @@ -193,7 +186,7 @@ module.exports = React.createClass({ const submit = (ev.key === "Enter") || shouldSubmit; this.setState({ phase: this.Phases.Display, - }, function() { + }, () => { if (this.value !== this.props.initialValue) { self.onValueChanged(submit); } @@ -204,23 +197,35 @@ module.exports = React.createClass({ const sel = window.getSelection(); sel.removeAllRanges(); - if (this.props.blurToCancel) {this.cancelEdit();} else {this.onFinish(ev, this.props.blurToSubmit);} + if (this.props.blurToCancel) { + this.cancelEdit(); + } else { + this.onFinish(ev, this.props.blurToSubmit); + } this.showPlaceholder(!this.value); }, render: function() { - let editable_el; + const {className, editable, initialValue, label, labelClassName} = this.props; + let editableEl; - if (!this.props.editable || (this.state.phase == this.Phases.Display && (this.props.label || this.props.labelClassName) && !this.value)) { + if (!editable || (this.state.phase === this.Phases.Display && (label || labelClassName) && !this.value)) { // show the label - editable_el =
{ this.props.label || this.props.initialValue }
; + editableEl =
+ { label || initialValue } +
; } else { // show the content editable div, but manually manage its contents as react and contentEditable don't play nice together - editable_el =
; + editableEl =
; } - return editable_el; + return editableEl; }, }); diff --git a/src/components/views/globals/PasswordNagBar.js b/src/components/views/globals/PasswordNagBar.js index 93f4fe06e5..4233363b95 100644 --- a/src/components/views/globals/PasswordNagBar.js +++ b/src/components/views/globals/PasswordNagBar.js @@ -1,5 +1,6 @@ /* Copyright 2017 Vector Creations Ltd +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. @@ -14,28 +15,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -'use strict'; - import React from 'react'; import sdk from '../../../index'; import Modal from '../../../Modal'; -import dis from '../../../dispatcher'; import { _t } from '../../../languageHandler'; export default React.createClass({ onUpdateClicked: function() { const SetPasswordDialog = sdk.getComponent('dialogs.SetPasswordDialog'); - Modal.createTrackedDialog('Set Password Dialog', 'Password Nag Bar', SetPasswordDialog, { - onFinished: (passwordChanged) => { - if (!passwordChanged) { - return; - } - // Notify SessionStore that the user's password was changed - dis.dispatch({ - action: 'password_changed', - }); - }, - }); + Modal.createTrackedDialog('Set Password Dialog', 'Password Nag Bar', SetPasswordDialog); }, render: function() { diff --git a/src/components/views/settings/ChangePassword.js b/src/components/views/settings/ChangePassword.js index 9cac25e6cc..b2ffe531b5 100644 --- a/src/components/views/settings/ChangePassword.js +++ b/src/components/views/settings/ChangePassword.js @@ -1,5 +1,6 @@ /* Copyright 2015, 2016 OpenMarket Ltd +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. @@ -14,14 +15,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -'use strict'; - const React = require('react'); import PropTypes from 'prop-types'; const MatrixClientPeg = require("../../../MatrixClientPeg"); const Modal = require("../../../Modal"); const sdk = require("../../../index"); +import dis from "../../../dispatcher"; import Promise from 'bluebird'; import AccessibleButton from '../elements/AccessibleButton'; import { _t } from '../../../languageHandler'; @@ -143,6 +143,9 @@ module.exports = React.createClass({ }); cli.setPassword(authDict, newPassword).then(() => { + // Notify SessionStore that the user's password was changed + dis.dispatch({action: 'password_changed'}); + if (this.props.shouldAskForEmail) { return this._optionallySetEmail().then((confirmed) => { this.props.onFinished({