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 [isMobile, setIsMobile] = useState(window.innerWidth <= 768); const ASSET_BASE_URL = "http://localhost:5003/static/"; useEffect(() => { const handleResize = () => setIsMobile(window.innerWidth <= 768); window.addEventListener("resize", handleResize); const itemsArray = Array.from(GameDataManager.items.keys()).map((id) => GameDataManager.getItem(id), ); setAllItems(itemsArray); setFilteredItems(itemsArray); return () => window.removeEventListener("resize", handleResize); }, []); 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)), ]; const renderInspector = () => (
{selectedItem.description}