import {Component, inject, Input, OnInit} from '@angular/core'; import {PlayerModel} from "../../models/player.model"; import {NgbActiveModal} from "@ng-bootstrap/ng-bootstrap"; import {AdmonitionModel} from "../../models/admonition.model"; import {FormControl, FormGroup, Validators} from "@angular/forms"; import {ToastrService} from "ngx-toastr"; import {AdmonitionService} from "../../services/admonition.service"; import Swal from "sweetalert2"; @Component({ selector: 'app-player-admonition-modal', templateUrl: './player-admonition-modal.component.html', styleUrl: './player-admonition-modal.component.css', standalone: false }) export class PlayerAdmonitionModalComponent implements OnInit { private readonly _admonitionService: AdmonitionService = inject(AdmonitionService); private readonly _toastr: ToastrService = inject(ToastrService); public activeModal: NgbActiveModal = inject(NgbActiveModal); public isCreateMode: boolean = false; public isEditMode: boolean = false; public playerAdmonitions: AdmonitionModel[] = []; public admonitionForm: FormGroup = new FormGroup({ id: new FormControl(''), playerId: new FormControl(''), reason: new FormControl('', [Validators.required, Validators.maxLength(250)]), }); @Input({required: true}) player!: PlayerModel; ngOnInit() { this.getPlayerAdmonitions(this.player.id); } getPlayerAdmonitions(playerId: string) { this._admonitionService.getPlayerAdmonitions(playerId).subscribe({ next: ((response) => { if (response) { this.playerAdmonitions = response; } else { this.playerAdmonitions = []; } }), error: ((error) => { console.log(error); this._toastr.error('Could not load admonitions for player', 'Error loading admonitions'); }) }); } onInsertNewAdmonition() { this.isCreateMode = true; this.admonitionForm.patchValue({ reason: '', playerId: this.player.id, }); } onEditAdmonition(admonition: AdmonitionModel) { this.isEditMode = true; this.admonitionForm.patchValue({ id: admonition.id, reason: admonition.reason, playerId: admonition.playerId }); } onDeleteAdmonition(admonition: AdmonitionModel) { Swal.fire({ title: "Delete Admonition ?", text: 'Do you really want to delete this admonition ?', icon: "warning", showCancelButton: true, confirmButtonColor: "#3085d6", cancelButtonColor: "#d33", confirmButtonText: "Yes, delete it!" }).then((result) => { if (result.isConfirmed) { this._admonitionService.deleteAdmonition(admonition.id).subscribe({ next: ((response) => { if (response) { Swal.fire({ title: "Deleted!", text: "Admonition has been deleted", icon: "success" }).then(_ => { this.getPlayerAdmonitions(admonition.playerId); }); } }), error: (error: Error) => { console.log(error); this._toastr.error('Could not delete note', 'Error delete note'); } }); } }); } onSubmit() { if (this.admonitionForm.invalid) { return; } const admonition: AdmonitionModel = this.admonitionForm.value as AdmonitionModel; if (this.isCreateMode) { this.creatNewAdmonition(admonition); } if (this.isEditMode) { this.updateAdmonition(admonition); } } onCancel() { this.isCreateMode = false; this.isEditMode = false; this.admonitionForm.reset(); } private creatNewAdmonition(admonition: AdmonitionModel) { this._admonitionService.createAdmonition(admonition).subscribe({ next: ((response) => { if (response) { this._toastr.success('Successfully created admonition', 'Created Admonition'); this.getPlayerAdmonitions(admonition.playerId); this.onCancel(); } }), error: ((error) => { console.log(error); this._toastr.error('Could not create new Admonition', 'Error create admonition'); }) }); } private updateAdmonition(admonition: AdmonitionModel) { this._admonitionService.updateAdmonition(admonition.id, admonition).subscribe({ next: ((response) => { if (response) { this._toastr.success('Successfully updated admonition', 'Update admonition'); this.getPlayerAdmonitions(response.playerId); this.onCancel(); } }), error: ((error) => { console.log(error); this._toastr.error('Could not update Admonition', 'Error update admonition'); }) }); } }