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

Function useBanner

packages/shared/src/hooks/useBanner.ts:17–83  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

15};
16
17export function useBanner(): UseBanner {
18 const { alerts, updateAlerts } = useContext(AlertContext);
19 const { user, isLoggedIn } = useAuthContext();
20
21 const { data: latestBanner } = useQuery({
22 queryKey: generateQueryKey(RequestKey.Banner, null),
23 queryFn: () =>
24 gqlClient.request(BANNER_QUERY, { lastSeen: alerts.lastBanner }),
25 enabled: !!alerts.banner,
26 });
27
28 const isHackathonBanner =
29 latestBanner?.banner?.title === 'daily.dev Hackathon';
30
31 const { data: hackathonParticipation, isPending } = useQuery({
32 ...hackathonParticipationQueryOptions(user),
33 enabled: isLoggedIn && isHackathonBanner,
34 });
35
36 const isAvailable = useMemo(() => {
37 if (
38 isHackathonBanner &&
39 (isPending || !!hackathonParticipation?.whoami?.isHackathonParticipant)
40 ) {
41 return false;
42 }
43
44 const lastSeenBannerDate = Date.parse(alerts?.lastBanner);
45 const latestBannerDate = Date.parse(latestBanner?.banner?.timestamp);
46
47 if (Number.isNaN(latestBannerDate) || Number.isNaN(lastSeenBannerDate)) {
48 return false;
49 }
50
51 return latestBannerDate > lastSeenBannerDate;
52 }, [
53 alerts?.lastBanner,
54 hackathonParticipation?.whoami?.isHackathonParticipant,
55 isHackathonBanner,
56 isPending,
57 latestBanner?.banner?.timestamp,
58 ]);
59
60 const dismissMutation = useMutation({
61 mutationFn: () => {
62 const currentDate = new Date();
63
64 return updateAlerts({
65 lastBanner: currentDate.toISOString(),
66 });
67 },
68 });
69
70 const dismiss = useCallback(async () => {
71 if (dismissMutation.isPending) {
72 return;
73 }
74

Callers 4

PromotionalBannerFunction · 0.90
MainLayoutComponentFunction · 0.90
SidebarDesktopV2Function · 0.90
SidebarDesktopFunction · 0.90

Calls 3

useAuthContextFunction · 0.90
generateQueryKeyFunction · 0.90

Tested by

no test coverage detected