// The last garden opened on THIS device, so a returning user resumes where they // were instead of always landing on the gardens list. Per-device, in // localStorage (same rationale as the seed tray and PlantPicker recents): a // convenience, not authoritative state — a quota/availability failure is // swallowed, and a stored id that no longer loads clears itself (see the editor). // // Only the id is stored. The garden is resolved by the editor on load; if it's // gone (deleted, or access revoked), forgetLastGarden() drops it so `/` stops // resuming a garden that can't open. const KEY = 'pansy:last-garden' /** The last-opened garden id on this device, or null if none/unparseable. */ export function getLastGardenId(): number | null { try { const raw = localStorage.getItem(KEY) if (raw == null) return null const n = Number(raw) return Number.isInteger(n) && n > 0 ? n : null } catch { return null } } /** Record the garden the device is now in, so `/` resumes here next time. */ export function rememberLastGarden(id: number): void { try { localStorage.setItem(KEY, String(id)) } catch { // Resume is a convenience; ignore quota/availability failures. } } /** * Forget the stored last garden. With `onlyIfEquals`, clears only when the stored * id matches — so a 404 on a directly-linked garden can't wipe a different, still * good resume target the user had. */ export function forgetLastGarden(onlyIfEquals?: number): void { try { if (onlyIfEquals != null && getLastGardenId() !== onlyIfEquals) return localStorage.removeItem(KEY) } catch { // ignore } }