diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/analytics/ContractAnalyticsPage.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/analytics/ContractAnalyticsPage.tsx index 07aece61b01..78448352c51 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/analytics/ContractAnalyticsPage.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/analytics/ContractAnalyticsPage.tsx @@ -1,6 +1,6 @@ "use client"; import { ThirdwebBarChart } from "@/components/blocks/charts/bar-chart"; -import { Skeleton, Stat, StatLabel, StatNumber } from "@chakra-ui/react"; +import { SkeletonContainer } from "@/components/ui/skeleton"; import type { UseQueryResult } from "@tanstack/react-query"; import { type AnalyticsQueryParams, @@ -14,9 +14,9 @@ import { useTotalContractTransactionAnalytics, useTotalContractUniqueWallets, } from "data/analytics/hooks"; -import { Suspense, useMemo, useState } from "react"; +import { formatDate } from "date-fns"; +import { useMemo, useState } from "react"; import type { ThirdwebContract } from "thirdweb"; -import { Card } from "tw-components"; import { DateRangeSelector, type Range, @@ -121,6 +121,15 @@ type ChartProps = { startDate: Date; endDate: Date; }; + +function toolTipLabelFormatter(_v: string, item: unknown) { + if (Array.isArray(item)) { + const time = item[0].payload.time as number; + return formatDate(new Date(time), "MMM d, yyyy"); + } + return undefined; +} + function UniqueWalletsChart(props: ChartProps) { const analyticsQuery = useContractUniqueWalletAnalytics(props); @@ -128,6 +137,7 @@ function UniqueWalletsChart(props: ChartProps) { ); } @@ -156,6 +168,7 @@ function TotalTransactionsChart(props: ChartProps) { ); } @@ -179,6 +194,7 @@ function TotalEventsChart(props: ChartProps) { ); } @@ -227,6 +245,7 @@ function FunctionBreakdownChart( ); } @@ -283,6 +304,7 @@ function EventBreakdownChart( ); } @@ -320,25 +344,12 @@ const AnalyticsStat: React.FC = ({ useTotal, }) => { return ( - }> - - - ); -}; - -const AnalyticsSkeleton: React.FC<{ label: string }> = ({ label }) => { - return ( - - {label} - - {0} - - + ); }; @@ -355,20 +366,23 @@ const AnalyticsData: React.FC = ({ chainId, }); - const data = useMemo(() => { - if (!totalQuery.data) { - return 0; - } - - return totalQuery.data.count; - }, [totalQuery.data]); + return ; +}; +function AnalyticsStatUI(props: { + label: string; + data: number | undefined; +}) { return ( - - {label} - - {data.toLocaleString()} - - +
+
{props.label}
+ { + return
{v.toLocaleString()}
; + }} + /> +
); -}; +} diff --git a/apps/dashboard/src/global.css b/apps/dashboard/src/global.css index 4fed648d0b6..a1635c8d49f 100644 --- a/apps/dashboard/src/global.css +++ b/apps/dashboard/src/global.css @@ -198,4 +198,5 @@ input:-webkit-autofill:active { body { --chakra-zIndices-modal: 50; --chakra-zIndices-overlay: 50; + --chakra-colors-chakra-border-color: hsl(var(--border)); }