import React, { useState, useEffect } from "react"; import GameDataManager from "../../../services/GameDataManager"; import MeteorRegion from "../../../components/Meteor/MeteorRegion.jsx"; import { config } from "../../../config/api"; import DatapackDetailsModal from "./components/DatapackDetailsModal"; import "./styles/DatapackTab.css"; const DatapackTab = () => { const [activeSection, setActiveSection] = useState("items"); const [searchQuery, setSearchQuery] = useState(""); const [displayList, setDisplayList] = useState([]); const [selectedItem, setSelectedItem] = useState(null); const sections = [ { id: "items", label: "Items", icon: "fa-box" }, { id: "hostiles", label: "Hostiles", icon: "fa-biohazard" }, { id: "dungeons", label: "Dungeons", icon: "fa-dungeon" }, { id: "recipes", label: "Recipes", icon: "fa-scroll" }, ]; useEffect(() => { let data = []; switch (activeSection) { case "items": data = Array.from(GameDataManager.items.values()).map((i) => GameDataManager.getItem(i.id), ); break; case "hostiles": data = Array.from(GameDataManager.hostiles.values()).map((h) => GameDataManager.getHostile(h.id), ); break; case "dungeons": data = Array.from(GameDataManager.dungeons.values()).map((d) => GameDataManager.getDungeon(d.id), ); break; case "recipes": data = Array.from(GameDataManager.recipes.values()).map((r) => GameDataManager.getRecipe(r.id), ); break; default: data = []; } if (searchQuery) { const query = searchQuery.toLowerCase(); data = data.filter( (item) => item.displayName?.toLowerCase().includes(query) || item.id?.toLowerCase().includes(query), ); } setDisplayList(data); }, [activeSection, searchQuery]); return (
{sections.map((s) => ( ))}
setSearchQuery(e.target.value)} />
{displayList.map((item) => (
setSelectedItem({ ...item, sectionType: activeSection }) } >
{item.texture ? ( ) : (
{item.displayName?.[0] || "?"}
)}
{item.displayName} {item.id} {activeSection === "hostiles" && item.loot && item.loot.length > 0 && (
{item.loot.map((lootEntry, idx) => { const lootData = GameDataManager.getItem( lootEntry.id, ); return (
{lootData?.displayName || lootEntry.id.split(":").pop()}
); })}
)}
))}
{selectedItem && ( setSelectedItem(null)} /> )}
); }; export default DatapackTab;