diff --git a/src/renderer/src/components/resources/proxy-provider.tsx b/src/renderer/src/components/resources/proxy-provider.tsx index 42cf3e4..69b113b 100644 --- a/src/renderer/src/components/resources/proxy-provider.tsx +++ b/src/renderer/src/components/resources/proxy-provider.tsx @@ -12,6 +12,7 @@ const ProxyProvider: React.FC = () => { const { data, mutate } = useSWR('mihomoProxyProviders', mihomoProxyProviders) const providers = useMemo(() => { if (!data) return [] + if (!data.providers) return [] return Object.keys(data.providers) .map((key) => data.providers[key]) .filter((provider) => { diff --git a/src/renderer/src/components/resources/rule-provider.tsx b/src/renderer/src/components/resources/rule-provider.tsx index 996bd3e..c6069fa 100644 --- a/src/renderer/src/components/resources/rule-provider.tsx +++ b/src/renderer/src/components/resources/rule-provider.tsx @@ -11,6 +11,7 @@ const RuleProvider: React.FC = () => { const { data, mutate } = useSWR('mihomoRuleProviders', mihomoRuleProviders) const providers = useMemo(() => { if (!data) return [] + if (!data.providers) return [] return Object.keys(data.providers).map((key) => data.providers[key]) }, [data]) const [updating, setUpdating] = useState(Array(providers.length).fill(false)) diff --git a/src/renderer/src/components/sider/proxy-card.tsx b/src/renderer/src/components/sider/proxy-card.tsx index 7423e7d..0c5caba 100644 --- a/src/renderer/src/components/sider/proxy-card.tsx +++ b/src/renderer/src/components/sider/proxy-card.tsx @@ -11,7 +11,7 @@ const ProxyCard: React.FC = () => { const navigate = useNavigate() const location = useLocation() const match = location.pathname.includes('/proxies') - const { data: proxies = { proxies: {} } } = useSWR('mihomoProxies', mihomoProxies) + const { data: proxies } = useSWR('mihomoProxies', mihomoProxies) const { attributes, listeners, @@ -24,6 +24,8 @@ const ProxyCard: React.FC = () => { }) const transform = tf ? { x: tf.x, y: tf.y, scaleX: 1, scaleY: 1 } : null const filtered = useMemo(() => { + if (!proxies) return [] + if (!proxies.proxies) return [] return Object.keys(proxies.proxies).filter((key) => 'all' in proxies.proxies[key]) }, [proxies]) diff --git a/src/renderer/src/pages/proxies.tsx b/src/renderer/src/pages/proxies.tsx index 6feb051..e9ed988 100644 --- a/src/renderer/src/pages/proxies.tsx +++ b/src/renderer/src/pages/proxies.tsx @@ -32,24 +32,24 @@ const Proxies: React.FC = () => { } = appConfig || {} const groups = useMemo(() => { + if (!proxies) return [] + if (!proxies.proxies) return [] const groups: IMihomoGroup[] = [] - if (proxies && proxies.proxies) { - runtime?.['proxy-groups']?.forEach((group: { name: string; url?: string }) => { - group = Object.assign(group, group['<<']) - const { name, url } = group - if ( - proxies.proxies[name] && - isGroup(proxies.proxies[name]) && - !proxies.proxies[name].hidden - ) { - const newGroup = proxies.proxies[name] - newGroup.testUrl = url - groups.push(newGroup as IMihomoGroup) - } - }) - if (!groups.find((group) => group.name === 'GLOBAL')) { - groups.push(proxies.proxies['GLOBAL'] as IMihomoGroup) + runtime?.['proxy-groups']?.forEach((group: { name: string; url?: string }) => { + group = Object.assign(group, group['<<']) + const { name, url } = group + if ( + proxies.proxies[name] && + isGroup(proxies.proxies[name]) && + !proxies.proxies[name].hidden + ) { + const newGroup = proxies.proxies[name] + newGroup.testUrl = url + groups.push(newGroup as IMihomoGroup) } + }) + if (!groups.find((group) => group.name === 'GLOBAL')) { + groups.push(proxies.proxies['GLOBAL'] as IMihomoGroup) } return groups }, [proxies, runtime]) diff --git a/src/renderer/src/pages/rules.tsx b/src/renderer/src/pages/rules.tsx index 52a4f62..52e17f0 100644 --- a/src/renderer/src/pages/rules.tsx +++ b/src/renderer/src/pages/rules.tsx @@ -7,12 +7,13 @@ import useSWR from 'swr' import { mihomoRules } from '@renderer/utils/ipc' const Rules: React.FC = () => { - const { data: rules = { rules: [] } } = useSWR('mihomoRules', mihomoRules, { + const { data: rules } = useSWR('mihomoRules', mihomoRules, { refreshInterval: 5000 }) const [filter, setFilter] = useState('') const filteredRules = useMemo(() => { + if (!rules) return [] if (filter === '') return rules.rules return rules.rules.filter((rule) => { return (