Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import React, { useRef, useState, useEffect } from "react";
import { RendererContext } from "./RendererContext";
import { PanZoom } from "./PanZoom";
export const PanZoomWrapper = ({ children }: { children: React.ReactNode }) => {
const wrapper = useRef<HTMLDivElement>(null);
const zoom = useRef<HTMLDivElement>(null);
const move = useRef<HTMLDivElement>(null);
const instance = useRef(new PanZoom()).current;
useEffect(() => {
const $wrapper = wrapper.current;
const $zoom = zoom.current;
const $move = move.current;
if ($wrapper && $zoom && $move) {
instance.initialize($wrapper, $zoom, $move);
}
return () => {
instance.cleanup();
};
}, []);
return (
<RendererContext.Provider value={instance}>
<div
ref={wrapper}
className="board-wrapper"
style={{ touchAction: "none" }}
>
<div ref={zoom} className="board-zoom">
<div ref={move} className="board-move">
{children}
</div>
</div>
</div>
</RendererContext.Provider>
);
};