Clear the query cache when the signed-in account changes
Logging out or switching accounts kept the previous user's React Query cache (follows, feed, cloud, e621 pages), so the new account briefly saw the old one's followed tags/pools until each query refetched. The query client now lives in lib/queryClient.ts and login/register/logout clear it alongside the e621 credential store.
This commit is contained in:
@@ -0,0 +1,12 @@
|
|||||||
|
import { QueryClient } from "@tanstack/react-query";
|
||||||
|
|
||||||
|
export const queryClient = new QueryClient({
|
||||||
|
defaultOptions: {
|
||||||
|
queries: {
|
||||||
|
retry: 1,
|
||||||
|
staleTime: 30_000,
|
||||||
|
gcTime: 30 * 60_000,
|
||||||
|
refetchOnWindowFocus: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
+2
-12
@@ -1,21 +1,11 @@
|
|||||||
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
import { QueryClientProvider } from "@tanstack/react-query";
|
||||||
import { StrictMode } from "react";
|
import { StrictMode } from "react";
|
||||||
import { createRoot } from "react-dom/client";
|
import { createRoot } from "react-dom/client";
|
||||||
import { BrowserRouter } from "react-router-dom";
|
import { BrowserRouter } from "react-router-dom";
|
||||||
|
|
||||||
import App from "./App";
|
import App from "./App";
|
||||||
import "./index.css";
|
import "./index.css";
|
||||||
|
import { queryClient } from "@/lib/queryClient";
|
||||||
const queryClient = new QueryClient({
|
|
||||||
defaultOptions: {
|
|
||||||
queries: {
|
|
||||||
retry: 1,
|
|
||||||
staleTime: 30_000,
|
|
||||||
gcTime: 30 * 60_000,
|
|
||||||
refetchOnWindowFocus: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
createRoot(document.getElementById("root")!).render(
|
createRoot(document.getElementById("root")!).render(
|
||||||
<StrictMode>
|
<StrictMode>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { create } from "zustand";
|
import { create } from "zustand";
|
||||||
|
|
||||||
import { api, getToken, setToken } from "@/lib/api";
|
import { api, getToken, setToken } from "@/lib/api";
|
||||||
|
import { queryClient } from "@/lib/queryClient";
|
||||||
import type { User } from "@/lib/types";
|
import type { User } from "@/lib/types";
|
||||||
import { useE621 } from "@/store/e621";
|
import { useE621 } from "@/store/e621";
|
||||||
|
|
||||||
@@ -24,6 +25,9 @@ export const useAuth = create<AuthState>((set) => ({
|
|||||||
});
|
});
|
||||||
setToken(data.token);
|
setToken(data.token);
|
||||||
const user = await api<User>("/api/auth/me/");
|
const user = await api<User>("/api/auth/me/");
|
||||||
|
// Never show the previous account's cached data to this one.
|
||||||
|
queryClient.clear();
|
||||||
|
useE621.getState().clear();
|
||||||
set({ user, ready: true });
|
set({ user, ready: true });
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -33,6 +37,8 @@ export const useAuth = create<AuthState>((set) => ({
|
|||||||
json: { username, password },
|
json: { username, password },
|
||||||
});
|
});
|
||||||
setToken(data.token);
|
setToken(data.token);
|
||||||
|
queryClient.clear();
|
||||||
|
useE621.getState().clear();
|
||||||
set({ user: data.user, ready: true });
|
set({ user: data.user, ready: true });
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -43,6 +49,7 @@ export const useAuth = create<AuthState>((set) => ({
|
|||||||
// The token may already be invalid; clearing it locally is enough.
|
// The token may already be invalid; clearing it locally is enough.
|
||||||
}
|
}
|
||||||
setToken(null);
|
setToken(null);
|
||||||
|
queryClient.clear();
|
||||||
useE621.getState().clear();
|
useE621.getState().clear();
|
||||||
set({ user: null, ready: true });
|
set({ user: null, ready: true });
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user