mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2026-04-12 23:50:31 +08:00
fix: use Virtuoso followOutput and always update logs state
This commit is contained in:
parent
b9a7e04eee
commit
34fc4d2d96
@ -46,7 +46,6 @@ const Logs: React.FC = () => {
|
||||
const [trace, setTrace] = useState(true)
|
||||
|
||||
const virtuosoRef = useRef<VirtuosoHandle>(null)
|
||||
const traceRef = useRef(trace)
|
||||
|
||||
const filteredLogs = useMemo(() => {
|
||||
if (filter === '') return logs
|
||||
@ -59,29 +58,10 @@ const Logs: React.FC = () => {
|
||||
localStorage.setItem(LOGS_FILTER_KEY, filter)
|
||||
}, [filter])
|
||||
|
||||
useEffect(() => {
|
||||
traceRef.current = trace
|
||||
if (trace) {
|
||||
setLogs([...cachedLogs.log])
|
||||
}
|
||||
}, [trace])
|
||||
|
||||
useEffect(() => {
|
||||
if (!trace) return
|
||||
virtuosoRef.current?.scrollToIndex({
|
||||
index: filteredLogs.length - 1,
|
||||
behavior: 'smooth',
|
||||
align: 'end',
|
||||
offset: 0
|
||||
})
|
||||
}, [filteredLogs, trace])
|
||||
|
||||
useEffect(() => {
|
||||
const old = cachedLogs.trigger
|
||||
cachedLogs.trigger = (a): void => {
|
||||
if (traceRef.current) {
|
||||
setLogs([...a])
|
||||
}
|
||||
setLogs([...a])
|
||||
}
|
||||
return (): void => {
|
||||
cachedLogs.trigger = old
|
||||
@ -132,6 +112,8 @@ const Logs: React.FC = () => {
|
||||
<Virtuoso
|
||||
ref={virtuosoRef}
|
||||
data={filteredLogs}
|
||||
initialTopMostItemIndex={filteredLogs.length - 1}
|
||||
followOutput={trace}
|
||||
itemContent={(i, log) => (
|
||||
<LogItem index={i} time={log.time} type={log.type} payload={log.payload} />
|
||||
)}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user