'use client'; import { useTransition } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { Server, ServiceStatus } from '@/lib/schemas'; import { startServerEventAction, restartServerEventAction, stopServerEventAction } from '@/lib/actions/servers'; import { StatusDot } from '@/components/ui/StatusDot'; import { Button } from '@/components/ui/Button'; interface ServerRowProps { server: Server; } export function ServerRow({ server }: ServerRowProps) { const [isPending, startTransition] = useTransition(); const router = useRouter(); const startServer = () => startTransition(async () => { await startServerEventAction(server.id); router.refresh(); }); const restartServer = () => startTransition(async () => { await restartServerEventAction(server.id); router.refresh(); }); const stopServer = () => startTransition(async () => { await stopServerEventAction(server.id); router.refresh(); }); const transitioning = [ ServiceStatus.Restarting, ServiceStatus.Starting, ServiceStatus.Stopping, ServiceStatus.Unknown, ].includes(server.status); const disabled = transitioning || isPending; return (
{server.name}
{server.state?.track ?? 'No track'} ยท {server.state?.playerCount ?? 0} players
{server.status === ServiceStatus.Stopped ? ( ) : ( <> )}
); }