refactor: centralize frontend auth query gating

This commit is contained in:
2026-08-25 14:29:41 +03:00
parent fff36f252a
commit 268acdf2e1
24 changed files with 352 additions and 82 deletions
+34
View File
@@ -0,0 +1,34 @@
import {
type QueryKey,
type UseQueryOptions,
type UseQueryResult,
useQuery,
} from "@tanstack/react-query";
import { useSyncExternalStore } from "react";
import {
getAuthenticatedSessionSnapshot,
subscribeAuthenticatedSession,
} from "./client";
export function useAuthenticatedQuery<
TQueryFnData = unknown,
TError = Error,
TData = TQueryFnData,
TQueryKey extends QueryKey = QueryKey,
>(
options: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
): UseQueryResult<TData, TError> {
const hasSession = useSyncExternalStore(
subscribeAuthenticatedSession,
getAuthenticatedSessionSnapshot,
getAuthenticatedSessionSnapshot,
);
const enabled = options.enabled;
return useQuery({
...options,
enabled: (query) =>
hasSession &&
(typeof enabled === "function" ? enabled(query) : (enabled ?? true)),
});
}