feat: canvas.activeTracker add targer prop

This commit is contained in:
liujuping 2023-05-17 18:57:09 +08:00 committed by 林熠
parent ee80fb12b8
commit 2b3d96ceda
5 changed files with 42 additions and 21 deletions

View File

@ -7,6 +7,8 @@ import {
import { isNode } from '@alilc/lowcode-utils'; import { isNode } from '@alilc/lowcode-utils';
export interface IActiveTracker extends Omit< IPublicModelActiveTracker, 'track' | 'onChange' > { export interface IActiveTracker extends Omit< IPublicModelActiveTracker, 'track' | 'onChange' > {
_target: ActiveTarget | INode;
track(originalTarget: ActiveTarget | INode): void; track(originalTarget: ActiveTarget | INode): void;
onChange(fn: (target: ActiveTarget) => void): () => void; onChange(fn: (target: ActiveTarget) => void): () => void;
@ -17,10 +19,10 @@ export interface ActiveTarget extends Omit< IPublicTypeActiveTarget, 'node' > {
} }
export class ActiveTracker implements IActiveTracker { export class ActiveTracker implements IActiveTracker {
private emitter: IEventBus = createModuleEventBus('ActiveTracker');
@obx.ref private _target?: ActiveTarget | INode; @obx.ref private _target?: ActiveTarget | INode;
private emitter: IEventBus = createModuleEventBus('ActiveTracker');
track(originalTarget: ActiveTarget | INode) { track(originalTarget: ActiveTarget | INode) {
let target = originalTarget; let target = originalTarget;
if (isNode(originalTarget)) { if (isNode(originalTarget)) {

View File

@ -90,28 +90,29 @@ export class TreeMaster {
private initEvent() { private initEvent() {
let startTime: any; let startTime: any;
const { event, project, canvas } = this.pluginContext; 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 = [ this.disposeEvents = [
canvas.dragon?.onDragstart(() => { canvas.dragon?.onDragstart(() => {
startTime = Date.now() / 1000; startTime = Date.now() / 1000;
// needs? // needs?
this.toVision(); this.toVision();
}), }),
canvas.activeTracker?.onChange((target: IPublicTypeActiveTarget) => { canvas.activeTracker?.onChange(setExpandByActiveTracker),
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.dragon?.onDragend(() => { canvas.dragon?.onDragend(() => {
const endTime: any = Date.now() / 1000; const endTime: any = Date.now() / 1000;
const nodes = project.currentDocument?.selection?.getNodes(); const nodes = project.currentDocument?.selection?.getNodes();
@ -135,6 +136,9 @@ export class TreeMaster {
this.treeMap.delete(id); this.treeMap.delete(id);
}), }),
]; ];
if (canvas.activeTracker?.target) {
setExpandByActiveTracker(canvas.activeTracker?.target);
}
} }
private toVision() { private toVision() {

View File

@ -12,6 +12,16 @@ export class ActiveTracker implements IPublicModelActiveTracker {
this[activeTrackerSymbol] = innerTracker; 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 { onChange(fn: (target: IPublicTypeActiveTarget) => void): () => void {
if (!fn) { if (!fn) {
return () => {}; return () => {};

View File

@ -2,6 +2,12 @@ import { IPublicTypeActiveTarget } from '../type';
import { IPublicModelNode } from './node'; import { IPublicModelNode } from './node';
export interface IPublicModelActiveTracker { export interface IPublicModelActiveTracker {
/**
* @since 1.1.7
*/
target: IPublicTypeActiveTarget;
onChange(fn: (target: IPublicTypeActiveTarget) => void): () => void; onChange(fn: (target: IPublicTypeActiveTarget) => void): () => void;
track(node: IPublicModelNode): void; track(node: IPublicModelNode): void;

View File

@ -70,9 +70,7 @@ export class Resource implements IResource {
return this.context.innerSkeleton; return this.context.innerSkeleton;
} }
get children(): IResource[] { children: IResource[];
return this.resourceData?.children?.map(d => new Resource(d, this.workspace.getResourceType(d.resourceName || this.resourceType.name), this.workspace)) || [];
}
get config() { get config() {
return this.resourceData.config; return this.resourceData.config;
@ -92,6 +90,7 @@ export class Resource implements IResource {
if (!resourceType) { if (!resourceType) {
logger.error(`resourceType[${resourceType}] is unValid.`); 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() { async init() {