import { Tooltip } from '@reach/tooltip'; import cx from 'clsx'; import * as React from 'react'; import { useTranslation } from 'react-i18next'; import Button from '~/components/Button'; import ContentHeader from '~/components/ContentHeader'; import { ClosePrevConns } from '~/components/proxies/ClosePrevConns'; import { ProxyGroup } from '~/components/proxies/ProxyGroup'; import { ProxyPageFab } from '~/components/proxies/ProxyPageFab'; import { ProxyProvider } from '~/components/proxies/ProxyProvider'; import Settings from '~/components/proxies/Settings'; import BaseModal from '~/components/shared/BaseModal'; import { TextFilter } from '~/components/shared/TextFitler'; import { useStoreActions } from '~/components/StateProvider'; import Equalizer from '~/components/svg/Equalizer'; import { useProxiesPage } from '~/modules/proxies/hooks'; import { formatQty } from '~/modules/proxies/utils'; import { proxyFilterText } from '~/store/proxies'; import { DelayMapping, DispatchFn, FormattedProxyProvider, ProxiesMapping } from '~/store/types'; import { ClashAPIConfig } from '~/types'; import s0 from './Proxies.module.scss'; type AppConfig = { proxySortBy: string; hideUnavailableProxies: boolean; autoCloseOldConns: boolean; proxiesLayout: string; proxyGroupByProvider: boolean; latencyTestUrl: string; latencyTestTimeout: number; }; type Props = { dispatch: DispatchFn; groupNames: string[]; proxies: ProxiesMapping; delay: DelayMapping; collapsibleIsOpen: Record; proxyProviders: FormattedProxyProvider[]; apiConfig: ClashAPIConfig; showModalClosePrevConns: boolean; appConfig: AppConfig; }; export default function Proxies({ dispatch, groupNames, proxies, delay, collapsibleIsOpen, proxyProviders, apiConfig, showModalClosePrevConns, appConfig, }: Props) { const { latencyTestUrl, latencyTestTimeout } = appConfig; const { isSettingsModalOpen, openSettingsModal, closeSettingsModal, activeTab, setActiveTab, handleTabKeyDown, proxyGroups, providers, } = useProxiesPage({ dispatch, apiConfig, groupNames, proxyProviders, proxiesLayout: appConfig.proxiesLayout, }); const { proxies: { closeModalClosePrevConns, closePrevConnsAndTheModal }, } = useStoreActions(); const { t } = useTranslation(); const content = activeTab === 'proxies' ? (
{proxyGroups.map((column, i) => (
{column.map(({ name, i: originalIndex }) => (
))}
))}
) : (
{providers.map((column, i) => (
{column.map(({ item, i: originalIndex }) => (
))}
))}
); return ( <>
setActiveTab('proxies')} onKeyDown={handleTabKeyDown('proxies')} role="button" tabIndex={0} > {t('Proxies')} {formatQty(groupNames.length)}
{proxyProviders.length > 0 && (
setActiveTab('providers')} onKeyDown={handleTabKeyDown('providers')} role="button" tabIndex={0} > {t('proxy_provider')} {formatQty(proxyProviders.length)}
)}
{content}
closePrevConnsAndTheModal(apiConfig)} onClickSecondaryButton={closeModalClosePrevConns} /> ); }