UI编辑器收口多树上下文菜单目标
预览菜单携带所属树 ID 避免非当前图片树的结构操作写错目标
This commit is contained in:
+14
-3
@@ -98,6 +98,7 @@ export function PreviewWorkspace({
|
||||
>(new Map());
|
||||
const [contextMenu, setContextMenu] = useState<{
|
||||
nodeId: NodeId;
|
||||
treeId: string;
|
||||
x: number;
|
||||
y: number;
|
||||
isPageRoot: boolean;
|
||||
@@ -480,9 +481,12 @@ export function PreviewWorkspace({
|
||||
event: ReactMouseEvent<HTMLDivElement>,
|
||||
node: NonNullable<typeof tree>['root'],
|
||||
isPageRoot: boolean,
|
||||
treeId?: string,
|
||||
) => {
|
||||
if (!treeId) return;
|
||||
setContextMenu({
|
||||
nodeId: node.id,
|
||||
treeId,
|
||||
x: event.clientX,
|
||||
y: event.clientY,
|
||||
isPageRoot,
|
||||
@@ -566,6 +570,7 @@ export function PreviewWorkspace({
|
||||
) : null}
|
||||
<UiTreeRenderer
|
||||
tree={item}
|
||||
treeId={item.src_ui_design}
|
||||
showFrame={showFrame}
|
||||
showComponent={showComponent}
|
||||
hiddenNodeIds={canvas.hiddenNodeIds}
|
||||
@@ -602,9 +607,15 @@ export function PreviewWorkspace({
|
||||
isPageRoot={contextMenu.isPageRoot}
|
||||
disabled={canvas.isLocked}
|
||||
onClose={() => setContextMenu(null)}
|
||||
onInsertChild={(nodeId) => canvas.insertNode(nodeId)}
|
||||
onInsertSibling={(nodeId) => canvas.insertNodeAfter(nodeId)}
|
||||
onDelete={(nodeId) => canvas.deleteNode(nodeId)}
|
||||
onInsertChild={(nodeId) =>
|
||||
canvas.insertNode(nodeId, contextMenu.treeId)
|
||||
}
|
||||
onInsertSibling={(nodeId) =>
|
||||
canvas.insertNodeAfter(nodeId, contextMenu.treeId)
|
||||
}
|
||||
onDelete={(nodeId) =>
|
||||
canvas.deleteNode(nodeId, contextMenu.treeId)
|
||||
}
|
||||
/>
|
||||
) : null}
|
||||
<div
|
||||
|
||||
@@ -29,6 +29,7 @@ type NodePointerDown = (
|
||||
|
||||
type UiTreeRendererProps = {
|
||||
tree: UITree | null;
|
||||
treeId?: string;
|
||||
showFrame: boolean;
|
||||
showComponent: boolean;
|
||||
hiddenNodeIds: ReadonlySet<NodeId>;
|
||||
@@ -41,6 +42,7 @@ type UiTreeRendererProps = {
|
||||
event: ReactMouseEvent<HTMLDivElement>,
|
||||
node: UiNode,
|
||||
isPageRoot: boolean,
|
||||
treeId?: string,
|
||||
) => void;
|
||||
onNodePointerDown: NodePointerDown;
|
||||
onNodePointerMove: (event: ReactPointerEvent<HTMLDivElement>) => void;
|
||||
@@ -81,6 +83,7 @@ const EMPTY_PREVIEW_TRANSFORMS: ReadonlyMap<
|
||||
|
||||
function RenderNode({
|
||||
node,
|
||||
treeId,
|
||||
isRoot,
|
||||
parentContainer,
|
||||
showFrame,
|
||||
@@ -173,7 +176,7 @@ function RenderNode({
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
onSelectNode(node.id);
|
||||
onNodeContextMenu(event, node, Boolean(isRoot));
|
||||
onNodeContextMenu(event, node, Boolean(isRoot), treeId);
|
||||
}}
|
||||
onPointerDown={
|
||||
receivesPointerGesture
|
||||
@@ -206,6 +209,7 @@ function RenderNode({
|
||||
<RenderNode
|
||||
key={child.id}
|
||||
node={child}
|
||||
treeId={treeId}
|
||||
parentContainer={
|
||||
isContainer(node.layout.container)
|
||||
? node.layout.container
|
||||
|
||||
Reference in New Issue
Block a user