forked from alibaba/lowcode-engine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathactive-tracker.ts
More file actions
50 lines (42 loc) · 1.39 KB
/
active-tracker.ts
File metadata and controls
50 lines (42 loc) · 1.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { IPublicModelActiveTracker, IPublicModelNode, IPublicTypeActiveTarget } from '@alilc/lowcode-types';
import { IActiveTracker as InnerActiveTracker, ActiveTarget } from '@alilc/lowcode-designer';
import { Node as ShellNode } from './node';
import { nodeSymbol } from '../symbols';
const activeTrackerSymbol = Symbol('activeTracker');
export class ActiveTracker implements IPublicModelActiveTracker {
private readonly [activeTrackerSymbol]: InnerActiveTracker;
constructor(innerTracker: InnerActiveTracker) {
this[activeTrackerSymbol] = innerTracker;
}
get target() {
const _target = this[activeTrackerSymbol]._target;
if (!_target) {
return null;
}
const { node: innerNode, detail, instance } = _target;
const publicNode = ShellNode.create(innerNode);
return {
node: publicNode!,
detail,
instance,
};
}
onChange(fn: (target: IPublicTypeActiveTarget) => void): () => void {
if (!fn) {
return () => {};
}
return this[activeTrackerSymbol].onChange((t: ActiveTarget) => {
const { node: innerNode, detail, instance } = t;
const publicNode = ShellNode.create(innerNode);
const publicActiveTarget = {
node: publicNode!,
detail,
instance,
};
fn(publicActiveTarget);
});
}
track(node: IPublicModelNode) {
this[activeTrackerSymbol].track((node as any)[nodeSymbol]);
}
}