diff --git a/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue b/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue index d5780f7eb1..3bbf2fd5b0 100644 --- a/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue +++ b/packages/frontend-2/components/workspace/invite/DiscoverableWorkspaceBanner.vue @@ -15,7 +15,11 @@ import { DashboardJoinWorkspaceDocument, type WorkspaceInviteDiscoverableWorkspaceBanner_DiscoverableWorkspaceFragment } from '~/lib/common/generated/gql/graphql' -import { getCacheId, getFirstErrorMessage } from '~/lib/common/helpers/graphql' +import { + getCacheId, + getFirstErrorMessage, + modifyObjectField +} from '~/lib/common/helpers/graphql' graphql(` fragment WorkspaceInviteDiscoverableWorkspaceBanner_DiscoverableWorkspace on DiscoverableWorkspace { @@ -43,6 +47,7 @@ const props = defineProps<{ }>() const { client: apollo } = useApolloClient() +const { activeUser } = useActiveUser() const { triggerNotification } = useGlobalToast() const router = useRouter() @@ -60,6 +65,9 @@ const processJoin = async (accept: boolean) => { return } + const userId = activeUser.value?.id + if (!userId) return + const result = await apollo .mutate({ mutation: DashboardJoinWorkspaceDocument, @@ -67,6 +75,24 @@ const processJoin = async (accept: boolean) => { input: { workspaceId: props.workspace.id } + }, + update(cache, { data }) { + const workspaceId = data?.workspaceMutations.join.id + if (!workspaceId) return + + modifyObjectField( + cache, + getCacheId('User', userId), + 'workspaces', + ({ variables, helpers: { evict, createUpdatedValue, ref } }) => { + if (variables.filter?.search?.length) return evict() + + return createUpdatedValue(({ update }) => { + update('totalCount', (totalCount) => totalCount + 1) + update('items', (items) => [...items, ref('Workspace', workspaceId)]) + }) + } + ) } }) .catch(convertThrowIntoFetchResult)