summaryrefslogtreecommitdiff
path: root/apps/web/src/hooks/storage
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-04-20 11:31:17 +0200
committerMaze Winther <mazewinther@gmail.com>2026-04-20 11:31:17 +0200
commit3e89d2998588f8e35c524e523ba2ee853f0f6475 (patch)
tree57221f96c1259b3b07e3ddf8c1adefc502b9d8eb /apps/web/src/hooks/storage
parent729d10592f4e802f91c555c309ff3ba4b119f843 (diff)
downloadopencut-3e89d2998588f8e35c524e523ba2ee853f0f6475.tar.gz
refactor: restructure files to their domains, new preview overlay system, and dep graph
Diffstat (limited to 'apps/web/src/hooks/storage')
-rw-r--r--apps/web/src/hooks/storage/use-local-storage.ts58
1 files changed, 0 insertions, 58 deletions
diff --git a/apps/web/src/hooks/storage/use-local-storage.ts b/apps/web/src/hooks/storage/use-local-storage.ts
deleted file mode 100644
index d0188ab3..00000000
--- a/apps/web/src/hooks/storage/use-local-storage.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { useState, useEffect, useCallback, useRef } from "react";
-
-export function useLocalStorage<T>({
- key,
- defaultValue,
-}: {
- key: string;
- defaultValue: T;
-}): [
- T,
- ({ value }: { value: T | ((previousValue: T) => T) }) => void,
- boolean,
-] {
- const [value, setValue] = useState<T>(defaultValue);
- const [isReady, setIsReady] = useState(false);
- const valueRef = useRef(defaultValue);
-
- // avoid hydration mismatch by reading after mount
- useEffect(() => {
- try {
- const storedValue = localStorage.getItem(key);
- if (storedValue !== null) {
- const parsedValue = JSON.parse(storedValue) as T;
- valueRef.current = parsedValue;
- setValue(parsedValue);
- }
- } catch {
- // localstorage might be unavailable
- }
- setIsReady(true);
- }, [key]);
-
- // sync to localstorage after hydration
- useEffect(() => {
- if (!isReady) return;
-
- try {
- localStorage.setItem(key, JSON.stringify(value));
- } catch {
- // localstorage might be full or disabled
- }
- }, [key, value, isReady]);
-
- const setValueWithCallback = useCallback(
- ({ value: nextValue }: { value: T | ((previousValue: T) => T) }) => {
- const resolvedValue =
- typeof nextValue === "function"
- ? (nextValue as (previousValue: T) => T)(valueRef.current)
- : nextValue;
-
- valueRef.current = resolvedValue;
- setValue(resolvedValue);
- },
- [],
- );
-
- return [value, setValueWithCallback, isReady];
-}