import React, { createRef, useEffect } from "react"; import { TransformComponent, TransformWrapper, useControls, useTransformEffect, } from "react-zoom-pan-pinch"; import { Canvas } from "../lib/canvas"; import { useAppContext } from "../contexts/AppContext"; import throttle from "lodash.throttle"; export const CanvasWrapper = () => { // to prevent safari from blurring things, use the zoom css property return (
); }; const CanvasInner = () => { const canvasRef = createRef(); const { config } = useAppContext(); const { centerView } = useControls(); useTransformEffect( throttle(({ state, instance }) => { const params = new URLSearchParams(); params.set("x", state.positionX + ""); params.set("y", state.positionY + ""); params.set("zoom", state.scale + ""); window.location.hash = params.toString(); }, 1000) ); useEffect(() => { if (!config.canvas || !canvasRef.current) return; const canvas = canvasRef.current!; const canvasInstance = new Canvas(config, canvas); centerView(); return () => { canvasInstance.destroy(); }; }, [canvasRef, centerView, config]); return ( ); };