From a1fbec1030555f395af934fcc8aa29c9fd85ca4e Mon Sep 17 00:00:00 2001 From: Rene <1595098+ReneCode@users.noreply.github.com> Date: Wed, 11 Nov 2020 15:55:22 +0100 Subject: [PATCH] Remove last committed point json (#2371) Co-authored-by: rene_mbp Co-authored-by: dwelle --- src/data/blob.ts | 3 ++- src/data/json.ts | 3 ++- src/data/localStorage.ts | 7 ++++--- src/element/index.ts | 18 ++++++++++++++++++ 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/data/blob.ts b/src/data/blob.ts index 4b2b9bf5..01209094 100644 --- a/src/data/blob.ts +++ b/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: diff --git a/src/data/json.ts b/src/data/json.ts index 0613730e..37aec413 100644 --- a/src/data/json.ts +++ b/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, diff --git a/src/data/localStorage.ts b/src/data/localStorage.ts index 15967863..ce4bf150 100644 --- a/src/data/localStorage.ts +++ b/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 diff --git a/src/element/index.ts b/src/element/index.ts index 1e804ec5..e578ee13 100644 --- a/src/element/index.ts +++ b/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 = ( element: T, ): element is NonDeleted => !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);