'use client'; import Link from 'next/link'; import { Server, getStatusColor, serviceStatusToString, ServiceStatus } from '@/lib/schemas/server'; import { startServerEventAction, restartServerEventAction, stopServerEventAction } from '@/lib/actions/servers'; import { hasPermission, User } from '@/lib/schemas'; import { useState, useTransition } from 'react'; import { useRouter } from 'next/navigation'; import { DeleteServerModal } from './DeleteServerModal'; interface ServerHeaderProps { server: Server; user: User; } export function ServerHeader({ server, user }: ServerHeaderProps) { const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [isPending, startTransition] = useTransition(); const router = useRouter(); const canDeleteServer = hasPermission(user, 'server.delete'); 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 disabled = [ ServiceStatus.Restarting, ServiceStatus.Starting, ServiceStatus.Stopping, ServiceStatus.Unknown ].includes(server.status); return (
Back to Dashboard

{server.name}

{serviceStatusToString(server.status)}
{canDeleteServer && ( )}
Current Track
{server.state?.track || 'N/A'}
Players
{server.state?.playerCount || 0} / {server.state?.maxConnections || 0}
Session
{server.state?.session || 'N/A'}
Max Connections
{server.state?.maxConnections || 0}
setIsDeleteModalOpen(false)} server={server} />
); }