From 7e7420bd1dd9009c98a3ff6e55a85e8c811e5fc9 Mon Sep 17 00:00:00 2001 From: Mathias Jakobsen Date: Mon, 20 Oct 2025 09:14:53 +0100 Subject: [PATCH] Merge pull request #29196 from overleaf/mj-fix-collaborator-index [web] Correctly re-index when collaborator changes bib file GitOrigin-RevId: 21d5416d54c6b89c434bf9c994c6e8d57a5a92e4 --- .../ide-react/context/references-context.tsx | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/services/web/frontend/js/features/ide-react/context/references-context.tsx b/services/web/frontend/js/features/ide-react/context/references-context.tsx index a651d9aa16..d36a272904 100644 --- a/services/web/frontend/js/features/ide-react/context/references-context.tsx +++ b/services/web/frontend/js/features/ide-react/context/references-context.tsx @@ -188,13 +188,13 @@ export const ReferencesProvider: FC = ({ doneInitialIndex.current = true indexAllReferences(false) } - }, [projectJoined, indexAllReferences]) - useEffect(() => { - const handleProjectJoined = () => { - // We only need to grab the references when the editor first loads, - // not on every reconnect - socket.on('references:keys:updated', (keys, allDocs, refresherId) => { + if (projectJoined && socket) { + const processUpdatedReferenceKeys = ( + keys: string[], + allDocs: boolean, + refresherId: string + ) => { if (clientSideReferences) { if (refresherId === clientId.get()) { // We asked for this broadcast, so we must have already done the indexing @@ -206,15 +206,17 @@ export const ReferencesProvider: FC = ({ allDocs ? new Set(keys) : new Set([...oldDocs, ...keys]) ) } - }) - } + } - eventEmitter.once('project:joined', handleProjectJoined) - - return () => { - eventEmitter.off('project:joined', handleProjectJoined) + socket.on('references:keys:updated', processUpdatedReferenceKeys) + return () => { + socket.removeListener( + 'references:keys:updated', + processUpdatedReferenceKeys + ) + } } - }, [eventEmitter, indexAllReferences, socket, clientSideReferences]) + }, [projectJoined, indexAllReferences, socket, clientSideReferences]) const searchLocalReferences = useCallback( async (query: string): Promise => {