mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-13 12:13:10 +00:00
34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
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;
|
|
}
|
|
|
|
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]);
|
|
}
|
|
} |