exposed selectable, deletable, draggable to custom nodes & edges

This commit is contained in:
peterkogo
2024-06-03 10:48:05 +02:00
parent 02250e972d
commit 403aa8f5da
10 changed files with 22 additions and 5 deletions
@@ -215,6 +215,8 @@ export function EdgeWrapper<EdgeType extends Edge = Edge>({
type={edge.type} type={edge.type}
selected={edge.selected} selected={edge.selected}
animated={edge.animated} animated={edge.animated}
selectable={isSelectable}
deletable={edge.deletable ?? true}
label={edge.label} label={edge.label}
labelStyle={edge.labelStyle} labelStyle={edge.labelStyle}
labelShowBg={edge.labelShowBg} labelShowBg={edge.labelShowBg}
@@ -209,6 +209,9 @@ export function NodeWrapper<NodeType extends Node>({
positionAbsoluteX={clampedPosition.x} positionAbsoluteX={clampedPosition.x}
positionAbsoluteY={clampedPosition.y} positionAbsoluteY={clampedPosition.y}
selected={node.selected} selected={node.selected}
selectable={isSelectable}
draggable={isDraggable}
deletable={node.deletable ?? true}
isConnectable={isConnectable} isConnectable={isConnectable}
sourcePosition={node.sourcePosition} sourcePosition={node.sourcePosition}
targetPosition={node.targetPosition} targetPosition={node.targetPosition}
+1 -1
View File
@@ -100,7 +100,7 @@ export type EdgeTextProps = HTMLAttributes<SVGElement> &
*/ */
export type EdgeProps<EdgeType extends Edge = Edge> = Pick< export type EdgeProps<EdgeType extends Edge = Edge> = Pick<
EdgeType, EdgeType,
'id' | 'animated' | 'data' | 'style' | 'selected' | 'source' | 'target' 'id' | 'animated' | 'data' | 'style' | 'selected' | 'source' | 'target' | 'selectable' | 'deletable'
> & > &
EdgePosition & EdgePosition &
EdgeLabelOptions & { EdgeLabelOptions & {
@@ -23,6 +23,7 @@
export let animated: $$Props['animated'] = false; export let animated: $$Props['animated'] = false;
export let selected: $$Props['selected'] = false; export let selected: $$Props['selected'] = false;
export let selectable: $$Props['selectable'] = undefined; export let selectable: $$Props['selectable'] = undefined;
export let deletable: $$Props['deletable'] = undefined;
export let hidden: $$Props['hidden'] = false; export let hidden: $$Props['hidden'] = false;
export let label: $$Props['label'] = undefined; export let label: $$Props['label'] = undefined;
export let labelStyle: $$Props['labelStyle'] = undefined; export let labelStyle: $$Props['labelStyle'] = undefined;
@@ -55,7 +56,7 @@
$: edgeComponent = $edgeTypes[edgeType] || BezierEdgeInternal; $: edgeComponent = $edgeTypes[edgeType] || BezierEdgeInternal;
$: markerStartUrl = markerStart ? `url('#${getMarkerId(markerStart, $flowId)}')` : undefined; $: markerStartUrl = markerStart ? `url('#${getMarkerId(markerStart, $flowId)}')` : undefined;
$: markerEndUrl = markerEnd ? `url('#${getMarkerId(markerEnd, $flowId)}')` : undefined; $: markerEndUrl = markerEnd ? `url('#${getMarkerId(markerEnd, $flowId)}')` : undefined;
$: isSelectable = selectable || ($elementsSelectable && typeof selectable === 'undefined'); $: isSelectable = selectable ?? $elementsSelectable;
const handleEdgeSelect = useHandleEdgeSelect(); const handleEdgeSelect = useHandleEdgeSelect();
@@ -114,6 +115,8 @@
{data} {data}
{style} {style}
{interactionWidth} {interactionWidth}
selectable={isSelectable}
deletable={deletable ?? true}
type={edgeType} type={edgeType}
sourceHandleId={sourceHandle} sourceHandleId={sourceHandle}
targetHandleId={targetHandle} targetHandleId={targetHandle}
@@ -22,6 +22,7 @@
export let draggable: $$Props['draggable'] = undefined; export let draggable: $$Props['draggable'] = undefined;
export let selectable: $$Props['selectable'] = undefined; export let selectable: $$Props['selectable'] = undefined;
export let connectable: $$Props['connectable'] = true; export let connectable: $$Props['connectable'] = true;
export let deletable: $$Props['deletable'] = true;
export let hidden: $$Props['hidden'] = false; export let hidden: $$Props['hidden'] = false;
export let dragging: boolean = false; export let dragging: boolean = false;
export let resizeObserver: $$Props['resizeObserver'] = null; export let resizeObserver: $$Props['resizeObserver'] = null;
@@ -192,10 +193,13 @@
{data} {data}
{id} {id}
{selected} {selected}
{selectable}
{deletable}
{sourcePosition} {sourcePosition}
{targetPosition} {targetPosition}
{zIndex} {zIndex}
{dragging} {dragging}
{draggable}
{dragHandle} {dragHandle}
type={nodeType} type={nodeType}
isConnectable={$connectableStore} isConnectable={$connectableStore}
@@ -10,6 +10,7 @@ export type NodeWrapperProps = Pick<
| 'dragging' | 'dragging'
| 'selected' | 'selected'
| 'selectable' | 'selectable'
| 'deletable'
| 'style' | 'style'
| 'type' | 'type'
| 'sourcePosition' | 'sourcePosition'
@@ -11,7 +11,8 @@
const { const {
visibleEdges, visibleEdges,
edgesInitialized, edgesInitialized,
edges: { setDefaultOptions } edges: { setDefaultOptions },
elementsSelectable,
} = useStore(); } = useStore();
onMount(() => { onMount(() => {
@@ -33,7 +34,8 @@
style={edge.style} style={edge.style}
animated={edge.animated} animated={edge.animated}
selected={edge.selected} selected={edge.selected}
selectable={edge.selectable} selectable={edge.selectable ?? $elementsSelectable}
deletable={edge.deletable}
hidden={edge.hidden} hidden={edge.hidden}
label={edge.label} label={edge.label}
labelStyle={edge.labelStyle} labelStyle={edge.labelStyle}
@@ -62,6 +62,7 @@
node.connectable || node.connectable ||
($nodesConnectable && typeof node.connectable === 'undefined') ($nodesConnectable && typeof node.connectable === 'undefined')
)} )}
deletable={node.deletable ?? true}
positionX={node.internals.positionAbsolute.x} positionX={node.internals.positionAbsolute.x}
positionY={node.internals.positionAbsolute.y} positionY={node.internals.positionAbsolute.y}
positionOriginX={posOrigin.x ?? 0} positionOriginX={posOrigin.x ?? 0}
+1
View File
@@ -133,6 +133,7 @@ export type EdgeLayouted = Pick<
| 'animated' | 'animated'
| 'selected' | 'selected'
| 'selectable' | 'selectable'
| 'deletable'
| 'label' | 'label'
| 'labelStyle' | 'labelStyle'
| 'interactionWidth' | 'interactionWidth'
+1 -1
View File
@@ -87,7 +87,7 @@ export type InternalNodeBase<NodeType extends NodeBase = NodeBase> = NodeType &
*/ */
export type NodeProps<NodeType extends NodeBase> = Pick< export type NodeProps<NodeType extends NodeBase> = Pick<
NodeType, NodeType,
'id' | 'data' | 'width' | 'height' | 'sourcePosition' | 'targetPosition' | 'selected' | 'dragHandle' 'id' | 'data' | 'width' | 'height' | 'sourcePosition' | 'targetPosition' | 'selected' | 'dragHandle' | 'selectable' | 'deletable' | 'draggable'
> & > &
Required<Pick<NodeType, 'type' | 'dragging' | 'zIndex'>> & { Required<Pick<NodeType, 'type' | 'dragging' | 'zIndex'>> & {
/** whether a node is connectable or not */ /** whether a node is connectable or not */