Spaces:
Running
Running
File size: 1,010 Bytes
16ff49b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | // 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 */
}
}
|