Jofthomas's picture
Jofthomas HF staff
bulk
ce8b18b
raw
history blame
2.09 kB
/**
* v0 by Vercel.
* @see https://v0.dev/t/OH0xMc8eRYc
* Documentation: https://v0.dev/docs#integrating-generated-code-into-your-nextjs-app
*/
import Button from "./buttons/Button"
import Modal from 'react-modal';
import { GameId } from "../../convex/aiTown/ids"
import { Id } from "../../convex/_generated/dataModel"
import { ServerGame } from "@/hooks/serverGame"
import { useState } from "react"
import { VoteModal } from "./VoteModal";
import { useSendInput } from "../hooks/sendInput";
export default function LLMVote(
{
game,
engineId,
playerId,
}: {
engineId: Id<'engines'>,
game: ServerGame,
playerId: GameId<'players'>,
}
) {
const [isModalOpen, setIsModalOpen] = useState(false)
const [votes, setVotes] = useState<GameId<'players'>[]>([]);
const players = [...game.world.playersInit.values()].filter(
(player) => player.id !== playerId
)
const inputVote = useSendInput(engineId, "llmVote");
const totalLLMs = players.filter((player) => !player.human).length
return (
<>
<Button onClick={() => setIsModalOpen(true)} className="lg:block">
Choose LLM
</Button>
<Modal
isOpen={isModalOpen}
onRequestClose={() => setIsModalOpen(false)}
contentLabel="Choose LLM"
ariaHideApp={false}
className="mx-auto bg-brown-800 p-16 game-frame font-body max-w-[1000px]"
style={{
content: {
position: 'absolute',
top: '50%',
left: '30%',
transform: 'translate(-20%, -50%)',
},
}}
>
<h2 className="text-2xl font-bold text-center mb-8">Which players are LLMs ? (Choose up to {totalLLMs} players)</h2>
<div className="max-w-[600px] w-full mx-auto">
<VoteModal compact={false} votes={votes} players={players} onVote={(newVotes) => {
setVotes(newVotes)
inputVote({voter: playerId, votedPlayerIds: newVotes});
}} engineId={engineId} game={game} playerId={playerId} maxVotes={totalLLMs} />
</div>
</Modal>
</>
)
}