'use client' import { useState, useEffect, useRef } from 'react' import { useWishlist } from '@/hooks/useWishlist' import { Plus, Gift } from 'lucide-react' import EmptyState from './EmptyState' import { Button } from '@/components/ui/button' import WishlistItem from './WishlistItem' import AddEditWishlistItemModal from './AddEditWishlistItemModal' import ConfirmDialog from './ConfirmDialog' import { WishlistItemType } from '@/lib/types' export default function WishlistManager() { const { addWishlistItem, editWishlistItem, deleteWishlistItem, redeemWishlistItem, archiveWishlistItem, unarchiveWishlistItem, canRedeem, wishlistItems } = useWishlist() const activeItems = wishlistItems.filter(item => !item.archived) const archivedItems = wishlistItems.filter(item => item.archived) const [highlightedItemId, setHighlightedItemId] = useState(null) const [recentlyRedeemedId, setRecentlyRedeemedId] = useState(null) const [isModalOpen, setIsModalOpen] = useState(false) const [editingItem, setEditingItem] = useState(null) const [deleteConfirmation, setDeleteConfirmation] = useState<{ isOpen: boolean, itemId: string | null }>({ isOpen: false, itemId: null }) const itemRefs = useRef>({}) useEffect(() => { // Check URL for highlight parameter const params = new URLSearchParams(window.location.search) const highlightId = params.get('highlight') if (highlightId) { setHighlightedItemId(highlightId) // Scroll the element into view after a short delay to ensure rendering setTimeout(() => { const element = itemRefs.current[highlightId] if (element) { element.scrollIntoView({ behavior: 'smooth', block: 'center' }) } }, 100) // Remove highlight after animation setTimeout(() => setHighlightedItemId(null), 2000) } }, []) const handleRedeem = async (item: WishlistItemType) => { const success = await redeemWishlistItem(item) if (success) { setRecentlyRedeemedId(item.id) setTimeout(() => { setRecentlyRedeemedId(null) }, 3000) } } return (

My Wishlist

{activeItems.length === 0 ? (
) : ( activeItems.map((item) => (
{ if (el) { itemRefs.current[item.id] = el } }} > { setEditingItem(item) setIsModalOpen(true) }} onDelete={() => setDeleteConfirmation({ isOpen: true, itemId: item.id })} onRedeem={() => handleRedeem(item)} onArchive={() => archiveWishlistItem(item.id)} onUnarchive={() => unarchiveWishlistItem(item.id)} canRedeem={canRedeem(item.coinCost)} />
)) )} {archivedItems.length > 0 && ( <>
Archived
{archivedItems.map((item) => ( { setEditingItem(item) setIsModalOpen(true) }} onDelete={() => setDeleteConfirmation({ isOpen: true, itemId: item.id })} onRedeem={() => handleRedeem(item)} onArchive={() => archiveWishlistItem(item.id)} onUnarchive={() => unarchiveWishlistItem(item.id)} canRedeem={canRedeem(item.coinCost)} /> ))} )}
setDeleteConfirmation({ isOpen: false, itemId: null })} onConfirm={() => { if (deleteConfirmation.itemId) { deleteWishlistItem(deleteConfirmation.itemId) } setDeleteConfirmation({ isOpen: false, itemId: null }) }} title="Delete Reward" message="Are you sure you want to delete this reward? This action cannot be undone." confirmText="Delete" />
) }