Skip to content

Commit c19b4e8

Browse files
committed
fix(logs): restore useEffect for async setActiveWorkflow and useMemo on rowProps
- resource-content.tsx: revert render-time setActiveWorkflow call to useEffect; the store action is async and performs network ops, calling it during render violates React purity - logs-list.tsx: restore useMemo on rowProps to prevent virtualized list rows from re-rendering on every parent render
1 parent 173ff66 commit c19b4e8

2 files changed

Lines changed: 27 additions & 20 deletions

File tree

apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-content/resource-content.tsx

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client'
22

3-
import { lazy, memo, Suspense, useMemo, useRef, useState } from 'react'
3+
import { lazy, memo, Suspense, useEffect, useMemo, useState } from 'react'
44
import { createLogger } from '@sim/logger'
55
import { formatDuration } from '@sim/utils/formatting'
66
import { Square } from 'lucide-react'
@@ -248,14 +248,9 @@ export function EmbeddedWorkflowActions({ workspaceId, workflowId }: EmbeddedWor
248248
)
249249
const { usageExceeded } = useUsageLimits()
250250

251-
// Keep the active workflow in the registry up-to-date whenever the embedded
252-
// workflow changes. This is safe during render because the store setter does
253-
// not trigger a synchronous re-render of this component.
254-
const prevWorkflowIdRef = useRef<string | undefined>(undefined)
255-
if (prevWorkflowIdRef.current !== workflowId) {
256-
prevWorkflowIdRef.current = workflowId
257-
setActiveWorkflow(workflowId)
258-
}
251+
useEffect(() => {
252+
void setActiveWorkflow(workflowId)
253+
}, [workflowId, setActiveWorkflow])
259254

260255
const isRunButtonDisabled =
261256
!isExecuting && !effectivePermissions.canRead && !effectivePermissions.isLoading

apps/sim/app/workspace/[workspaceId]/logs/components/logs-list/logs-list.tsx

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client'
22

3-
import { memo, useCallback, useEffect, useRef, useState } from 'react'
3+
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
44
import { formatDuration } from '@sim/utils/formatting'
55
import { ArrowUpRight, Loader2 } from 'lucide-react'
66
import Link from 'next/link'
@@ -288,16 +288,28 @@ export function LogsList({
288288

289289
const itemCount = hasNextPage ? logs.length + 1 : logs.length
290290

291-
const rowProps: RowProps = {
292-
logs,
293-
selectedLogId,
294-
onLogClick,
295-
onLogHover,
296-
onLogContextMenu,
297-
selectedRowRef,
298-
isFetchingNextPage,
299-
loaderRef,
300-
}
291+
const rowProps = useMemo<RowProps>(
292+
() => ({
293+
logs,
294+
selectedLogId,
295+
onLogClick,
296+
onLogHover,
297+
onLogContextMenu,
298+
selectedRowRef,
299+
isFetchingNextPage,
300+
loaderRef,
301+
}),
302+
[
303+
logs,
304+
selectedLogId,
305+
onLogClick,
306+
onLogHover,
307+
onLogContextMenu,
308+
selectedRowRef,
309+
isFetchingNextPage,
310+
loaderRef,
311+
]
312+
)
301313

302314
return (
303315
<div ref={containerRef} className='h-full w-full'>

0 commit comments

Comments
 (0)