Files
flyer-crawler.projectium.com/src/providers/UserDataProvider.tsx
Torben Sorensen 46c1e56b14
Some checks failed
Deploy to Test Environment / deploy-to-test (push) Failing after 46s
progress enforcing adr-0005
2026-01-08 21:40:20 -08:00

46 lines
1.6 KiB
TypeScript

// src/providers/UserDataProvider.tsx
import React, { useMemo, ReactNode } from 'react';
import { UserDataContext } from '../contexts/UserDataContext';
import { useAuth } from '../hooks/useAuth';
import { useWatchedItemsQuery } from '../hooks/queries/useWatchedItemsQuery';
import { useShoppingListsQuery } from '../hooks/queries/useShoppingListsQuery';
/**
* Provider for user-specific data using TanStack Query (ADR-0005).
*
* This provider uses TanStack Query for automatic caching, refetching, and state management.
* Data is automatically cleared when the user logs out (query is disabled),
* and refetched when a new user logs in.
*
* Phase 4 Update: Removed deprecated setWatchedItems and setShoppingLists setters.
* Use mutation hooks directly from src/hooks/mutations instead.
*/
export const UserDataProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
const { userProfile } = useAuth();
const isEnabled = !!userProfile;
const {
data: watchedItems = [],
isLoading: isLoadingWatched,
error: watchedError,
} = useWatchedItemsQuery(isEnabled);
const {
data: shoppingLists = [],
isLoading: isLoadingLists,
error: listsError,
} = useShoppingListsQuery(isEnabled);
const value = useMemo(
() => ({
watchedItems,
shoppingLists,
isLoading: isEnabled && (isLoadingWatched || isLoadingLists),
error: watchedError?.message || listsError?.message || null,
}),
[watchedItems, shoppingLists, isEnabled, isLoadingWatched, isLoadingLists, watchedError, listsError]
);
return <UserDataContext.Provider value={value}>{children}</UserDataContext.Provider>;
};