Skip to content

Commit 3263c6f

Browse files
committed
✨ 一切舞台对象均可以添加到标签了
1 parent 60ace0e commit 3263c6f

File tree

3 files changed

+57
-21
lines changed

3 files changed

+57
-21
lines changed

app/src/core/stage/stageManager/StageManager.tsx

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,17 @@ export namespace StageManager {
104104
export function getEntities(): Entity[] {
105105
return entities.valuesToArray();
106106
}
107+
export function getStageObjectByUUID(uuid: string): StageObject | null {
108+
const entity = entities.getById(uuid);
109+
if (entity) {
110+
return entity;
111+
}
112+
const association = associations.getById(uuid);
113+
if (association) {
114+
return association;
115+
}
116+
return null;
117+
}
107118
export function getEntitiesByUUIDs(uuids: string[]): Entity[] {
108119
const result = [];
109120
for (const uuid of uuids) {
@@ -426,6 +437,15 @@ export namespace StageManager {
426437
export function getSelectedEntities(): Entity[] {
427438
return entities.valuesToArray().filter((entity) => entity.isSelected);
428439
}
440+
export function getSelectedAssociations(): Association[] {
441+
return associations.valuesToArray().filter((association) => association.isSelected);
442+
}
443+
export function getSelectedStageObjects(): StageObject[] {
444+
const result: StageObject[] = [];
445+
result.push(...getSelectedEntities());
446+
result.push(...getSelectedAssociations());
447+
return result;
448+
}
429449

430450
/**
431451
* 判断某一点是否有实体存在(排除实体的被Section折叠)
@@ -826,7 +846,7 @@ export namespace StageManager {
826846
}
827847

828848
export function moveToTag(tag: string) {
829-
StageTagManager.moveToTag(tag);
849+
StageTagManager.moveCameraToTag(tag);
830850
}
831851
export function connectEntityByCrEdge(fromNode: ConnectableEntity, toNode: ConnectableEntity) {
832852
return StageNodeConnector.addCrEdge(fromNode, toNode);

app/src/core/stage/stageManager/concreteMethods/StageTagManager.tsx

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { Camera } from "../../Camera";
2-
import { Entity } from "../../stageObject/abstract/StageEntity";
2+
import { StageObject } from "../../stageObject/abstract/StageObject";
3+
import { Edge } from "../../stageObject/association/Edge";
4+
import { ConnectPoint } from "../../stageObject/entity/ConnectPoint";
5+
import { ImageNode } from "../../stageObject/entity/ImageNode";
36
import { Section } from "../../stageObject/entity/Section";
47
import { TextNode } from "../../stageObject/entity/TextNode";
8+
import { UrlNode } from "../../stageObject/entity/UrlNode";
59
import { StageManager } from "../StageManager";
610

711
export namespace StageTagManager {
@@ -11,7 +15,8 @@ export namespace StageTagManager {
1115
* 目前先仅支持TextNode
1216
*/
1317
export function changeTagBySelected() {
14-
for (const selectedEntities of StageManager.getSelectedEntities().filter((entity) => entity instanceof TextNode)) {
18+
for (const selectedEntities of StageManager.getSelectedStageObjects()) {
19+
// 若有则删,若无则加
1520
if (StageManager.TagOptions.hasTag(selectedEntities.uuid)) {
1621
StageManager.TagOptions.removeTag(selectedEntities.uuid);
1722
} else {
@@ -27,9 +32,12 @@ export namespace StageTagManager {
2732
export function refreshTagNames() {
2833
const res: { tagName: string; uuid: string }[] = [];
2934
const tagUUIDs = StageManager.TagOptions.getTagUUIDs();
30-
const tagObjectList: Entity[] = [];
35+
const tagObjectList: StageObject[] = [];
3136
for (const tagUUID of tagUUIDs) {
32-
tagObjectList.push(StageManager.getEntitiesByUUIDs([tagUUID])[0]);
37+
const stageObject = StageManager.getStageObjectByUUID(tagUUID);
38+
if (stageObject) {
39+
tagObjectList.push(stageObject);
40+
}
3341
}
3442
// 排序,从上到下,从左到右
3543
tagObjectList.sort((a, b) => {
@@ -41,19 +49,35 @@ export namespace StageTagManager {
4149
});
4250

4351
for (const tagObject of tagObjectList) {
52+
let title = "";
4453
if (tagObject instanceof TextNode) {
45-
res.push({ tagName: tagObject.text, uuid: tagObject.uuid });
54+
title = tagObject.text;
4655
} else if (tagObject instanceof Section) {
47-
res.push({ tagName: tagObject.text, uuid: tagObject.uuid });
56+
title = tagObject.text;
57+
} else if (tagObject instanceof UrlNode) {
58+
title = tagObject.title;
59+
} else if (tagObject instanceof ImageNode) {
60+
title = "Image: " + tagObject.uuid.slice(0, 4);
61+
} else if (tagObject instanceof Edge) {
62+
title = tagObject.text.slice(0, 20).trim();
63+
if (title.length === 0) {
64+
title = "未命名连线";
65+
}
66+
} else if (tagObject instanceof ConnectPoint) {
67+
title = tagObject.details.slice(0, 20).trim();
68+
if (title.length === 0) {
69+
title = "Connect Point: " + tagObject.uuid.slice(0, 4);
70+
}
4871
} else {
49-
res.push({ tagName: tagObject.uuid, uuid: tagObject.uuid });
72+
title = "Unknown: " + tagObject.uuid.slice(0, 4);
5073
}
74+
res.push({ tagName: title, uuid: tagObject.uuid });
5175
}
5276
return res;
5377
}
5478

55-
export function moveToTag(tagUUID: string) {
56-
const tagObject = StageManager.getEntitiesByUUIDs([tagUUID])[0];
79+
export function moveCameraToTag(tagUUID: string) {
80+
const tagObject = StageManager.getStageObjectByUUID(tagUUID);
5781
if (!tagObject) {
5882
return;
5983
}

app/src/pages/_tag_panel.tsx

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Plus, RefreshCcw } from "lucide-react";
22
import React from "react";
3-
import { Dialog } from "../components/dialog";
43
import IconButton from "../components/IconButton";
54
import { StageManager } from "../core/stage/stageManager/StageManager";
65
import { cn } from "../utils/cn";
@@ -28,16 +27,9 @@ export default function TagPanel({ open = false, className = "" }: { open: boole
2827
};
2928

3029
const handleClickAddTag = () => {
31-
if (StageManager.selectedNodeCount === 0) {
32-
Dialog.show({
33-
title: "没选择节点",
34-
content: "请先在舞台上选中一个或多个节点",
35-
type: "error",
36-
});
37-
} else {
38-
StageManager.addTagBySelected();
39-
refreshTagNameList();
40-
}
30+
// TODO: 这里可能缺少一个是否有选中的实体的检测
31+
StageManager.addTagBySelected();
32+
refreshTagNameList();
4133
};
4234

4335
return (

0 commit comments

Comments
 (0)