import { ScaffoldSection, ScaffoldSectionTitle, ScaffoldSectionContent, } from 'components/layouts/Scaffold' import { Card, CardContent, cn } from 'ui' import Link from 'next/link' import { useParams } from 'common' import { ChevronRight, Loader2 } from 'lucide-react' import { Reports } from 'icons' import { getChangeSign, getChangeColor, fetchAllAuthMetrics, processAllAuthMetrics, calculatePercentageChange, } from './OverviewUsage.constants' import { useQuery } from '@tanstack/react-query' import { useMemo } from 'react' import { ReportChartV2 } from 'components/interfaces/Reports/v2/ReportChartV2' import { createAuthReportConfig } from 'data/reports/v2/auth.config' import dayjs from 'dayjs' const StatCard = ({ title, current, previous, loading, suffix = '', }: { title: string current: number previous: number loading: boolean suffix?: string }) => { const changeColor = getChangeColor(previous) const changeSign = getChangeSign(previous) const formattedCurrent = suffix === 'ms' ? current.toFixed(2) : current return ( {loading ? ( ) : ( <> {title} {`${formattedCurrent}${suffix}`} {`${changeSign}${previous.toFixed(1)}%`} > )} ) } export const OverviewUsage = () => { const { ref } = useParams() const { data: currentData, isLoading: currentLoading } = useQuery({ queryKey: ['auth-metrics', ref, 'current'], queryFn: () => fetchAllAuthMetrics(ref as string, 'current'), enabled: !!ref, }) const { data: previousData, isLoading: previousLoading } = useQuery({ queryKey: ['auth-metrics', ref, 'previous'], queryFn: () => fetchAllAuthMetrics(ref as string, 'previous'), enabled: !!ref, }) const metrics = processAllAuthMetrics(currentData?.result || [], previousData?.result || []) const isLoading = currentLoading || previousLoading const activeUsersChange = calculatePercentageChange( metrics.current.activeUsers, metrics.previous.activeUsers ) const passwordResetChange = calculatePercentageChange( metrics.current.passwordResets, metrics.previous.passwordResets ) const signInLatencyChange = calculatePercentageChange( metrics.current.signInLatency, metrics.previous.signInLatency ) const signUpLatencyChange = calculatePercentageChange( metrics.current.signUpLatency, metrics.previous.signUpLatency ) const endDate = dayjs().toISOString() const startDate = dayjs().subtract(24, 'hour').toISOString() const signUpChartConfig = useMemo(() => { const config = createAuthReportConfig({ projectRef: ref as string, startDate, endDate, interval: '1h', filters: { status_code: null }, }) const chart = config.find((c) => c.id === 'signups') if (chart) { return { ...chart, defaultChartStyle: 'bar' } } return chart }, [ref, startDate, endDate]) const signInChartConfig = useMemo(() => { const config = createAuthReportConfig({ projectRef: ref as string, startDate, endDate, interval: '1h', filters: { status_code: null }, }) const chart = config.find((c) => c.id === 'sign-in-attempts') if (chart) { return { ...chart, defaultChartStyle: 'bar' } } return chart }, [ref, startDate, endDate]) const updateDateRange = (from: string, to: string) => { console.log('Date range update:', from, to) } return ( Usage View all reports {signUpChartConfig && ( )} {signInChartConfig && ( )} ) }
{`${formattedCurrent}${suffix}`}
{`${changeSign}${previous.toFixed(1)}%`}