From 950d215632c8e53761faf4f709c3a691174d37a4 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Tue, 21 Oct 2025 10:45:32 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8(frontend)=20fresh=20data=20on=20sh?= =?UTF-8?q?are=20modal=20open?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When we open the share modal, the requests were then in cache, if other users where interacting with the share settings in parallel, we would not see the changes until the cache expired. We now force a fresh fetch of the data when opening the share modal, it ensures we always have the latest data when opening the modal. --- .../src/features/docs/doc-share/api/index.ts | 9 ++++--- .../doc-share/components/DocShareModal.tsx | 26 +++++++++++++++++-- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/frontend/apps/impress/src/features/docs/doc-share/api/index.ts b/src/frontend/apps/impress/src/features/docs/doc-share/api/index.ts index bbd7a27d..ff9c7b41 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-share/api/index.ts +++ b/src/frontend/apps/impress/src/features/docs/doc-share/api/index.ts @@ -1,9 +1,10 @@ -export * from './useDeleteDocAccess'; -export * from './useDocAccesses'; -export * from './useUpdateDocAccess'; export * from './useCreateDocAccess'; -export * from './useUsers'; export * from './useCreateDocInvitation'; +export * from './useDeleteDocAccess'; export * from './useDeleteDocInvitation'; +export * from './useDocAccesses'; +export * from './useDocAccessRequest'; export * from './useDocInvitations'; +export * from './useUpdateDocAccess'; export * from './useUpdateDocInvitation'; +export * from './useUsers'; diff --git a/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareModal.tsx b/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareModal.tsx index 324e306f..6ba81f05 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareModal.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareModal.tsx @@ -1,5 +1,6 @@ import { Modal, ModalSize } from '@openfun/cunningham-react'; -import { useMemo, useRef, useState } from 'react'; +import { useQueryClient } from '@tanstack/react-query'; +import { useEffect, useMemo, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { createGlobalStyle, css } from 'styled-components'; import { useDebouncedCallback } from 'use-debounce'; @@ -15,7 +16,14 @@ import { User } from '@/features/auth'; import { useResponsiveStore } from '@/stores'; import { isValidEmail } from '@/utils'; -import { KEY_LIST_USER, useDocAccesses, useUsers } from '../api'; +import { + KEY_LIST_DOC_ACCESSES, + KEY_LIST_DOC_ACCESS_REQUESTS, + KEY_LIST_DOC_INVITATIONS, + KEY_LIST_USER, + useDocAccesses, + useUsers, +} from '../api'; import { DocInheritedShareContent } from './DocInheritedShareContent'; import { @@ -48,6 +56,7 @@ type Props = { export const DocShareModal = ({ doc, onClose, isRootDoc = true }: Props) => { const { t } = useTranslation(); const selectedUsersRef = useRef(null); + const queryClient = useQueryClient(); const { isDesktop } = useResponsiveStore(); @@ -128,6 +137,19 @@ export const DocShareModal = ({ doc, onClose, isRootDoc = true }: Props) => { const showInheritedShareContent = inheritedAccesses.length > 0 && showMemberSection && !isRootDoc; + // Invalidate relevant queries to ensure fresh data on modal open + useEffect(() => { + [ + KEY_LIST_DOC_INVITATIONS, + KEY_LIST_DOC_ACCESS_REQUESTS, + KEY_LIST_DOC_ACCESSES, + ].forEach((key) => { + void queryClient.invalidateQueries({ + queryKey: [key], + }); + }); + }, [queryClient]); + return ( <>