Procházet zdrojové kódy

Remove last committed point json (#2371)

Co-authored-by: rene_mbp <harryloveslearning@googlemail.com>
Co-authored-by: dwelle <luzar.david@gmail.com>
Rene před 4 roky
rodič
revize
a1fbec1030
4 změnil soubory, kde provedl 26 přidání a 5 odebrání
  1. 2 1
      src/data/blob.ts
  2. 2 1
      src/data/json.ts
  3. 4 3
      src/data/localStorage.ts
  4. 18 0
      src/element/index.ts

+ 2 - 1
src/data/blob.ts

@@ -6,6 +6,7 @@ import { LibraryData, ImportedDataState } from "./types";
 import { calculateScrollCenter } from "../scene";
 import { MIME_TYPES } from "../constants";
 import { CanvasError } from "../errors";
+import { clearElementsForExport } from "../element";
 
 export const parseFileContents = async (blob: Blob | File) => {
   let contents: string;
@@ -90,7 +91,7 @@ export const loadFromBlob = async (
     }
     return restore(
       {
-        elements: data.elements,
+        elements: clearElementsForExport(data.elements || []),
         appState: {
           appearance: localAppState?.appearance,
           fileHandle:

+ 2 - 1
src/data/json.ts

@@ -6,6 +6,7 @@ import { fileOpen, fileSave } from "browser-nativefs";
 import { loadFromBlob } from "./blob";
 import { Library } from "./library";
 import { MIME_TYPES } from "../constants";
+import { clearElementsForExport } from "../element";
 
 export const serializeAsJSON = (
   elements: readonly ExcalidrawElement[],
@@ -16,7 +17,7 @@ export const serializeAsJSON = (
       type: "excalidraw",
       version: 2,
       source: window.location.origin,
-      elements: elements.filter((element) => !element.isDeleted),
+      elements: clearElementsForExport(elements),
       appState: cleanAppStateForExport(appState),
     },
     null,

+ 4 - 3
src/data/localStorage.ts

@@ -2,6 +2,7 @@ import { ExcalidrawElement } from "../element/types";
 import { AppState } from "../types";
 import { clearAppStateForLocalStorage, getDefaultAppState } from "../appState";
 import { STORAGE_KEYS } from "../constants";
+import { clearElementsForLocalStorage } from "../element";
 
 export const saveUsernameToLocalStorage = (username: string) => {
   try {
@@ -36,7 +37,7 @@ export const saveToLocalStorage = (
   try {
     localStorage.setItem(
       STORAGE_KEYS.LOCAL_STORAGE_ELEMENTS,
-      JSON.stringify(elements.filter((element) => !element.isDeleted)),
+      JSON.stringify(clearElementsForLocalStorage(elements)),
     );
     localStorage.setItem(
       STORAGE_KEYS.LOCAL_STORAGE_APP_STATE,
@@ -60,10 +61,10 @@ export const importFromLocalStorage = () => {
     console.error(error);
   }
 
-  let elements = [];
+  let elements: ExcalidrawElement[] = [];
   if (savedElements) {
     try {
-      elements = JSON.parse(savedElements);
+      elements = clearElementsForLocalStorage(JSON.parse(savedElements));
     } catch (error) {
       console.error(error);
       // Do nothing because elements array is already empty

+ 18 - 0
src/element/index.ts

@@ -4,6 +4,7 @@ import {
   NonDeleted,
 } from "./types";
 import { isInvisiblySmallElement } from "./sizeHelpers";
+import { isLinearElementType } from "./typeChecks";
 
 export {
   newElement,
@@ -85,3 +86,20 @@ export const getNonDeletedElements = (elements: readonly ExcalidrawElement[]) =>
 export const isNonDeletedElement = <T extends ExcalidrawElement>(
   element: T,
 ): element is NonDeleted<T> => !element.isDeleted;
+
+const _clearElements = (
+  elements: readonly ExcalidrawElement[],
+): ExcalidrawElement[] =>
+  getNonDeletedElements(elements).map((element) =>
+    isLinearElementType(element.type)
+      ? { ...element, lastCommittedPoint: null }
+      : element,
+  );
+
+export const clearElementsForExport = (
+  elements: readonly ExcalidrawElement[],
+) => _clearElements(elements);
+
+export const clearElementsForLocalStorage = (
+  elements: readonly ExcalidrawElement[],
+) => _clearElements(elements);