import {Component, EventEmitter, Input, OnChanges, Output} from '@angular/core'; import {GoalType, Need} from '../../models/Need'; import {CupboardService} from '../../services/cupboard.service'; import {catchError, of} from 'rxjs'; import {ToastsService, ToastType} from '../../services/toasts.service'; import {ModalService} from '../../services/modal.service'; import {Router} from '@angular/router'; @Component({ selector: 'app-need-edit', standalone: false, templateUrl: './need-edit.component.html', styleUrl: './need-edit.component.css' }) export class NeedEditComponent implements OnChanges { @Input() mode!: "Create" | "Edit" @Input() need?: Need; @Output() refreshNeedList = new EventEmitter(); needCopy: any = {} constructor( private cupboardService: CupboardService, private toastService: ToastsService, protected modalService: ModalService, private router: Router ) {} ngOnChanges() { this.needCopy = {...this.need} } submit(form: any) { const need: Need = { name: form.name, image: form.image, location: form.location, id: this.needCopy.id, //system will control this maxGoal: form.maxGoal, type: GoalType[form.type as keyof typeof GoalType], urgent: form.urgent, filterAttributes: [], current: 0, description: form.description }; if (this.mode == "Edit") { this.updateNeed(need) } else if (this.mode === 'Create') { this.createNeed(need) } } updateNeed(need: Need) { this.cupboardService.updateNeed(need.id, need) .pipe(catchError((ex, _) => { if (ex.status == 500) { this.toastService.sendToast(ToastType.ERROR, 'Fields cannot be blank'); } else if (ex.status == 400) { this.toastService.sendToast(ToastType.ERROR, ex.error); } else { this.toastService.sendToast(ToastType.ERROR, "Error on creating need"); } return of() })) .subscribe( (result) => { if (result) { let action = {label: 'View Need', onAction: () => this.router.navigate([`/need/${need.id}`])} this.toastService.sendToast(ToastType.INFO, "Need updated successfully", action) this.modalService.hideModal() console.log("need updated successfully"); this.refreshNeedList.emit(); } else { console.log("need update failed"); } } ); } createNeed(need: Need) { this.cupboardService.createNeed(need) .pipe(catchError((ex, _) => { if (ex.status == 500) { this.toastService.sendToast(ToastType.ERROR, "Fields cannot be blank"); } else if (ex.status == 400) { this.toastService.sendToast(ToastType.ERROR, ex.error); } else { this.toastService.sendToast(ToastType.ERROR, "Error on creating need"); } return of() })) .subscribe( (result) => { if (result) { let action = {label: 'View Need', onAction: () => this.router.navigate([`/need/${result.id}`])} this.toastService.sendToast(ToastType.INFO, "Need created successfully", action) this.modalService.hideModal() console.log("need created successfully"); this.refreshNeedList.emit(); } else { console.log("need creation failed"); } } ); } }