mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2026-04-13 08:00:30 +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 [trace, setTrace] = useState(true)
|
||||||
|
|
||||||
const virtuosoRef = useRef<VirtuosoHandle>(null)
|
const virtuosoRef = useRef<VirtuosoHandle>(null)
|
||||||
const traceRef = useRef(trace)
|
|
||||||
|
|
||||||
const filteredLogs = useMemo(() => {
|
const filteredLogs = useMemo(() => {
|
||||||
if (filter === '') return logs
|
if (filter === '') return logs
|
||||||
@ -59,29 +58,10 @@ const Logs: React.FC = () => {
|
|||||||
localStorage.setItem(LOGS_FILTER_KEY, filter)
|
localStorage.setItem(LOGS_FILTER_KEY, filter)
|
||||||
}, [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(() => {
|
useEffect(() => {
|
||||||
const old = cachedLogs.trigger
|
const old = cachedLogs.trigger
|
||||||
cachedLogs.trigger = (a): void => {
|
cachedLogs.trigger = (a): void => {
|
||||||
if (traceRef.current) {
|
setLogs([...a])
|
||||||
setLogs([...a])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return (): void => {
|
return (): void => {
|
||||||
cachedLogs.trigger = old
|
cachedLogs.trigger = old
|
||||||
@ -132,6 +112,8 @@ const Logs: React.FC = () => {
|
|||||||
<Virtuoso
|
<Virtuoso
|
||||||
ref={virtuosoRef}
|
ref={virtuosoRef}
|
||||||
data={filteredLogs}
|
data={filteredLogs}
|
||||||
|
initialTopMostItemIndex={filteredLogs.length - 1}
|
||||||
|
followOutput={trace}
|
||||||
itemContent={(i, log) => (
|
itemContent={(i, log) => (
|
||||||
<LogItem index={i} time={log.time} type={log.type} payload={log.payload} />
|
<LogItem index={i} time={log.time} type={log.type} payload={log.payload} />
|
||||||
)}
|
)}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user