Skip to content

Commit 41cc75d

Browse files
committed
WIP TaskWithProjectNameModel
1 parent b321dca commit 41cc75d

File tree

10 files changed

+57
-22
lines changed

10 files changed

+57
-22
lines changed

src/base/AbstractModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ export default abstract class AbstractModel {
33
return Object.keys(this);
44
}
55

6-
protected load<T extends any = any>(data: T) {
6+
protected load<T extends Object = Object>(data: T) {
77
if (data) {
88
this.getAttributes().forEach((attribute) => {
99
if (data.hasOwnProperty(attribute)) {

src/helpers/TreeModelHelper.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import TreeModelHelper from './TreeModelHelper';
22
import TaskFactory from '../modules/tasks/TaskFactory';
33
import { IJsonTaskModel } from '../modules/tasks/models/TaskModel';
4-
import TasksByProject from '../modules/tasks/models/TasksByProject';
4+
import { TasksByProject } from '../modules/tasks/models/TasksByProject';
55
import { ITreeItemWithParent } from '../types/ITreeItem';
66

77
describe('TreeModelHelper', () => {

src/main.dev.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ initSentry();
1818
import path from 'path';
1919
import { app, BrowserWindow, shell } from 'electron';
2020
import { autoUpdater } from 'electron-updater';
21+
// @ts-ignore
2122
import Badge from 'electron-windows-badge';
2223

2324
import './main/IpcMain';

src/modules/tasks/TaskFactory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import AbstractFactory from '../../base/AbstractFactory';
2-
import TasksByProject from './models/TasksByProject';
2+
import { TasksByProject } from './models/TasksByProject';
33
import TaskModel from './models/TaskModel';
44
import { TaskInMyDay, taskModelProxyHandler } from './models/TaskInMyDay';
55
import { DEFAULT_PROJECT_ID } from '../projects/models/ProjectModel';

src/modules/tasks/TaskRepository.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import AbstractFileRepository from '../../base/repositories/AbstractFileRepository';
2-
import TasksByProject from './models/TasksByProject';
2+
import { TasksByProject } from './models/TasksByProject';
33

44
export default class TaskRepository extends AbstractFileRepository<
55
TasksByProject

src/modules/tasks/TaskService.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ import { toJS } from 'mobx';
22

33
import TaskRepository from './TaskRepository';
44
import TaskFactory from './TaskFactory';
5-
import TasksByProject from './models/TasksByProject';
5+
import { TasksByProject } from './models/TasksByProject';
66
import AbstractServiceWithProfile from '../../base/AbstractServiceWithProfile';
77
import TreeModelHelper from '../../helpers/TreeModelHelper';
8-
import TaskModel from './models/TaskModel';
8+
import { ITreeItemWithParent } from '../../types/ITreeItem';
99

10-
const setParent = (item: TaskModel, parent?: TaskModel) => {
10+
const setParent = <T extends ITreeItemWithParent<any>>(item: T, parent?: T) => {
1111
item.parent = parent || null;
1212
};
1313

14-
const clearParent = (item: TaskModel) => {
14+
const clearParent = (item: ITreeItemWithParent<any>) => {
1515
item.parent = null;
1616
};
1717

@@ -35,13 +35,19 @@ export default class TaskService extends AbstractServiceWithProfile<
3535

3636
private static fillParent(data: TasksByProject) {
3737
Object.values(data).forEach((projectTasks) => {
38-
TreeModelHelper.walkRecursive(setParent, projectTasks);
38+
TreeModelHelper.walkRecursive<ITreeItemWithParent<any>>(
39+
setParent,
40+
projectTasks
41+
);
3942
});
4043
}
4144

4245
private static clearParent(data: TasksByProject) {
4346
Object.values(data).forEach((projectTasks) => {
44-
TreeModelHelper.walkRecursive(clearParent, projectTasks);
47+
TreeModelHelper.walkRecursive<ITreeItemWithParent<any>>(
48+
clearParent,
49+
projectTasks
50+
);
4551
});
4652
}
4753
}

src/modules/tasks/TaskStore.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import { autorun, makeAutoObservable } from 'mobx';
22

33
import TaskService from './TaskService';
44
import TaskModel, { ITimeRangeModel } from './models/TaskModel';
5-
import TasksByProject from '../../modules/tasks/models/TasksByProject';
5+
import {
6+
Task,
7+
TasksByProject,
8+
} from '../../modules/tasks/models/TasksByProject';
69
import TreeModelHelper from '../../helpers/TreeModelHelper';
710
import BadgeService from '../BadgeService';
811
import rootStore, { RootStore } from '../RootStore';
@@ -13,6 +16,7 @@ import {
1316
ETimeRangeEvents,
1417
} from '../../services/gaService/EEvents';
1518
import { DEFAULT_PROJECT_ID } from '../projects/models/ProjectModel';
19+
import { ITreeItemWithParent } from '../../types/ITreeItem';
1620

1721
export default class TaskStore {
1822
tasks: TasksByProject = {};
@@ -51,7 +55,7 @@ export default class TaskStore {
5155
GaService.event(EEventCategory.TimeRange, ETimeRangeEvents.Delete);
5256
}
5357

54-
getTasks(projectId: string): TaskModel[] {
58+
getTasks(projectId: string): Task[] {
5559
return this.tasks[projectId] || [];
5660
}
5761

@@ -95,7 +99,7 @@ export default class TaskStore {
9599

96100
addToMyDay(task: TaskModel) {
97101
task.inMyDay = new Date();
98-
// @ts-ignore
102+
99103
const pathToNode = TreeModelHelper.getPathToNode(task);
100104

101105
TreeModelHelper.copyItemsToTreeUnderProject(
@@ -187,12 +191,14 @@ export default class TaskStore {
187191
}
188192

189193
markExpanded(projectId: string, taskIds: string[]) {
190-
const markExpanded = (task: TaskModel, taskIds: string[]) => {
191-
task.expanded = taskIds.includes(task.key);
194+
const markExpanded = (task: Task, taskIds: string[]) => {
195+
if (task instanceof TaskModel) {
196+
task.expanded = taskIds.includes(task.key);
197+
}
192198
};
193199

194200
if (Array.isArray(this.tasks[projectId])) {
195-
TreeModelHelper.modifyItemsWithIdsRecursive<TaskModel>(
201+
TreeModelHelper.modifyItemsWithIdsRecursive<Task>(
196202
this.tasks[projectId],
197203
taskIds,
198204
markExpanded
@@ -207,7 +213,7 @@ export default class TaskStore {
207213
condition: (task: TaskModel) => boolean
208214
) {
209215
if (Array.isArray(this.tasks[projectId])) {
210-
return TreeModelHelper.getFlatItemsRecursive(
216+
return TreeModelHelper.getFlatItemsRecursive<ITreeItemWithParent>(
211217
this.tasks[projectId],
212218
condition
213219
).map((task) => task.key);

src/modules/tasks/models/TaskModel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { action, computed, makeObservable, observable } from 'mobx';
22
import { isSameDay, startOfDay } from 'date-fns';
33

44
import AbstractModel from '../../../base/AbstractModel';
5-
import { ITreeItem, ITreeItemWithParent } from '../../../types/ITreeItem';
5+
import { ITreeItemWithParent } from '../../../types/ITreeItem';
66

77
export interface IJsonTimeRangeModel {
88
start: string;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import AbstractModel from '../../../base/AbstractModel';
2+
import { ITreeItemWithParent } from '../../../types/ITreeItem';
3+
import TaskModel from './TaskModel';
4+
5+
interface ITaskWithProjectName {
6+
key: string;
7+
title: string;
8+
parent: null;
9+
children: TaskModel[];
10+
}
11+
12+
export class TaskWithProjectNameModel extends AbstractModel
13+
implements ITreeItemWithParent<TaskModel> {
14+
key: string = '';
15+
title: string = '';
16+
parent: TaskModel | null = null;
17+
children: TaskModel[] = [];
18+
19+
constructor(props: ITaskWithProjectName) {
20+
super();
21+
this.load(props);
22+
}
23+
}
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import TaskModel from './TaskModel';
22
import { TaskInMyDay } from './TaskInMyDay';
3+
import { TaskWithProjectNameModel } from './TaskWithProjectNameModel';
34

4-
type Task = TaskModel | TaskInMyDay;
5-
type TasksByProject = Record<string, Task[]>;
6-
7-
export default TasksByProject;
5+
export type Task = TaskModel | TaskInMyDay | TaskWithProjectNameModel;
6+
export type TasksByProject = Record<string, Task[]>;

0 commit comments

Comments
 (0)