ilios/frontend

View on GitHub
packages/frontend/app/components/login-form.js

Summary

Maintainability
A
0 mins
Test Coverage
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { service } from '@ember/service';
import { task } from 'ember-concurrency';
import { validatable, NotBlank } from 'ilios-common/decorators/validation';

@validatable
export default class LoginFormComponent extends Component {
  @service session;
  @tracked error;
  @tracked @NotBlank() username;
  @tracked @NotBlank() password;

  authenticate = task(async () => {
    this.addErrorDisplaysFor(['username', 'password']);
    const isValid = await this.isValid();
    if (!isValid) {
      return false;
    }
    try {
      this.error = null;
      const session = this.session;
      const authenticator = 'authenticator:ilios-jwt';
      await session.authenticate(authenticator, {
        username: this.username,
        password: this.password,
      });
    } catch (response) {
      const keys = response.json.errors.map((key) => {
        return 'general.' + key;
      });
      this.error = { keys };
    } finally {
      this.clearErrorDisplay();
    }
  });

  @action
  async submitOnEnter(event) {
    const keyCode = event.keyCode;
    if (13 === keyCode) {
      await this.authenticate.perform();
    }
  }
}