case0 / web /src /tips.ts
HusseinEid's picture
Per-case visuals, incident vignettes, guided play, no-repeat dealing, four new crime kinds (#4)
16ff49b
Raw
History Blame Contribute Delete
1.01 kB
// One-time guidance memory: which partner nudges and per-case brief overlays this
// browser has already seen. Falls back to an in-memory set in private mode, so
// everything still fires exactly once per session there.
const KEY = 'cz-tips'
const CAP = 100
const mem = new Set<string>()
function stored(): string[] {
try {
const raw = localStorage.getItem(KEY)
if (!raw) return []
const data = JSON.parse(raw) as { v: 1; seen: string[] }
if (data?.v !== 1 || !Array.isArray(data.seen)) return []
return data.seen.filter((x) => typeof x === 'string')
} catch {
return []
}
}
export function hasSeen(key: string): boolean {
return mem.has(key) || stored().includes(key)
}
export function markSeen(key: string): void {
mem.add(key)
try {
const seen = stored().filter((x) => x !== key)
seen.push(key)
localStorage.setItem(KEY, JSON.stringify({ v: 1, seen: seen.slice(-CAP) }))
} catch {
/* private mode — the in-memory set covers this session */
}
}