refactor(panning): enable panning when nodesDraggable is false #1457
This commit is contained in:
@@ -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}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user