import { useEffect, useState } from 'react'; import { Grid, Card, Text, Button, Divider, Tooltip, Paper, Image, Stack, } from '@mantine/core'; import { runtimeConfig } from '../config'; import { IconRefresh, IconWorld } from '@tabler/icons-react'; import classes from './OverView.module.css'; import cookieIcon from '../assets/ic_outline-cookie.svg'; import cutCookieIcon from '../assets/ic_outline-cut-cookie.svg'; import { COLORS } from '../utils/utils'; function OverView(props: any) { const [analyticsData, setAnalyticsData] = useState({ optIns: 0, optOuts: 0, averageConsentTime: 'N/A', mostConsentedCategory: 'N/A', leastConsentedCategory: 'N/A', }); const [scanData, setScanData] = useState({ necessary: 0, preferences: 0, marketing: 0, unclassified: 0, statistics: 0, }); const openCMP = (link: string) => { window.open( `${runtimeConfig.cmpRedirectUrl}/${link}`, '_blank', 'noopener,noreferrer' ); }; const fetchAnalytics = async () => { try { const response = await runtimeConfig.apiFetch({ path: '/cookiex/v1/analytics', method: 'GET', }); if (response?.data?.status === 'success' && response?.data?.data) { const analytics = response?.data?.data; setAnalyticsData({ optIns: analytics.totalOptIns || 0, optOuts: analytics.totalOptOuts || 0, averageConsentTime: analytics.averageTimeToConsent || 'N/A', mostConsentedCategory: analytics.mostAcceptedCookie || 'N/A', leastConsentedCategory: analytics.leastAcceptedCookie || 'N/A', }); } } catch (error) { console.error('Error fetching analytics:', error); } }; const fetchScanData = async () => { try { // ✅ Ensure apiFetch works correctly const response = await runtimeConfig.apiFetch({ path: '/cookiex/v1/cookie-scan', method: 'GET', }); if ( response?.data?.status === 'success' && response?.data?.data?.latestScanResult ) { const latestScan = response?.data?.data?.latestScanResult; setScanData({ necessary: latestScan?.necessaryCookies ?? 0, preferences: latestScan?.preferenceCookies ?? 0, marketing: latestScan?.marketingCookies ?? 0, // ✅ Fixed wrong property statistics: latestScan?.statisticsCookies ?? 0, unclassified: latestScan?.unclassifiedCookies ?? 0, }); } else { console.error( 'Scan data retrieval failed:', response?.data?.message ); } } catch (error) { console.error('Error fetching scan data:', error); } }; useEffect(() => { const fetchData = async () => { try { await Promise.all([fetchAnalytics(), fetchScanData()]); } catch (error) { console.error('Error fetching data:', error); } }; fetchData(); }, []); return ( {/* Header */} Consent Analytics Consent analytics shows the data of consents given by users on the consent banner present on your domain.
Opt-in Consent {analyticsData.optIns}
Opt-out Consent {analyticsData.optOuts}
Average time to Consent {analyticsData.averageConsentTime}
Most Consented Cookie Category {analyticsData.mostConsentedCategory}
Least Consented Cookie Category {analyticsData.leastConsentedCategory}
{/* Header */} Cookie Scan Status Here you can see the current status of your cookie banner.
Cookie
Cookie
Banner Status Active Consent banner is running smoothly and tracking user preferences properly.
Necessary {scanData.necessary} Preferences {scanData.preferences} Marketing {scanData.marketing} Unclassified {scanData.unclassified}
); } export default OverView;