feat: add TaskUpdateService to handle task updates and optimize task state management

This commit is contained in:
Chneemann 2025-03-29 15:47:15 +01:00
parent 72ca03086d
commit 13a087cfb0
4 changed files with 31 additions and 1 deletions

View file

@ -14,6 +14,7 @@ import { AuthService } from '../../services/auth.service';
import { firstValueFrom, map } from 'rxjs'; import { firstValueFrom, map } from 'rxjs';
import { TaskService } from '../../services/task.service'; import { TaskService } from '../../services/task.service';
import { ApiService } from '../../services/api.service'; import { ApiService } from '../../services/api.service';
import { TaskUpdateService } from '../../services/task-update.service';
@Component({ @Component({
selector: 'app-add-task', selector: 'app-add-task',
@ -51,6 +52,7 @@ export class AddTaskComponent implements OnInit {
private taskService: TaskService, private taskService: TaskService,
private apiService: ApiService, private apiService: ApiService,
private authService: AuthService, private authService: AuthService,
private taskUpdateService: TaskUpdateService,
private route: ActivatedRoute, private route: ActivatedRoute,
private router: Router private router: Router
) {} ) {}
@ -377,6 +379,7 @@ export class AddTaskComponent implements OnInit {
this.apiService.saveNewTask(taskWithoutId).subscribe({ this.apiService.saveNewTask(taskWithoutId).subscribe({
next: (response) => { next: (response) => {
this.taskUpdateService.notifyTaskUpdate();
this.removeTaskData(ngForm); this.removeTaskData(ngForm);
this.closeOverlay(); this.closeOverlay();
this.router.navigate(['/board']); this.router.navigate(['/board']);

View file

@ -14,6 +14,7 @@ import { Task } from '../../interfaces/task.interface';
import { TaskService } from '../../services/task.service'; import { TaskService } from '../../services/task.service';
import { LoadingSpinnerComponent } from '../../shared/components/loading-spinner/loading-spinner.component'; import { LoadingSpinnerComponent } from '../../shared/components/loading-spinner/loading-spinner.component';
import { finalize, Subject, takeUntil } from 'rxjs'; import { finalize, Subject, takeUntil } from 'rxjs';
import { TaskUpdateService } from '../../services/task-update.service';
@Component({ @Component({
selector: 'app-board', selector: 'app-board',
@ -44,6 +45,7 @@ export class BoardComponent {
private sharedService: SharedService, private sharedService: SharedService,
private taskService: TaskService, private taskService: TaskService,
private apiService: ApiService, private apiService: ApiService,
private taskUpdateService: TaskUpdateService,
private router: Router private router: Router
) {} ) {}
@ -58,6 +60,7 @@ export class BoardComponent {
ngOnInit() { ngOnInit() {
this.loadAllTasks(); this.loadAllTasks();
this.subscribeToTaskUpdates();
this.subscribeToDragDropEvents(); this.subscribeToDragDropEvents();
} }
@ -89,6 +92,14 @@ export class BoardComponent {
}, {} as { [key: string]: Task[] }); }, {} as { [key: string]: Task[] });
} }
private subscribeToTaskUpdates() {
this.taskUpdateService.taskUpdated$
.pipe(takeUntil(this.destroy$))
.subscribe(() => {
this.loadAllTasks();
});
}
/** /**
* Subscribes to events from the DragDropService and handles them. * Subscribes to events from the DragDropService and handles them.
* @remarks * @remarks

View file

@ -0,0 +1,14 @@
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class TaskUpdateService {
private taskUpdatedSubject = new Subject<void>();
taskUpdated$ = this.taskUpdatedSubject.asObservable();
notifyTaskUpdate() {
this.taskUpdatedSubject.next();
}
}

View file

@ -11,6 +11,7 @@ import { TaskService } from '../../../../services/task.service';
import { AuthService } from '../../../../services/auth.service'; import { AuthService } from '../../../../services/auth.service';
import { map } from 'rxjs'; import { map } from 'rxjs';
import { ApiService } from '../../../../services/api.service'; import { ApiService } from '../../../../services/api.service';
import { TaskUpdateService } from '../../../../services/task-update.service';
@Component({ @Component({
selector: 'app-task-overlay', selector: 'app-task-overlay',
@ -33,6 +34,7 @@ export class TaskOverlayComponent implements OnInit {
private taskService: TaskService, private taskService: TaskService,
private authService: AuthService, private authService: AuthService,
private apiService: ApiService, private apiService: ApiService,
private taskUpdateService: TaskUpdateService,
private router: Router, private router: Router,
private route: ActivatedRoute private route: ActivatedRoute
) {} ) {}
@ -121,7 +123,7 @@ export class TaskOverlayComponent implements OnInit {
deleteTask(taskId: string) { deleteTask(taskId: string) {
this.apiService.deleteTaskById(taskId).subscribe({ this.apiService.deleteTaskById(taskId).subscribe({
next: (task) => { next: (task) => {
console.log('Task deleted successfully:', task); this.taskUpdateService.notifyTaskUpdate();
}, },
error: (err) => { error: (err) => {
console.error('Error deleting task', err); console.error('Error deleting task', err);