import { Popover } from '@headlessui/react' import { ActionIcon, ActionIconProps } from './ActionIcon' import Tooltip from './Tooltip' import { ConnectingTypeGroup } from '../lang/std/engineConnection' import { useNetworkContext } from '../hooks/useNetworkContext' import { NetworkHealthState } from '../hooks/useNetworkStatus' export const NETWORK_HEALTH_TEXT: Record = { [NetworkHealthState.Ok]: 'Connected', [NetworkHealthState.Weak]: 'Weak', [NetworkHealthState.Issue]: 'Problem', [NetworkHealthState.Disconnected]: 'Offline', } type IconColorConfig = { icon: string bg: string } const hasIssueToIcon: Record< string | number | symbol, ActionIconProps['icon'] > = { true: 'close', undefined: 'horizontalDash', false: 'checkmark', } const hasIssueToIconColors: Record = { true: { icon: 'text-destroy-80 dark:text-destroy-10', bg: 'bg-destroy-10 dark:bg-destroy-80', }, undefined: { icon: 'text-chalkboard-70 dark:text-chalkboard-30', bg: 'bg-chalkboard-30 dark:bg-chalkboard-70', }, false: { icon: '!text-chalkboard-110 dark:!text-chalkboard-10', bg: 'bg-transparent dark:bg-transparent', }, } const overallConnectionStateColor: Record = { [NetworkHealthState.Ok]: { icon: 'text-succeed-80 dark:text-succeed-10', bg: 'bg-succeed-10/30 dark:bg-succeed-80/50', }, [NetworkHealthState.Weak]: { icon: 'text-warn-80 dark:text-warn-10', bg: 'bg-warn-10 dark:bg-warn-80/80', }, [NetworkHealthState.Issue]: { icon: 'text-destroy-80 dark:text-destroy-10', bg: 'bg-destroy-10 dark:bg-destroy-80/80', }, [NetworkHealthState.Disconnected]: { icon: 'text-destroy-80 dark:text-destroy-10', bg: 'bg-destroy-10 dark:bg-destroy-80', }, } const overallConnectionStateIcon: Record< NetworkHealthState, ActionIconProps['icon'] > = { [NetworkHealthState.Ok]: 'network', [NetworkHealthState.Weak]: 'network', [NetworkHealthState.Issue]: 'networkCrossedOut', [NetworkHealthState.Disconnected]: 'networkCrossedOut', } export const NetworkHealthIndicator = () => { const { hasIssues, overallState, internetConnected, steps, issues, error, setHasCopied, hasCopied, } = useNetworkContext() return ( Network health ({NETWORK_HEALTH_TEXT[overallState]})

Network health

{NETWORK_HEALTH_TEXT[overallState]}

    {Object.keys(steps).map((name) => (
  • {name}

    {internetConnected ? ( ) : ( )}
    {issues[name as ConnectingTypeGroup] && ( )}
  • ))}
) }