import React, { memo } from 'react'; import cc from 'classcat'; import { useStoreState, useStoreActions } from '../../store/hooks'; import PlusIcon from '../../../assets/icons/plus.svg'; import MinusIcon from '../../../assets/icons/minus.svg'; import FitviewIcon from '../../../assets/icons/fitview.svg'; import LockIcon from '../../../assets/icons/lock.svg'; import UnlockIcon from '../../../assets/icons/unlock.svg'; import './style.css'; interface ControlProps extends React.HTMLAttributes { showZoom?: boolean; showFitView?: boolean; showInteractive?: boolean; } const Controls = memo( ({ style, showZoom = true, showFitView = true, showInteractive = true, className }: ControlProps) => { const setInteractive = useStoreActions((actions) => actions.setInteractive); const fitView = useStoreActions((actions) => actions.fitView); const zoomIn = useStoreActions((actions) => actions.zoomIn); const zoomOut = useStoreActions((actions) => actions.zoomOut); const isInteractive = useStoreState((s) => s.nodesDraggable && s.nodesConnectable && s.elementsSelectable); const mapClasses = cc(['react-flow__controls', className]); return (
{showZoom && ( <>
zoomIn()}>
zoomOut()}>
)} {showFitView && (
fitView({ padding: 0.1 })} >
)} {showInteractive && (
setInteractive(!isInteractive)} > {isInteractive ? : }
)}
); } ); Controls.displayName = 'Controls'; export default Controls;