"use client"; import { useTranslations } from "next-intl"; import { useMemo, useState } from "react"; import { ItemCard } from "@/components/item-card"; import { MarketplaceFilters } from "@/components/marketplace-filters"; import { BlurFade } from "@/components/ui/blur-fade"; import { Skeleton } from "@/components/ui/skeleton"; import { featuredItems } from "@/lib/mock-data"; export function FeaturedItems() { const t = useTranslations("home.featured"); const [searchQuery, setSearchQuery] = useState(""); const [filters, setFilters] = useState<{ rarity: string[]; category: string[]; priceRange: { min: number; max: number }; }>({ rarity: [], category: [], priceRange: { min: 0, max: 100000 }, }); const [sortBy, setSortBy] = useState("name"); const [isLoading, _setIsLoading] = useState(false); // Filtrar e ordenar itens const filteredItems = useMemo(() => { let filtered = [...featuredItems]; // Filtro por busca if (searchQuery) { filtered = filtered.filter((item) => item.name.toLowerCase().includes(searchQuery.toLowerCase()), ); } // Filtro por raridade if (filters.rarity.length > 0) { filtered = filtered.filter((item) => filters.rarity.includes(item.rarity), ); } // Filtro por categoria if (filters.category.length > 0) { filtered = filtered.filter((item) => filters.category.includes(item.category), ); } // Filtro por faixa de preço filtered = filtered.filter( (item) => item.price.buy >= filters.priceRange.min && item.price.buy <= filters.priceRange.max, ); // Ordenação filtered.sort((a, b) => { switch (sortBy) { case "name": return a.name.localeCompare(b.name); case "price-asc": return a.price.buy - b.price.buy; case "price-desc": return b.price.buy - a.price.buy; case "rarity": { const rarityOrder = { common: 0, uncommon: 1, rare: 2, epic: 3, legendary: 4, }; return rarityOrder[a.rarity] - rarityOrder[b.rarity]; } case "trending": return b.priceHistory.highest - a.priceHistory.highest; case "recent": // Simular ordenação por data (mais recente primeiro) return Math.random() - 0.5; default: return 0; } }); return filtered; }, [searchQuery, filters, sortBy]); const handleSearch = (query: string) => { setSearchQuery(query); }; const handleFilter = (newFilters: any) => { setFilters(newFilters); }; const handleSort = (sortValue: string) => { setSortBy(sortValue); }; // Skeleton para loading const LoadingSkeleton = () => (
Descubra os melhores itens do servidor com preços atualizados em tempo real
Tente ajustar os filtros ou fazer uma nova busca