import { useI18n } from '@solid-primitives/i18n' import { IconBrandSpeedtest, IconReload } from '@tabler/icons-solidjs' import { Show, createSignal, onMount } from 'solid-js' import Collapse from '~/components/Collpase' import ForTwoLine from '~/components/ForTwoLine' import ProxyCardGroups from '~/components/ProxyCardGroups' import ProxyNodePreview from '~/components/ProxyNodePreview' import SubscriptionInfo from '~/components/SubscriptionInfo' import { useProxies } from '~/signals/proxies' import type { Proxy } from '~/types' import { formatTimeFromNow } from '~/utils/proxies' export default () => { const [t] = useI18n() const { proxies, proxyProviders, updateProxy, setProxyGroupByProxyName, delayTestByProxyGroupName, updateProviderByProviderName, healthCheckByProviderName, } = useProxies() const [collapsedMap, setCollapsedMap] = createSignal>( {}, ) onMount(async () => { await updateProxy() }) const onProxyNodeClick = async (proxy: Proxy, proxyName: string) => { setProxyGroupByProxyName(proxy, proxyName) } const onSpeedTestClick = async (e: MouseEvent, name: string) => { const el = e.target as HTMLElement el.classList.add('animate-pulse') e.stopPropagation() await delayTestByProxyGroupName(name) el.classList.remove('animate-pulse') } const onHealthCheckClick = async (e: MouseEvent, name: string) => { const el = e.target as HTMLElement el.classList.add('animate-pulse') e.stopPropagation() await healthCheckByProviderName(name) el.classList.remove('animate-pulse') } const onUpdateProviderClick = async (e: MouseEvent, name: string) => { const el = e.target as HTMLElement el.classList.add('animate-spin') e.stopPropagation() await updateProviderByProviderName(name) el.classList.remove('animate-spin') } return (

{t('proxies')}

{ const title = ( <>
{proxy.name}
{proxy.type} :: {proxy.now}
) const content = ( { onProxyNodeClick(proxy, name) }} /> ) return ( setCollapsedMap({ ...collapsedMap(), [`group-${proxy.name}`]: val, }) } /> ) })} />
0}>

{t('proxyProviders')}

{ const title = ( <>
{proxyProvider.name}
{proxyProvider.vehicleType} :: Updated{' '} {formatTimeFromNow(proxyProvider.updatedAt)}
i.name) ?? [] } /> ) const content = ( i.name)} /> ) return ( setCollapsedMap({ ...collapsedMap(), [`provider-${proxyProvider.name}`]: val, }) } /> ) })} />
) }