Files
wishlist/src/lib/utils/localWishlists.ts
T

104 lines
2.5 KiB
TypeScript

/**
* Utility functions for managing anonymous user's wishlists in localStorage
*/
const LOCAL_WISHLISTS_KEY = 'local_wishlists';
export interface LocalWishlist {
ownerToken: string;
publicToken: string;
title: string;
createdAt: string;
isFavorite?: boolean;
}
/**
* Get all local wishlists from localStorage
*/
export function getLocalWishlists(): LocalWishlist[] {
if (typeof window === 'undefined') return [];
try {
const stored = localStorage.getItem(LOCAL_WISHLISTS_KEY);
return stored ? JSON.parse(stored) : [];
} catch (error) {
console.error('Failed to parse local wishlists:', error);
return [];
}
}
/**
* Add a wishlist to localStorage
*/
export function addLocalWishlist(wishlist: LocalWishlist): void {
if (typeof window === 'undefined') return;
try {
const wishlists = getLocalWishlists();
// Check if already exists
const exists = wishlists.some(w => w.ownerToken === wishlist.ownerToken);
if (exists) return;
wishlists.push(wishlist);
localStorage.setItem(LOCAL_WISHLISTS_KEY, JSON.stringify(wishlists));
} catch (error) {
console.error('Failed to add local wishlist:', error);
}
}
/**
* Remove a wishlist from localStorage (forget it)
*/
export function forgetLocalWishlist(ownerToken: string): void {
if (typeof window === 'undefined') return;
try {
const wishlists = getLocalWishlists();
const filtered = wishlists.filter(w => w.ownerToken !== ownerToken);
localStorage.setItem(LOCAL_WISHLISTS_KEY, JSON.stringify(filtered));
} catch (error) {
console.error('Failed to forget local wishlist:', error);
}
}
/**
* Clear all local wishlists (e.g., when user claims all wishlists)
*/
export function clearLocalWishlists(): void {
if (typeof window === 'undefined') return;
try {
localStorage.removeItem(LOCAL_WISHLISTS_KEY);
} catch (error) {
console.error('Failed to clear local wishlists:', error);
}
}
/**
* Check if a wishlist is in local storage
*/
export function isLocalWishlist(ownerToken: string): boolean {
const wishlists = getLocalWishlists();
return wishlists.some(w => w.ownerToken === ownerToken);
}
/**
* Toggle favorite status for a local wishlist
*/
export function toggleLocalFavorite(ownerToken: string): void {
if (typeof window === 'undefined') return;
try {
const wishlists = getLocalWishlists();
const updated = wishlists.map(w =>
w.ownerToken === ownerToken
? { ...w, isFavorite: !w.isFavorite }
: w
);
localStorage.setItem(LOCAL_WISHLISTS_KEY, JSON.stringify(updated));
} catch (error) {
console.error('Failed to toggle local wishlist favorite:', error);
}
}