import Modal from 'flarum/components/Modal'; import Button from 'flarum/components/Button'; /** * The `ChangeEmailModal` component shows a modal dialog which allows the user * to change their email address. */ export default class ChangeEmailModal extends Modal { init() { super.init(); /** * Whether or not the email has been changed successfully. * * @type {Boolean} */ this.success = false; /** * The value of the email input. * * @type {function} */ this.email = m.prop(app.session.user.email()); } className() { return 'ChangeEmailModal Modal--small'; } title() { return app.translator.trans('core.forum.change_email.title'); } content() { if (this.success) { return (

{app.translator.trans('core.forum.change_email.confirmation_message', {email: {this.email()}})}

); } return (
{Button.component({ className: 'Button Button--primary Button--block', type: 'submit', loading: this.loading, children: app.translator.trans('core.forum.change_email.submit_button') })}
); } onsubmit(e) { e.preventDefault(); // If the user hasn't actually entered a different email address, we don't // need to do anything. Woot! if (this.email() === app.session.user.email()) { this.hide(); return; } const oldEmail = app.session.user.email(); this.loading = true; app.session.user.save({email: this.email()}, {errorHandler: this.onerror.bind(this)}) .then(() => this.success = true) .finally(this.loaded.bind(this)); // The save method will update the cached email address on the user model... // But in the case of a "sudo" password prompt, we'll still want to have // the old email address on file for the purposes of logging in. app.session.user.pushAttributes({email: oldEmail}); } }