UNPKG

slanted-gamedev-toolz

Version:

A slanted mix of tools for your brilliant ideas in game design.

68 lines (67 loc) 2.46 kB
import { useCallback, useEffect, useState } from "react"; import { saveKeys } from "../constants/SAVE_KEYS"; import { useIsLoadingLocalStorage } from "../stores/importExportLocalStorageStore"; import { compressObjectWithPako, decompressStringWithPako, } from "./saveStringUtil"; export const getDataFromLocalStorage = (defaultData) => { const savedDataString = localStorage.getItem(saveKeys.data); const savedData = savedDataString ? decompressStringWithPako(savedDataString) : null; return savedData; }; export const saveDataToLocalStorage = (defaultData, savedData) => { localStorage.setItem(saveKeys.data, compressObjectWithPako(savedData)); }; export const deleteDataFromLocalStorage = () => { localStorage.removeItem(saveKeys.data); }; export const useLocalSaveData = (defaultData) => { const isLoading = useIsLoadingLocalStorage(); const saveLocalStorageData = useCallback(async (savedData) => { if (isLoading) return; if (!saveKeys.data) { console.error("!localSaveDataId"); return; } saveDataToLocalStorage(defaultData, savedData); _setsaveGameData(savedData); }, [isLoading, defaultData]); const clearLocalStorageData = useCallback(() => { if (!saveKeys.data) { console.error("!localSaveDataId"); return; } deleteDataFromLocalStorage(); _setsaveGameData(null); }, []); let loadedSaveData = getDataFromLocalStorage(defaultData); const isSaveOk = checkSaveIsValid(defaultData, loadedSaveData); if (!isSaveOk) { loadedSaveData = null; } const [saveGameData, _setsaveGameData] = useState(loadedSaveData); useEffect(() => { if (!saveKeys.data) { console.error("!localSaveDataId"); return; } const save = getDataFromLocalStorage(defaultData); const isSaveValid = checkSaveIsValid(defaultData, save); if (save && isSaveValid) { _setsaveGameData(save); } return function cleanup() { const save = getDataFromLocalStorage(defaultData); if (!save) { _setsaveGameData(null); } }; }, [defaultData]); return { saveLocalStorageData, clearLocalStorageData, saveGameData }; }; const checkSaveIsValid = (defaultData, save) => { if (!save) return false; return true; };