refactor: knip cleanup (#7468)

* chore(frontend): expand Knip reports

* chore: remove unused Mihomo changelog sync script

* refactor: remove unused value exports

* refactor: remove unused type exports

* refactor: remove circular route dependencies

* chore(frontend): move Knip scope to config

* chore(i18n): remove stale portable update message
This commit is contained in:
Tunglies
2026-07-13 11:29:25 +08:00
committed by GitHub
parent 6f9fb97b31
commit 7ca20fc4ed
44 changed files with 266 additions and 602 deletions
-86
View File
@@ -1,6 +1,3 @@
import { useEffect, useMemo, useReducer, useRef } from 'react'
import { useVerge } from '@/hooks/use-verge'
import delayManager from '@/services/delay'
import { compileStringMatcher } from '@/utils/search-matcher'
@@ -13,89 +10,6 @@ export type ProxySearchState = {
useRegularExpression?: boolean
}
export default function useFilterSort(
proxies: IProxyItem[],
groupName: string,
filterText: string,
sortType: ProxySortType,
searchState?: ProxySearchState,
) {
const { verge } = useVerge()
const [_, bumpRefresh] = useReducer((count: number) => count + 1, 0)
const lastInputRef = useRef<{ text: string; sort: ProxySortType } | null>(
null,
)
const debounceTimerRef = useRef<number | null>(null)
useEffect(() => {
let last = 0
delayManager.setGroupListener(groupName, () => {
// 简单节流
const now = Date.now()
if (now - last > 666) {
last = now
bumpRefresh()
}
})
return () => {
delayManager.removeGroupListener(groupName)
}
}, [groupName])
const compute = useMemo(() => {
const fp = filterProxies(proxies, groupName, filterText, searchState)
const sp = sortProxies(
fp,
groupName,
sortType,
verge?.default_latency_timeout,
)
return sp
}, [
proxies,
groupName,
filterText,
sortType,
searchState,
verge?.default_latency_timeout,
])
const [result, setResult] = useReducer(
(_prev: IProxyItem[], next: IProxyItem[]) => next,
compute,
)
useEffect(() => {
if (debounceTimerRef.current !== null) {
window.clearTimeout(debounceTimerRef.current)
debounceTimerRef.current = null
}
const prev = lastInputRef.current
const stableInputs =
prev && prev.text === filterText && prev.sort === sortType
lastInputRef.current = { text: filterText, sort: sortType }
const delay = stableInputs ? 0 : 150
debounceTimerRef.current = window.setTimeout(() => {
setResult(compute)
debounceTimerRef.current = null
}, delay)
return () => {
if (debounceTimerRef.current !== null) {
window.clearTimeout(debounceTimerRef.current)
debounceTimerRef.current = null
}
}
}, [compute, filterText, sortType])
return result
}
export function filterSort(
proxies: IProxyItem[],
groupName: string,