diff --git a/src/app/features/project/store/project.effects.ts b/src/app/features/project/store/project.effects.ts index 32915911c9..ce857d5d15 100644 --- a/src/app/features/project/store/project.effects.ts +++ b/src/app/features/project/store/project.effects.ts @@ -43,6 +43,7 @@ import {WorkContextType} from '../../work-context/work-context.model'; import {setActiveWorkContext} from '../../work-context/store/work-context.actions'; import {WorkContextService} from '../../work-context/work-context.service'; import {Project} from '../project.model'; +import {TaskService} from '../../tasks/task.service'; @Injectable() export class ProjectEffects { @@ -168,6 +169,7 @@ export class ProjectEffects { tap(async (action: DeleteProject) => { await this._persistenceService.removeCompleteRelatedDataForProject(action.payload.id); this._reminderService.removeReminderByWorkContextId(action.payload.id); + this._taskService.removeOrphanTasksForProject(action.payload.id); }), ); @@ -283,6 +285,7 @@ export class ProjectEffects { private _obstructionService: ObstructionService, private _improvementService: ImprovementService, private _workContextService: WorkContextService, + private _taskService: TaskService, private _router: Router, ) { } diff --git a/src/app/features/tasks/task.service.ts b/src/app/features/tasks/task.service.ts index 320aa48b13..c1ca4fe4c9 100644 --- a/src/app/features/tasks/task.service.ts +++ b/src/app/features/tasks/task.service.ts @@ -170,6 +170,9 @@ export class TaskService { private readonly _actions$: Actions, private readonly _router: Router, ) { + // TODO remove + this.removeOrphanTasksForProject('DEFAULT'); + this.currentTaskId$.subscribe((val) => this.currentTaskId = val); // time tracking @@ -589,6 +592,27 @@ export class TaskService { } + async removeOrphanTasksForProject(projectIdToDelete: string): Promise<{ today: string[] }> { + const taskState: TaskState = await this.taskFeatureState$.pipe( + filter(s => s.isDataLoaded), + first(), + ).toPromise(); + const nonArchiveTaskIdsToDelete = taskState.ids.filter((id) => { + const t = taskState.entities[id]; + return t.projectId === projectIdToDelete; + }); + const taskArchiveState: TaskArchive = await this._persistenceService.taskArchive.loadState(); + const archiveTaskIdsToDelete = (taskArchiveState.ids as string[]).filter((id) => { + const t = taskArchiveState.entities[id]; + return t.projectId === projectIdToDelete; + }); + // TODO just filter all tags for those ids + console.log('TaskIds to remove', nonArchiveTaskIdsToDelete, archiveTaskIdsToDelete); + return { + today: nonArchiveTaskIdsToDelete, + }; + } + createNewTaskWithDefaults( title: string, additional: Partial = {}, diff --git a/src/app/pages/project-overview-page/project-overview-page.component.html b/src/app/pages/project-overview-page/project-overview-page.component.html index 37a28a2ace..c2cafca1f7 100644 --- a/src/app/pages/project-overview-page/project-overview-page.component.html +++ b/src/app/pages/project-overview-page/project-overview-page.component.html @@ -52,13 +52,13 @@ - - - - - - - +