refactor: code clean up (#3681)
* refactor: code clean up Move types from App.tsx to types.ts Move excalidrawPackage.test.tsx inside src/tests/package * import type
This commit is contained in:
parent
a2e1199907
commit
15f02ba191
@ -111,7 +111,6 @@ import {
|
|||||||
import { LinearElementEditor } from "../element/linearElementEditor";
|
import { LinearElementEditor } from "../element/linearElementEditor";
|
||||||
import { mutateElement } from "../element/mutateElement";
|
import { mutateElement } from "../element/mutateElement";
|
||||||
import { deepCopyElement, newFreeDrawElement } from "../element/newElement";
|
import { deepCopyElement, newFreeDrawElement } from "../element/newElement";
|
||||||
import { MaybeTransformHandleType } from "../element/transformHandles";
|
|
||||||
import {
|
import {
|
||||||
isBindingElement,
|
isBindingElement,
|
||||||
isBindingElementType,
|
isBindingElementType,
|
||||||
@ -167,9 +166,11 @@ import { findShapeByKey } from "../shapes";
|
|||||||
import {
|
import {
|
||||||
AppProps,
|
AppProps,
|
||||||
AppState,
|
AppState,
|
||||||
|
ExcalidrawImperativeAPI,
|
||||||
Gesture,
|
Gesture,
|
||||||
GestureEvent,
|
GestureEvent,
|
||||||
LibraryItems,
|
LibraryItems,
|
||||||
|
PointerDownState,
|
||||||
SceneData,
|
SceneData,
|
||||||
} from "../types";
|
} from "../types";
|
||||||
import {
|
import {
|
||||||
@ -180,7 +181,6 @@ import {
|
|||||||
isToolIcon,
|
isToolIcon,
|
||||||
isWritableElement,
|
isWritableElement,
|
||||||
resetCursor,
|
resetCursor,
|
||||||
ResolvablePromise,
|
|
||||||
resolvablePromise,
|
resolvablePromise,
|
||||||
sceneCoordsToViewportCoords,
|
sceneCoordsToViewportCoords,
|
||||||
setCursor,
|
setCursor,
|
||||||
@ -222,83 +222,6 @@ const gesture: Gesture = {
|
|||||||
initialScale: null,
|
initialScale: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
export type PointerDownState = Readonly<{
|
|
||||||
// The first position at which pointerDown happened
|
|
||||||
origin: Readonly<{ x: number; y: number }>;
|
|
||||||
// Same as "origin" but snapped to the grid, if grid is on
|
|
||||||
originInGrid: Readonly<{ x: number; y: number }>;
|
|
||||||
// Scrollbar checks
|
|
||||||
scrollbars: ReturnType<typeof isOverScrollBars>;
|
|
||||||
// The previous pointer position
|
|
||||||
lastCoords: { x: number; y: number };
|
|
||||||
// map of original elements data
|
|
||||||
originalElements: Map<string, NonDeleted<ExcalidrawElement>>;
|
|
||||||
resize: {
|
|
||||||
// Handle when resizing, might change during the pointer interaction
|
|
||||||
handleType: MaybeTransformHandleType;
|
|
||||||
// This is determined on the initial pointer down event
|
|
||||||
isResizing: boolean;
|
|
||||||
// This is determined on the initial pointer down event
|
|
||||||
offset: { x: number; y: number };
|
|
||||||
// This is determined on the initial pointer down event
|
|
||||||
arrowDirection: "origin" | "end";
|
|
||||||
// This is a center point of selected elements determined on the initial pointer down event (for rotation only)
|
|
||||||
center: { x: number; y: number };
|
|
||||||
};
|
|
||||||
hit: {
|
|
||||||
// The element the pointer is "hitting", is determined on the initial
|
|
||||||
// pointer down event
|
|
||||||
element: NonDeleted<ExcalidrawElement> | null;
|
|
||||||
// The elements the pointer is "hitting", is determined on the initial
|
|
||||||
// pointer down event
|
|
||||||
allHitElements: NonDeleted<ExcalidrawElement>[];
|
|
||||||
// This is determined on the initial pointer down event
|
|
||||||
wasAddedToSelection: boolean;
|
|
||||||
// Whether selected element(s) were duplicated, might change during the
|
|
||||||
// pointer interaction
|
|
||||||
hasBeenDuplicated: boolean;
|
|
||||||
hasHitCommonBoundingBoxOfSelectedElements: boolean;
|
|
||||||
};
|
|
||||||
withCmdOrCtrl: boolean;
|
|
||||||
drag: {
|
|
||||||
// Might change during the pointer interation
|
|
||||||
hasOccurred: boolean;
|
|
||||||
// Might change during the pointer interation
|
|
||||||
offset: { x: number; y: number } | null;
|
|
||||||
};
|
|
||||||
// We need to have these in the state so that we can unsubscribe them
|
|
||||||
eventListeners: {
|
|
||||||
// It's defined on the initial pointer down event
|
|
||||||
onMove: null | ((event: PointerEvent) => void);
|
|
||||||
// It's defined on the initial pointer down event
|
|
||||||
onUp: null | ((event: PointerEvent) => void);
|
|
||||||
// It's defined on the initial pointer down event
|
|
||||||
onKeyDown: null | ((event: KeyboardEvent) => void);
|
|
||||||
// It's defined on the initial pointer down event
|
|
||||||
onKeyUp: null | ((event: KeyboardEvent) => void);
|
|
||||||
};
|
|
||||||
}>;
|
|
||||||
|
|
||||||
export type ExcalidrawImperativeAPI = {
|
|
||||||
updateScene: InstanceType<typeof App>["updateScene"];
|
|
||||||
resetScene: InstanceType<typeof App>["resetScene"];
|
|
||||||
getSceneElementsIncludingDeleted: InstanceType<
|
|
||||||
typeof App
|
|
||||||
>["getSceneElementsIncludingDeleted"];
|
|
||||||
history: {
|
|
||||||
clear: InstanceType<typeof App>["resetHistory"];
|
|
||||||
};
|
|
||||||
scrollToContent: InstanceType<typeof App>["scrollToContent"];
|
|
||||||
getSceneElements: InstanceType<typeof App>["getSceneElements"];
|
|
||||||
getAppState: () => InstanceType<typeof App>["state"];
|
|
||||||
refresh: InstanceType<typeof App>["refresh"];
|
|
||||||
importLibrary: InstanceType<typeof App>["importLibraryFromUrl"];
|
|
||||||
setToastMessage: InstanceType<typeof App>["setToastMessage"];
|
|
||||||
readyPromise: ResolvablePromise<ExcalidrawImperativeAPI>;
|
|
||||||
ready: true;
|
|
||||||
id: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
class App extends React.Component<AppProps, AppState> {
|
class App extends React.Component<AppProps, AppState> {
|
||||||
canvas: HTMLCanvasElement | null = null;
|
canvas: HTMLCanvasElement | null = null;
|
||||||
rc: RoughCanvas | null = null;
|
rc: RoughCanvas | null = null;
|
||||||
|
@ -2,7 +2,7 @@ import { loadLibraryFromBlob } from "./blob";
|
|||||||
import { LibraryItems, LibraryItem } from "../types";
|
import { LibraryItems, LibraryItem } from "../types";
|
||||||
import { restoreElements } from "./restore";
|
import { restoreElements } from "./restore";
|
||||||
import { getNonDeletedElements } from "../element";
|
import { getNonDeletedElements } from "../element";
|
||||||
import App from "../components/App";
|
import type App from "../components/App";
|
||||||
|
|
||||||
class Library {
|
class Library {
|
||||||
private libraryCache: LibraryItems | null = null;
|
private libraryCache: LibraryItems | null = null;
|
||||||
|
@ -5,7 +5,7 @@ import { mutateElement } from "./mutateElement";
|
|||||||
import { getPerfectElementSize } from "./sizeHelpers";
|
import { getPerfectElementSize } from "./sizeHelpers";
|
||||||
import Scene from "../scene/Scene";
|
import Scene from "../scene/Scene";
|
||||||
import { NonDeletedExcalidrawElement } from "./types";
|
import { NonDeletedExcalidrawElement } from "./types";
|
||||||
import { PointerDownState } from "../components/App";
|
import { PointerDownState } from "../types";
|
||||||
|
|
||||||
export const dragSelectedElements = (
|
export const dragSelectedElements = (
|
||||||
pointerDownState: PointerDownState,
|
pointerDownState: PointerDownState,
|
||||||
|
@ -32,8 +32,7 @@ import {
|
|||||||
MaybeTransformHandleType,
|
MaybeTransformHandleType,
|
||||||
TransformHandleDirection,
|
TransformHandleDirection,
|
||||||
} from "./transformHandles";
|
} from "./transformHandles";
|
||||||
import { PointerDownState } from "../components/App";
|
import { Point, PointerDownState } from "../types";
|
||||||
import { Point } from "../types";
|
|
||||||
|
|
||||||
export const normalizeAngle = (angle: number): number => {
|
export const normalizeAngle = (angle: number): number => {
|
||||||
if (angle >= 2 * Math.PI) {
|
if (angle >= 2 * Math.PI) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import throttle from "lodash.throttle";
|
import throttle from "lodash.throttle";
|
||||||
import React, { PureComponent } from "react";
|
import React, { PureComponent } from "react";
|
||||||
import { ExcalidrawImperativeAPI } from "../../components/App";
|
import { ExcalidrawImperativeAPI } from "../../types";
|
||||||
import { ErrorDialog } from "../../components/ErrorDialog";
|
import { ErrorDialog } from "../../components/ErrorDialog";
|
||||||
import { APP_NAME, ENV, EVENT } from "../../constants";
|
import { APP_NAME, ENV, EVENT } from "../../constants";
|
||||||
import { ImportedDataState } from "../../data/types";
|
import { ImportedDataState } from "../../data/types";
|
||||||
|
@ -8,7 +8,6 @@ import React, {
|
|||||||
} from "react";
|
} from "react";
|
||||||
import { trackEvent } from "../analytics";
|
import { trackEvent } from "../analytics";
|
||||||
import { getDefaultAppState } from "../appState";
|
import { getDefaultAppState } from "../appState";
|
||||||
import { ExcalidrawImperativeAPI } from "../components/App";
|
|
||||||
import { ErrorDialog } from "../components/ErrorDialog";
|
import { ErrorDialog } from "../components/ErrorDialog";
|
||||||
import { TopErrorBoundary } from "../components/TopErrorBoundary";
|
import { TopErrorBoundary } from "../components/TopErrorBoundary";
|
||||||
import {
|
import {
|
||||||
@ -31,7 +30,7 @@ import Excalidraw, {
|
|||||||
defaultLang,
|
defaultLang,
|
||||||
languages,
|
languages,
|
||||||
} from "../packages/excalidraw/index";
|
} from "../packages/excalidraw/index";
|
||||||
import { AppState, LibraryItems } from "../types";
|
import { AppState, LibraryItems, ExcalidrawImperativeAPI } from "../types";
|
||||||
import {
|
import {
|
||||||
debounce,
|
debounce,
|
||||||
getVersion,
|
getVersion,
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { fireEvent, GlobalTestState, render } from "./test-utils";
|
import { fireEvent, GlobalTestState, render } from "../test-utils";
|
||||||
import Excalidraw from "../packages/excalidraw/index";
|
import Excalidraw from "../../packages/excalidraw/index";
|
||||||
import { queryByText, queryByTestId } from "@testing-library/react";
|
import { queryByText, queryByTestId } from "@testing-library/react";
|
||||||
import { GRID_SIZE } from "../constants";
|
import { GRID_SIZE } from "../../constants";
|
||||||
import { t } from "../i18n";
|
import { t } from "../../i18n";
|
||||||
|
|
||||||
const { h } = window;
|
const { h } = window;
|
||||||
|
|
81
src/types.ts
81
src/types.ts
@ -16,11 +16,13 @@ import { Point as RoughPoint } from "roughjs/bin/geometry";
|
|||||||
import { LinearElementEditor } from "./element/linearElementEditor";
|
import { LinearElementEditor } from "./element/linearElementEditor";
|
||||||
import { SuggestedBinding } from "./element/binding";
|
import { SuggestedBinding } from "./element/binding";
|
||||||
import { ImportedDataState } from "./data/types";
|
import { ImportedDataState } from "./data/types";
|
||||||
import { ExcalidrawImperativeAPI } from "./components/App";
|
import type App from "./components/App";
|
||||||
import type { ResolvablePromise } from "./utils";
|
import type { ResolvablePromise } from "./utils";
|
||||||
import { Spreadsheet } from "./charts";
|
import { Spreadsheet } from "./charts";
|
||||||
import { Language } from "./i18n";
|
import { Language } from "./i18n";
|
||||||
import { ClipboardData } from "./clipboard";
|
import { ClipboardData } from "./clipboard";
|
||||||
|
import { isOverScrollBars } from "./scene";
|
||||||
|
import { MaybeTransformHandleType } from "./element/transformHandles";
|
||||||
|
|
||||||
export type Point = Readonly<RoughPoint>;
|
export type Point = Readonly<RoughPoint>;
|
||||||
|
|
||||||
@ -249,3 +251,80 @@ export type AppProps = ExcalidrawProps & {
|
|||||||
detectScroll: boolean;
|
detectScroll: boolean;
|
||||||
handleKeyboardGlobally: boolean;
|
handleKeyboardGlobally: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type PointerDownState = Readonly<{
|
||||||
|
// The first position at which pointerDown happened
|
||||||
|
origin: Readonly<{ x: number; y: number }>;
|
||||||
|
// Same as "origin" but snapped to the grid, if grid is on
|
||||||
|
originInGrid: Readonly<{ x: number; y: number }>;
|
||||||
|
// Scrollbar checks
|
||||||
|
scrollbars: ReturnType<typeof isOverScrollBars>;
|
||||||
|
// The previous pointer position
|
||||||
|
lastCoords: { x: number; y: number };
|
||||||
|
// map of original elements data
|
||||||
|
originalElements: Map<string, NonDeleted<ExcalidrawElement>>;
|
||||||
|
resize: {
|
||||||
|
// Handle when resizing, might change during the pointer interaction
|
||||||
|
handleType: MaybeTransformHandleType;
|
||||||
|
// This is determined on the initial pointer down event
|
||||||
|
isResizing: boolean;
|
||||||
|
// This is determined on the initial pointer down event
|
||||||
|
offset: { x: number; y: number };
|
||||||
|
// This is determined on the initial pointer down event
|
||||||
|
arrowDirection: "origin" | "end";
|
||||||
|
// This is a center point of selected elements determined on the initial pointer down event (for rotation only)
|
||||||
|
center: { x: number; y: number };
|
||||||
|
};
|
||||||
|
hit: {
|
||||||
|
// The element the pointer is "hitting", is determined on the initial
|
||||||
|
// pointer down event
|
||||||
|
element: NonDeleted<ExcalidrawElement> | null;
|
||||||
|
// The elements the pointer is "hitting", is determined on the initial
|
||||||
|
// pointer down event
|
||||||
|
allHitElements: NonDeleted<ExcalidrawElement>[];
|
||||||
|
// This is determined on the initial pointer down event
|
||||||
|
wasAddedToSelection: boolean;
|
||||||
|
// Whether selected element(s) were duplicated, might change during the
|
||||||
|
// pointer interaction
|
||||||
|
hasBeenDuplicated: boolean;
|
||||||
|
hasHitCommonBoundingBoxOfSelectedElements: boolean;
|
||||||
|
};
|
||||||
|
withCmdOrCtrl: boolean;
|
||||||
|
drag: {
|
||||||
|
// Might change during the pointer interation
|
||||||
|
hasOccurred: boolean;
|
||||||
|
// Might change during the pointer interation
|
||||||
|
offset: { x: number; y: number } | null;
|
||||||
|
};
|
||||||
|
// We need to have these in the state so that we can unsubscribe them
|
||||||
|
eventListeners: {
|
||||||
|
// It's defined on the initial pointer down event
|
||||||
|
onMove: null | ((event: PointerEvent) => void);
|
||||||
|
// It's defined on the initial pointer down event
|
||||||
|
onUp: null | ((event: PointerEvent) => void);
|
||||||
|
// It's defined on the initial pointer down event
|
||||||
|
onKeyDown: null | ((event: KeyboardEvent) => void);
|
||||||
|
// It's defined on the initial pointer down event
|
||||||
|
onKeyUp: null | ((event: KeyboardEvent) => void);
|
||||||
|
};
|
||||||
|
}>;
|
||||||
|
|
||||||
|
export type ExcalidrawImperativeAPI = {
|
||||||
|
updateScene: InstanceType<typeof App>["updateScene"];
|
||||||
|
resetScene: InstanceType<typeof App>["resetScene"];
|
||||||
|
getSceneElementsIncludingDeleted: InstanceType<
|
||||||
|
typeof App
|
||||||
|
>["getSceneElementsIncludingDeleted"];
|
||||||
|
history: {
|
||||||
|
clear: InstanceType<typeof App>["resetHistory"];
|
||||||
|
};
|
||||||
|
scrollToContent: InstanceType<typeof App>["scrollToContent"];
|
||||||
|
getSceneElements: InstanceType<typeof App>["getSceneElements"];
|
||||||
|
getAppState: () => InstanceType<typeof App>["state"];
|
||||||
|
refresh: InstanceType<typeof App>["refresh"];
|
||||||
|
importLibrary: InstanceType<typeof App>["importLibraryFromUrl"];
|
||||||
|
setToastMessage: InstanceType<typeof App>["setToastMessage"];
|
||||||
|
readyPromise: ResolvablePromise<ExcalidrawImperativeAPI>;
|
||||||
|
ready: true;
|
||||||
|
id: string;
|
||||||
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user