diff --git a/src/app/components/add-task/add-task.component.html b/src/app/components/add-task/add-task.component.html index 4f664e4..c4d08fd 100644 --- a/src/app/components/add-task/add-task.component.html +++ b/src/app/components/add-task/add-task.component.html @@ -282,7 +282,7 @@ [img]="'check'" [imgFilter]="'none'" [value]=" - ['', 'none', 'todo', 'inprogress', 'awaitfeedback', 'done'].includes( + ['', 'todo', 'inprogress', 'awaitfeedback', 'done'].includes( overlayData.toString() ) ? ('addTask.create' | translate) diff --git a/src/app/components/add-task/add-task.component.ts b/src/app/components/add-task/add-task.component.ts index e6f1681..80f8009 100644 --- a/src/app/components/add-task/add-task.component.ts +++ b/src/app/components/add-task/add-task.component.ts @@ -84,8 +84,10 @@ export class AddTaskComponent implements OnInit { async loadExistingTaskData() { if (this.overlayType === 'newTaskOverlay') { + // OverlayData = Status "todo" this.taskData.status = this.overlayData; } else if (this.overlayData) { + // OverlayData = Current TaskId const taskData = await firstValueFrom(this.getTaskData(this.overlayData)); if (taskData) { this.taskData = { ...this.taskData, ...taskData }; @@ -258,21 +260,46 @@ export class AddTaskComponent implements OnInit { onSubmit(ngForm: NgForm) { if (ngForm.submitted && ngForm.form.valid) { - this.apiService.saveNewTask(this.taskData).subscribe({ - next: (response) => { - this.toastNotificationService.createTaskSuccessToast(); - this.updateNotifierService.notifyUpdate('task'); - this.clearTaskData(ngForm); - this.closeOverlay(); - this.router.navigate(['/board']); - }, - error: (error) => { - console.error('Fehler beim Speichern:', error); - }, - }); + // OverlayData = Current TaskId + if (this.overlayData) { + this.updateTask(ngForm); + } else { + this.createTask(ngForm); + } } } + createTask(ngForm: NgForm) { + this.apiService.saveNewTask(this.taskData).subscribe({ + next: (response) => { + this.toastNotificationService.createTaskSuccessToast(); + this.updateNotifierService.notifyUpdate('task'); + this.clearTaskData(ngForm); + this.closeOverlay(); + this.router.navigate(['/board']); + }, + error: (error) => { + console.error('Fehler beim Speichern:', error); + }, + }); + } + + updateTask(ngForm: NgForm) { + // OverlayData = Current TaskId + this.apiService.updateTask(this.taskData, this.overlayData).subscribe({ + next: (response) => { + this.toastNotificationService.updateTaskSuccessToast(); + this.updateNotifierService.notifyUpdate('task'); + this.clearTaskData(ngForm); + this.closeOverlay(); + this.router.navigate(['/board']); + }, + error: (error) => { + console.error('Fehler beim Speichern:', error); + }, + }); + } + /** * Sanitizes the task data by removing any potential cross-site scripting characters. * This ensures that the task data is safe to be stored in the Firebase Realtime Database. @@ -293,6 +320,7 @@ export class AddTaskComponent implements OnInit { * @returns {void} */ deleteTask(overlayData: string) { + // OverlayData = Current TaskId this.apiService.deleteTaskById(overlayData); } diff --git a/src/app/components/board/board.component.ts b/src/app/components/board/board.component.ts index 32f770e..03ed68b 100644 --- a/src/app/components/board/board.component.ts +++ b/src/app/components/board/board.component.ts @@ -12,7 +12,7 @@ import { ApiService } from '../../services/api.service'; import { Task } from '../../interfaces/task.interface'; import { TaskService } from '../../services/task.service'; import { LoadingSpinnerComponent } from '../../shared/components/loading-spinner/loading-spinner.component'; -import { finalize, Subject, takeUntil } from 'rxjs'; +import { debounceTime, finalize, Subject, takeUntil } from 'rxjs'; import { UpdateNotifierService } from '../../services/update-notifier.service'; import { ToastNotificationService } from '../../services/toast-notification.service'; import { ResizeService } from '../../services/resize.service'; @@ -96,7 +96,7 @@ export class BoardComponent { private subscribeToTaskUpdates() { this.updateNotifierService.taskUpdated$ - .pipe(takeUntil(this.destroy$)) + .pipe(debounceTime(50), takeUntil(this.destroy$)) .subscribe(() => { this.loadAllTasks(); }); diff --git a/src/app/services/api.service.ts b/src/app/services/api.service.ts index 07c9fa9..487dec1 100644 --- a/src/app/services/api.service.ts +++ b/src/app/services/api.service.ts @@ -69,6 +69,10 @@ export class ApiService { return this.request('POST', '/api/tasks/', task); } + updateTask(task: Task, taskId: string): Observable { + return this.request('PATCH', `/api/tasks/${taskId}/`, task); + } + deleteTaskById(taskId: string): Observable { return this.request('DELETE', `/api/tasks/${taskId}/`); } diff --git a/src/app/services/toast-notification.service.ts b/src/app/services/toast-notification.service.ts index 62aa02d..7ffeb05 100755 --- a/src/app/services/toast-notification.service.ts +++ b/src/app/services/toast-notification.service.ts @@ -63,6 +63,10 @@ export class ToastNotificationService { this.createInfoToast('Task successfully moved!', 'Task Moved'); } + updateTaskSuccessToast(): void { + this.createSuccessToast('Task updated successfully!', 'Task Updated'); + } + // Subtask updateSubtaskSuccessToast(): void {