Skip to content

Commit 376f1fd

Browse files
committed
TaskModelProxy
1 parent 9f3a529 commit 376f1fd

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

src/modules/tasks/TaskFactory.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import AbstractFactory from '../../base/AbstractFactory';
22
import TasksByProject from './models/TasksByProject';
33
import TaskModel from './models/TaskModel';
4+
import { TaskModelProxy, taskModelProxyHandler } from './models/TaskModelProxy';
45

56
export default class TaskFactory extends AbstractFactory {
67
createTasks(data: TasksByProject): TasksByProject {
@@ -10,4 +11,10 @@ export default class TaskFactory extends AbstractFactory {
1011
});
1112
return newData;
1213
}
14+
15+
createTaskProxy(taskModel: TaskModel): TaskModelProxy {
16+
const target = new TaskModelProxy(taskModel);
17+
18+
return new Proxy<TaskModelProxy>(target, taskModelProxyHandler);
19+
}
1320
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import TaskModel from './TaskModel';
2+
3+
export class TaskModelProxy extends TaskModel {
4+
origin: TaskModel | null = null;
5+
}
6+
7+
export const taskModelProxyHandler: ProxyHandler<TaskModelProxy> = {
8+
get(target: TaskModelProxy, prop: string | symbol): any {
9+
return target?.origin?.[prop as keyof TaskModel];
10+
},
11+
set(target: TaskModelProxy, prop: string | symbol, value: any): boolean {
12+
if (prop === 'duration') {
13+
console.error(
14+
`TaskModel: Can't set prop '${prop.toString()}' in`,
15+
target
16+
);
17+
return false;
18+
}
19+
// @ts-ignore
20+
target[prop] = value;
21+
// @ts-ignore
22+
target.origin[prop] = value;
23+
24+
return true;
25+
},
26+
};

0 commit comments

Comments
 (0)