'use client' import { useState, useEffect, useRef } from 'react' import { useWishlist } from '@/hooks/useWishlist' import { useTranslations } from 'next-intl' 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' import { openWindow } from '@/lib/utils' import { toast } from '@/hooks/use-toast' export default function WishlistManager() { const t = useTranslations('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) if (item.link) { setTimeout(() => { const opened = openWindow(item.link!) if (!opened) { toast({ title: t('popupBlockedTitle'), description: t('popupBlockedDescription'), variant: "destructive" }) } }, 300) } } } return (

{t('title')}

{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 && ( <>
{t('archivedSectionTitle')}
{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={t('deleteDialogTitle')} message={t('deleteDialogMessage')} confirmText={t('deleteButton')} />
) }