Skip to content

Commit 2b3d96c

Browse files
liujupingJackLian
authored andcommitted
feat: canvas.activeTracker add targer prop
1 parent ee80fb1 commit 2b3d96c

File tree

5 files changed

+42
-21
lines changed

5 files changed

+42
-21
lines changed

packages/designer/src/designer/active-tracker.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import {
77
import { isNode } from '@alilc/lowcode-utils';
88

99
export interface IActiveTracker extends Omit< IPublicModelActiveTracker, 'track' | 'onChange' > {
10+
_target: ActiveTarget | INode;
11+
1012
track(originalTarget: ActiveTarget | INode): void;
1113

1214
onChange(fn: (target: ActiveTarget) => void): () => void;
@@ -17,10 +19,10 @@ export interface ActiveTarget extends Omit< IPublicTypeActiveTarget, 'node' > {
1719
}
1820

1921
export class ActiveTracker implements IActiveTracker {
20-
private emitter: IEventBus = createModuleEventBus('ActiveTracker');
21-
2222
@obx.ref private _target?: ActiveTarget | INode;
2323

24+
private emitter: IEventBus = createModuleEventBus('ActiveTracker');
25+
2426
track(originalTarget: ActiveTarget | INode) {
2527
let target = originalTarget;
2628
if (isNode(originalTarget)) {

packages/plugin-outline-pane/src/controllers/tree-master.ts

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -90,28 +90,29 @@ export class TreeMaster {
9090
private initEvent() {
9191
let startTime: any;
9292
const { event, project, canvas } = this.pluginContext;
93+
const setExpandByActiveTracker = (target: IPublicTypeActiveTarget) => {
94+
const { node, detail } = target;
95+
const tree = this.currentTree;
96+
if (!tree/* || node.document !== tree.document */) {
97+
return;
98+
}
99+
const treeNode = tree.getTreeNode(node);
100+
if (detail && isLocationChildrenDetail(detail)) {
101+
treeNode.expand(true);
102+
} else {
103+
treeNode.expandParents();
104+
}
105+
this.boards.forEach((board) => {
106+
board.scrollToNode(treeNode, detail);
107+
});
108+
};
93109
this.disposeEvents = [
94110
canvas.dragon?.onDragstart(() => {
95111
startTime = Date.now() / 1000;
96112
// needs?
97113
this.toVision();
98114
}),
99-
canvas.activeTracker?.onChange((target: IPublicTypeActiveTarget) => {
100-
const { node, detail } = target;
101-
const tree = this.currentTree;
102-
if (!tree/* || node.document !== tree.document */) {
103-
return;
104-
}
105-
const treeNode = tree.getTreeNode(node);
106-
if (detail && isLocationChildrenDetail(detail)) {
107-
treeNode.expand(true);
108-
} else {
109-
treeNode.expandParents();
110-
}
111-
this.boards.forEach((board) => {
112-
board.scrollToNode(treeNode, detail);
113-
});
114-
}),
115+
canvas.activeTracker?.onChange(setExpandByActiveTracker),
115116
canvas.dragon?.onDragend(() => {
116117
const endTime: any = Date.now() / 1000;
117118
const nodes = project.currentDocument?.selection?.getNodes();
@@ -135,6 +136,9 @@ export class TreeMaster {
135136
this.treeMap.delete(id);
136137
}),
137138
];
139+
if (canvas.activeTracker?.target) {
140+
setExpandByActiveTracker(canvas.activeTracker?.target);
141+
}
138142
}
139143

140144
private toVision() {

packages/shell/src/model/active-tracker.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ export class ActiveTracker implements IPublicModelActiveTracker {
1212
this[activeTrackerSymbol] = innerTracker;
1313
}
1414

15+
get target() {
16+
const { node: innerNode, detail, instance } = this[activeTrackerSymbol]._target;
17+
const publicNode = ShellNode.create(innerNode);
18+
return {
19+
node: publicNode!,
20+
detail,
21+
instance,
22+
};
23+
}
24+
1525
onChange(fn: (target: IPublicTypeActiveTarget) => void): () => void {
1626
if (!fn) {
1727
return () => {};

packages/types/src/shell/model/active-tracker.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ import { IPublicTypeActiveTarget } from '../type';
22
import { IPublicModelNode } from './node';
33

44
export interface IPublicModelActiveTracker {
5+
6+
/**
7+
* @since 1.1.7
8+
*/
9+
target: IPublicTypeActiveTarget;
10+
511
onChange(fn: (target: IPublicTypeActiveTarget) => void): () => void;
612

713
track(node: IPublicModelNode): void;

packages/workspace/src/resource.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,7 @@ export class Resource implements IResource {
7070
return this.context.innerSkeleton;
7171
}
7272

73-
get children(): IResource[] {
74-
return this.resourceData?.children?.map(d => new Resource(d, this.workspace.getResourceType(d.resourceName || this.resourceType.name), this.workspace)) || [];
75-
}
73+
children: IResource[];
7674

7775
get config() {
7876
return this.resourceData.config;
@@ -92,6 +90,7 @@ export class Resource implements IResource {
9290
if (!resourceType) {
9391
logger.error(`resourceType[${resourceType}] is unValid.`);
9492
}
93+
this.children = this.resourceData?.children?.map(d => new Resource(d, this.workspace.getResourceType(d.resourceName || this.resourceType.name), this.workspace)) || [];
9594
}
9695

9796
async init() {

0 commit comments

Comments
 (0)