MCPcopy Create free account
hub / github.com/dailydotdev/apps / usePersistentContext

Function usePersistentContext

packages/shared/src/hooks/usePersistentContext.ts:31–61  ·  view source on GitHub ↗
(
  key: string,
  valueWhenCacheEmpty?: T,
  validValues?: T[],
  fallbackValue?: T,
)

Source from the content-addressed store, hash-verified

29];
30
31export default function usePersistentContext<T>(
32 key: string,
33 valueWhenCacheEmpty?: T,
34 validValues?: T[],
35 fallbackValue?: T,
36): UserPersistentContextType<T> {
37 const queryKey = [key, valueWhenCacheEmpty];
38 const queryClient = useQueryClient();
39
40 const { data, isFetched } = useQuery({
41 queryKey,
42 queryFn: () =>
43 getAsyncCache<T>(key, valueWhenCacheEmpty || null, validValues) || null,
44 });
45
46 const { mutateAsync: updateValue, isPending: isLoading } = useMutation({
47 mutationFn: (value: T) => setCache(key, value),
48
49 onMutate: (mutatedData) => {
50 const current = data;
51 queryClient.setQueryData(queryKey, mutatedData);
52 return current;
53 },
54
55 onError: (_, __, rollback) => {
56 queryClient.setQueryData(queryKey, rollback);
57 },
58 });
59
60 return [data ?? fallbackValue, updateValue, isFetched, isLoading];
61}
62
63export enum PersistentContextKeys {
64 AlertPushKey = 'alert_push_key',

Callers 15

CustomFeedEmptyScreenFunction · 0.85
BookmarkFeedLayoutFunction · 0.85
MainFeedLayoutFunction · 0.85
FirstNotificationLegacyFunction · 0.85
FirstNotificationFunction · 0.85
ReadingStreakPopupFunction · 0.85
NewSourceModalFunction · 0.85
RecruiterJobLinkModalFunction · 0.85
SquadCommentJoinBannerFunction · 0.85
FeedNavFunction · 0.85
MainCommentFunction · 0.85
PostEngagementsFunction · 0.85

Calls 1

getAsyncCacheFunction · 0.85

Tested by

no test coverage detected