diff --git a/src/Providers/AuthUserProvider.tsx b/src/Providers/AuthUserProvider.tsx index 45e17d9c3f6..1c0e44a1ac4 100644 --- a/src/Providers/AuthUserProvider.tsx +++ b/src/Providers/AuthUserProvider.tsx @@ -12,6 +12,7 @@ import { LocalStorageKeys } from "@/common/constants"; import mutate from "@/Utils/request/mutate"; import query from "@/Utils/request/query"; +import { clearQueryPersistenceCache } from "@/Utils/request/queryClient"; import { userAtom } from "@/atoms/user-atom"; import { JwtTokenObtainPair, @@ -163,6 +164,7 @@ export default function AuthUserProvider({ localStorage.removeItem(LocalStorageKeys.accessToken); localStorage.removeItem(LocalStorageKeys.refreshToken); localStorage.removeItem(LocalStorageKeys.patientTokenKey); + await clearQueryPersistenceCache(); setAccessToken(null); setPatientToken(null); diff --git a/src/Utils/request/queryClient.test.ts b/src/Utils/request/queryClient.test.ts new file mode 100644 index 00000000000..8b94917ca30 --- /dev/null +++ b/src/Utils/request/queryClient.test.ts @@ -0,0 +1,19 @@ +// @vitest-environment jsdom +import { beforeEach, describe, expect, it } from "vitest"; + +import { clearQueryPersistenceCache } from "@/Utils/request/queryClient"; + +describe("clearQueryPersistenceCache", () => { + beforeEach(() => { + localStorage.setItem( + "REACT_QUERY_OFFLINE_CACHE", + JSON.stringify({ clientState: {}, timestamp: 0 }), + ); + }); + + it("removes the persisted cache blob from localStorage", async () => { + expect(localStorage.getItem("REACT_QUERY_OFFLINE_CACHE")).not.toBeNull(); + await clearQueryPersistenceCache(); + expect(localStorage.getItem("REACT_QUERY_OFFLINE_CACHE")).toBeNull(); + }); +}); diff --git a/src/Utils/request/queryClient.ts b/src/Utils/request/queryClient.ts index 3c2ab4598e6..adccdd67141 100644 --- a/src/Utils/request/queryClient.ts +++ b/src/Utils/request/queryClient.ts @@ -33,6 +33,7 @@ const queryClient = new QueryClient({ const localStoragePersister = createAsyncStoragePersister({ storage: window.localStorage, + key: "REACT_QUERY_OFFLINE_CACHE", }); persistQueryClient({ @@ -44,12 +45,11 @@ persistQueryClient({ buster: localStorage.getItem("app-version") ?? "0.0.0", }); -export function clearQueryPersistenceCache() { - queryClient.invalidateQueries({ - predicate: (query) => { - return query.meta?.persist === true; - }, +export function clearQueryPersistenceCache(): Promise { + queryClient.removeQueries({ + predicate: (query) => query.meta?.persist === true, }); + return Promise.resolve(localStoragePersister.removeClient()); } export default queryClient;