mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-10-31 10:54:33 +01:00 
			
		
		
		
	 d6cd8b78f1
			
		
	
	d6cd8b78f1
	
	
	
		
			
			* feat: decouple package deps and introduce yarn workspaces * update root directory * fix * fix scripts * fix lint * update path in scripts * remove yarn.lock files from packages * ignore workspace * dummy * dummy * remove comment check * revert workflow changes * ignore ws when installing gh actions * remove log * update path * fix * fix typo
		
			
				
	
	
		
			116 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.2 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";
 | |
| import { ImportedDataState } from "../../packages/excalidraw/data/types";
 | |
| 
 | |
| 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 library = localStorage.getItem(STORAGE_KEYS.LOCAL_STORAGE_LIBRARY);
 | |
| 
 | |
|     const appStateSize = appState?.length || 0;
 | |
|     const collabSize = collab?.length || 0;
 | |
|     const librarySize = library?.length || 0;
 | |
| 
 | |
|     return appStateSize + collabSize + librarySize + getElementsStorageSize();
 | |
|   } catch (error: any) {
 | |
|     console.error(error);
 | |
|     return 0;
 | |
|   }
 | |
| };
 | |
| 
 | |
| export const getLibraryItemsFromStorage = () => {
 | |
|   try {
 | |
|     const libraryItems: ImportedDataState["libraryItems"] = JSON.parse(
 | |
|       localStorage.getItem(STORAGE_KEYS.LOCAL_STORAGE_LIBRARY) as string,
 | |
|     );
 | |
| 
 | |
|     return libraryItems || [];
 | |
|   } catch (error) {
 | |
|     console.error(error);
 | |
|     return [];
 | |
|   }
 | |
| };
 |