fix(logs): sync refetch refs during render, fix handleToggleLive stale read, short-circuit memo comparator

This commit is contained in:
waleed
2026-02-14 13:18:23 -08:00
parent 11b46bff62
commit 9f98f59cc7
2 changed files with 18 additions and 26 deletions

View File

@@ -234,7 +234,8 @@ const WorkflowOutputSection = memo(
</div>
)
},
(prev, next) => JSON.stringify(prev.output) === JSON.stringify(next.output)
(prev, next) =>
prev.output === next.output || JSON.stringify(prev.output) === JSON.stringify(next.output)
)
interface LogDetailsProps {

View File

@@ -230,12 +230,8 @@ export default function Logs() {
useEffect(() => {
selectedLogIdRef.current = selectedLogId
}, [selectedLogId])
useEffect(() => {
logsRefetchRef.current = logsQuery.refetch
}, [logsQuery.refetch])
useEffect(() => {
activeLogRefetchRef.current = activeLogQuery.refetch
}, [activeLogQuery.refetch])
logsRefetchRef.current = logsQuery.refetch
activeLogRefetchRef.current = activeLogQuery.refetch
logsQueryRef.current = {
isFetching: logsQuery.isFetching,
hasNextPage: logsQuery.hasNextPage ?? false,
@@ -358,27 +354,22 @@ export default function Logs() {
}
}, [])
const isLiveRef = useRef(isLive)
useEffect(() => {
isLiveRef.current = isLive
}, [isLive])
const handleToggleLive = useCallback(() => {
const wasLive = isLiveRef.current
setIsLive((prev) => !prev)
if (!wasLive) {
setIsVisuallyRefreshing(true)
const timerId = window.setTimeout(() => {
setIsVisuallyRefreshing(false)
refreshTimersRef.current.delete(timerId)
}, REFRESH_SPINNER_DURATION_MS)
refreshTimersRef.current.add(timerId)
logsRefetchRef.current()
if (selectedLogIdRef.current) {
activeLogRefetchRef.current()
setIsLive((prev) => {
if (!prev) {
setIsVisuallyRefreshing(true)
const timerId = window.setTimeout(() => {
setIsVisuallyRefreshing(false)
refreshTimersRef.current.delete(timerId)
}, REFRESH_SPINNER_DURATION_MS)
refreshTimersRef.current.add(timerId)
logsRefetchRef.current()
if (selectedLogIdRef.current) {
activeLogRefetchRef.current()
}
}
}
return !prev
})
}, [])
const prevIsFetchingRef = useRef(logsQuery.isFetching)