import {Component, OnDestroy, OnInit, ViewChild} from '@angular/core'; import {ModalComponent} from '../../modals/modal/modal.component'; import {FormBuilder, FormControl, FormGroup, FormGroupDirective, Validators} from '@angular/forms'; import {copy} from '../../../utils/copy'; import {Activity, CarePlan} from '@nspop/gm-web-facade-api'; import {finalize} from 'rxjs/operators'; import {CarePlanService} from '../../api/care-plan.service'; @Component({ selector: 'app-activity-modal', templateUrl: './activity-modal.component.html', styleUrls: ['./activity-modal.component.scss'] }) export class ActivityModalComponent implements OnInit, OnDestroy { @ViewChild('modal') public modalComponent: ModalComponent | undefined; @ViewChild('formDirective') public formDirective: FormGroupDirective | undefined; public activityForm: FormGroup | undefined; public carePlan: CarePlan | undefined; public id = ''; public version = ''; constructor( private fb: FormBuilder, private carePlanService: CarePlanService, ) { } private readonly MAX_WEEK = 53; ngOnInit(): void { this.activityForm = this.fb.group({ title: new FormControl(null, Validators.required), description: new FormControl(null, Validators.required), status: 'Forventet', fromWeek: new FormControl(null, [Validators.required, Validators.min(0), Validators.max(this.MAX_WEEK)]), toWeek: new FormControl(null, [Validators.required, Validators.min(0), Validators.max(this.MAX_WEEK)]) }); // this.activityForm = new FormGroup({ // title: new FormControl(null, Validators.required), // description: new FormControl(null, Validators.required), // status: new FormControl('Forventet'), // fromWeek: new FormControl(null, [Validators.required, Validators.min(0), Validators.max(this.MAX_WEEK)]), // toWeek: new FormControl(null, [Validators.required, Validators.min(0), Validators.max(this.MAX_WEEK)]) // }); this.carePlanService.carePlan$.subscribe((carePlan: CarePlan | undefined) => { if (carePlan) { const {id, version} = carePlan; this.carePlan = copy(carePlan); this.id = id || ''; this.version = version ? version + '' : ''; } }); } ngOnDestroy(): void { this.activityForm = undefined; } public submitActivity(activityForm: FormGroup | undefined, formDirective: FormGroupDirective | undefined): void { if (activityForm?.valid) { this.getActivityFromForm(); this.carePlanService.update(this.carePlan as CarePlan, this.id, this.version).subscribe(() => { this.carePlanService.refresh(); formDirective?.resetForm(); this.setVisible(false); }); } else { activityForm?.markAllAsTouched(); } } setVisible(isVisible: boolean): void { if (this.modalComponent) { this.modalComponent.setVisible(isVisible); this.formDirective?.resetForm(); } } isVisible(): boolean { this.activityForm?.markAsUntouched(); return !!this.modalComponent?.isModalVisible; } getActivityFromForm(): Activity { return {} as Activity; } }