From e9e6fba886faa758b040e8903e06b9251beeb224 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Mon, 15 Jun 2026 22:07:50 +0100 Subject: [PATCH] fix base cache --- apps/client/src/ee/base/queries/base-query.ts | 7 ++- apps/client/src/ee/base/types/base.types.ts | 1 + .../websocket/use-query-subscription.ts | 43 +++++++------------ 3 files changed, 23 insertions(+), 28 deletions(-) diff --git a/apps/client/src/ee/base/queries/base-query.ts b/apps/client/src/ee/base/queries/base-query.ts index ae1335bbf..10135bad1 100644 --- a/apps/client/src/ee/base/queries/base-query.ts +++ b/apps/client/src/ee/base/queries/base-query.ts @@ -15,6 +15,7 @@ import { CreateBaseInput, UpdateBaseInput, } from "@/ee/base/types/base.types"; +import { IPage } from "@/features/page/types/page.types"; import { notifications } from "@mantine/notifications"; import { queryClient } from "@/main"; import { useTranslation } from "react-i18next"; @@ -62,6 +63,10 @@ export function useConvertPageToBaseMutation() { return useMutation({ mutationFn: ({ pageId, template }) => convertPageToBase(pageId, template), onSuccess: (base) => { + const markAsBase = (old?: IPage) => (old ? { ...old, isBase: true } : old); + queryClient.setQueryData(["pages", base.id], markAsBase); + queryClient.setQueryData(["pages", base.slugId], markAsBase); + queryClient.invalidateQueries({ queryKey: ["pages"] }); queryClient.invalidateQueries({ queryKey: ["root-sidebar-pages", base.spaceId], @@ -75,7 +80,7 @@ export function useConvertPageToBaseMutation() { spaceId: base.spaceId, entity: ["pages"], id: base.id, - payload: { isBase: true }, + payload: { isBase: true, slugId: base.slugId }, }); }, onError: (error) => { diff --git a/apps/client/src/ee/base/types/base.types.ts b/apps/client/src/ee/base/types/base.types.ts index c8f99ef31..e79fe7f56 100644 --- a/apps/client/src/ee/base/types/base.types.ts +++ b/apps/client/src/ee/base/types/base.types.ts @@ -235,6 +235,7 @@ export type IBaseView = { export type IBase = { id: string; + slugId: string; name: string; description?: string; icon?: string; diff --git a/apps/client/src/features/websocket/use-query-subscription.ts b/apps/client/src/features/websocket/use-query-subscription.ts index 4bb11c5c5..edbc90068 100644 --- a/apps/client/src/features/websocket/use-query-subscription.ts +++ b/apps/client/src/features/websocket/use-query-subscription.ts @@ -23,7 +23,6 @@ export const useQuerySubscription = () => { const data: WebSocketEvent = event; let entity = null; - let queryKeyId = null; switch (data.operation) { case "invalidate": @@ -106,21 +105,23 @@ export const useQuerySubscription = () => { case "deleteTreeNode": invalidateOnDeletePage(data.payload.node.id); break; - case "updateOne": + case "updateOne": { entity = data.entity[0]; - if (entity === "pages") { - // we have to do this because the usePageQuery cache key is the slugId. - queryKeyId = data.payload.slugId; - } else { - queryKeyId = data.id; - } + const keyIds = + entity === "pages" ? [data.payload.slugId, data.id] : [data.id]; - // only update if data was already in cache - if (queryClient.getQueryData([...data.entity, queryKeyId])) { - queryClient.setQueryData([...data.entity, queryKeyId], { - ...queryClient.getQueryData([...data.entity, queryKeyId]), - ...data.payload, - }); + for (const keyId of keyIds) { + if (!keyId) continue; + const cached = queryClient.getQueryData>([ + ...data.entity, + keyId, + ]); + if (cached) { + queryClient.setQueryData([...data.entity, keyId], { + ...cached, + ...data.payload, + }); + } } if (entity === "pages") { @@ -132,20 +133,8 @@ export const useQuerySubscription = () => { data.payload.icon, ); } - - /* - queryClient.setQueriesData( - { queryKey: [data.entity, data.id] }, - (oldData: any) => { - const update = (entity: Record) => - entity.id === data.id ? { ...entity, ...data.payload } : entity; - return Array.isArray(oldData) - ? oldData.map(update) - : update(oldData as Record); - }, - ); - */ break; + } case "refetchRootTreeNodeEvent": { const spaceId = data.spaceId; queryClient.refetchQueries({