Skip to content

Commit 3cdc356

Browse files
committed
refactor(home): sync ChatSurfaceProvider callback refs in a layout effect
Mutating refs during render is unsound under concurrent rendering (render may run multiple times before commit); useLayoutEffect commits the latest callbacks before any user event can fire.
1 parent ae9d435 commit 3cdc356

1 file changed

Lines changed: 15 additions & 4 deletions

File tree

apps/sim/app/workspace/[workspaceId]/home/components/chat-surface-context/chat-surface-context.tsx

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

3-
import { createContext, type ReactNode, useCallback, useContext, useMemo, useRef } from 'react'
3+
import {
4+
createContext,
5+
type ReactNode,
6+
useCallback,
7+
useContext,
8+
useLayoutEffect,
9+
useMemo,
10+
useRef,
11+
} from 'react'
412
import type { MothershipResource } from '@/app/workspace/[workspaceId]/home/types'
513
import type { ChatContext } from '@/stores/panel'
614

@@ -55,11 +63,14 @@ export function ChatSurfaceProvider({
5563
children,
5664
}: ChatSurfaceProviderProps) {
5765
const onContextAddRef = useRef(onContextAdd)
58-
onContextAddRef.current = onContextAdd
5966
const onContextRemoveRef = useRef(onContextRemove)
60-
onContextRemoveRef.current = onContextRemove
6167
const onWorkspaceResourceSelectRef = useRef(onWorkspaceResourceSelect)
62-
onWorkspaceResourceSelectRef.current = onWorkspaceResourceSelect
68+
69+
useLayoutEffect(() => {
70+
onContextAddRef.current = onContextAdd
71+
onContextRemoveRef.current = onContextRemove
72+
onWorkspaceResourceSelectRef.current = onWorkspaceResourceSelect
73+
})
6374

6475
const stableOnContextAdd = useCallback((context: ChatContext) => {
6576
onContextAddRef.current?.(context)

0 commit comments

Comments
 (0)