MCPcopy
hub / github.com/clientIO/joint / useCreatePaper

Function useCreatePaper

packages/joint-react/src/hooks/use-create-paper.ts:32–111  ·  view source on GitHub ↗
(options: UseCreatePaperOptions = {})

Source from the content-addressed store, hash-verified

30 * @returns An object containing the paper instance and a reference to the paper HTML element.
31 */
32export function useCreatePaper(options: UseCreatePaperOptions = {}) {
33 const { overwriteDefaultPaperElement, ...restOptions } = options;
34
35 const paperContainerElement = useRef<HTMLDivElement | null>(null);
36 const { graph } = useGraphStore();
37
38 const paperCtx = useContext(PaperContext);
39 useLayoutEffect(() => {
40 if (!paperCtx) {
41 return;
42 }
43
44 const { paper } = paperCtx;
45 if (!paper) {
46 throw new Error('Paper is not created');
47 }
48
49 if (overwriteDefaultPaperElement) {
50 const customElement = overwriteDefaultPaperElement(paperCtx);
51 if (!customElement) {
52 throw new Error('overwriteDefaultPaperElement must return a valid HTML or SVG element');
53 }
54 paperContainerElement.current?.replaceChildren(customElement);
55 } else {
56 if (!paperContainerElement.current) {
57 throw new Error('Paper container element is not defined');
58 }
59 paperContainerElement.current.replaceChildren(paper.el);
60 }
61 paper.unfreeze();
62
63 // eslint-disable-next-line react-hooks/exhaustive-deps
64 }, [graph, overwriteDefaultPaperElement]);
65
66 useLayoutEffect(() => {
67 if (!paperCtx) {
68 return;
69 }
70 const { paper } = paperCtx;
71 if (!paper) {
72 return;
73 }
74 /**
75 * Resize the paper container element to match the paper size.
76 * @param jointPaper - The paper instance.
77 */
78 function resizePaperContainer(jointPaper: dia.Paper) {
79 if (paperContainerElement.current) {
80 paperContainerElement.current.style.width = jointPaper.el.style.width;
81 paperContainerElement.current.style.height = jointPaper.el.style.height;
82 }
83 }
84 // An object to keep track of the listeners. It's not exposed, so the users
85 const controller = new mvc.Listener();
86 controller.listenTo(paper, 'resize', resizePaperContainer);
87 controller.listenTo(paper, 'all', (type: PaperEventType, ...args: unknown[]) =>
88 handleEvent(type, restOptions, paper, ...args)
89 );

Callers 1

ComponentFunction · 0.90

Calls 5

listenToMethod · 0.95
stopListeningMethod · 0.95
useGraphStoreFunction · 0.90
handleEventFunction · 0.90
scaleMethod · 0.80

Tested by

no test coverage detected