Security: - Clear the offline IndexedDB cache on sign-in (not only logout) so a previous user's persisted query cache and Yjs page bodies cannot leak to the next user on a shared device when the prior session ended without an explicit logout. Regressions: - Remove the double Yjs title write from the AI title-generation path: the title editor is bound to the Yjs `title` fragment and the server REST update reseeds it, so the local setContent raced that reseed and doubled/garbled the title. Conventions / i18n / docs: - Remove the unused showAiMenuAtom. - Register the 3 offline-fallback strings in en-US and ru-RU. - Fix the 5 broken links to the nonexistent docs/offline-sync-plan.md. Stability / simplification: - warmInfiniteAll now reports truncation (returns false) when it hits maxPages with a cursor still pending instead of silently succeeding. - space-tree make-offline catch logs the raw error and surfaces the real cause. - Move the Offline/Mobile/CORS CHANGELOG entries from the released 0.93.0 section into [Unreleased] (CORS is a documented breaking change). - Drop the pass-through sync-flag forwarders in use-page-collab-providers; set the atoms directly. - Collapse the three isSwaggerEnabled true-cases into it.each. Tests / architecture: - Extract collabTokenNeedsRefresh (pure) and cover all four token states. - Extract shouldPropagateTitleChange and cover the collab-origin skip; add a TitleEditor render test for the static-h1 vs collaborative-editor switch. - Add a use-auth test asserting the sign-in cache purge runs before login. - Add an OFFLINE_PERSIST_ROOTS guard test asserting every persisted root maps to an exported query-key factory; route make-offline's currentUser warm through a new userKeys factory. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
23 lines
797 B
TypeScript
23 lines
797 B
TypeScript
import { useQuery, UseQueryResult } from "@tanstack/react-query";
|
|
import { getMyInfo } from "@/features/user/services/user-service";
|
|
import { ICurrentUser } from "@/features/user/types/user.types";
|
|
|
|
/**
|
|
* Centralized React Query key factory for current-user queries. This hook and
|
|
* the offline warm path (features/offline/make-offline.ts) share it so the
|
|
* runtime key can never silently drift, and the OFFLINE_PERSIST_ROOTS guard
|
|
* test can assert the persisted "currentUser" root maps to a real factory.
|
|
*/
|
|
export const userKeys = {
|
|
currentUser: () => ["currentUser"] as const,
|
|
};
|
|
|
|
export default function useCurrentUser(): UseQueryResult<ICurrentUser> {
|
|
return useQuery({
|
|
queryKey: userKeys.currentUser(),
|
|
queryFn: async () => {
|
|
return await getMyInfo();
|
|
},
|
|
});
|
|
}
|