mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-11-04 12:54:23 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { ExcalidrawElement } from "../../packages/excalidraw/element/types";
 | 
						|
import { AppState } from "../../packages/excalidraw/types";
 | 
						|
import {
 | 
						|
  clearAppStateForLocalStorage,
 | 
						|
  getDefaultAppState,
 | 
						|
} from "../../packages/excalidraw/appState";
 | 
						|
import { clearElementsForLocalStorage } from "../../packages/excalidraw/element";
 | 
						|
import { STORAGE_KEYS } from "../app_constants";
 | 
						|
 | 
						|
export const saveUsernameToLocalStorage = (username: string) => {
 | 
						|
  try {
 | 
						|
    localStorage.setItem(
 | 
						|
      STORAGE_KEYS.LOCAL_STORAGE_COLLAB,
 | 
						|
      JSON.stringify({ username }),
 | 
						|
    );
 | 
						|
  } catch (error: any) {
 | 
						|
    // Unable to access window.localStorage
 | 
						|
    console.error(error);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
export const importUsernameFromLocalStorage = (): string | null => {
 | 
						|
  try {
 | 
						|
    const data = localStorage.getItem(STORAGE_KEYS.LOCAL_STORAGE_COLLAB);
 | 
						|
    if (data) {
 | 
						|
      return JSON.parse(data).username;
 | 
						|
    }
 | 
						|
  } catch (error: any) {
 | 
						|
    // Unable to access localStorage
 | 
						|
    console.error(error);
 | 
						|
  }
 | 
						|
 | 
						|
  return null;
 | 
						|
};
 | 
						|
 | 
						|
export const importFromLocalStorage = () => {
 | 
						|
  let savedElements = null;
 | 
						|
  let savedState = null;
 | 
						|
 | 
						|
  try {
 | 
						|
    savedElements = localStorage.getItem(STORAGE_KEYS.LOCAL_STORAGE_ELEMENTS);
 | 
						|
    savedState = localStorage.getItem(STORAGE_KEYS.LOCAL_STORAGE_APP_STATE);
 | 
						|
  } catch (error: any) {
 | 
						|
    // Unable to access localStorage
 | 
						|
    console.error(error);
 | 
						|
  }
 | 
						|
 | 
						|
  let elements: ExcalidrawElement[] = [];
 | 
						|
  if (savedElements) {
 | 
						|
    try {
 | 
						|
      elements = clearElementsForLocalStorage(JSON.parse(savedElements));
 | 
						|
    } catch (error: any) {
 | 
						|
      console.error(error);
 | 
						|
      // Do nothing because elements array is already empty
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  let appState = null;
 | 
						|
  if (savedState) {
 | 
						|
    try {
 | 
						|
      appState = {
 | 
						|
        ...getDefaultAppState(),
 | 
						|
        ...clearAppStateForLocalStorage(
 | 
						|
          JSON.parse(savedState) as Partial<AppState>,
 | 
						|
        ),
 | 
						|
      };
 | 
						|
    } catch (error: any) {
 | 
						|
      console.error(error);
 | 
						|
      // Do nothing because appState is already null
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return { elements, appState };
 | 
						|
};
 | 
						|
 | 
						|
export const getElementsStorageSize = () => {
 | 
						|
  try {
 | 
						|
    const elements = localStorage.getItem(STORAGE_KEYS.LOCAL_STORAGE_ELEMENTS);
 | 
						|
    const elementsSize = elements?.length || 0;
 | 
						|
    return elementsSize;
 | 
						|
  } catch (error: any) {
 | 
						|
    console.error(error);
 | 
						|
    return 0;
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
export const getTotalStorageSize = () => {
 | 
						|
  try {
 | 
						|
    const appState = localStorage.getItem(STORAGE_KEYS.LOCAL_STORAGE_APP_STATE);
 | 
						|
    const collab = localStorage.getItem(STORAGE_KEYS.LOCAL_STORAGE_COLLAB);
 | 
						|
 | 
						|
    const appStateSize = appState?.length || 0;
 | 
						|
    const collabSize = collab?.length || 0;
 | 
						|
 | 
						|
    return appStateSize + collabSize + getElementsStorageSize();
 | 
						|
  } catch (error: any) {
 | 
						|
    console.error(error);
 | 
						|
    return 0;
 | 
						|
  }
 | 
						|
};
 |