mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-25 08:53:50 +00:00
feat(autoRepair): make _removeMissingIdsFromLists work
This commit is contained in:
parent
6a111d92ce
commit
192ef5ad86
2 changed files with 99 additions and 15 deletions
|
|
@ -5,6 +5,8 @@ import { fakeEntityStateFromArray } from '../../util/fake-entity-state-from-arra
|
|||
import { DEFAULT_TASK, Task } from '../../features/tasks/task.model';
|
||||
import { createEmptyEntity } from '../../util/create-empty-entity';
|
||||
import { Tag, TagState } from '../../features/tag/tag.model';
|
||||
import { ProjectState } from '../../features/project/store/project.reducer';
|
||||
import { Project } from '../../features/project/project.model';
|
||||
|
||||
fdescribe('dataRepair()', () => {
|
||||
let mock: AppDataComplete;
|
||||
|
|
@ -38,7 +40,7 @@ fdescribe('dataRepair()', () => {
|
|||
});
|
||||
});
|
||||
|
||||
xit('should delete missing tasks for tags today list', () => {
|
||||
it('should delete missing tasks for tags today list', () => {
|
||||
const taskState = {
|
||||
...mock.task,
|
||||
...fakeEntityStateFromArray<Task>([{
|
||||
|
|
@ -77,8 +79,83 @@ fdescribe('dataRepair()', () => {
|
|||
});
|
||||
|
||||
it('should delete missing tasks for projects today list', () => {
|
||||
const taskState = {
|
||||
...mock.task,
|
||||
...fakeEntityStateFromArray<Task>([{
|
||||
...DEFAULT_TASK,
|
||||
id: 'TEST',
|
||||
title: 'TEST',
|
||||
}])
|
||||
} as any;
|
||||
|
||||
const projectState: ProjectState = {
|
||||
...fakeEntityStateFromArray([{
|
||||
title: 'TEST_PROJECT',
|
||||
id: 'TEST_ID_PROJECT',
|
||||
taskIds: ['goneProject', 'TEST', 'noneExisting'],
|
||||
backlogTaskIds: [],
|
||||
}] as Partial<Project> []),
|
||||
};
|
||||
|
||||
expect(dataRepair({
|
||||
...mock,
|
||||
project: projectState,
|
||||
task: taskState,
|
||||
})).toEqual({
|
||||
...mock,
|
||||
task: taskState as any,
|
||||
project: {
|
||||
...projectState,
|
||||
entities: {
|
||||
TEST_ID_PROJECT: {
|
||||
title: 'TEST_PROJECT',
|
||||
id: 'TEST_ID_PROJECT',
|
||||
taskIds: ['TEST'],
|
||||
backlogTaskIds: [],
|
||||
},
|
||||
} as any
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it('should delete missing tasks for projects backlog list', () => {
|
||||
const taskState = {
|
||||
...mock.task,
|
||||
...fakeEntityStateFromArray<Task>([{
|
||||
...DEFAULT_TASK,
|
||||
id: 'TEST',
|
||||
title: 'TEST',
|
||||
}])
|
||||
} as any;
|
||||
|
||||
const projectState: ProjectState = {
|
||||
...fakeEntityStateFromArray([{
|
||||
title: 'TEST_PROJECT',
|
||||
id: 'TEST_ID_PROJECT',
|
||||
taskIds: [],
|
||||
backlogTaskIds: ['goneProject', 'TEST', 'noneExisting'],
|
||||
}] as Partial<Project> []),
|
||||
};
|
||||
|
||||
expect(dataRepair({
|
||||
...mock,
|
||||
project: projectState,
|
||||
task: taskState,
|
||||
})).toEqual({
|
||||
...mock,
|
||||
task: taskState as any,
|
||||
project: {
|
||||
...projectState,
|
||||
entities: {
|
||||
TEST_ID_PROJECT: {
|
||||
title: 'TEST_PROJECT',
|
||||
id: 'TEST_ID_PROJECT',
|
||||
taskIds: [],
|
||||
backlogTaskIds: ['TEST'],
|
||||
},
|
||||
} as any
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('should fix duplicate entities for', () => {
|
||||
|
|
|
|||
|
|
@ -1,12 +1,16 @@
|
|||
import { AppBaseDataEntityLikeStates, AppDataComplete } from '../../imex/sync/sync.model';
|
||||
import { TagCopy } from '../../features/tag/tag.model';
|
||||
import { ProjectCopy } from '../../features/project/project.model';
|
||||
|
||||
const ENTITY_STATE_KEYS: (keyof AppDataComplete)[] = ['task', 'taskArchive', 'taskRepeatCfg', 'tag', 'project', 'simpleCounter'];
|
||||
|
||||
export const dataRepair = (data: AppDataComplete): AppDataComplete => {
|
||||
// console.time('dataRepair');
|
||||
let dataOut: AppDataComplete = data;
|
||||
// let dataOut: AppDataComplete = dirtyDeepCopy(data);
|
||||
dataOut = _fixEntityStates(dataOut);
|
||||
dataOut = _removeDuplicatesFromArchive(dataOut);
|
||||
dataOut = _removeMissingIdsFromLists(dataOut);
|
||||
// console.timeEnd('dataRepair');
|
||||
return dataOut;
|
||||
};
|
||||
|
|
@ -19,7 +23,6 @@ const _fixEntityStates = (data: AppDataComplete): AppDataComplete => {
|
|||
return data;
|
||||
};
|
||||
|
||||
//
|
||||
const _removeDuplicatesFromArchive = (data: AppDataComplete): AppDataComplete => {
|
||||
const taskIds = data.task.ids as string[];
|
||||
const archiveTaskIds = data.taskArchive.ids as string[];
|
||||
|
|
@ -36,20 +39,24 @@ const _removeDuplicatesFromArchive = (data: AppDataComplete): AppDataComplete =>
|
|||
return data;
|
||||
};
|
||||
|
||||
// const _removeDuplicatesFromArchive = (data: AppDataComplete): AppDataComplete => {
|
||||
// return data;
|
||||
// };
|
||||
//
|
||||
// const _removeDuplicatesFromArchive = (data: AppDataComplete): AppDataComplete => {
|
||||
// return data;
|
||||
// };
|
||||
const _removeMissingIdsFromLists = (data: AppDataComplete): AppDataComplete => {
|
||||
const {task, project, tag} = data;
|
||||
|
||||
// const _makeEntityIdsUnique = <T>(data: AppBaseDataEntityLikeStates): AppBaseDataEntityLikeStates => {
|
||||
// return {
|
||||
// ...data,
|
||||
// ids: unique(data.ids as any) as any
|
||||
// };
|
||||
// };
|
||||
project.ids.forEach(() => {
|
||||
});
|
||||
|
||||
project.ids.forEach((pId: string | number) => {
|
||||
const projectItem = project.entities[pId] as ProjectCopy;
|
||||
projectItem.taskIds = projectItem.taskIds.filter(id => task.ids.includes(id));
|
||||
projectItem.backlogTaskIds = projectItem.backlogTaskIds.filter(id => task.ids.includes(id));
|
||||
});
|
||||
tag.ids.forEach((tId: string | number) => {
|
||||
const tagItem = tag.entities[tId] as TagCopy;
|
||||
tagItem.taskIds = tagItem.taskIds.filter(id => task.ids.includes(id));
|
||||
});
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
const _resetEntityIdsFromObjects = <T>(data: AppBaseDataEntityLikeStates): AppBaseDataEntityLikeStates => {
|
||||
return {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue