import { MOD_ENDPOINT } from "@/api/ENDPOINTS"; import { Mod } from "@/types/mod"; import { Button, Checkbox, Table, TableBody, TableCell, TableHead, TableHeadCell, TableRow, } from "flowbite-react"; import { useState } from "react"; import { HiDownload, HiTrash } from "react-icons/hi"; import { toast } from "react-toastify"; export const ModTable = (props: { mods: Mod[]; updatePack: () => void; packID: string; }) => { const [selectedMods, setSelectedMods] = useState([]); async function deleteMod(slug: string, title: string) { if (!window) return; if (window.confirm(`Delete mod ${title}?`)) { const res = await fetch(MOD_ENDPOINT("deleteMod", props.packID, slug)); const data = await res.json(); if (data.status != "ok") { toast.error(data.message, { autoClose: 2500, closeOnClick: true, draggable: true, }); return; } props.updatePack(); } } function selectAll() { const deselect = selectedMods.length == props.mods.length; console.log(selectedMods.length, props.mods.length, deselect); if (deselect) { setSelectedMods([]); return; } props.mods.forEach((item) => { if (!selectedMods.includes(item.slug)) { setSelectedMods((state) => [item.slug, ...state]); } }); } function handleCheckbox(slug: string) { if (!selectedMods.includes(slug)) { setSelectedMods((state) => [slug, ...state]); } else { const newArray = selectedMods.map((i) => i); const idx = newArray.findIndex((item) => item == slug); newArray.splice(idx, 1); setSelectedMods(newArray); } } async function deleteSelectedMods() { await fetch(MOD_ENDPOINT("deleteModBulk", props.packID), { method: "POST", body: JSON.stringify(selectedMods), headers: { "content-type": "application/json", accept: "application/json", }, }); setSelectedMods([]); props.updatePack(); } return (
selectAll()} /> Icon Title Version Developer Source Source URL Actions {props.mods && props.mods.length > 0 && props.mods.map((mod) => { return ( { handleCheckbox(mod.slug); }} /> {/* eslint-disable-next-line @next/next/no-img-element */} {mod.title} {mod.file.version} {mod.developers.join(", ")} {mod.source} {mod.url}
); })}
); };