OwenKelvin/Angular-School-Management-System

View on GitHub
src/app/pages/curriculum-maintenance/class-levels/create-class-level-category/create-class-level-category.component.ts

Summary

Maintainability
C
1 day
Test Coverage
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Store } from '@ngrx/store';

import { SHOW_SUCCESS_MESSAGE } from 'src/app/store/actions/app.action';
import { ActivatedRouteSnapshot, Router } from '@angular/router';
import { map } from 'rxjs/operators';
import { ClassLevelCategoryService } from '../services/class-level-category.service';

export default interface IClassLevelCategory {
  id?: number;
  name: string;
  active?: boolean | 1 | 0 | undefined | null;
}

@Component({
  selector: 'app-create-class-level-category',
  templateUrl: './create-class-level-category.component.html',
  styleUrls: ['./create-class-level-category.component.css']
})
export class CreateClassLevelCategoryComponent implements OnInit {
  formId: any;
  constructor(
    private fb: FormBuilder,
    private store: Store<any>,
    private classLevelCategory: ClassLevelCategoryService,
    private router: Router
  ) {}
  errors: {
    name: string;
  };
  classLevelCategoryForm: FormGroup;
  newForm: boolean;

  ngOnInit() {
    this.newForm = true;
    this.errors = {
      name: ''
    };
    this.generateClassLevelCategoryForm();
    let activatedRoute: ActivatedRouteSnapshot;
    if (
      this.router.routerState.root &&
      this.router.routerState.root.children &&
      this.router.routerState.root.children[0]
    ) {
      activatedRoute = this.router.routerState.root.children[0].children[0]
        .children[0].snapshot;
      const id = activatedRoute.params.id;

      if (id === undefined) {
        this.newForm = true;
      } else {
        this.newForm = false;
        this.formId = id;
        this.classLevelCategory.get({ id }).subscribe(item => {
          this.generateClassLevelCategoryForm(item);
        });
      }
    }
  }
  generateClassLevelCategoryForm(
    { id = null, name = '', active = true }: IClassLevelCategory = {
      id: null,
      name: '',
      active: true
    }
  ) {
    this.classLevelCategoryForm = this.fb.group({
      id: [id],
      name: [name, [Validators.required]],
      active: [active]
    });
  }
  validateName() {
    if (
      (this.classLevelCategoryForm.get('name').dirty ||
        this.classLevelCategoryForm.get('name').touched) &&
      !this.classLevelCategoryForm.get('name').valid
    ) {
      if (this.classLevelCategoryForm.get('name').errors.required) {
        this.errors.name = 'Name is required';
      } else {
        this.errors.name = null;
      }
    }
  }

  submit() {
    if (this.classLevelCategoryForm.valid) {
      this.classLevelCategory
        .submit(this.classLevelCategoryForm.value)
        .subscribe(() => {
          if (this.newForm) {
            this.generateClassLevelCategoryForm();
            this.classLevelCategoryForm.get('name').clearValidators();
            this.classLevelCategoryForm.get('name').updateValueAndValidity();
          } else {
            this.classLevelCategory
              .get({ id: this.formId })
              .pipe(
                map(res => {
                  return {
                    ...res
                  };
                })
              )
              .subscribe(item => {
                this.generateClassLevelCategoryForm(item);
              });
          }
          this.store.dispatch({
            type: SHOW_SUCCESS_MESSAGE,
            payload: true
          });
        });
    } else {
      this.classLevelCategoryForm.markAllAsTouched();
      this.validateName();
    }
  }
}