1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import React, { useEffect } from "react";
- import { InitializeApp } from "../components/InitializeApp";
- import App from "../components/App";
- import "../css/app.scss";
- import "../css/styles.scss";
- import { ExcalidrawProps } from "../types";
- import { IsMobileProvider } from "../is-mobile";
- const Excalidraw = React.memo(
- (props: ExcalidrawProps) => {
- const {
- width,
- height,
- onChange,
- initialData,
- user,
- onUsernameChange,
- } = props;
- useEffect(() => {
- // Block pinch-zooming on iOS outside of the content area
- const handleTouchMove = (event: TouchEvent) => {
- // @ts-ignore
- if (typeof event.scale === "number" && event.scale !== 1) {
- event.preventDefault();
- }
- };
- document.addEventListener("touchmove", handleTouchMove, {
- passive: false,
- });
- return () => {
- document.removeEventListener("touchmove", handleTouchMove);
- };
- }, []);
- return (
- <InitializeApp>
- <IsMobileProvider>
- <App
- width={width}
- height={height}
- onChange={onChange}
- initialData={initialData}
- user={user}
- onUsernameChange={onUsernameChange}
- />
- </IsMobileProvider>
- </InitializeApp>
- );
- },
- (prevProps: ExcalidrawProps, nextProps: ExcalidrawProps) => {
- const { initialData: prevInitialData, user: prevUser, ...prev } = prevProps;
- const { initialData: nextInitialData, user: nextUser, ...next } = nextProps;
- const prevKeys = Object.keys(prevProps) as (keyof typeof prev)[];
- const nextKeys = Object.keys(nextProps) as (keyof typeof next)[];
- return (
- prevUser?.name === nextUser?.name &&
- prevKeys.length === nextKeys.length &&
- prevKeys.every((key) => prev[key] === next[key])
- );
- },
- );
- export default Excalidraw;
|