import React, { useState, useEffect } from "react"; import GameDataManager from "../../../services/GameDataManager.js"; import "./styles/ItemListTab.css"; const ItemListTab = () => { const [allItems, setAllItems] = useState([]); const [filteredItems, setFilteredItems] = useState([]); const [searchQuery, setSearchQuery] = useState(""); const [selectedCategory, setSelectedCategory] = useState("all"); const [selectedItem, setSelectedItem] = useState(null); const ASSET_BASE_URL = "http://localhost:5003/static/"; useEffect(() => { const itemsArray = Array.from(GameDataManager.items.keys()).map((id) => GameDataManager.getItem(id), ); setAllItems(itemsArray); setFilteredItems(itemsArray); }, []); useEffect(() => { let result = allItems; if (selectedCategory !== "all") { result = result.filter( (item) => item.meta?.category === selectedCategory, ); } if (searchQuery) { const q = searchQuery.toLowerCase(); result = result.filter( (item) => item.displayName.toLowerCase().includes(q) || item.id.toLowerCase().includes(q), ); } setFilteredItems(result); }, [searchQuery, selectedCategory, allItems]); const getFullTextureUrl = (path) => { if (!path) return "/assets/no-image.png"; return path.startsWith("http") ? path : `${ASSET_BASE_URL}${path}`; }; const categories = [ "all", ...new Set(allItems.map((i) => i.meta?.category).filter(Boolean)), ]; return (
setSearchQuery(e.target.value)} />
{categories.map((cat) => ( ))}
{filteredItems.map((item) => (
setSelectedItem(item)} >
{item.displayName}
{item.id}
))} {filteredItems.length === 0 && (
NO_RECORDS_FOUND
)}
{selectedItem ? (
{selectedItem.id}

{selectedItem.displayName}

{selectedItem.meta?.rarity?.toUpperCase()}
DATA_DESCRIPTION

{selectedItem.description}

{selectedItem.stats && Object.keys(selectedItem.stats).length > 0 && (
PARAMETER_READOUT
{Object.entries(selectedItem.stats).map(([k, v]) => (
{GameDataManager.getStatName(k)} +{v}
))}
)}
OBJECT_METADATA
CATEGORY {selectedItem.meta?.category || "general"}
EQUIP_SLOT {selectedItem.meta?.equipmentSlot || "none"}
STACK_LIMIT {selectedItem.meta?.stackable ? "64" : "1"}
) : (

AWAITING_OBJECT_SELECTION...

)}
); }; export default ItemListTab;