MCPcopy Create free account
hub / github.com/winfunc/opcode / AnalyticsConsent

Function AnalyticsConsent

src/components/AnalyticsConsent.tsx:16–144  ·  view source on GitHub ↗
({
  open: controlledOpen,
  onOpenChange,
  onComplete,
})

Source from the content-addressed store, hash-verified

14}
15
16export const AnalyticsConsent: React.FC<AnalyticsConsentProps> = ({
17 open: controlledOpen,
18 onOpenChange,
19 onComplete,
20}) => {
21 const [internalOpen, setInternalOpen] = useState(false);
22 const [hasShownConsent, setHasShownConsent] = useState(false);
23
24 const isControlled = controlledOpen !== undefined;
25 const open = isControlled ? controlledOpen : internalOpen;
26
27 useEffect(() => {
28 // Check if we should show the consent dialog
29 const checkConsent = async () => {
30 await analytics.initialize();
31 const settings = analytics.getSettings();
32
33 if (!settings?.hasConsented && !hasShownConsent) {
34 if (!isControlled) {
35 setInternalOpen(true);
36 }
37 setHasShownConsent(true);
38 }
39 };
40
41 checkConsent();
42 }, [isControlled, hasShownConsent]);
43
44 const handleOpenChange = (newOpen: boolean) => {
45 if (isControlled && onOpenChange) {
46 onOpenChange(newOpen);
47 } else {
48 setInternalOpen(newOpen);
49 }
50 };
51
52 const handleAccept = async () => {
53 await analytics.enable();
54 handleOpenChange(false);
55 onComplete?.();
56 };
57
58 const handleDecline = async () => {
59 await analytics.disable();
60 handleOpenChange(false);
61 onComplete?.();
62 };
63
64 return (
65 <Dialog open={open} onOpenChange={handleOpenChange}>
66 <DialogContent className="max-w-2xl p-0 overflow-hidden">
67 <div className="p-6 pb-0">
68 <DialogHeader>
69 <div className="flex items-center gap-3 mb-2">
70 <div className="p-2 bg-purple-100 dark:bg-purple-900/20 rounded-lg">
71 <BarChart3 className="h-6 w-6 text-purple-600 dark:text-purple-400" />
72 </div>
73 <DialogTitle className="text-2xl">Help Improve opcode</DialogTitle>

Callers

nothing calls this directly

Calls 1

checkConsentFunction · 0.85

Tested by

no test coverage detected