"use client"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { useClientContext } from "@app/hooks/useClientContext"; import { InfoSection, InfoSectionContent, InfoSections, InfoSectionTitle } from "@app/components/InfoSection"; import IdpTypeBadge from "@app/components/IdpTypeBadge"; import { getUserDisplayName } from "@app/lib/getUserDisplayName"; import { useTranslations } from "next-intl"; import { productUpdatesQueries, type LatestVersionResponse } from "@app/lib/queries"; import { useQuery } from "@tanstack/react-query"; import semver from "semver"; import { InfoPopup } from "@app/components/ui/info-popup"; type ClientInfoCardProps = {}; const agentVersionMap: Record = { "Pangolin Windows": "windows", "Pangolin Android": "android", "Pangolin iOS": "ios", "Pangolin iPadOS": "ios", "Pangolin macOS": "mac", "Pangolin CLI": "cli", "Olm CLI": "olm" }; export default function SiteInfoCard({}: ClientInfoCardProps) { const { client, updateClient } = useClientContext(); const t = useTranslations(); const userDisplayName = getUserDisplayName({ email: client.userEmail, name: client.userName, username: client.userUsername }); const data = useQuery(productUpdatesQueries.latestVersion(true)); const latestPlatformVersions = data.data?.data; let updateAvailable = false; if (client.agent && client.olmVersion && latestPlatformVersions) { const agent = agentVersionMap[ client.agent ] as keyof LatestVersionResponse; if (agent in latestPlatformVersions) { const agentVersion = latestPlatformVersions[agent]; updateAvailable = Boolean( semver.valid(client.olmVersion) && semver.lt(client.olmVersion, agentVersion.latestVersion) ); } } const cols = 2 + (userDisplayName ? 1 : 0) + (client.agent && client.olmVersion ? 1 : 0); return ( {t("name")} {client.name} {client.agent && client.olmVersion ? ( {t("agent")}
{client.agent + " v" + client.olmVersion} {updateAvailable && ( )}
) : null} {userDisplayName ? ( {t("user")}
{userDisplayName} {(client.userType ?? "internal") !== "internal" && ( )}
) : null} {t("status")} {client.online ? (
{t("connected")}
) : (
{t("disconnected")}
)}
); }