104 lines
2.5 KiB
TypeScript
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);
|
|
}
|
|
}
|