refactor(panning): enable panning when nodesDraggable is false #1457

This commit is contained in:
moklick
2022-09-01 12:12:16 +02:00
parent c4cac4caa6
commit 2172522a0b
6 changed files with 9 additions and 2 deletions
@@ -16,6 +16,7 @@ export type HandleComponentProps = HandleProps & Omit<HTMLAttributes<HTMLDivElem
const selector = (s: ReactFlowState) => ({ const selector = (s: ReactFlowState) => ({
connectionStartHandle: s.connectionStartHandle, connectionStartHandle: s.connectionStartHandle,
connectOnClick: s.connectOnClick, connectOnClick: s.connectOnClick,
noPanClassName: s.noPanClassName,
}); });
const Handle = forwardRef<HTMLDivElement, HandleComponentProps>( const Handle = forwardRef<HTMLDivElement, HandleComponentProps>(
@@ -36,7 +37,7 @@ const Handle = forwardRef<HTMLDivElement, HandleComponentProps>(
) => { ) => {
const store = useStoreApi(); const store = useStoreApi();
const nodeId = useContext(NodeIdContext) as string; const nodeId = useContext(NodeIdContext) as string;
const { connectionStartHandle, connectOnClick } = useStore(selector, shallow); const { connectionStartHandle, connectOnClick, noPanClassName } = useStore(selector, shallow);
const handleId = id || null; const handleId = id || null;
const isTarget = type === 'target'; const isTarget = type === 'target';
@@ -110,6 +111,7 @@ const Handle = forwardRef<HTMLDivElement, HandleComponentProps>(
'react-flow__handle', 'react-flow__handle',
`react-flow__handle-${position}`, `react-flow__handle-${position}`,
'nodrag', 'nodrag',
noPanClassName,
className, className,
{ {
source: !isTarget, source: !isTarget,
@@ -151,7 +151,6 @@ export default (NodeComponent: ComponentType<NodeProps>) => {
className={cc([ className={cc([
'react-flow__node', 'react-flow__node',
`react-flow__node-${type}`, `react-flow__node-${type}`,
noPanClassName,
className, className,
{ {
selected, selected,
@@ -40,6 +40,7 @@ type StoreUpdaterProps = Pick<
| 'onSelectionDragStart' | 'onSelectionDragStart'
| 'onSelectionDrag' | 'onSelectionDrag'
| 'onSelectionDragStop' | 'onSelectionDragStop'
| 'noPanClassName'
>; >;
const selector = (s: ReactFlowState) => ({ const selector = (s: ReactFlowState) => ({
@@ -108,6 +109,7 @@ const StoreUpdater = ({
onSelectionDrag, onSelectionDrag,
onSelectionDragStart, onSelectionDragStart,
onSelectionDragStop, onSelectionDragStop,
noPanClassName,
}: StoreUpdaterProps) => { }: StoreUpdaterProps) => {
const { const {
setNodes, setNodes,
@@ -154,6 +156,7 @@ const StoreUpdater = ({
useDirectStoreUpdater('onSelectionDrag', onSelectionDrag, store.setState); useDirectStoreUpdater('onSelectionDrag', onSelectionDrag, store.setState);
useDirectStoreUpdater('onSelectionDragStart', onSelectionDragStart, store.setState); useDirectStoreUpdater('onSelectionDragStart', onSelectionDragStart, store.setState);
useDirectStoreUpdater('onSelectionDragStop', onSelectionDragStop, store.setState); useDirectStoreUpdater('onSelectionDragStop', onSelectionDragStop, store.setState);
useDirectStoreUpdater('noPanClassName', noPanClassName, store.setState);
useStoreUpdater<Node[]>(nodes, setNodes); useStoreUpdater<Node[]>(nodes, setNodes);
useStoreUpdater<Edge[]>(edges, setEdges); useStoreUpdater<Edge[]>(edges, setEdges);
@@ -261,6 +261,7 @@ const ReactFlow = forwardRef<ReactFlowRefType, ReactFlowProps>(
onSelectionDrag={onSelectionDrag} onSelectionDrag={onSelectionDrag}
onSelectionDragStart={onSelectionDragStart} onSelectionDragStart={onSelectionDragStart}
onSelectionDragStop={onSelectionDragStop} onSelectionDragStop={onSelectionDragStop}
noPanClassName={noPanClassName}
/> />
{onSelectionChange && <SelectionListener onSelectionChange={onSelectionChange} />} {onSelectionChange && <SelectionListener onSelectionChange={onSelectionChange} />}
{children} {children}
+1
View File
@@ -31,6 +31,7 @@ const initialState: ReactFlowStore = {
connectionMode: ConnectionMode.Strict, connectionMode: ConnectionMode.Strict,
domNode: null, domNode: null,
paneDragging: false, paneDragging: false,
noPanClassName: 'nopan',
snapGrid: [15, 15], snapGrid: [15, 15],
snapToGrid: false, snapToGrid: false,
+1
View File
@@ -140,6 +140,7 @@ export type ReactFlowStore = {
hasDefaultEdges: boolean; hasDefaultEdges: boolean;
domNode: HTMLDivElement | null; domNode: HTMLDivElement | null;
paneDragging: boolean; paneDragging: boolean;
noPanClassName: string;
d3Zoom: ZoomBehavior<Element, unknown> | null; d3Zoom: ZoomBehavior<Element, unknown> | null;
d3Selection: D3Selection<Element, unknown, null, undefined> | null; d3Selection: D3Selection<Element, unknown, null, undefined> | null;