Skip to content
Snippets Groups Projects
code-input.component.ts 2.65 KiB
Newer Older
  • Learn to ignore specific revisions
  • paflov's avatar
    paflov committed
    import { Component, OnInit, ViewChild } from '@angular/core';
    import { Router } from '@angular/router';
    import { FormControl, FormGroup, Validators } from '@angular/forms';
    import {
      CustomtextService, MessageDialogComponent, MessageDialogData, MessageType
    } from 'iqb-components';
    import { MatDialog } from '@angular/material/dialog';
    import { MainDataService } from '../../maindata.service';
    import { AuthData } from '../../app.interfaces';
    import { BackendService } from '../../backend.service';
    
      templateUrl: './code-input.component.html',
      styles: [
        'mat-card {margin: 10px;}',
        '.mat-card-gray {background-color: lightgray}'
      ]
    
    paf's avatar
    paf committed
    export class CodeInputComponent implements OnInit {
    
      @ViewChild('codeInputControl') codeInputControl: FormControl;
      problemText = '';
    
    
      codeinputform = new FormGroup({
    
    paflov's avatar
    paflov committed
        code: new FormControl('', [Validators.required, Validators.minLength(2)])
    
      });
    
      constructor(
        private router: Router,
        public messageDialog: MatDialog,
        public cts: CustomtextService,
    
        public bs: BackendService,
    
        public mds: MainDataService
      ) { }
    
    
    paflov's avatar
    paflov committed
      // eslint-disable-next-line class-methods-use-this
    
      ngOnInit(): void {
        setTimeout(() => {
    
          this.mds.appSubTitle$.next('Bitte Code eingeben');
    
    paflov's avatar
    paflov committed
          const element = <HTMLElement>document.querySelector('.mat-input-element[formControlName="code"]');
    
          if (element) {
            element.focus();
          }
    
    paf's avatar
    paf committed
        });
    
    paflov's avatar
    paflov committed
      codeinput(): void {
    
        const codeData = this.codeinputform.value;
    
    paflov's avatar
    paflov committed
        if (codeData.code.length === 0) {
    
          this.messageDialog.open(MessageDialogComponent, {
            width: '400px',
            data: <MessageDialogData>{
    
    paflov's avatar
    paflov committed
              title: `${this.cts.getCustomText('login_codeInputTitle')}: Leer`,
    
              content: this.cts.getCustomText('login_codeInputPrompt'),
              type: MessageType.error
            }
          });
        } else {
    
          this.mds.setSpinnerOn();
    
    paflov's avatar
    paflov committed
          this.bs.codeLogin(codeData.code).subscribe(
    
            authData => {
    
              this.mds.setSpinnerOff();
    
              this.problemText = '';
              if (typeof authData === 'number') {
                const errCode = authData as number;
                if (errCode === 400) {
    
                  this.problemText = 'Der Code ist leider nicht gültig. Bitte nocheinmal versuchen';
    
                } else {
                  this.problemText = 'Problem bei der Anmeldung.';
                  // app.interceptor will show error message
                }
              } else {
                const authDataTyped = authData as AuthData;
                this.mds.setAuthData(authDataTyped);
                this.router.navigate(['/r']);
              }
    
    paflov's avatar
    paflov committed
            }
          );
    
    paflov's avatar
    paflov committed
      resetLogin(): void {
    
        this.mds.setAuthData();
    
        this.router.navigate(['/']);
      }
    }