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);