mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-28 05:46:36 +08:00
refactor(waf): 移除规则画布右上角删除按钮
删除改为右键菜单与键盘快捷键。
This commit is contained in:
@@ -28,7 +28,6 @@ import {
|
|||||||
import { Trash2 } from 'lucide-react';
|
import { Trash2 } from 'lucide-react';
|
||||||
import '@xyflow/react/dist/style.css';
|
import '@xyflow/react/dist/style.css';
|
||||||
|
|
||||||
import { Button } from '@/components/ui/button';
|
|
||||||
import type { WAFRuleEdge, WAFRuleGraph } from '@/lib/services/openflare';
|
import type { WAFRuleEdge, WAFRuleGraph } from '@/lib/services/openflare';
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
|
|
||||||
@@ -251,22 +250,6 @@ export function RuleFlowCanvas({
|
|||||||
[addNodeAt],
|
[addNodeAt],
|
||||||
);
|
);
|
||||||
|
|
||||||
const selectedNode = graph.nodes.find((node) => node.id === selectedId);
|
|
||||||
const canDeleteNode = Boolean(
|
|
||||||
selectedNode && !['start', 'allow'].includes(selectedNode.type),
|
|
||||||
);
|
|
||||||
const canDeleteEdge = Boolean(
|
|
||||||
selectedEdgeId && graph.edges.some((edge) => edge.id === selectedEdgeId),
|
|
||||||
);
|
|
||||||
const canDelete = canDeleteNode || canDeleteEdge;
|
|
||||||
const deleteLabel = canDeleteEdge
|
|
||||||
? '删除连线'
|
|
||||||
: canDeleteNode
|
|
||||||
? '删除节点'
|
|
||||||
: selectedNode
|
|
||||||
? '系统节点不可删除'
|
|
||||||
: '请选择可删除项';
|
|
||||||
|
|
||||||
const deleteNodeById = useCallback(
|
const deleteNodeById = useCallback(
|
||||||
(nodeId: string) => {
|
(nodeId: string) => {
|
||||||
const target = graph.nodes.find((node) => node.id === nodeId);
|
const target = graph.nodes.find((node) => node.id === nodeId);
|
||||||
@@ -303,21 +286,6 @@ export function RuleFlowCanvas({
|
|||||||
[graph, onGraphChange, onSelectEdge, selectedEdgeId, setEdges],
|
[graph, onGraphChange, onSelectEdge, selectedEdgeId, setEdges],
|
||||||
);
|
);
|
||||||
|
|
||||||
const deleteSelection = useCallback(() => {
|
|
||||||
if (canDeleteEdge && selectedEdgeId) {
|
|
||||||
deleteEdgeById(selectedEdgeId);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (canDeleteNode && selectedId) deleteNodeById(selectedId);
|
|
||||||
}, [
|
|
||||||
canDeleteEdge,
|
|
||||||
canDeleteNode,
|
|
||||||
deleteEdgeById,
|
|
||||||
deleteNodeById,
|
|
||||||
selectedEdgeId,
|
|
||||||
selectedId,
|
|
||||||
]);
|
|
||||||
|
|
||||||
const openNodeContextMenu = useCallback(
|
const openNodeContextMenu = useCallback(
|
||||||
(event: ReactMouseEvent, node: FlowNode) => {
|
(event: ReactMouseEvent, node: FlowNode) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
@@ -378,17 +346,6 @@ export function RuleFlowCanvas({
|
|||||||
<div className='absolute left-4 top-4 z-10 rounded-lg border bg-background/95 p-2 shadow-sm backdrop-blur'>
|
<div className='absolute left-4 top-4 z-10 rounded-lg border bg-background/95 p-2 shadow-sm backdrop-blur'>
|
||||||
<NodeLibrary />
|
<NodeLibrary />
|
||||||
</div>
|
</div>
|
||||||
<div className='absolute right-4 top-4 z-10'>
|
|
||||||
<Button
|
|
||||||
variant='destructive'
|
|
||||||
size='sm'
|
|
||||||
disabled={!canDelete}
|
|
||||||
onClick={deleteSelection}
|
|
||||||
>
|
|
||||||
<Trash2 data-icon='inline-start' />
|
|
||||||
{deleteLabel}
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
<ReactFlow
|
<ReactFlow
|
||||||
nodes={nodes}
|
nodes={nodes}
|
||||||
edges={edges}
|
edges={edges}
|
||||||
|
|||||||
Reference in New Issue
Block a user