import { Server } from '@/types/server'; import { CheckIcon, CloudIcon, LoaderCircleIcon, MousePointerClickIcon, SlashIcon } from 'lucide-react'; import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'; import ServerActions from '@/pages/servers/components/actions'; import { cn } from '@/lib/utils'; import { Site } from '@/types/site'; import { StatusRipple } from '@/components/status-ripple'; import { Badge } from '@/components/ui/badge'; import { useForm } from '@inertiajs/react'; import { useState } from 'react'; export default function ServerHeader({ server, site }: { server: Server; site?: Site }) { const statusForm = useForm(); const checkStatus = () => { if (['installing', 'installation_failed'].includes(server.status)) { return; } statusForm.patch(route('servers.status', { server: server.id })); }; const [ipCopied, setIpCopied] = useState(false); const copyIp = (ip: string) => { navigator.clipboard.writeText(ip).then(() => { setIpCopied(true); setTimeout(() => { setIpCopied(false); }, 2000); }); }; return (
{server.provider}
{server.provider} Server Provider
{ipCopied ? ( ) : (
{statusForm.processing && } {!statusForm.processing && }
)}
{server.status}
copyIp(server.ip)}> {server.ip}
Server IP
{['installing', 'installation_failed'].includes(server.status) && ( <>
%{parseInt(server.progress || '0')}
{server.status === 'installation_failed' && ( {server.status} )}
Status
)} {site && ( <>
{site.domain}
{site.domain}
)} {site && ['installing', 'installation_failed'].includes(site.status) && ( <>
%{parseInt(site.progress.toString() || '0')}
{site.status === 'installation_failed' && ( {site.status} )}
Status
)}
); }