import Modal from 'flarum/components/Modal'; import Alert from 'flarum/components/Alert'; import Button from 'flarum/components/Button'; /** * The `ForgotPasswordModal` component displays a modal which allows the user to * enter their email address and request a link to reset their password. * * ### Props * * - `email` */ export default class ForgotPasswordModal extends Modal { constructor(...args) { super(...args); /** * The value of the email input. * * @type {Function} */ this.email = m.prop(this.props.email || ''); /** * Whether or not the password reset email was sent successfully. * * @type {Boolean} */ this.success = false; } className() { return 'ForgotPasswordModal Modal--small'; } title() { return app.trans('core.forgot_password'); } content() { if (this.success) { const emailProviderName = this.email().split('@')[1]; return (

{app.trans('core.password_reset_email_sent')}

{app.trans('core.go_to', {location: emailProviderName})}
); } return (

{app.trans('core.forgot_password_help')}

{Button.component({ className: 'Button Button--primary Button--block', type: 'submit', loading: this.loading, children: app.trans('core.recover_password') })}
); } onsubmit(e) { e.preventDefault(); this.loading = true; app.request({ method: 'POST', url: app.forum.attribute('apiUrl') + '/forgot', data: {email: this.email()}, handlers: { 404: () => { this.alert = new Alert({type: 'warning', message: 'That email wasn\'t found in our database.'}); throw new Error(); } } }).then( () => { this.loading = false; this.success = true; this.alert = null; m.redraw(); }, response => { this.loading = false; this.handleErrors(response); } ); } }