slanted-gamedev-toolz
Version:
A slanted mix of tools for your brilliant ideas in game design.
68 lines (67 loc) • 2.46 kB
JavaScript
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;
};