import { motion } from "framer-motion"; import { useState } from "react"; import { BsmButton } from "renderer/components/shared/bsm-button.component"; import { BsmDropdownButton } from "renderer/components/shared/bsm-dropdown-button.component"; import { useTranslation } from "renderer/hooks/use-translation.hook"; import { Mod } from "shared/models/mods/mod.interface"; import { ModItem } from "./mod-item.component"; type Props = { modsMap: Map; installed: Map; modsSelected: Mod[]; onModChange: (selected: boolean, mod: Mod) => void; moreInfoMod?: Mod; onWantInfos: (mod: Mod) => void disabled?: boolean; uninstallMod?: (mods: Mod) => void; uninstallAllMods?: () => void; }; export function ModsGrid({ modsMap, installed, modsSelected, onModChange, moreInfoMod, onWantInfos, disabled, uninstallMod, uninstallAllMods }: Props) { const [filter, setFilter] = useState(""); const [filterEnabled, setFilterEnabled] = useState(false); const t = useTranslation(); const installedModVersion = (key: string, mod: Mod): string => { if (!installed?.get(key)) { return undefined; } const installedMod = installed.get(key).find(m => m.name === mod.name); if (!installedMod) { return undefined; } return installedMod.version; }; const isDependency = (mod: Mod): boolean => { return modsSelected.some(m => { const deps = m.dependencies?.map(dep => Array.from(modsMap.values()).flat().find(m => dep.name === m.name)) ?? []; if (deps.some(depMod => depMod.name === mod.name)) { return true; } return deps.some(depMod => depMod.dependencies?.some(depModDep => depModDep.name === mod.name)); }); }; const isSelected = (mod: Mod): boolean => modsSelected.some(m => m.name === mod.name); const handleInput = (val: string) => setFilter(val.toLowerCase()); const handleToogleFilter = () => { setFilter(""); setFilterEnabled(b => !b); }; return ( modsMap && (
{filterEnabled ? handleInput(e.target.value)} /> : {t("pages.version-viewer.mods.mods-grid.header-bar.name")}} {t("pages.version-viewer.mods.mods-grid.header-bar.installed")} {t("pages.version-viewer.mods.mods-grid.header-bar.latest")} {t("pages.version-viewer.mods.mods-grid.header-bar.description")} uninstallAllMods?.() }]} /> {Array.from(modsMap.keys()).map( key => modsMap.get(key).some(mod => mod.name.toLowerCase().includes(filter)) && (

    {key}

    {modsMap.get(key).map(mod => mod.name?.toLowerCase().includes(filter) && ( onModChange(val, mod)} onWantInfo={onWantInfos} wantInfo={mod.name === moreInfoMod?.name} disabled={disabled} onUninstall={() => uninstallMod?.(mod)} /> ))}
) )}
) ); }