fix: strict mode for undo task meta reducer

This commit is contained in:
Johannes Millan 2020-07-02 12:17:45 +02:00
parent 243db4cfd7
commit 668abdc066

View file

@ -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,