import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { modlistsApi } from '../api/client' import { Link, useNavigate } from 'react-router-dom' import { useRef, useState } from 'react' export default function Modlists() { const qc = useQueryClient() const navigate = useNavigate() const fileRef = useRef(null) const { data: modlists, isLoading } = useQuery({ queryKey: ['modlists'], queryFn: modlistsApi.list }) const [showCreate, setShowCreate] = useState(false) const [name, setName] = useState('') const createMut = useMutation({ mutationFn: () => modlistsApi.create(name), onSuccess: (res) => { qc.invalidateQueries({ queryKey: ['modlists'] }); setShowCreate(false); setName(''); navigate(`/modlists/${res.id}`) }, }) const deleteMut = useMutation({ mutationFn: (id: string) => modlistsApi.delete(id), onSuccess: () => qc.invalidateQueries({ queryKey: ['modlists'] }), }) const duplicateMut = useMutation({ mutationFn: (id: string) => { const orig = modlists?.find(m => m.id === id) return modlistsApi.duplicate(id, `${orig?.name ?? 'copy'} (copy)`) }, onSuccess: () => qc.invalidateQueries({ queryKey: ['modlists'] }), }) const importMut = useMutation({ mutationFn: (file: File) => modlistsApi.importHtml(file), onSuccess: (res) => { qc.invalidateQueries({ queryKey: ['modlists'] }); navigate(`/modlists/${res.id}`) }, }) const handleImport = (e: React.ChangeEvent) => { const file = e.target.files?.[0] if (file) importMut.mutate(file) e.target.value = '' } return (

Modlists

{showCreate && (
setName(e.target.value)} placeholder="Modlist name" className="bg-neutral-800 border border-neutral-700 rounded px-3 py-2 text-sm flex-1" />
)} {isLoading &&

Loading...

}
{modlists?.map(m => (
{m.name} {m.mod_count} mods
))} {modlists?.length === 0 &&

No modlists yet.

}
) }