'use client' import { useEffect, useState } from 'react' import { useRouter } from 'next/navigation' import { useStore } from '@/lib/store' import { api } from '@/lib/api' import { CommandCenterLayout } from '@/components/CommandCenterLayout' import { Search, Filter, Clock, TrendingUp, Flame, Sparkles, ExternalLink, ChevronDown, Globe, Gavel, ArrowUpDown, } from 'lucide-react' import clsx from 'clsx' type ViewType = 'all' | 'ending' | 'hot' | 'opportunities' interface Auction { domain: string platform: string current_bid: number num_bids: number end_time: string time_remaining: string affiliate_url: string tld: string } export default function MarketPage() { const router = useRouter() const { subscription } = useStore() const [auctions, setAuctions] = useState([]) const [loading, setLoading] = useState(true) const [activeView, setActiveView] = useState('all') const [searchQuery, setSearchQuery] = useState('') const [platformFilter, setPlatformFilter] = useState('all') const [sortBy, setSortBy] = useState('end_time') useEffect(() => { loadAuctions() }, [activeView]) const loadAuctions = async () => { setLoading(true) try { let data switch (activeView) { case 'ending': data = await api.getEndingSoonAuctions(50) break case 'hot': data = await api.getHotAuctions(50) break case 'opportunities': const oppData = await api.getAuctionOpportunities() data = oppData.opportunities || [] break default: data = await api.getAuctions(undefined, undefined, undefined, undefined, undefined, false, sortBy, 50) } setAuctions(data) } catch (error) { console.error('Failed to load auctions:', error) setAuctions([]) } finally { setLoading(false) } } // Filter auctions const filteredAuctions = auctions.filter(auction => { if (searchQuery && !auction.domain.toLowerCase().includes(searchQuery.toLowerCase())) { return false } if (platformFilter !== 'all' && auction.platform !== platformFilter) { return false } return true }) const platforms = ['GoDaddy', 'Sedo', 'NameJet', 'DropCatch', 'ExpiredDomains'] const views = [ { id: 'all', label: 'All Auctions', icon: Gavel }, { id: 'ending', label: 'Ending Soon', icon: Clock }, { id: 'hot', label: 'Hot', icon: Flame }, { id: 'opportunities', label: 'Opportunities', icon: Sparkles }, ] return (
{/* View Tabs */}
{views.map((view) => ( ))}
{/* Filters */}
{/* Search */}
setSearchQuery(e.target.value)} placeholder="Search domains..." className="w-full h-10 pl-10 pr-4 bg-background-secondary border border-border rounded-lg text-sm text-foreground placeholder:text-foreground-subtle focus:outline-none focus:border-accent" />
{/* Platform Filter */}
{/* Sort */}
{/* Stats Bar */}
{filteredAuctions.length} auctions {platforms.length} platforms
{/* Auction List */} {loading ? (
{[...Array(5)].map((_, i) => (
))}
) : filteredAuctions.length === 0 ? (

No auctions found

Try adjusting your filters

) : (
{filteredAuctions.map((auction, idx) => (
{/* Domain Info */}

{auction.domain}

{auction.platform}
{auction.time_remaining} {auction.num_bids} bids
{/* Price + Action */}

${auction.current_bid.toLocaleString()}

Current bid

Bid
))}
)}
) }