mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-29 02:30:03 +00:00
fix: strict mode for undo task meta reducer
This commit is contained in:
parent
243db4cfd7
commit
668abdc066
1 changed files with 46 additions and 15 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue