'use client'; import { useCallback, useState } from 'react'; import { Server, ServiceStatus } from '@/lib/schemas/server'; import { User, hasPermission } from '@/lib/schemas/user'; import { ServerCard } from './ServerCard'; import { ServerRow } from './ServerRow'; import { CreateServerModal } from './CreateServerModal'; import RefreshButton from '@/components/ui/RefreshButton'; import { useSteamCMD } from '@/lib/context/SteamCMDContext'; import { GhButton } from '@/components/ui/GhButton'; import { Badge } from '@/components/ui/Badge'; interface ServerListWithActionsProps { servers: Server[]; user: User; } export function ServerListWithActions({ servers, user }: ServerListWithActionsProps) { const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); const { isSteamCMDRunning } = useSteamCMD(); const handleOnClose = useCallback(() => setIsCreateModalOpen(false), []); const canCreateServer = hasPermission(user, 'server.create'); const runningCount = servers.filter((s) => s.status === ServiceStatus.Running).length; const offlineCount = servers.filter((s) => s.status !== ServiceStatus.Running).length; return ( <> {/* Topbar */}
Servers {servers.length} total
{canCreateServer && ( setIsCreateModalOpen(true)} disabled={isSteamCMDRunning} title={isSteamCMDRunning ? 'Disabled while SteamCMD is running' : undefined} > + New Server )}
{/* Status summary bar */}
{runningCount > 0 && ● {runningCount} running} {offlineCount > 0 && {offlineCount} offline}
{/* Responsive server list */}
{/* Card grid — desktop only */}
{servers.map((server) => ( ))}
{/* Row list — mobile only */}
{servers.map((server) => ( ))}
); }