From e99dad8b4e10e971ffd17fd3f6186914a67f76bb Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Mon, 23 Sep 2019 22:03:17 +0200 Subject: [PATCH] feat: add projectId to task model --- .../core/persistence/persistence.service.ts | 6 +++- .../features/tasks/migrate-task-state.util.ts | 28 +++++++++++++++++++ src/app/features/tasks/task.model.ts | 2 ++ src/app/features/tasks/task.service.ts | 21 ++++---------- 4 files changed, 40 insertions(+), 17 deletions(-) create mode 100644 src/app/features/tasks/migrate-task-state.util.ts diff --git a/src/app/core/persistence/persistence.service.ts b/src/app/core/persistence/persistence.service.ts index 1151e0bbf5..164a1188b0 100644 --- a/src/app/core/persistence/persistence.service.ts +++ b/src/app/core/persistence/persistence.service.ts @@ -142,12 +142,16 @@ export class PersistenceService { ...acc, [task.id]: { ...task, + projectId, subTasks: null, }, }; if (task.subTasks) { task.subTasks.forEach((subTask) => { - newAcc[subTask.id] = subTask; + newAcc[subTask.id] = { + ...subTask, + projectId, + }; }); } diff --git a/src/app/features/tasks/migrate-task-state.util.ts b/src/app/features/tasks/migrate-task-state.util.ts new file mode 100644 index 0000000000..9abd9ba630 --- /dev/null +++ b/src/app/features/tasks/migrate-task-state.util.ts @@ -0,0 +1,28 @@ +import {Dictionary} from '@ngrx/entity'; +import {Task, TaskState} from './task.model'; +import {GITHUB_TYPE, LEGACY_GITHUB_TYPE} from '../issue/issue.const'; + +export const migrateTaskState = (taskState: TaskState, projectId: string): TaskState => { + const taskEntities: Dictionary = {...taskState.entities}; + Object.keys(taskEntities).forEach((key) => { + taskEntities[key] = _addProjectId(taskEntities[key], projectId); + taskEntities[key] = _replaceLegacyGitType(taskEntities[key]); + }); + return {...taskState, entities: taskEntities}; +}; + +const _addProjectId = (task: Task, projectId: string): Task => { + return (task.hasOwnProperty('projectId') && task.projectId !== null && task.projectId) + ? task + : { + ...task, + projectId, + }; +}; + +const _replaceLegacyGitType = (task: Task) => { + const issueType = task.issueType as string; + return (issueType === LEGACY_GITHUB_TYPE) + ? {...task, issueType: GITHUB_TYPE} + : task; +}; diff --git a/src/app/features/tasks/task.model.ts b/src/app/features/tasks/task.model.ts index 9843a02f03..09ba25d275 100644 --- a/src/app/features/tasks/task.model.ts +++ b/src/app/features/tasks/task.model.ts @@ -20,6 +20,7 @@ export type TimeSpentOnDay = Readonly; export interface TaskCopy { id: string; + projectId: string; title: string; subTaskIds: string[]; @@ -62,6 +63,7 @@ export interface TaskWithSubTasks extends TaskWithIssueData { export const DEFAULT_TASK: Task = { id: null, + projectId: null, subTaskIds: [], attachmentIds: [], timeSpentOnDay: {}, diff --git a/src/app/features/tasks/task.service.ts b/src/app/features/tasks/task.service.ts index e87bbe45c1..e899c7f43b 100644 --- a/src/app/features/tasks/task.service.ts +++ b/src/app/features/tasks/task.service.ts @@ -18,7 +18,6 @@ import { SHORT_SYNTAX_REG_EX, ShowSubTasksMode, Task, - TaskState, TaskWithIssueData, TaskWithSubTasks } from './task.model'; @@ -94,7 +93,7 @@ import {IssueService} from '../issue/issue.service'; import {ProjectService} from '../project/project.service'; import {RoundTimeOption} from '../project/project.model'; import {Dictionary} from '@ngrx/entity'; -import {GITHUB_TYPE, LEGACY_GITHUB_TYPE} from '../issue/issue.const'; +import {migrateTaskState} from './migrate-task-state.util'; @Injectable({ @@ -287,9 +286,10 @@ export class TaskService { async loadStateForProject(projectId) { const lsTaskState = await this._persistenceService.task.load(projectId); if (lsTaskState) { - this._replaceLegacyGitType(lsTaskState); + this.loadState(migrateTaskState(lsTaskState, projectId)); + } else { + this.loadState(initialTaskState); } - this.loadState(lsTaskState || initialTaskState); } loadState(state) { @@ -656,6 +656,7 @@ export class TaskService { created: Date.now(), title, id: shortid(), + projectId: this._projectService.currentId, ...additional, }) as Task; } @@ -692,16 +693,4 @@ export class TaskService { return task; } } - - // hacky but it should work - private _replaceLegacyGitType(state: TaskState) { - const ids = state.ids as string[]; - ids.forEach(id => { - const task = state.entities[id] as any; - const issueType = task.issueType as string; - if (issueType === LEGACY_GITHUB_TYPE) { - task.issueType = GITHUB_TYPE; - } - }); - } }