import { formatDistance, Locale } from 'date-fns'; import { enUS, zhCN, zhTW } from 'date-fns/locale'; import React from 'react'; import { ArrowDown, ArrowDownCircle, ArrowUp, X } from '~/components/shared/FeatherIcons'; import { useTranslation } from 'react-i18next'; import { FormattedConn } from '~/store/connections'; import prettyBytes from '../misc/pretty-bytes'; import s from './ConnectionCard.module.scss'; interface Props { conn: FormattedConn; onDisconnect: (id: string, e: React.MouseEvent) => void; onClick: () => void; } const ConnectionCard = React.memo(function ConnectionCard({ conn, onDisconnect, onClick }: Props) { const { i18n } = useTranslation(); let locale: Locale; if (i18n.language === 'zh-CN') { locale = zhCN; } else if (i18n.language === 'zh-TW') { locale = zhTW; } else { locale = enUS; } const timeAgo = formatDistance(conn.start, 0, { locale }); return (
{ if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onClick(); } }} >
{conn.host}
{timeAgo}
{conn.type.replace(/\((.*)\)/, ' | $1')}
{prettyBytes(conn.download)} {prettyBytes(conn.upload)}
{conn.rule} {conn.chains}
{prettyBytes(conn.downloadSpeedCurr)}/s
); }); export default ConnectionCard;