import { z } from 'zod' export const recentGroupsSchema = z.array( z.object({ id: z.string().min(1), name: z.string(), }), ) export const starredGroupsSchema = z.array(z.string()) export type RecentGroups = z.infer export type RecentGroup = RecentGroups[number] const STORAGE_KEY = 'recentGroups' const STARRED_GROUPS_STORAGE_KEY = 'starredGroups' export function getRecentGroups() { const groupsInStorageJson = localStorage.getItem(STORAGE_KEY) const groupsInStorageRaw = groupsInStorageJson ? JSON.parse(groupsInStorageJson) : [] const parseResult = recentGroupsSchema.safeParse(groupsInStorageRaw) return parseResult.success ? parseResult.data : [] } export function saveRecentGroup(group: RecentGroup) { const recentGroups = getRecentGroups() localStorage.setItem( STORAGE_KEY, JSON.stringify([group, ...recentGroups.filter((rg) => rg.id !== group.id)]), ) } export function deleteRecentGroup(group: RecentGroup) { const recentGroups = getRecentGroups() localStorage.setItem( STORAGE_KEY, JSON.stringify(recentGroups.filter((rg) => rg.id !== group.id)), ) } export function getStarredGroups() { const starredGroupsJson = localStorage.getItem(STARRED_GROUPS_STORAGE_KEY) const starredGroupsRaw = starredGroupsJson ? JSON.parse(starredGroupsJson) : [] const parseResult = starredGroupsSchema.safeParse(starredGroupsRaw) return parseResult.success ? parseResult.data : [] } export function starGroup(groupId: string) { const starredGroups = getStarredGroups() localStorage.setItem( STARRED_GROUPS_STORAGE_KEY, JSON.stringify([...starredGroups, groupId]), ) } export function unstarGroup(groupId: string) { const starredGroups = getStarredGroups() localStorage.setItem( STARRED_GROUPS_STORAGE_KEY, JSON.stringify(starredGroups.filter((g) => g !== groupId)), ) }