moved penMode from state to context

This commit is contained in:
Zsolt Viczian 2022-03-20 11:36:02 +01:00
parent ceb43ed8fb
commit cf8024bdc0
6 changed files with 9 additions and 8 deletions

View File

@ -62,7 +62,6 @@ export const actionClearCanvas = register({
theme: appState.theme, theme: appState.theme,
elementLocked: appState.elementLocked, elementLocked: appState.elementLocked,
penMode: appState.penMode, penMode: appState.penMode,
penDetected: appState.penDetected,
exportBackground: appState.exportBackground, exportBackground: appState.exportBackground,
exportEmbedScene: appState.exportEmbedScene, exportEmbedScene: appState.exportEmbedScene,
gridSize: appState.gridSize, gridSize: appState.gridSize,

View File

@ -44,7 +44,6 @@ export const getDefaultAppState = (): Omit<
elementLocked: false, elementLocked: false,
elementType: "selection", elementType: "selection",
penMode: false, penMode: false,
penDetected: false,
errorMessage: null, errorMessage: null,
exportBackground: true, exportBackground: true,
exportScale: defaultExportScale, exportScale: defaultExportScale,
@ -133,7 +132,6 @@ const APP_STATE_STORAGE_CONF = (<
elementLocked: { browser: true, export: false, server: false }, elementLocked: { browser: true, export: false, server: false },
elementType: { browser: true, export: false, server: false }, elementType: { browser: true, export: false, server: false },
penMode: { browser: false, export: false, server: false }, penMode: { browser: false, export: false, server: false },
penDetected: { browser: false, export: false, server: false },
errorMessage: { browser: false, export: false, server: false }, errorMessage: { browser: false, export: false, server: false },
exportBackground: { browser: true, export: false, server: false }, exportBackground: { browser: true, export: false, server: false },
exportEmbedScene: { browser: true, export: false, server: false }, exportEmbedScene: { browser: true, export: false, server: false },

View File

@ -258,6 +258,7 @@ import {
const defaultDeviceTypeContext: DeviceType = { const defaultDeviceTypeContext: DeviceType = {
isMobile: false, isMobile: false,
isTouchScreen: false, isTouchScreen: false,
penDetected: false,
}; };
const DeviceTypeContext = React.createContext(defaultDeviceTypeContext); const DeviceTypeContext = React.createContext(defaultDeviceTypeContext);
export const useDeviceType = () => useContext(DeviceTypeContext); export const useDeviceType = () => useContext(DeviceTypeContext);
@ -295,6 +296,7 @@ class App extends React.Component<AppProps, AppState> {
deviceType: DeviceType = { deviceType: DeviceType = {
isMobile: false, isMobile: false,
isTouchScreen: false, isTouchScreen: false,
penDetected: false,
}; };
detachIsMobileMqHandler?: () => void; detachIsMobileMqHandler?: () => void;
@ -2863,11 +2865,11 @@ class App extends React.Component<AppProps, AppState> {
//fires only once, if pen is detected, penMode is enabled //fires only once, if pen is detected, penMode is enabled
//the user can disable this by toggling the penMode button //the user can disable this by toggling the penMode button
if (!this.state.penDetected && event.pointerType === "pen") { if (!this.deviceType.penDetected && event.pointerType === "pen") {
this.deviceType = updateObject(this.deviceType, { penDetected: true });
this.setState((prevState) => { this.setState((prevState) => {
return { return {
penMode: true, penMode: true,
penDetected: true,
}; };
}); });
} }

View File

@ -321,7 +321,7 @@ const LayerUI = ({
checked={appState.penMode} checked={appState.penMode}
onChange={onPenModeToggle} onChange={onPenModeToggle}
title={t("toolBar.penMode")} title={t("toolBar.penMode")}
penDetected={appState.penDetected} penDetected={deviceType.penDetected}
/> />
<LockButton <LockButton
zenModeEnabled={zenModeEnabled} zenModeEnabled={zenModeEnabled}

View File

@ -18,6 +18,7 @@ import { UserList } from "./UserList";
import { BackgroundPickerAndDarkModeToggle } from "./BackgroundPickerAndDarkModeToggle"; import { BackgroundPickerAndDarkModeToggle } from "./BackgroundPickerAndDarkModeToggle";
import { LibraryButton } from "./LibraryButton"; import { LibraryButton } from "./LibraryButton";
import { PenModeButton } from "./PenModeButton"; import { PenModeButton } from "./PenModeButton";
import { useDeviceType } from "./App";
type MobileMenuProps = { type MobileMenuProps = {
appState: AppState; appState: AppState;
@ -61,6 +62,7 @@ export const MobileMenu = ({
onImageAction, onImageAction,
renderTopRightUI, renderTopRightUI,
}: MobileMenuProps) => { }: MobileMenuProps) => {
const deviceType = useDeviceType();
const renderToolbar = () => { const renderToolbar = () => {
return ( return (
<FixedSideContainer side="top" className="App-top-bar"> <FixedSideContainer side="top" className="App-top-bar">
@ -101,7 +103,7 @@ export const MobileMenu = ({
onChange={onPenModeToggle} onChange={onPenModeToggle}
title={t("toolBar.penMode")} title={t("toolBar.penMode")}
isMobile isMobile
penDetected={appState.penDetected} penDetected={deviceType.penDetected}
/> />
</Stack.Row> </Stack.Row>
{libraryMenu} {libraryMenu}

View File

@ -80,7 +80,6 @@ export type AppState = {
elementType: typeof SHAPES[number]["value"] | "eraser"; elementType: typeof SHAPES[number]["value"] | "eraser";
elementLocked: boolean; elementLocked: boolean;
penMode: boolean; penMode: boolean;
penDetected: boolean;
exportBackground: boolean; exportBackground: boolean;
exportEmbedScene: boolean; exportEmbedScene: boolean;
exportWithDarkMode: boolean; exportWithDarkMode: boolean;
@ -412,4 +411,5 @@ export type ExcalidrawImperativeAPI = {
export type DeviceType = { export type DeviceType = {
isMobile: boolean; isMobile: boolean;
isTouchScreen: boolean; isTouchScreen: boolean;
penDetected: boolean;
}; };