From ecc2f1f544eca0e48dfbbe3a11ab01e59bf1a159 Mon Sep 17 00:00:00 2001 From: Alf Eaton Date: Tue, 11 Mar 2025 13:29:14 +0000 Subject: [PATCH] Merge pull request #24196 from overleaf/ae-fetch-data-access Avoid fetching unavailable project data GitOrigin-RevId: 58fd58f098af5e3eb000e31f22b403d3e28ef691 --- .../js/features/ide-react/hooks/use-socket-listeners.ts | 6 ++++-- .../review-panel-new/context/changes-users-context.tsx | 8 +++++++- .../features/review-panel-new/context/threads-context.tsx | 8 +++++++- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/services/web/frontend/js/features/ide-react/hooks/use-socket-listeners.ts b/services/web/frontend/js/features/ide-react/hooks/use-socket-listeners.ts index 0dfd5bab86..6b2f305593 100644 --- a/services/web/frontend/js/features/ide-react/hooks/use-socket-listeners.ts +++ b/services/web/frontend/js/features/ide-react/hooks/use-socket-listeners.ts @@ -12,12 +12,14 @@ import { debugConsole } from '@/utils/debugging' import { useCallback } from 'react' import { PublicAccessLevel } from '../../../../../types/public-access-level' import { useLocation } from '@/shared/hooks/use-location' +import { useEditorContext } from '@/shared/context/editor-context' function useSocketListeners() { const { t } = useTranslation() const { socket } = useConnectionContext() const { projectId } = useIdeReactContext() const { showGenericMessageModal } = useModalsContext() + const { permissionsLevel } = useEditorContext() const [, setPublicAccessLevel] = useScopeValue('project.publicAccesLevel') const [, setProjectMembers] = useScopeValue('project.members') const [, setProjectInvites] = useScopeValue('project.invites') @@ -91,7 +93,7 @@ function useSocketListeners() { }) } - if (data.invites) { + if (data.invites && permissionsLevel === 'owner') { listProjectInvites(projectId) .then(({ invites }) => { if (invites) { @@ -103,7 +105,7 @@ function useSocketListeners() { }) } }, - [projectId, setProjectInvites, setProjectMembers] + [projectId, setProjectInvites, setProjectMembers, permissionsLevel] ) ) } diff --git a/services/web/frontend/js/features/review-panel-new/context/changes-users-context.tsx b/services/web/frontend/js/features/review-panel-new/context/changes-users-context.tsx index 780f15d520..6da12629fa 100644 --- a/services/web/frontend/js/features/review-panel-new/context/changes-users-context.tsx +++ b/services/web/frontend/js/features/review-panel-new/context/changes-users-context.tsx @@ -9,6 +9,7 @@ import { import { getJSON } from '@/infrastructure/fetch-json' import { useProjectContext } from '@/shared/context/project-context' import { UserId } from '../../../../../types/user' +import { useEditorContext } from '@/shared/context/editor-context' export type ChangesUser = { id: UserId @@ -25,14 +26,19 @@ export const ChangesUsersContext = createContext( export const ChangesUsersProvider: FC = ({ children }) => { const { _id: projectId, members, owner } = useProjectContext() + const { isRestrictedTokenMember } = useEditorContext() const [changesUsers, setChangesUsers] = useState() useEffect(() => { + if (isRestrictedTokenMember) { + return + } + getJSON(`/project/${projectId}/changes/users`).then(data => setChangesUsers(new Map(data.map(item => [item.id, item]))) ) - }, [projectId]) + }, [projectId, isRestrictedTokenMember]) // add the project owner and members to the changes users data const value = useMemo(() => { diff --git a/services/web/frontend/js/features/review-panel-new/context/threads-context.tsx b/services/web/frontend/js/features/review-panel-new/context/threads-context.tsx index b9597bae7e..01527e0517 100644 --- a/services/web/frontend/js/features/review-panel-new/context/threads-context.tsx +++ b/services/web/frontend/js/features/review-panel-new/context/threads-context.tsx @@ -21,6 +21,7 @@ import { deleteJSON, getJSON, postJSON } from '@/infrastructure/fetch-json' import RangesTracker from '@overleaf/ranges-tracker' import { CommentOperation } from '../../../../../types/change' import { useEditorManagerContext } from '@/features/ide-react/context/editor-manager-context' +import { useEditorContext } from '@/shared/context/editor-context' export type Threads = Record @@ -48,12 +49,17 @@ const ThreadsActionsContext = createContext( export const ThreadsProvider: FC = ({ children }) => { const { _id: projectId } = useProjectContext() const { currentDocument } = useEditorManagerContext() + const { isRestrictedTokenMember } = useEditorContext() // const [error, setError] = useState() const [data, setData] = useState() // load the initial threads data useEffect(() => { + if (isRestrictedTokenMember) { + return + } + const abortController = new AbortController() getJSON(`/project/${projectId}/threads`, { @@ -64,7 +70,7 @@ export const ThreadsProvider: FC = ({ children }) => { // .catch(error => { // setError(error) // }) - }, [projectId]) + }, [projectId, isRestrictedTokenMember]) const { socket } = useConnectionContext()