Skip to content

Commit 4ce699a

Browse files
committed
🚸(frontend) fresh data on share modal open
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.
1 parent d31db98 commit 4ce699a

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
export * from './useDeleteDocAccess';
2-
export * from './useDocAccesses';
3-
export * from './useUpdateDocAccess';
41
export * from './useCreateDocAccess';
5-
export * from './useUsers';
62
export * from './useCreateDocInvitation';
3+
export * from './useDeleteDocAccess';
74
export * from './useDeleteDocInvitation';
5+
export * from './useDocAccesses';
6+
export * from './useDocAccessRequest';
87
export * from './useDocInvitations';
8+
export * from './useUpdateDocAccess';
99
export * from './useUpdateDocInvitation';
10+
export * from './useUsers';

src/frontend/apps/impress/src/features/docs/doc-share/components/DocShareModal.tsx

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Modal, ModalSize } from '@openfun/cunningham-react';
2-
import { useMemo, useRef, useState } from 'react';
2+
import { useQueryClient } from '@tanstack/react-query';
3+
import { useEffect, useMemo, useRef, useState } from 'react';
34
import { useTranslation } from 'react-i18next';
45
import { createGlobalStyle, css } from 'styled-components';
56
import { useDebouncedCallback } from 'use-debounce';
@@ -15,7 +16,14 @@ import { User } from '@/features/auth';
1516
import { useResponsiveStore } from '@/stores';
1617
import { isValidEmail } from '@/utils';
1718

18-
import { KEY_LIST_USER, useDocAccesses, useUsers } from '../api';
19+
import {
20+
KEY_LIST_DOC_ACCESSES,
21+
KEY_LIST_DOC_ACCESS_REQUESTS,
22+
KEY_LIST_DOC_INVITATIONS,
23+
KEY_LIST_USER,
24+
useDocAccesses,
25+
useUsers,
26+
} from '../api';
1927

2028
import { DocInheritedShareContent } from './DocInheritedShareContent';
2129
import {
@@ -48,6 +56,7 @@ type Props = {
4856
export const DocShareModal = ({ doc, onClose, isRootDoc = true }: Props) => {
4957
const { t } = useTranslation();
5058
const selectedUsersRef = useRef<HTMLDivElement>(null);
59+
const queryClient = useQueryClient();
5160

5261
const { isDesktop } = useResponsiveStore();
5362

@@ -128,6 +137,19 @@ export const DocShareModal = ({ doc, onClose, isRootDoc = true }: Props) => {
128137
const showInheritedShareContent =
129138
inheritedAccesses.length > 0 && showMemberSection && !isRootDoc;
130139

140+
// Invalidate relevant queries to ensure fresh data on modal open
141+
useEffect(() => {
142+
[
143+
KEY_LIST_DOC_INVITATIONS,
144+
KEY_LIST_DOC_ACCESS_REQUESTS,
145+
KEY_LIST_DOC_ACCESSES,
146+
].forEach((key) => {
147+
void queryClient.invalidateQueries({
148+
queryKey: [key],
149+
});
150+
});
151+
}, [queryClient]);
152+
131153
return (
132154
<>
133155
<Modal

0 commit comments

Comments
 (0)