import { Component } from '../../../lib/vues6/vues6.js' import { auth_api } from '../../service/AuthApi.service.js' import { location_service } from '../../service/Location.service.js' const template = `
{{ error_message }}
{{ other_message }}
` export default class AuthLoginForm extends Component { static get selector() { return 'coreid-login-form' } static get props() { return [ 'app_name', 'login_message', 'additional_params', 'no_session', ] } static get template() { return template } username = '' password = '' button_text = 'Next' step_two = false btn_disabled = true loading = false error_message = '' other_message = '' watch_username(new_username, old_username) { this.btn_disabled = !new_username } back_click() { this.step_two = false this.button_text = 'Next' } async on_key_up(event) { if ( event.keyCode === 13 ) { // Enter was pressed event.preventDefault() event.stopPropagation() if ( !this.step_two && this.username ) return this.step_click(event) else if ( this.step_two && this.username && this.password ) return this.step_click(event) } } async step_click(event) { if ( !this.step_two ) { this.loading = true try { const is_valid = await auth_api.validate_username(this.username) if ( !is_valid ) { this.error_message = 'That username is invalid. Please try again.' } else { this.step_two = true this.button_text = 'Continue' this.error_message = '' this.$nextTick(() => { this.$refs.password_input.focus() }) } } catch (e) { this.error_message = 'Sorry, an unknown error has occurred and we are unable to continue at this time.' } this.loading = false } else { this.loading = true this.error_message = '' let attempt_vars = { username: this.username, password: this.password, create_session: !this.no_session, } if ( typeof this.additional_params === 'object' ) { attempt_vars = {...attempt_vars, ...this.additional_params} } const result = await auth_api.attempt(attempt_vars) if ( !result.success ) { this.error_message = result.message || 'Sorry, an unknown error has occurred and we are unable to continue at this time.' this.loading = false return } this.other_message = 'Success! Let\'s get you on your way...' await location_service.redirect(result.next, 1500) } } do_nothing() {} }