From f1b386ebec63be7aa87646220c354d983db72ff4 Mon Sep 17 00:00:00 2001 From: Mathias Jakobsen Date: Thu, 23 Oct 2025 10:12:12 +0100 Subject: [PATCH] [web] Tear down client-side-references feature flag (#29088) GitOrigin-RevId: 635d6054ed1ed131bbc456bab203408fd4293e6d --- .../Features/Project/ProjectController.mjs | 1 - .../components/file-view-refresh-button.tsx | 13 +----- .../ide-react/context/references-context.tsx | 44 +++---------------- 3 files changed, 9 insertions(+), 49 deletions(-) diff --git a/services/web/app/src/Features/Project/ProjectController.mjs b/services/web/app/src/Features/Project/ProjectController.mjs index 26bd249ff7..8e55c94107 100644 --- a/services/web/app/src/Features/Project/ProjectController.mjs +++ b/services/web/app/src/Features/Project/ProjectController.mjs @@ -401,7 +401,6 @@ const _ProjectController = { 'overleaf-assist-bundle', 'word-count-client', 'editor-popup-ux-survey', - 'client-side-references', 'editor-redesign-new-users', 'writefull-frontend-migration', 'chat-edit-delete', diff --git a/services/web/frontend/js/features/file-view/components/file-view-refresh-button.tsx b/services/web/frontend/js/features/file-view/components/file-view-refresh-button.tsx index 0478e1848b..aeffff5ff7 100644 --- a/services/web/frontend/js/features/file-view/components/file-view-refresh-button.tsx +++ b/services/web/frontend/js/features/file-view/components/file-view-refresh-button.tsx @@ -16,7 +16,6 @@ import { sendMB } from '@/infrastructure/event-tracking' import useIsMounted from '@/shared/hooks/use-is-mounted' import clientId from '@/utils/client-id' import { useReferencesContext } from '@/features/ide-react/context/references-context' -import { useFeatureFlag } from '@/shared/context/split-test-context' type FileViewRefreshButtonProps = { setRefreshError: Dispatch>> @@ -38,7 +37,6 @@ export default function FileViewRefreshButton({ const [refreshing, setRefreshing] = useState(false) const isMountedRef = useIsMounted() const { indexAllReferences } = useReferencesContext() - const clientSideReferences = useFeatureFlag('client-side-references') const refreshFile = useCallback( (isTPR: Nullable) => { @@ -57,7 +55,7 @@ export default function FileViewRefreshButton({ if (isMountedRef.current) { setRefreshing(false) } - if (clientSideReferences && shouldReindexReferences) { + if (shouldReindexReferences) { indexAllReferences(false) } sendMB('refresh-linked-file', { @@ -71,14 +69,7 @@ export default function FileViewRefreshButton({ } }) }, - [ - file, - projectId, - setRefreshError, - isMountedRef, - indexAllReferences, - clientSideReferences, - ] + [file, projectId, setRefreshError, isMountedRef, indexAllReferences] ) if (tprFileViewRefreshButton.length > 0) { 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 d36a272904..f143888011 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 @@ -21,7 +21,6 @@ import { useEditorManagerContext } from './editor-manager-context' import { signalWithTimeout } from '@/utils/abort-signal' import { postJSON } from '@/infrastructure/fetch-json' import { debugConsole } from '@/utils/debugging' -import { useFeatureFlag } from '@/shared/context/split-test-context' import type { ReferenceIndexer } from '../references/reference-indexer' import { AdvancedReferenceSearchResult } from '@/features/ide-react/references/types' import clientId from '@/utils/client-id' @@ -50,38 +49,19 @@ export const ReferencesProvider: FC = ({ const abortControllerRef = useRef(null) const [referenceKeys, setReferenceKeys] = useState(new Set()) - const clientSideReferences = useFeatureFlag('client-side-references') const [existingIndexHash, setExistingIndexHash] = useState< Record >({}) - const indexAllReferencesServerside = useCallback( - async (shouldBroadcast: boolean) => { - return postJSON(`/project/${projectId}/references/indexAll`, { - body: { - shouldBroadcast, - }, - }) - .then((response: { keys: string[] }) => { - setReferenceKeys(new Set(response.keys)) - }) - .catch(error => { - // allow the request to fail - debugConsole.error(error) - }) - }, - [projectId] - ) - const indexerRef = useRef | null>(null) - if (clientSideReferences && indexerRef.current === null) { + if (indexerRef.current === null) { indexerRef.current = import('../references/reference-indexer').then( m => new m.ReferenceIndexer() ) } - const indexAllReferencesLocally = useCallback( + const indexAllReferences = useCallback( async (shouldBroadcast: boolean) => { if (permissionsLevel === 'readOnly') { // Not going to search the references, so let's not index them. @@ -123,10 +103,6 @@ export const ReferencesProvider: FC = ({ [projectSnapshot, openDocs, projectId, permissionsLevel] ) - const indexAllReferences = clientSideReferences - ? indexAllReferencesLocally - : indexAllReferencesServerside - const indexReferencesIfDocModified = useCallback( (doc: ShareJsDoc, shouldBroadcast: boolean) => { // avoid reindexing references if the bib file has not changed since the @@ -195,17 +171,11 @@ export const ReferencesProvider: FC = ({ allDocs: boolean, refresherId: string ) => { - if (clientSideReferences) { - if (refresherId === clientId.get()) { - // We asked for this broadcast, so we must have already done the indexing - return - } - indexAllReferences(false) - } else { - setReferenceKeys(oldDocs => - allDocs ? new Set(keys) : new Set([...oldDocs, ...keys]) - ) + if (refresherId === clientId.get()) { + // We asked for this broadcast, so we must have already done the indexing + return } + indexAllReferences(false) } socket.on('references:keys:updated', processUpdatedReferenceKeys) @@ -216,7 +186,7 @@ export const ReferencesProvider: FC = ({ ) } } - }, [projectJoined, indexAllReferences, socket, clientSideReferences]) + }, [projectJoined, indexAllReferences, socket]) const searchLocalReferences = useCallback( async (query: string): Promise => {