mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-11 18:42:56 +00:00
feat: canvas.activeTracker add targer prop
This commit is contained in:
parent
ee80fb12b8
commit
2b3d96ceda
@ -7,6 +7,8 @@ import {
|
||||
import { isNode } from '@alilc/lowcode-utils';
|
||||
|
||||
export interface IActiveTracker extends Omit< IPublicModelActiveTracker, 'track' | 'onChange' > {
|
||||
_target: ActiveTarget | INode;
|
||||
|
||||
track(originalTarget: ActiveTarget | INode): void;
|
||||
|
||||
onChange(fn: (target: ActiveTarget) => void): () => void;
|
||||
@ -17,10 +19,10 @@ export interface ActiveTarget extends Omit< IPublicTypeActiveTarget, 'node' > {
|
||||
}
|
||||
|
||||
export class ActiveTracker implements IActiveTracker {
|
||||
private emitter: IEventBus = createModuleEventBus('ActiveTracker');
|
||||
|
||||
@obx.ref private _target?: ActiveTarget | INode;
|
||||
|
||||
private emitter: IEventBus = createModuleEventBus('ActiveTracker');
|
||||
|
||||
track(originalTarget: ActiveTarget | INode) {
|
||||
let target = originalTarget;
|
||||
if (isNode(originalTarget)) {
|
||||
|
||||
@ -90,28 +90,29 @@ export class TreeMaster {
|
||||
private initEvent() {
|
||||
let startTime: any;
|
||||
const { event, project, canvas } = this.pluginContext;
|
||||
const setExpandByActiveTracker = (target: IPublicTypeActiveTarget) => {
|
||||
const { node, detail } = target;
|
||||
const tree = this.currentTree;
|
||||
if (!tree/* || node.document !== tree.document */) {
|
||||
return;
|
||||
}
|
||||
const treeNode = tree.getTreeNode(node);
|
||||
if (detail && isLocationChildrenDetail(detail)) {
|
||||
treeNode.expand(true);
|
||||
} else {
|
||||
treeNode.expandParents();
|
||||
}
|
||||
this.boards.forEach((board) => {
|
||||
board.scrollToNode(treeNode, detail);
|
||||
});
|
||||
};
|
||||
this.disposeEvents = [
|
||||
canvas.dragon?.onDragstart(() => {
|
||||
startTime = Date.now() / 1000;
|
||||
// needs?
|
||||
this.toVision();
|
||||
}),
|
||||
canvas.activeTracker?.onChange((target: IPublicTypeActiveTarget) => {
|
||||
const { node, detail } = target;
|
||||
const tree = this.currentTree;
|
||||
if (!tree/* || node.document !== tree.document */) {
|
||||
return;
|
||||
}
|
||||
const treeNode = tree.getTreeNode(node);
|
||||
if (detail && isLocationChildrenDetail(detail)) {
|
||||
treeNode.expand(true);
|
||||
} else {
|
||||
treeNode.expandParents();
|
||||
}
|
||||
this.boards.forEach((board) => {
|
||||
board.scrollToNode(treeNode, detail);
|
||||
});
|
||||
}),
|
||||
canvas.activeTracker?.onChange(setExpandByActiveTracker),
|
||||
canvas.dragon?.onDragend(() => {
|
||||
const endTime: any = Date.now() / 1000;
|
||||
const nodes = project.currentDocument?.selection?.getNodes();
|
||||
@ -135,6 +136,9 @@ export class TreeMaster {
|
||||
this.treeMap.delete(id);
|
||||
}),
|
||||
];
|
||||
if (canvas.activeTracker?.target) {
|
||||
setExpandByActiveTracker(canvas.activeTracker?.target);
|
||||
}
|
||||
}
|
||||
|
||||
private toVision() {
|
||||
|
||||
@ -12,6 +12,16 @@ export class ActiveTracker implements IPublicModelActiveTracker {
|
||||
this[activeTrackerSymbol] = innerTracker;
|
||||
}
|
||||
|
||||
get target() {
|
||||
const { node: innerNode, detail, instance } = this[activeTrackerSymbol]._target;
|
||||
const publicNode = ShellNode.create(innerNode);
|
||||
return {
|
||||
node: publicNode!,
|
||||
detail,
|
||||
instance,
|
||||
};
|
||||
}
|
||||
|
||||
onChange(fn: (target: IPublicTypeActiveTarget) => void): () => void {
|
||||
if (!fn) {
|
||||
return () => {};
|
||||
|
||||
@ -2,6 +2,12 @@ import { IPublicTypeActiveTarget } from '../type';
|
||||
import { IPublicModelNode } from './node';
|
||||
|
||||
export interface IPublicModelActiveTracker {
|
||||
|
||||
/**
|
||||
* @since 1.1.7
|
||||
*/
|
||||
target: IPublicTypeActiveTarget;
|
||||
|
||||
onChange(fn: (target: IPublicTypeActiveTarget) => void): () => void;
|
||||
|
||||
track(node: IPublicModelNode): void;
|
||||
|
||||
@ -70,9 +70,7 @@ export class Resource implements IResource {
|
||||
return this.context.innerSkeleton;
|
||||
}
|
||||
|
||||
get children(): IResource[] {
|
||||
return this.resourceData?.children?.map(d => new Resource(d, this.workspace.getResourceType(d.resourceName || this.resourceType.name), this.workspace)) || [];
|
||||
}
|
||||
children: IResource[];
|
||||
|
||||
get config() {
|
||||
return this.resourceData.config;
|
||||
@ -92,6 +90,7 @@ export class Resource implements IResource {
|
||||
if (!resourceType) {
|
||||
logger.error(`resourceType[${resourceType}] is unValid.`);
|
||||
}
|
||||
this.children = this.resourceData?.children?.map(d => new Resource(d, this.workspace.getResourceType(d.resourceName || this.resourceType.name), this.workspace)) || [];
|
||||
}
|
||||
|
||||
async init() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user