Coves frontend - a photon fork
1import { browser } from '$app/environment'
2import type {
3 CommunityView as CovesCommunityView,
4 CommunityViewDetailed,
5} from '$lib/api/coves/types'
6
7interface SessionStorage {
8 lastSeenCommunity?: CovesCommunityView | CommunityViewDetailed
9 postDraft?: {
10 community: CovesCommunityView | CommunityViewDetailed | null
11 title: string
12 body?: string
13 image: FileList | null
14 url?: string
15 nsfw: boolean
16 loading: boolean
17 }
18}
19
20export const setSessionStorage = (
21 key: keyof SessionStorage,
22 value: SessionStorage[typeof key],
23) => {
24 if (!browser) return
25 if (value == undefined) {
26 sessionStorage.removeItem(key)
27 } else {
28 sessionStorage.setItem(key, JSON.stringify(value))
29 }
30}
31
32export const getSessionStorage = (
33 key: keyof SessionStorage,
34): SessionStorage[typeof key] => {
35 if (!browser) return
36 const raw = sessionStorage.getItem(key)
37 if (raw == null) return undefined
38 try {
39 return JSON.parse(raw)
40 } catch {
41 console.warn(
42 `[session] Failed to parse sessionStorage key "${key}", removing corrupted data`,
43 )
44 sessionStorage.removeItem(key)
45 return undefined
46 }
47}