feat(nodes,edges): add deletable flag
This commit is contained in:
@@ -121,11 +121,12 @@ const initialNodes: Node[] = [
|
|||||||
data: {
|
data: {
|
||||||
label: (
|
label: (
|
||||||
<>
|
<>
|
||||||
An <strong>output node</strong>
|
An <strong>output node (not deletable)</strong>
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
position: { x: 100, y: 480 },
|
position: { x: 100, y: 480 },
|
||||||
|
deletable: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '7',
|
id: '7',
|
||||||
@@ -151,7 +152,8 @@ const initialEdges: Edge[] = [
|
|||||||
source: '5',
|
source: '5',
|
||||||
target: '6',
|
target: '6',
|
||||||
type: 'smoothstep',
|
type: 'smoothstep',
|
||||||
label: 'smooth step edge',
|
deletable: false,
|
||||||
|
label: 'smooth step edge (not deletable)',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'e5-7',
|
id: 'e5-7',
|
||||||
|
|||||||
@@ -34,16 +34,18 @@ export default ({ deleteKeyCode, multiSelectionKeyCode }: HookParams): void => {
|
|||||||
const nodes = Array.from(nodeInternals.values());
|
const nodes = Array.from(nodeInternals.values());
|
||||||
const nodesToRemove = nodes.reduce<Node[]>((res, node) => {
|
const nodesToRemove = nodes.reduce<Node[]>((res, node) => {
|
||||||
const parentSelected = !node.selected && node.parentNode && res.find((n) => n.id === node.parentNode);
|
const parentSelected = !node.selected && node.parentNode && res.find((n) => n.id === node.parentNode);
|
||||||
if (node.selected || parentSelected) {
|
const deletable = typeof node.deletable === 'boolean' ? node.deletable : true;
|
||||||
|
if (deletable && (node.selected || parentSelected)) {
|
||||||
res.push(node);
|
res.push(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}, []);
|
}, []);
|
||||||
const selectedEdges = edges.filter((e) => e.selected);
|
const deletableEdges = edges.filter((e) => (typeof e.deletable === 'boolean' ? e.deletable : true));
|
||||||
|
const selectedEdges = deletableEdges.filter((e) => e.selected);
|
||||||
|
|
||||||
if (nodesToRemove || selectedEdges) {
|
if (nodesToRemove || selectedEdges) {
|
||||||
const connectedEdges = getConnectedEdges(nodesToRemove, edges);
|
const connectedEdges = getConnectedEdges(nodesToRemove, deletableEdges);
|
||||||
const edgesToRemove = [...selectedEdges, ...connectedEdges];
|
const edgesToRemove = [...selectedEdges, ...connectedEdges];
|
||||||
const edgeIdsToRemove = edgesToRemove.reduce<string[]>((res, edge) => {
|
const edgeIdsToRemove = edgesToRemove.reduce<string[]>((res, edge) => {
|
||||||
if (!res.includes(edge.id)) {
|
if (!res.includes(edge.id)) {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ export interface Edge<T = any> {
|
|||||||
style?: CSSProperties;
|
style?: CSSProperties;
|
||||||
animated?: boolean;
|
animated?: boolean;
|
||||||
hidden?: boolean;
|
hidden?: boolean;
|
||||||
|
deletable?: boolean;
|
||||||
data?: T;
|
data?: T;
|
||||||
className?: string;
|
className?: string;
|
||||||
sourceNode?: Node;
|
sourceNode?: Node;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ export interface Node<T = any> {
|
|||||||
draggable?: boolean;
|
draggable?: boolean;
|
||||||
selectable?: boolean;
|
selectable?: boolean;
|
||||||
connectable?: boolean;
|
connectable?: boolean;
|
||||||
|
deletable?: boolean;
|
||||||
dragHandle?: string;
|
dragHandle?: string;
|
||||||
width?: number | null;
|
width?: number | null;
|
||||||
height?: number | null;
|
height?: number | null;
|
||||||
|
|||||||
Reference in New Issue
Block a user