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 * * - `identification` * - `password` */ export default class LogInModal extends Modal { init() { super.init(); /** * The value of the identification input. * * @type {Function} */ this.identification = m.prop(this.props.identification || ''); /** * The value of the password input. * * @type {Function} */ this.password = m.prop(this.props.password || ''); /** * The value of the remember me input. * * @type {Function} */ this.remember = m.prop(this.props.remember && true); } className() { return 'LogInModal Modal--small'; } title() { return app.translator.trans('core.forum.log_in.title'); } content() { return [
{Button.component({ className: 'Button Button--primary Button--block', type: 'submit', loading: this.loading, children: app.translator.trans('core.forum.log_in.submit_button') })}
,

{app.translator.trans('core.forum.log_in.forgot_password_link')}

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

{app.translator.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.identification(); 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 identification = this.identification(); props[identification.indexOf('@') !== -1 ? 'email' : 'username'] = identification; app.modal.show(new SignUpModal(props)); } onready() { this.$('[name=' + (this.identification() ? 'password' : 'identification') + ']').select(); } onsubmit(e) { e.preventDefault(); this.loading = true; const identification = this.identification(); const password = this.password(); const remember = this.remember(); app.session.login({identification, password, remember}, {errorHandler: this.onerror.bind(this)}) .then( () => window.location.reload(), this.loaded.bind(this) ); } onerror(error) { if (error.status === 401) { error.alert.props.children = app.translator.trans('core.forum.log_in.invalid_login_message'); } super.onerror(error); } }