| 1234567891011121314151617181920212223242526272829303132333435 |
- import React, { useEffect } from 'react'
- import state from 'state'
- import { getCurrentCamera } from 'utils/utils'
-
- /**
- * When the state's camera changes, update the transform of
- * the SVG group to reflect the correct zoom and pan.
- * @param ref
- */
- export default function useCamera(ref: React.MutableRefObject<SVGGElement>) {
- useEffect(() => {
- let prev = getCurrentCamera(state.data)
-
- return state.onUpdate(() => {
- const g = ref.current
- if (!g) return
-
- const { point, zoom } = getCurrentCamera(state.data)
-
- if (point !== prev.point || zoom !== prev.zoom) {
- g.setAttribute(
- 'transform',
- `scale(${zoom}) translate(${point[0]} ${point[1]})`
- )
-
- localStorage.setItem(
- 'code_slate_camera',
- JSON.stringify({ point, zoom })
- )
-
- prev = getCurrentCamera(state.data)
- }
- })
- }, [state])
- }
|