Skip to content

Commit a0ec345

Browse files
author
Dmitry Yadrikhinsky
committed
[Timer] Fix children timers, restore active task
1 parent c97875a commit a0ec345

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

src/models/TaskModel.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { computed, makeObservable, observable } from 'mobx';
55
interface ITaskModel extends ITreeItem<ITaskModel> {
66
projectId: string;
77
checked: boolean;
8-
time: number[][];
98
active: boolean;
9+
time: number[][];
1010
}
1111

1212
export default class TaskModel extends AbstractModel implements ITaskModel {
@@ -21,6 +21,8 @@ export default class TaskModel extends AbstractModel implements ITaskModel {
2121
constructor(props: ITaskModel) {
2222
super();
2323
this.load(props);
24+
this.children = props.children?.map((json) => new TaskModel(json)) || [];
25+
2426
makeObservable(this, {
2527
key: observable,
2628
title: observable,

src/services/tasks/TaskStore.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export default class TaskStore {
5858

5959
restore() {
6060
this.tasks = this.tasksService.getAll();
61+
this.findActiveTask();
6162
}
6263

6364
getCheckedKeys(projectId: string): string[] {
@@ -76,6 +77,32 @@ export default class TaskStore {
7677
this.tasksService.save(this.tasks);
7778
}
7879

80+
private findActiveTask() {
81+
Object.keys(this.tasks).find((projectId) => {
82+
const found = this.findActiveTaskRecursive(this.tasks[projectId]);
83+
if (found) {
84+
this.activeTask = found;
85+
return true;
86+
}
87+
return false;
88+
});
89+
}
90+
91+
private findActiveTaskRecursive(tasks: TaskModel[]): TaskModel | undefined {
92+
return tasks.find((task) => {
93+
if (task.active) {
94+
return task;
95+
}
96+
if (Array.isArray(task.children)) {
97+
const found = this.findActiveTaskRecursive(task.children);
98+
if (found) {
99+
return found;
100+
}
101+
}
102+
return false;
103+
});
104+
}
105+
79106
private getCheckedKeysRecursive(tasks: TaskModel[], checkedIds: string[]) {
80107
tasks.forEach((task) => {
81108
if (task.checked) {

0 commit comments

Comments
 (0)