diff --git a/src/app/root-store/meta/undo-task-delete.meta-reducer.ts b/src/app/root-store/meta/undo-task-delete.meta-reducer.ts index 084e2c2777..712d677d65 100644 --- a/src/app/root-store/meta/undo-task-delete.meta-reducer.ts +++ b/src/app/root-store/meta/undo-task-delete.meta-reducer.ts @@ -25,8 +25,8 @@ export interface UndoTaskDeleteState { let U_STORE: UndoTaskDeleteState; -export const undoTaskDeleteMetaReducer = (reducer) => { - return (state: RootState, action) => { +export const undoTaskDeleteMetaReducer = (reducer: any): any => { + return (state: RootState, action: any) => { switch (action.type) { case TaskActionTypes.DeleteTask: @@ -35,15 +35,19 @@ export const undoTaskDeleteMetaReducer = (reducer) => { case TaskActionTypes.UndoDeleteTask: - console.log(U_STORE, state); - let updatedState = state; + const tasksToRestore: Task[] = Object.keys(U_STORE.deletedTaskEntities).map( + (id: string) => U_STORE.deletedTaskEntities[id] + ).filter(t => { + if (!t) { + throw new Error('Task Restore Error: Missing task data when restoruii'); + } + return true; + }) as Task[]; + updatedState = { ...updatedState, - [TASK_FEATURE_NAME]: taskAdapter.addMany( - Object.keys(U_STORE.deletedTaskEntities).map( - id => U_STORE.deletedTaskEntities[id] - ), updatedState[TASK_FEATURE_NAME] + [TASK_FEATURE_NAME]: taskAdapter.addMany(tasksToRestore, updatedState[TASK_FEATURE_NAME] ), }; @@ -63,12 +67,20 @@ export const undoTaskDeleteMetaReducer = (reducer) => { updatedState = { ...updatedState, [TAG_FEATURE_NAME]: tagAdapter.updateMany( - Object.keys(U_STORE.tagTaskIdMap).map(id => ({ - id, - changes: { - taskIds: U_STORE.tagTaskIdMap[id] + Object.keys(U_STORE.tagTaskIdMap).map(id => { + if (!U_STORE.tagTaskIdMap) { + throw new Error('Task Restore Error: Missing tagTaskIdMap data for restoring task'); } - }) + if (!U_STORE.tagTaskIdMap[id]) { + throw new Error('Task Restore Error: Missing tag data for restoring task'); + } + return { + id, + changes: { + taskIds: U_STORE.tagTaskIdMap[id] + } + }; + } ), updatedState[TAG_FEATURE_NAME]), }; } @@ -110,24 +122,43 @@ const _createTaskDeleteState = (state: RootState, task: TaskWithSubTasks): UndoT }; }, {}); + if (!taskEntities || !taskEntities[task.parentId] || !(taskEntities[task.parentId] as Task).subTaskIds) { + throw new Error('Task Restore Error: Missing taskEntities'); + } + // SUB TASK CASE // Note: should work independent as sub tasks dont show up in tag or project lists if (task.parentId) { return { projectId: task.projectId, parentTaskId: task.parentId, - subTaskIds: taskEntities[task.parentId].subTaskIds, + subTaskIds: (taskEntities[task.parentId] as Task).subTaskIds, deletedTaskEntities, }; } else { // PROJECT CASE const project = state[PROJECT_FEATURE_NAME].entities[task.projectId]; + if (!project) { + throw new Error('Task Restore Error: Missing project'); + } + const taskIdsForProjectBacklog = (task.projectId && project.backlogTaskIds); const taskIdsForProject = (task.projectId && project.taskIds); - const tagState = state[TAG_FEATURE_NAME]; + if (!taskIdsForProjectBacklog) { + throw new Error('Task Restore Error: Missing taskIdsForProjectBacklog'); + } + if (!taskIdsForProject) { + throw new Error('Task Restore Error: Missing taskIdsForProject'); + } + + const tagTaskIdMap = (task.tagIds).reduce((acc, id) => { const tag = tagState.entities[id]; + if (!tag) { + throw new Error('Task Restore Error: Missing tag'); + } + if (tag.taskIds.includes(task.id)) { return { ...acc,