import { Component, Input } from '@angular/core'; import { BackendService, ScrumTask, ScrumUserstory, ScrumStatus, ScrumCategory, } from '../../../services/backend.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { TableComponentBase } from '../table-component.base'; import { getNumberForPriority } from '../../../services/sorting.service'; import { UserstoryFormComponent } from '../../userstory-form/userstory-form.component'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; @Component({ selector: 'app-userstory-inner-table', templateUrl: './userstory-inner-table.component.html', styleUrls: ['./userstory-inner-table.component.css'], }) export class UserstoryInnerTableComponent extends TableComponentBase< ScrumUserstory > { public tasks: ScrumTask[] = []; public filterPriority: string | null = null; public status: ScrumStatus[] = []; public categories: ScrumCategory[] = []; @Input() public storys: ScrumUserstory[] = []; constructor( private backendService: BackendService, private modalService: NgbModal, protected route: ActivatedRoute ) { super(route); this.items = this.storys; backendService.getUserstories().subscribe((response) => { if (response.status > 399) { alert('Fehler'); } else { this.items.push(...response.body); } }); backendService.getTasks().subscribe((response) => { if (response.status > 399) { alert('Fehler'); } else { this.tasks.push(...response.body); } }); backendService.getAllStatus().subscribe((response) => { if (response.status > 399) { alert('Fehler'); } else { this.status.push(...response.body); } }); backendService.getCategories().subscribe((response) => { if (response.status > 399) { alert('Fehler'); } else { this.categories.push(...response.body); } }); } //#region getters public get filteredItems() { if (this.filterPriority == null) { return this.items; } return this.items.filter((t) => t.priority == this.filterPriority); } public getNumberOfTasks(userstory: ScrumUserstory) { return this.tasks.filter((t) => t.userstoryid === userstory.id).length; } getStatusTitleById(id) { var status = this.status.find((x) => x.id === id); if (!status) { return 'N/A'; } return status.title; } getCategoryTitleById(id) { var category = this.categories.find((x) => x.id === id); if (!category) { return 'N/A'; } return category.title; } //#endregion getters //#region userstoryTableFunctions public deleteUserstory(userstory: ScrumUserstory) { this.backendService.deleteUserstory(userstory).subscribe((response) => { if (response.status > 399) { alert('Fehler'); } }); const index = this.items.indexOf(userstory); if (index !== -1) { this.items.splice(index, 1); } } //#endregion userstoryTableFunctions //#region sorters /** * Sorts the tabel's items by priority */ public sortByPrio() { this.doNumericSort('priority', (us) => getNumberForPriority(us.priority)); } /** * Sorts the tabel's items by amount of related tasks */ public sortByTasks() { this.doNumericSort('tasks', (us) => this.getNumberOfTasks(us)); } /** * Sorts the tabel's items by statusid */ public sortByStatus() { this.doNumericSort('statusid', (us) => us.statusid); } /** * Sorts the tabel's items by categoryid */ public sortByCategory() { this.doNumericSort('categoryid', (us) => us.categoryid); } //#endregion sorters //#region modals /** * Opens a UserstoryForm popup for editing a existing userstory or creating a new one. * @param editUserstory optional: userstory to edit (only needed if a userstory should be edited, not newly created) */ public openUserstoryForm(editUserstory?: ScrumUserstory) { const modalRef = this.modalService.open(UserstoryFormComponent, { backdrop: 'static', keyboard: true, size: 'lg', }); if (editUserstory === null) { modalRef.result.then((result) => { this.items.push(result); }); } modalRef.componentInstance.userstory = editUserstory; } //#endregion modals }