import { Component } from '@angular/core'; import { BackendService, ScrumTask, ScrumStatus, ScrumUser, ScrumCategory, } from '../services/backend.service'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { TaskFormComponent } from '../task-form/task-form.component'; import { TableComponentBase } from '../services/table-component.base'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; import { getNumberForPriority } from '../services/sorting.service'; @Component({ selector: 'app-userstory-table', templateUrl: './task-table.component.html', styleUrls: ['./task-table.component.css'], }) export class TaskTableComponent extends TableComponentBase { public filterUserstoryId: number | null = null; public filterPriority: string | null = null; public highlightId: number; public status: ScrumStatus[] = []; public users: ScrumUser[] = []; public categories: ScrumCategory[] = []; public get filteredItems() { return this.items.filter( (task) => (this.filterUserstoryId === null || task.userstoryid === this.filterUserstoryId) && (this.filterPriority === null || task.priority === this.filterPriority) ); } constructor( private backendService: BackendService, private modalService: NgbModal, private route: ActivatedRoute, private router: Router ) { super(); this.applyFilterParameters(route.snapshot.paramMap); route.paramMap.subscribe((map) => this.applyFilterParameters(map)); backendService.getTasks().subscribe((response) => { if (response.status > 399) { alert('Fehler'); } else { this.items.push(...response.body); } }); backendService.getAllStatus().subscribe((response) => { if (response.status > 399) { alert('Fehler'); } else { this.status.push(...response.body); } }); backendService.getUsers().subscribe((response) => { if (response.status > 399) { alert('Fehler'); } else { this.users.push(...response.body); } }); backendService.getCategories().subscribe((response) => { if (response.status > 399) { alert('Fehler'); } else { this.categories.push(...response.body); } }); } private applyFilterParameters(params: ParamMap) { if (params.has('userstoryId')) { this.filterUserstoryId = parseInt(params.get('userstoryId')); } else { this.filterUserstoryId = null; } if (params.has('id')) { this.highlightId = parseInt(params.get('id')); } } public deleteTask(task: ScrumTask) { this.backendService.deleteTask(task).subscribe((response) => { if (response.status > 399) { alert('Fehler'); } }); const index = this.items.indexOf(task); if (index !== -1) { this.items.splice(index, 1); } } public openTaskForm(editTask?: ScrumTask) { const modalRef = this.modalService.open(TaskFormComponent, { backdrop: 'static', keyboard: true, }); if (editTask === null) { modalRef.result.then((result) => { this.items.push(result); }); } modalRef.componentInstance.task = editTask; } sortById() { this.doNumericSort('id', (task) => task.id); } sortByTitle() { this.doStringSort('title', (task) => task.title); } sortByPrio() { this.doNumericSort('priority', (task) => getNumberForPriority(task.priority) ); } sortByTasks() { this.doNumericSort('userstory', (task) => task.userstoryid); } sortByStatus() { this.doNumericSort('statusid', (task) => task.statusid); } sortByAssigned() { this.doNumericSort('assignedtoid', (task) => task.assignedtoid); } sortByCategory() { this.doNumericSort('categoryid', (task) => task.categoryid); } private findTaskById(id: number): ScrumTask { return this.items.find((t) => t.id === id); } getStatusTitleById(id) { var status = this.status.find((x) => x.id === id); if (!status) { return 'N/A'; } return status.title; } getUserNameById(id) { var user = this.users.find((x) => x.id === id); if (!user) { return 'N/A'; } return user.name; } getCategoryTitleById(id) { var category = this.categories.find((x) => x.id === id); if (!category) { return 'N/A'; } return category.title; } }