import { ExcalidrawElement } from "../element/types"; import { AppState } from "../types"; import { clearAppStateForLocalStorage } from "../appState"; import { restore } from "./restore"; const LOCAL_STORAGE_KEY = "excalidraw"; const LOCAL_STORAGE_KEY_STATE = "excalidraw-state"; export function saveToLocalStorage( elements: readonly ExcalidrawElement[], appState: AppState, ) { localStorage.setItem( LOCAL_STORAGE_KEY, JSON.stringify( elements.map( ({ shape, canvas, ...element }: ExcalidrawElement) => element, ), ), ); localStorage.setItem( LOCAL_STORAGE_KEY_STATE, JSON.stringify(clearAppStateForLocalStorage(appState)), ); } export function restoreFromLocalStorage() { const savedElements = localStorage.getItem(LOCAL_STORAGE_KEY); const savedState = localStorage.getItem(LOCAL_STORAGE_KEY_STATE); let elements = []; if (savedElements) { try { elements = JSON.parse(savedElements).map( ({ shape, ...element }: ExcalidrawElement) => element, ); } catch { // Do nothing because elements array is already empty } } let appState = null; if (savedState) { try { appState = JSON.parse(savedState) as AppState; } catch { // Do nothing because appState is already null } } return restore(elements, appState); }