import Modal from 'flarum/components/Modal'; import ForgotPasswordModal from 'flarum/components/ForgotPasswordModal'; import SignUpModal from 'flarum/components/SignUpModal'; import Alert from 'flarum/components/Alert'; import Button from 'flarum/components/Button'; import LogInButtons from 'flarum/components/LogInButtons'; import extractText from 'flarum/utils/extractText'; /** * The `LogInModal` component displays a modal dialog with a login form. * * ### Props * * - `email` * - `password` */ export default class LogInModal extends Modal { init() { super.init(); /** * The value of the email input. * * @type {Function} */ this.email = m.prop(this.props.email || ''); /** * The value of the password input. * * @type {Function} */ this.password = m.prop(this.props.password || ''); } className() { return 'LogInModal Modal--small'; } title() { return app.trans('core.forum.log_in_title'); } content() { return [
{Button.component({ className: 'Button Button--primary Button--block', type: 'submit', loading: this.loading, children: app.trans('core.forum.log_in_submit_button') })}
,

{app.trans('core.forum.log_in_forgot_password_link')}

{app.forum.attribute('allowSignUp') ? (

{app.trans('core.forum.log_in_sign_up_text', {a: })}

) : ''}
]; } /** * Open the forgot password modal, prefilling it with an email if the user has * entered one. * * @public */ forgotPassword() { const email = this.email(); const props = email.indexOf('@') !== -1 ? {email} : undefined; app.modal.show(new ForgotPasswordModal(props)); } /** * Open the sign up modal, prefilling it with an email/username/password if * the user has entered one. * * @public */ signUp() { const props = {password: this.password()}; const email = this.email(); props[email.indexOf('@') !== -1 ? 'email' : 'username'] = email; app.modal.show(new SignUpModal(props)); } onready() { this.$('[name=' + (this.email() ? 'password' : 'email') + ']').select(); } onsubmit(e) { e.preventDefault(); this.loading = true; const email = this.email(); const password = this.password(); app.session.login(email, password, {errorHandler: this.onerror.bind(this)}) .catch(this.loaded.bind(this)); } onerror(error) { if (error.status === 401) { if (error.response.emailConfirmationRequired) { error.alert.props.children = app.trans('core.forum.log_in_confirmation_required_message', {email: error.response.emailConfirmationRequired}); delete error.alert.props.type; } else { error.alert.props.children = app.trans('core.forum.log_in_invalid_login_message'); } } super.onerror(error); } }