Skip to content
This repository was archived by the owner on Dec 26, 2022. It is now read-only.

Commit 261d27b

Browse files
committed
Clear parents, make Projects observable
1 parent 0e45354 commit 261d27b

File tree

5 files changed

+54
-17
lines changed

5 files changed

+54
-17
lines changed

src/helpers/TreeModelHelper.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,22 @@ const TreeModelHelper = {
237237
});
238238
return result;
239239
},
240+
241+
fillParent<T extends ITreeItemWithParent>(items: T[]) {
242+
TreeModelHelper.walkRecursive(setParent, items);
243+
},
244+
245+
clearParent<T extends ITreeItemWithParent>(items: T[]) {
246+
TreeModelHelper.walkRecursive(clearParent, items);
247+
},
248+
};
249+
250+
const setParent = <T extends ITreeItemWithParent>(item: T, parent?: T) => {
251+
item.parent = parent;
252+
};
253+
254+
const clearParent = <T extends ITreeItemWithParent>(item: T) => {
255+
item.parent = undefined;
240256
};
241257

242258
export default TreeModelHelper;
Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1-
import ProjectModel, { DEFAULT_PROJECTS } from './models/ProjectModel';
1+
import ProjectModel, {
2+
DEFAULT_PROJECTS,
3+
IJsonProjectItem,
4+
} from './models/ProjectModel';
25
import ProjectFactory from './ProjectFactory';
36
import ProjectRepository from './ProjectRepository';
47
import AbstractServiceWithProfile from '../../base/AbstractServiceWithProfile';
8+
import TreeModelHelper from '../../helpers/TreeModelHelper';
9+
import { toJS } from 'mobx';
510

611
export default class ProjectService extends AbstractServiceWithProfile<
712
ProjectModel[]
@@ -11,11 +16,21 @@ export default class ProjectService extends AbstractServiceWithProfile<
1116

1217
getAll(): ProjectModel[] {
1318
const data = this.repository.restore(DEFAULT_PROJECTS);
14-
19+
ProjectService.fillParent(data);
1520
return this.factory.createProjects(data);
1621
}
1722

1823
save(data: ProjectModel[]): void {
19-
this.repository.save(data);
24+
const copyData = toJS(data);
25+
ProjectService.clearParent(copyData);
26+
this.repository.save(copyData);
27+
}
28+
29+
private static fillParent(data: IJsonProjectItem[]) {
30+
TreeModelHelper.fillParent(data);
31+
}
32+
33+
private static clearParent(data: ProjectModel[]) {
34+
TreeModelHelper.clearParent(data);
2035
}
2136
}

src/modules/projects/models/ProjectModel.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import * as colors from '@ant-design/colors';
2+
import { makeObservable, observable } from 'mobx';
23

34
import AbstractModel from '../../../base/AbstractModel';
4-
import { ITreeItem, ITreeItemWithParent } from '../../../types/ITreeItem';
5+
import { ITreeItemWithParent } from '../../../types/ITreeItem';
56

67
export enum DEFAULT_PROJECT_ID {
78
MyDay = '0',
@@ -22,10 +23,11 @@ export const DEFAULT_PROJECTS: IJsonProjectItem[] = [
2223
color: colors.blue.primary || '',
2324
deletable: false,
2425
expanded: false,
26+
parent: undefined,
2527
},
2628
];
2729

28-
export interface IJsonProjectItem extends ITreeItem {
30+
export interface IJsonProjectItem extends ITreeItemWithParent {
2931
color: string;
3032
expanded: boolean;
3133
deletable: boolean;
@@ -58,5 +60,15 @@ export default class ProjectModel extends AbstractModel
5860
};
5961

6062
this.load(newProps);
63+
64+
makeObservable(this, {
65+
key: observable,
66+
title: observable,
67+
color: observable,
68+
expanded: observable,
69+
deletable: observable,
70+
children: observable,
71+
// parent: none,
72+
});
6173
}
6274
}

src/modules/tasks/TaskService.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,6 @@ import TaskFactory from './TaskFactory';
55
import { TasksByProject } from './models/TasksByProject';
66
import AbstractServiceWithProfile from '../../base/AbstractServiceWithProfile';
77
import TreeModelHelper from '../../helpers/TreeModelHelper';
8-
import { ITreeItemWithParent } from '../../types/ITreeItem';
9-
10-
const setParent = <T extends ITreeItemWithParent>(item: T, parent?: T) => {
11-
item.parent = parent;
12-
};
13-
14-
const clearParent = <T extends ITreeItemWithParent>(item: T) => {
15-
item.parent = undefined;
16-
};
178

189
export default class TaskService extends AbstractServiceWithProfile<
1910
TasksByProject
@@ -33,16 +24,15 @@ export default class TaskService extends AbstractServiceWithProfile<
3324
this.repository.save(copyData);
3425
}
3526

36-
// TODO ProjectService fill and remove parent
3727
private static fillParent(data: TasksByProject) {
3828
Object.values(data).forEach((projectTasks) => {
39-
TreeModelHelper.walkRecursive(setParent, projectTasks);
29+
TreeModelHelper.fillParent(projectTasks);
4030
});
4131
}
4232

4333
private static clearParent(data: TasksByProject) {
4434
Object.values(data).forEach((projectTasks) => {
45-
TreeModelHelper.walkRecursive(clearParent, projectTasks);
35+
TreeModelHelper.clearParent(projectTasks);
4636
});
4737
}
4838
}

src/modules/tasks/models/TaskModel.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,16 @@ export default class TaskModel extends AbstractModel
8383
key: observable,
8484
title: observable,
8585
children: observable,
86+
// parent: none
8687
projectId: observable,
8788
checked: observable,
8889
active: observable,
90+
expanded: observable,
91+
inMyDay: observable,
8992
time: observable,
9093
datesInProgress: observable,
9194
details: observable,
95+
withoutActions: observable,
9296
duration: computed,
9397
setTitle: action,
9498
setDetails: action,

0 commit comments

Comments
 (0)