From 36e00390e746fdbf81e680e4282a2098a202589e Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 27 Mar 2025 02:00:05 +0200 Subject: [PATCH] added localstorage helper --- src/context/GlobalProvider.tsx | 6 ++++-- src/hooks/useLocalStorage.tsx | 37 ++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/hooks/useLocalStorage.tsx diff --git a/src/context/GlobalProvider.tsx b/src/context/GlobalProvider.tsx index 632f7b4..4e20a70 100644 --- a/src/context/GlobalProvider.tsx +++ b/src/context/GlobalProvider.tsx @@ -9,6 +9,7 @@ import { base64ToObject } from "../utils/publish"; import { generateBloomFilterBase64, isInsideBloom } from "../utils/bloomFilter"; import { formatTimestamp } from "../utils/time"; import { Toaster } from "react-hot-toast"; +import { useLocalStorage } from "../hooks/useLocalStorage"; const utils = { @@ -29,6 +30,7 @@ interface GlobalContextType { lists: ReturnType; appInfo: ReturnType; identifierOperations: ReturnType +localStorageOperations: ReturnType utils: typeof utils } @@ -57,9 +59,9 @@ export const GlobalProvider = ({ children, config, toastStyle = {} }: GlobalProv const appInfo = useAppInfo(config.appName, config?.publicSalt) const lists = useResources() const identifierOperations = useIdentifiers(config.publicSalt, config.appName) - + const localStorageOperations = useLocalStorage(config.publicSalt, config.appName) // ✅ Merge all hooks into a single `contextValue` - const contextValue = useMemo(() => ({ auth, lists, appInfo, identifierOperations, utils }), [auth, lists, appInfo, identifierOperations]); + const contextValue = useMemo(() => ({ auth, lists, appInfo, identifierOperations, utils, localStorageOperations }), [auth, lists, appInfo, identifierOperations, localStorageOperations]); return ( { + + + const setTimestamp = useCallback(async (timestamp: number, storageId: string)=> { + const hashedString = await hashWord(`${appName}-${storageId}`, EnumCollisionStrength.HIGH, publicSalt) + localStorage.setItem(hashedString, JSON.stringify(timestamp)); + return true + }, [appName, publicSalt]) + + const getTimestamp = useCallback(async ( storageId: string)=> { + const hashedString = await hashWord(`${appName}-${storageId}`, EnumCollisionStrength.HIGH, publicSalt) + const stored = localStorage.getItem(hashedString); + if(stored){ + return JSON.parse(stored) + } else return null + }, [appName, publicSalt]) + + const isNewTimestamp = useCallback(async( storageId: string, differenceTimestamp: number)=> { + const hashedString = await hashWord(`${appName}-${storageId}`, EnumCollisionStrength.HIGH, publicSalt) + const stored = localStorage.getItem(hashedString); + if(stored){ + const storedTimestamp = JSON.parse(stored) + return (Date.now() - storedTimestamp) > differenceTimestamp + } else return true + }, [appName, publicSalt]) + return { + setTimestamp, + getTimestamp, + isNewTimestamp + + }; +};