From a0b4a26ad398137e13c35f3fe0dad99154537d91 Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Tue, 30 Dec 2025 12:52:50 +0200 Subject: feat: 2025 wrapped (#2322) * feat: 2025 wrapped * don't add wrapped for new users --- apps/web/components/wrapped/WrappedModal.tsx | 85 ++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 apps/web/components/wrapped/WrappedModal.tsx (limited to 'apps/web/components/wrapped/WrappedModal.tsx') diff --git a/apps/web/components/wrapped/WrappedModal.tsx b/apps/web/components/wrapped/WrappedModal.tsx new file mode 100644 index 00000000..25e376b0 --- /dev/null +++ b/apps/web/components/wrapped/WrappedModal.tsx @@ -0,0 +1,85 @@ +"use client"; + +import { useRef } from "react"; +import { + Dialog, + DialogContent, + DialogOverlay, + DialogTitle, +} from "@/components/ui/dialog"; +import { api } from "@/lib/trpc"; +import * as VisuallyHidden from "@radix-ui/react-visually-hidden"; +import { Loader2, X } from "lucide-react"; + +import { ShareButton } from "./ShareButton"; +import { WrappedContent } from "./WrappedContent"; + +interface WrappedModalProps { + open: boolean; + onClose: () => void; +} + +export function WrappedModal({ open, onClose }: WrappedModalProps) { + const contentRef = useRef(null); + const { data: stats, isLoading } = api.users.wrapped.useQuery(undefined, { + enabled: open, + }); + const { data: whoami } = api.users.whoami.useQuery(undefined, { + enabled: open, + }); + + return ( + + + + + Your 2025 Wrapped + +
+ {/* Share button overlay */} + {stats && !isLoading && } + {/* Close button overlay */} + +
+ + {/* Content */} + {isLoading ? ( +
+
+ +

Loading your Wrapped...

+
+
+ ) : stats ? ( + + ) : ( +
+
+

Failed to load your Wrapped stats

+ +
+
+ )} +
+
+ ); +} -- cgit v1.2.3-70-g09d2