feat(react): add selectable option to edges
This commit is contained in:
@@ -37,7 +37,7 @@ export default (EdgeComponent: ComponentType<EdgeProps>) => {
|
|||||||
targetY,
|
targetY,
|
||||||
sourcePosition,
|
sourcePosition,
|
||||||
targetPosition,
|
targetPosition,
|
||||||
elementsSelectable,
|
isSelectable,
|
||||||
hidden,
|
hidden,
|
||||||
sourceHandleId,
|
sourceHandleId,
|
||||||
targetHandleId,
|
targetHandleId,
|
||||||
@@ -73,7 +73,7 @@ export default (EdgeComponent: ComponentType<EdgeProps>) => {
|
|||||||
const onEdgeClick = (event: React.MouseEvent<SVGGElement, MouseEvent>): void => {
|
const onEdgeClick = (event: React.MouseEvent<SVGGElement, MouseEvent>): void => {
|
||||||
const { edges, addSelectedEdges } = store.getState();
|
const { edges, addSelectedEdges } = store.getState();
|
||||||
|
|
||||||
if (elementsSelectable) {
|
if (isSelectable) {
|
||||||
store.setState({ nodesSelectionActive: false });
|
store.setState({ nodesSelectionActive: false });
|
||||||
addSelectedEdges([id]);
|
addSelectedEdges([id]);
|
||||||
}
|
}
|
||||||
@@ -137,10 +137,10 @@ export default (EdgeComponent: ComponentType<EdgeProps>) => {
|
|||||||
const onEdgeUpdaterMouseEnter = () => setUpdateHover(true);
|
const onEdgeUpdaterMouseEnter = () => setUpdateHover(true);
|
||||||
const onEdgeUpdaterMouseOut = () => setUpdateHover(false);
|
const onEdgeUpdaterMouseOut = () => setUpdateHover(false);
|
||||||
|
|
||||||
const inactive = !elementsSelectable && !onClick;
|
const inactive = !isSelectable && !onClick;
|
||||||
|
|
||||||
const onKeyDown = (event: KeyboardEvent) => {
|
const onKeyDown = (event: KeyboardEvent) => {
|
||||||
if (elementSelectionKeys.includes(event.key) && elementsSelectable) {
|
if (elementSelectionKeys.includes(event.key) && isSelectable) {
|
||||||
const { unselectNodesAndEdges, addSelectedEdges, edges } = store.getState();
|
const { unselectNodesAndEdges, addSelectedEdges, edges } = store.getState();
|
||||||
const unselect = event.key === 'Escape';
|
const unselect = event.key === 'Escape';
|
||||||
|
|
||||||
|
|||||||
@@ -115,6 +115,10 @@ const EdgeRenderer = ({
|
|||||||
const isUpdatable =
|
const isUpdatable =
|
||||||
typeof onEdgeUpdate !== 'undefined' &&
|
typeof onEdgeUpdate !== 'undefined' &&
|
||||||
(edge.updatable || (edgesUpdatable && typeof edge.updatable === 'undefined'));
|
(edge.updatable || (edgesUpdatable && typeof edge.updatable === 'undefined'));
|
||||||
|
const isSelectable = !!(
|
||||||
|
edge.selectable ||
|
||||||
|
(elementsSelectable && typeof edge.selectable === 'undefined')
|
||||||
|
);
|
||||||
|
|
||||||
if (!sourceHandle || !targetHandle) {
|
if (!sourceHandle || !targetHandle) {
|
||||||
onError?.('008', errorMessages['error008'](sourceHandle, edge));
|
onError?.('008', errorMessages['error008'](sourceHandle, edge));
|
||||||
@@ -160,7 +164,7 @@ const EdgeRenderer = ({
|
|||||||
targetY={targetY}
|
targetY={targetY}
|
||||||
sourcePosition={sourcePosition}
|
sourcePosition={sourcePosition}
|
||||||
targetPosition={targetPosition}
|
targetPosition={targetPosition}
|
||||||
elementsSelectable={elementsSelectable}
|
isSelectable={isSelectable}
|
||||||
onEdgeUpdate={onEdgeUpdate}
|
onEdgeUpdate={onEdgeUpdate}
|
||||||
onContextMenu={onEdgeContextMenu}
|
onContextMenu={onEdgeContextMenu}
|
||||||
onMouseEnter={onEdgeMouseEnter}
|
onMouseEnter={onEdgeMouseEnter}
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ export type WrapEdgeProps<T = any> = Omit<Edge<T>, 'sourceHandle' | 'targetHandl
|
|||||||
targetY: number;
|
targetY: number;
|
||||||
sourcePosition: Position;
|
sourcePosition: Position;
|
||||||
targetPosition: Position;
|
targetPosition: Position;
|
||||||
elementsSelectable?: boolean;
|
|
||||||
onEdgeUpdate?: OnEdgeUpdateFunc;
|
onEdgeUpdate?: OnEdgeUpdateFunc;
|
||||||
onContextMenu?: EdgeMouseHandler;
|
onContextMenu?: EdgeMouseHandler;
|
||||||
onMouseEnter?: EdgeMouseHandler;
|
onMouseEnter?: EdgeMouseHandler;
|
||||||
@@ -72,6 +71,7 @@ export type WrapEdgeProps<T = any> = Omit<Edge<T>, 'sourceHandle' | 'targetHandl
|
|||||||
rfId?: string;
|
rfId?: string;
|
||||||
isFocusable: boolean;
|
isFocusable: boolean;
|
||||||
isUpdatable: EdgeUpdatable;
|
isUpdatable: EdgeUpdatable;
|
||||||
|
isSelectable: boolean;
|
||||||
pathOptions?: BezierPathOptions | SmoothStepPathOptions;
|
pathOptions?: BezierPathOptions | SmoothStepPathOptions;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user