import * as React from 'react'; import { Zap } from 'react-feather'; import { getCollapsibleIsOpen, getHideUnavailableProxies, getProxySortBy, } from '../../store/app'; import { getProxies, switchProxy } from '../../store/proxies'; import Button from '../Button'; import CollapsibleSectionHeader from '../CollapsibleSectionHeader'; import { connect, useStoreActions } from '../StateProvider'; import { useFilteredAndSorted } from './hooks'; import s0 from './ProxyGroup.module.scss'; import { ProxyList, ProxyListSummaryView } from './ProxyList'; const { createElement, useCallback, useMemo, useState } = React; function ZapWrapper() { return (
); } function ProxyGroupImpl({ name, all: allItems, delay, hideUnavailableProxies, proxySortBy, proxies, type, now, isOpen, apiConfig, dispatch, }) { const all = useFilteredAndSorted( allItems, delay, hideUnavailableProxies, proxySortBy, proxies ); const isSelectable = useMemo(() => type === 'Selector', [type]); const { app: { updateCollapsibleIsOpen }, proxies: { requestDelayForProxies }, } = useStoreActions(); const toggle = useCallback(() => { updateCollapsibleIsOpen('proxyGroup', name, !isOpen); }, [isOpen, updateCollapsibleIsOpen, name]); const itemOnTapCallback = useCallback( (proxyName) => { if (!isSelectable) return; dispatch(switchProxy(apiConfig, name, proxyName)); }, [apiConfig, dispatch, name, isSelectable] ); const [isTestingLatency, setIsTestingLatency] = useState(false); const testLatency = useCallback(async () => { setIsTestingLatency(true); try { await requestDelayForProxies(apiConfig, all); } catch (err) {} setIsTestingLatency(false); }, [all, apiConfig, requestDelayForProxies]); return (
{createElement(isOpen ? ProxyList : ProxyListSummaryView, { all, now, isSelectable, itemOnTapCallback, })}
); } export const ProxyGroup = connect((s, { name, delay }) => { const proxies = getProxies(s); const collapsibleIsOpen = getCollapsibleIsOpen(s); const proxySortBy = getProxySortBy(s); const hideUnavailableProxies = getHideUnavailableProxies(s); const group = proxies[name]; const { all, type, now } = group; return { all, delay, hideUnavailableProxies, proxySortBy, proxies, type, now, isOpen: collapsibleIsOpen[`proxyGroup:${name}`], }; })(ProxyGroupImpl);