Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

useCamera.ts 788B

12345678910111213141516171819202122232425262728293031
  1. import React, { useEffect } from "react"
  2. import state from "state"
  3. /**
  4. * When the state's camera changes, update the transform of
  5. * the SVG group to reflect the correct zoom and pan.
  6. * @param ref
  7. */
  8. export default function useCamera(ref: React.MutableRefObject<SVGGElement>) {
  9. useEffect(() => {
  10. let { camera } = state.data
  11. return state.onUpdate(({ data }) => {
  12. const g = ref.current
  13. if (!g) return
  14. const { point, zoom } = data.camera
  15. if (point !== camera.point || zoom !== camera.zoom) {
  16. g.setAttribute(
  17. "transform",
  18. `scale(${zoom}) translate(${point[0]} ${point[1]})`
  19. )
  20. localStorage.setItem("code_slate_camera", JSON.stringify(data.camera))
  21. }
  22. camera = data.camera
  23. })
  24. }, [state])
  25. }