remove setPaneClickDistance from store and update it declaritively
This commit is contained in:
@@ -34,6 +34,7 @@ const BasicFlow = () => {
|
|||||||
selectionMode={SelectionMode.Partial}
|
selectionMode={SelectionMode.Partial}
|
||||||
panOnDrag={panOnDrag}
|
panOnDrag={panOnDrag}
|
||||||
panOnScroll
|
panOnScroll
|
||||||
|
paneClickDistance={2}
|
||||||
zoomActivationKeyCode="Meta"
|
zoomActivationKeyCode="Meta"
|
||||||
multiSelectionKeyCode={MULTI_SELECT_KEY}
|
multiSelectionKeyCode={MULTI_SELECT_KEY}
|
||||||
onPaneContextMenu={onPaneContextMenu}
|
onPaneContextMenu={onPaneContextMenu}
|
||||||
|
|||||||
@@ -69,7 +69,6 @@ const reactFlowFieldsToTrack = [
|
|||||||
'onBeforeDelete',
|
'onBeforeDelete',
|
||||||
'debug',
|
'debug',
|
||||||
'autoPanSpeed',
|
'autoPanSpeed',
|
||||||
'paneClickDistance',
|
|
||||||
'ariaLabelConfig',
|
'ariaLabelConfig',
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
@@ -93,7 +92,6 @@ const selector = (s: ReactFlowState) => ({
|
|||||||
setNodeExtent: s.setNodeExtent,
|
setNodeExtent: s.setNodeExtent,
|
||||||
reset: s.reset,
|
reset: s.reset,
|
||||||
setDefaultNodesAndEdges: s.setDefaultNodesAndEdges,
|
setDefaultNodesAndEdges: s.setDefaultNodesAndEdges,
|
||||||
setPaneClickDistance: s.setPaneClickDistance,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const initPrevValues = {
|
const initPrevValues = {
|
||||||
@@ -124,7 +122,6 @@ export function StoreUpdater<NodeType extends Node = Node, EdgeType extends Edge
|
|||||||
setNodeExtent,
|
setNodeExtent,
|
||||||
reset,
|
reset,
|
||||||
setDefaultNodesAndEdges,
|
setDefaultNodesAndEdges,
|
||||||
setPaneClickDistance,
|
|
||||||
} = useStore(selector, shallow);
|
} = useStore(selector, shallow);
|
||||||
const store = useStoreApi<NodeType, EdgeType>();
|
const store = useStoreApi<NodeType, EdgeType>();
|
||||||
|
|
||||||
@@ -155,7 +152,6 @@ export function StoreUpdater<NodeType extends Node = Node, EdgeType extends Edge
|
|||||||
else if (fieldName === 'maxZoom') setMaxZoom(fieldValue as number);
|
else if (fieldName === 'maxZoom') setMaxZoom(fieldValue as number);
|
||||||
else if (fieldName === 'translateExtent') setTranslateExtent(fieldValue as CoordinateExtent);
|
else if (fieldName === 'translateExtent') setTranslateExtent(fieldValue as CoordinateExtent);
|
||||||
else if (fieldName === 'nodeExtent') setNodeExtent(fieldValue as CoordinateExtent);
|
else if (fieldName === 'nodeExtent') setNodeExtent(fieldValue as CoordinateExtent);
|
||||||
else if (fieldName === 'paneClickDistance') setPaneClickDistance(fieldValue as number);
|
|
||||||
else if (fieldName === 'ariaLabelConfig')
|
else if (fieldName === 'ariaLabelConfig')
|
||||||
store.setState({ ariaLabelConfig: mergeAriaLabelConfig(fieldValue as AriaLabelConfig) });
|
store.setState({ ariaLabelConfig: mergeAriaLabelConfig(fieldValue as AriaLabelConfig) });
|
||||||
// Renamed fields
|
// Renamed fields
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ function FlowRendererComponent<NodeType extends Node = Node>({
|
|||||||
onViewportChange={onViewportChange}
|
onViewportChange={onViewportChange}
|
||||||
isControlledViewport={isControlledViewport}
|
isControlledViewport={isControlledViewport}
|
||||||
paneClickDistance={paneClickDistance}
|
paneClickDistance={paneClickDistance}
|
||||||
|
selectionOnDrag={_selectionOnDrag}
|
||||||
>
|
>
|
||||||
<Pane
|
<Pane
|
||||||
onSelectionStart={onSelectionStart}
|
onSelectionStart={onSelectionStart}
|
||||||
@@ -119,6 +120,7 @@ function FlowRendererComponent<NodeType extends Node = Node>({
|
|||||||
isSelecting={!!isSelecting}
|
isSelecting={!!isSelecting}
|
||||||
selectionMode={selectionMode}
|
selectionMode={selectionMode}
|
||||||
selectionKeyPressed={selectionKeyPressed}
|
selectionKeyPressed={selectionKeyPressed}
|
||||||
|
paneClickDistance={paneClickDistance}
|
||||||
selectionOnDrag={_selectionOnDrag}
|
selectionOnDrag={_selectionOnDrag}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ type PaneProps = {
|
|||||||
| 'onPaneMouseMove'
|
| 'onPaneMouseMove'
|
||||||
| 'onPaneMouseLeave'
|
| 'onPaneMouseLeave'
|
||||||
| 'selectionOnDrag'
|
| 'selectionOnDrag'
|
||||||
|
| 'paneClickDistance'
|
||||||
>
|
>
|
||||||
>;
|
>;
|
||||||
|
|
||||||
|
|||||||
@@ -309,7 +309,6 @@ function ReactFlow<NodeType extends Node = Node, EdgeType extends Edge = Edge>(
|
|||||||
nodeDragThreshold={nodeDragThreshold}
|
nodeDragThreshold={nodeDragThreshold}
|
||||||
connectionDragThreshold={connectionDragThreshold}
|
connectionDragThreshold={connectionDragThreshold}
|
||||||
onBeforeDelete={onBeforeDelete}
|
onBeforeDelete={onBeforeDelete}
|
||||||
paneClickDistance={paneClickDistance}
|
|
||||||
debug={debug}
|
debug={debug}
|
||||||
ariaLabelConfig={ariaLabelConfig}
|
ariaLabelConfig={ariaLabelConfig}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -12,12 +12,7 @@ import type { ReactFlowState } from '../../types';
|
|||||||
|
|
||||||
type ZoomPaneProps = Omit<
|
type ZoomPaneProps = Omit<
|
||||||
FlowRendererProps,
|
FlowRendererProps,
|
||||||
| 'deleteKeyCode'
|
'deleteKeyCode' | 'selectionKeyCode' | 'multiSelectionKeyCode' | 'noDragClassName' | 'disableKeyboardA11y'
|
||||||
| 'selectionKeyCode'
|
|
||||||
| 'multiSelectionKeyCode'
|
|
||||||
| 'noDragClassName'
|
|
||||||
| 'disableKeyboardA11y'
|
|
||||||
| 'selectionOnDrag'
|
|
||||||
> & {
|
> & {
|
||||||
isControlledViewport: boolean;
|
isControlledViewport: boolean;
|
||||||
};
|
};
|
||||||
@@ -49,6 +44,7 @@ export function ZoomPane({
|
|||||||
onViewportChange,
|
onViewportChange,
|
||||||
isControlledViewport,
|
isControlledViewport,
|
||||||
paneClickDistance,
|
paneClickDistance,
|
||||||
|
selectionOnDrag,
|
||||||
}: ZoomPaneProps) {
|
}: ZoomPaneProps) {
|
||||||
const store = useStoreApi();
|
const store = useStoreApi();
|
||||||
const zoomPane = useRef<HTMLDivElement>(null);
|
const zoomPane = useRef<HTMLDivElement>(null);
|
||||||
@@ -77,7 +73,6 @@ export function ZoomPane({
|
|||||||
maxZoom,
|
maxZoom,
|
||||||
translateExtent,
|
translateExtent,
|
||||||
viewport: defaultViewport,
|
viewport: defaultViewport,
|
||||||
paneClickDistance,
|
|
||||||
onDraggingChange: (paneDragging: boolean) => store.setState({ paneDragging }),
|
onDraggingChange: (paneDragging: boolean) => store.setState({ paneDragging }),
|
||||||
onPanZoomStart: (event, vp) => {
|
onPanZoomStart: (event, vp) => {
|
||||||
const { onViewportChangeStart, onMoveStart } = store.getState();
|
const { onViewportChangeStart, onMoveStart } = store.getState();
|
||||||
@@ -128,6 +123,8 @@ export function ZoomPane({
|
|||||||
lib,
|
lib,
|
||||||
onTransformChange,
|
onTransformChange,
|
||||||
connectionInProgress,
|
connectionInProgress,
|
||||||
|
selectionOnDrag,
|
||||||
|
paneClickDistance,
|
||||||
});
|
});
|
||||||
}, [
|
}, [
|
||||||
onPaneContextMenu,
|
onPaneContextMenu,
|
||||||
@@ -146,6 +143,8 @@ export function ZoomPane({
|
|||||||
lib,
|
lib,
|
||||||
onTransformChange,
|
onTransformChange,
|
||||||
connectionInProgress,
|
connectionInProgress,
|
||||||
|
selectionOnDrag,
|
||||||
|
paneClickDistance,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -312,9 +312,6 @@ const createStore = ({
|
|||||||
|
|
||||||
set({ translateExtent });
|
set({ translateExtent });
|
||||||
},
|
},
|
||||||
setPaneClickDistance: (clickDistance) => {
|
|
||||||
get().panZoom?.setClickDistance(clickDistance);
|
|
||||||
},
|
|
||||||
resetSelectedElements: () => {
|
resetSelectedElements: () => {
|
||||||
const { edges, nodes, triggerNodeChanges, triggerEdgeChanges, elementsSelectable } = get();
|
const { edges, nodes, triggerNodeChanges, triggerEdgeChanges, elementsSelectable } = get();
|
||||||
|
|
||||||
|
|||||||
@@ -175,7 +175,6 @@ export type ReactFlowActions<NodeType extends Node, EdgeType extends Edge> = {
|
|||||||
triggerEdgeChanges: (changes: EdgeChange<EdgeType>[]) => void;
|
triggerEdgeChanges: (changes: EdgeChange<EdgeType>[]) => void;
|
||||||
panBy: PanBy;
|
panBy: PanBy;
|
||||||
setCenter: SetCenter;
|
setCenter: SetCenter;
|
||||||
setPaneClickDistance: (distance: number) => void;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export type ReactFlowState<NodeType extends Node = Node, EdgeType extends Edge = Edge> = ReactFlowStore<
|
export type ReactFlowState<NodeType extends Node = Node, EdgeType extends Edge = Edge> = ReactFlowStore<
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ type ZoomParams = {
|
|||||||
userSelectionActive: boolean;
|
userSelectionActive: boolean;
|
||||||
lib: string;
|
lib: string;
|
||||||
paneClickDistance: number;
|
paneClickDistance: number;
|
||||||
|
selectionOnDrag?: boolean;
|
||||||
onTransformChange: (transform: Transform) => void;
|
onTransformChange: (transform: Transform) => void;
|
||||||
onDraggingChange: (dragging: boolean) => void;
|
onDraggingChange: (dragging: boolean) => void;
|
||||||
connectionInProgress: boolean;
|
connectionInProgress: boolean;
|
||||||
@@ -49,7 +50,6 @@ export default function zoom(domNode: Element, params: ZoomParams) {
|
|||||||
onPanZoom,
|
onPanZoom,
|
||||||
onPanZoomEnd,
|
onPanZoomEnd,
|
||||||
translateExtent,
|
translateExtent,
|
||||||
paneClickDistance,
|
|
||||||
setPanZoomInstance,
|
setPanZoomInstance,
|
||||||
onDraggingChange,
|
onDraggingChange,
|
||||||
onTransformChange
|
onTransformChange
|
||||||
@@ -61,7 +61,6 @@ export default function zoom(domNode: Element, params: ZoomParams) {
|
|||||||
maxZoom,
|
maxZoom,
|
||||||
translateExtent,
|
translateExtent,
|
||||||
viewport: initialViewport,
|
viewport: initialViewport,
|
||||||
paneClickDistance,
|
|
||||||
onPanZoom,
|
onPanZoom,
|
||||||
onPanZoomStart,
|
onPanZoomStart,
|
||||||
onPanZoomEnd,
|
onPanZoomEnd,
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import type { SvelteFlowStore } from '$lib/store/types';
|
|||||||
export type PaneProps<NodeType extends Node = Node, EdgeType extends Edge = Edge> = {
|
export type PaneProps<NodeType extends Node = Node, EdgeType extends Edge = Edge> = {
|
||||||
store: SvelteFlowStore<NodeType, EdgeType>;
|
store: SvelteFlowStore<NodeType, EdgeType>;
|
||||||
panOnDrag?: boolean | number[];
|
panOnDrag?: boolean | number[];
|
||||||
|
paneClickDistance: number;
|
||||||
selectionOnDrag?: boolean;
|
selectionOnDrag?: boolean;
|
||||||
onselectionstart?: (event: PointerEvent) => void;
|
onselectionstart?: (event: PointerEvent) => void;
|
||||||
onselectionend?: (event: PointerEvent) => void;
|
onselectionend?: (event: PointerEvent) => void;
|
||||||
|
|||||||
@@ -156,6 +156,7 @@
|
|||||||
{panOnScrollSpeed}
|
{panOnScrollSpeed}
|
||||||
{panOnDrag}
|
{panOnDrag}
|
||||||
{paneClickDistance}
|
{paneClickDistance}
|
||||||
|
{selectionOnDrag}
|
||||||
{onmovestart}
|
{onmovestart}
|
||||||
{onmove}
|
{onmove}
|
||||||
{onmoveend}
|
{onmoveend}
|
||||||
@@ -168,6 +169,7 @@
|
|||||||
{onselectionstart}
|
{onselectionstart}
|
||||||
{onselectionend}
|
{onselectionend}
|
||||||
{panOnDrag}
|
{panOnDrag}
|
||||||
|
{paneClickDistance}
|
||||||
{selectionOnDrag}
|
{selectionOnDrag}
|
||||||
>
|
>
|
||||||
<ViewportComponent bind:store>
|
<ViewportComponent bind:store>
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
panOnScroll,
|
panOnScroll,
|
||||||
panOnScrollSpeed,
|
panOnScrollSpeed,
|
||||||
paneClickDistance,
|
paneClickDistance,
|
||||||
|
selectionOnDrag,
|
||||||
onmovestart,
|
onmovestart,
|
||||||
onmove,
|
onmove,
|
||||||
onmoveend,
|
onmoveend,
|
||||||
@@ -69,6 +70,7 @@
|
|||||||
translateExtent: store.translateExtent,
|
translateExtent: store.translateExtent,
|
||||||
lib: 'svelte',
|
lib: 'svelte',
|
||||||
paneClickDistance,
|
paneClickDistance,
|
||||||
|
selectionOnDrag,
|
||||||
onTransformChange: (transform: Transform) => {
|
onTransformChange: (transform: Transform) => {
|
||||||
store.viewport = { x: transform[0], y: transform[1], zoom: transform[2] };
|
store.viewport = { x: transform[0], y: transform[1], zoom: transform[2] };
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ export type ZoomProps<NodeType extends Node = Node, EdgeType extends Edge = Edge
|
|||||||
panOnScroll: boolean;
|
panOnScroll: boolean;
|
||||||
panOnDrag: boolean | number[];
|
panOnDrag: boolean | number[];
|
||||||
paneClickDistance: number;
|
paneClickDistance: number;
|
||||||
|
selectionOnDrag?: boolean;
|
||||||
onmove?: OnMove;
|
onmove?: OnMove;
|
||||||
onmovestart?: OnMoveStart;
|
onmovestart?: OnMoveStart;
|
||||||
onmoveend?: OnMoveEnd;
|
onmoveend?: OnMoveEnd;
|
||||||
|
|||||||
@@ -191,10 +191,6 @@ export function createStore<NodeType extends Node = Node, EdgeType extends Edge
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setPaneClickDistance(distance: number) {
|
|
||||||
store.panZoom?.setClickDistance(distance);
|
|
||||||
}
|
|
||||||
|
|
||||||
function deselect<T extends Node | Edge>(
|
function deselect<T extends Node | Edge>(
|
||||||
elements: T[],
|
elements: T[],
|
||||||
elementsToDeselect: Set<string> | null = null
|
elementsToDeselect: Set<string> | null = null
|
||||||
@@ -393,7 +389,6 @@ export function createStore<NodeType extends Node = Node, EdgeType extends Edge
|
|||||||
setMinZoom,
|
setMinZoom,
|
||||||
setMaxZoom,
|
setMaxZoom,
|
||||||
setTranslateExtent,
|
setTranslateExtent,
|
||||||
setPaneClickDistance,
|
|
||||||
unselectNodesAndEdges,
|
unselectNodesAndEdges,
|
||||||
addSelectedNodes,
|
addSelectedNodes,
|
||||||
addSelectedEdges,
|
addSelectedEdges,
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ export type SvelteFlowStoreActions<NodeType extends Node = Node, EdgeType extend
|
|||||||
setMinZoom: (minZoom: number) => void;
|
setMinZoom: (minZoom: number) => void;
|
||||||
setMaxZoom: (maxZoom: number) => void;
|
setMaxZoom: (maxZoom: number) => void;
|
||||||
setTranslateExtent: (extent: CoordinateExtent) => void;
|
setTranslateExtent: (extent: CoordinateExtent) => void;
|
||||||
setPaneClickDistance: (distance: number) => void;
|
|
||||||
fitView: (options?: FitViewOptions) => Promise<boolean>;
|
fitView: (options?: FitViewOptions) => Promise<boolean>;
|
||||||
setCenter: SetCenter;
|
setCenter: SetCenter;
|
||||||
updateNodePositions: UpdateNodePositions;
|
updateNodePositions: UpdateNodePositions;
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ export type PanZoomParams = {
|
|||||||
domNode: Element;
|
domNode: Element;
|
||||||
minZoom: number;
|
minZoom: number;
|
||||||
maxZoom: number;
|
maxZoom: number;
|
||||||
paneClickDistance: number;
|
|
||||||
viewport: Viewport;
|
viewport: Viewport;
|
||||||
translateExtent: CoordinateExtent;
|
translateExtent: CoordinateExtent;
|
||||||
onDraggingChange: OnDraggingChange;
|
onDraggingChange: OnDraggingChange;
|
||||||
@@ -43,6 +42,8 @@ export type PanZoomUpdateOptions = {
|
|||||||
lib: string;
|
lib: string;
|
||||||
onTransformChange: OnTransformChange;
|
onTransformChange: OnTransformChange;
|
||||||
connectionInProgress: boolean;
|
connectionInProgress: boolean;
|
||||||
|
paneClickDistance: number;
|
||||||
|
selectionOnDrag?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type PanZoomInstance = {
|
export type PanZoomInstance = {
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ export function XYPanZoom({
|
|||||||
domNode,
|
domNode,
|
||||||
minZoom,
|
minZoom,
|
||||||
maxZoom,
|
maxZoom,
|
||||||
paneClickDistance,
|
|
||||||
translateExtent,
|
translateExtent,
|
||||||
viewport,
|
viewport,
|
||||||
onPanZoom,
|
onPanZoom,
|
||||||
@@ -55,10 +54,7 @@ export function XYPanZoom({
|
|||||||
isPanScrolling: false,
|
isPanScrolling: false,
|
||||||
};
|
};
|
||||||
const bbox = domNode.getBoundingClientRect();
|
const bbox = domNode.getBoundingClientRect();
|
||||||
const d3ZoomInstance = zoom()
|
const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent);
|
||||||
.clickDistance(!isNumeric(paneClickDistance) || paneClickDistance < 0 ? 0 : paneClickDistance)
|
|
||||||
.scaleExtent([minZoom, maxZoom])
|
|
||||||
.translateExtent(translateExtent);
|
|
||||||
const d3Selection = select(domNode).call(d3ZoomInstance);
|
const d3Selection = select(domNode).call(d3ZoomInstance);
|
||||||
|
|
||||||
setViewportConstrained(
|
setViewportConstrained(
|
||||||
@@ -109,6 +105,8 @@ export function XYPanZoom({
|
|||||||
lib,
|
lib,
|
||||||
onTransformChange,
|
onTransformChange,
|
||||||
connectionInProgress,
|
connectionInProgress,
|
||||||
|
paneClickDistance,
|
||||||
|
selectionOnDrag,
|
||||||
}: PanZoomUpdateOptions) {
|
}: PanZoomUpdateOptions) {
|
||||||
if (userSelectionActive && !zoomPanValues.isZoomingOrPanning) {
|
if (userSelectionActive && !zoomPanValues.isZoomingOrPanning) {
|
||||||
destroy();
|
destroy();
|
||||||
@@ -116,6 +114,10 @@ export function XYPanZoom({
|
|||||||
|
|
||||||
const isPanOnScroll = panOnScroll && !zoomActivationKeyPressed && !userSelectionActive;
|
const isPanOnScroll = panOnScroll && !zoomActivationKeyPressed && !userSelectionActive;
|
||||||
|
|
||||||
|
d3ZoomInstance.clickDistance(
|
||||||
|
selectionOnDrag ? Infinity : !isNumeric(paneClickDistance) || paneClickDistance < 0 ? 0 : paneClickDistance
|
||||||
|
);
|
||||||
|
|
||||||
const wheelHandler = isPanOnScroll
|
const wheelHandler = isPanOnScroll
|
||||||
? createPanOnScrollHandler({
|
? createPanOnScrollHandler({
|
||||||
zoomPanValues,
|
zoomPanValues,
|
||||||
|
|||||||
Reference in New Issue
Block a user