Skip to content

Commit 26236e5

Browse files
committed
[DOP-22580] Improve selection reset
1 parent 4cb0f66 commit 26236e5

File tree

4 files changed

+31
-16
lines changed

4 files changed

+31
-16
lines changed

src/components/lineage/LineageGraph.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
useReactFlow,
88
useNodesInitialized,
99
BackgroundVariant,
10+
Edge,
1011
} from "@xyflow/react";
1112
import { DatasetNode, JobNode, RunNode, OperationNode } from "./nodes";
1213
import { useEffect } from "react";
@@ -28,10 +29,21 @@ const nodeTypes = {
2829
operationNode: OperationNode,
2930
};
3031

32+
const subgraphSelected = (edges?: Edge[]) => {
33+
if (!edges) {
34+
return false;
35+
}
36+
for (const edge of edges) {
37+
if (edge.selected) {
38+
return true;
39+
}
40+
}
41+
return false;
42+
};
43+
3144
const LineageGraph = (props: ReactFlowProps) => {
3245
const { fitView } = useReactFlow();
33-
const { hideNonSelected, ...actions } = useLineageSelection();
34-
46+
const selectionHandlers = useLineageSelection();
3547
const nodesInitialized = useNodesInitialized();
3648

3749
useEffect(() => {
@@ -40,7 +52,9 @@ const LineageGraph = (props: ReactFlowProps) => {
4052

4153
return (
4254
<ReactFlow
43-
className={hideNonSelected ? "hideNonSelected" : undefined}
55+
className={
56+
subgraphSelected(props.edges) ? "subgraphSelected" : undefined
57+
}
4458
nodeTypes={nodeTypes}
4559
edgeTypes={edgeTypes}
4660
nodesFocusable={true}
@@ -56,7 +70,7 @@ const LineageGraph = (props: ReactFlowProps) => {
5670
zoomOnDoubleClick={false}
5771
fitView
5872
onDoubleClick={() => fitView()}
59-
{...actions}
73+
{...selectionHandlers}
6074
{...props}
6175
>
6276
<Background variant={BackgroundVariant.Dots} />

src/components/lineage/edges/BaseEdge.css

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
.react-flow.hideNonSelected .react-flow__node:not(.selected),
2-
.react-flow.hideNonSelected .react-flow__edge:not(.selected),
3-
.react-flow.hideNonSelected
1+
.react-flow.subgraphSelected .react-flow__node:not(.selected),
2+
.react-flow.subgraphSelected .react-flow__edge:not(.selected),
3+
.react-flow.subgraphSelected
44
.react-flow__edgelabel-renderer
55
> div:not(.selected) {
66
opacity: 0.3 !important;

src/components/lineage/nodes/base_node/BaseNode.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
.react-flow__node.draggable.selectable {
2+
cursor: pointer;
3+
}
4+
15
.react-flow__node.selected .MuiCard-root {
26
--xy-selection-background-color: #ebf2fd;
37
background-color: var(

src/components/lineage/selection/useLineageSelection.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import { Edge, Node, useReactFlow } from "@xyflow/react";
2-
import { useCallback, useState, MouseEvent } from "react";
2+
import { useCallback, MouseEvent } from "react";
33

44
const useLineageSelection = () => {
55
const { getNodes, getEdges, setEdges, setNodes } = useReactFlow();
6-
const [hideNonSelected, setHideNonSelected] = useState(false);
76

87
const setSelection = (
98
nodesToSelect: Set<string>,
109
edgesToSelect: Set<string>,
11-
hideOthers: boolean = true,
1210
) => {
1311
const nodes = getNodes().map((node) => {
1412
node.selected = nodesToSelect.has(node.id);
@@ -22,9 +20,6 @@ const useLineageSelection = () => {
2220

2321
setNodes(nodes);
2422
setEdges(edges);
25-
setHideNonSelected(
26-
hideOthers && nodesToSelect.size + edgesToSelect.size > 0,
27-
);
2823
};
2924

3025
const _visitNodes = (
@@ -102,6 +97,10 @@ const useLineageSelection = () => {
10297
return result;
10398
};
10499

100+
const selectNode = useCallback((nodeId: string) => {
101+
setSelection(new Set([nodeId]), new Set());
102+
}, []);
103+
105104
const onEdgeClick = useCallback((e: MouseEvent, currentEdge: Edge) => {
106105
setSelection(
107106
new Set([currentEdge.source, currentEdge.target]),
@@ -123,8 +122,7 @@ const useLineageSelection = () => {
123122
);
124123

125124
const onNodeClick = useCallback((e: MouseEvent, currentNode: Node) => {
126-
// If only one node is selected, don't hide others, as it not very convenient
127-
setSelection(new Set([currentNode.id]), new Set(), false);
125+
selectNode(currentNode.id);
128126
e.stopPropagation();
129127
}, []);
130128

@@ -143,7 +141,6 @@ const useLineageSelection = () => {
143141
}, []);
144142

145143
return {
146-
hideNonSelected,
147144
onEdgeClick,
148145
onEdgeDoubleClick,
149146
onNodeClick,

0 commit comments

Comments
 (0)