Files
Netcatty/application/state/useStoredViewMode.ts
T
LAPTOP-O016UC3M\Qi Chen 1d1c509cbb Persists view mode selection across app sections
Introduces persistent view mode storage for hosts, keys, snippets,
known hosts, and port forwarding by using dedicated storage keys
and a reusable view mode hook. Improves user experience by
remembering individual section preferences instead of defaulting
to "grid" on each visit.
2025-12-19 16:23:52 +08:00

24 lines
717 B
TypeScript

import { useEffect, useState } from "react";
import { localStorageAdapter } from "../../infrastructure/persistence/localStorageAdapter";
export type ViewMode = "grid" | "list";
const isViewMode = (value: string | null): value is ViewMode =>
value === "grid" || value === "list";
export const useStoredViewMode = (
storageKey: string,
fallback: ViewMode = "grid",
) => {
const [viewMode, setViewMode] = useState<ViewMode>(() => {
const stored = localStorageAdapter.readString(storageKey);
return isViewMode(stored) ? stored : fallback;
});
useEffect(() => {
localStorageAdapter.writeString(storageKey, viewMode);
}, [storageKey, viewMode]);
return [viewMode, setViewMode] as const;
};