Skip to content

Commit 8723697

Browse files
authored
[Dashboard] Add date range filtering to transaction analytics (#8400)
1 parent 3d48826 commit 8723697

File tree

4 files changed

+84
-20
lines changed

4 files changed

+84
-20
lines changed

apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/analytics-page.tsx

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
"use client";
22
import { useQuery } from "@tanstack/react-query";
33
import { Spinner } from "@workspace/ui/components/spinner";
4+
import { useMemo } from "react";
45
import type { ThirdwebClient } from "thirdweb";
56
import type { Project } from "@/api/project/projects";
7+
import { getLastNDaysRange } from "@/components/analytics/date-range-selector";
8+
import { normalizeTimeISOString } from "@/lib/time";
69
import { UnifiedTransactionsTable } from "../components/transactions-table.client";
710
import { getTransactionAnalyticsSummary } from "../lib/analytics-summary.client";
811
import type { Wallet } from "../server-wallets/wallet-table/types";
912
import type { SolanaWallet } from "../solana-wallets/wallet-table/types";
1013
import { EngineChecklist } from "./ftux.client";
11-
import { TransactionAnalyticsSummary } from "./summary";
1214
import { TransactionsAnalytics } from "./tx-chart/tx-chart";
1315

1416
export function TransactionsAnalyticsPageContent(props: {
@@ -24,18 +26,30 @@ export function TransactionsAnalyticsPageContent(props: {
2426
testSolanaTxWithWallet: string | undefined;
2527
solanaWallets: SolanaWallet[];
2628
}) {
29+
const defaultRange = useMemo(() => {
30+
const range = getLastNDaysRange("last-30");
31+
return {
32+
from: normalizeTimeISOString(range.from),
33+
to: normalizeTimeISOString(range.to),
34+
};
35+
}, []);
36+
2737
const engineTxSummaryQuery = useQuery({
2838
queryKey: [
2939
"engine-tx-analytics-summary",
3040
props.teamId,
3141
props.project.publishableKey,
3242
props.authToken,
43+
defaultRange.from,
44+
defaultRange.to,
3345
],
3446
queryFn: async () => {
3547
const data = await getTransactionAnalyticsSummary({
3648
clientId: props.project.publishableKey,
3749
teamId: props.teamId,
3850
authToken: props.authToken,
51+
startDate: defaultRange.from,
52+
endDate: defaultRange.to,
3953
});
4054
return data;
4155
},
@@ -70,19 +84,12 @@ export function TransactionsAnalyticsPageContent(props: {
7084
/>
7185

7286
{props.showAnalytics && hasTransactions && (
73-
<div className="flex flex-col gap-6">
74-
<TransactionAnalyticsSummary
75-
clientId={props.project.publishableKey}
76-
teamId={props.project.teamId}
77-
initialData={engineTxSummaryQuery.data}
78-
/>
79-
<TransactionsAnalytics
80-
project={props.project}
81-
authToken={props.authToken}
82-
teamSlug={props.teamSlug}
83-
wallets={props.wallets ?? []}
84-
/>
85-
</div>
87+
<TransactionsAnalytics
88+
project={props.project}
89+
authToken={props.authToken}
90+
teamSlug={props.teamSlug}
91+
wallets={props.wallets ?? []}
92+
/>
8693
)}
8794

8895
<UnifiedTransactionsTable

apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/summary.tsx

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
"use client";
2+
import { useQuery } from "@tanstack/react-query";
13
import { ActivityIcon, CoinsIcon } from "lucide-react";
24
import { toEther } from "thirdweb/utils";
35
import { StatCard } from "@/components/analytics/stat"; // Assuming correct path
4-
import type { TransactionSummaryData } from "../lib/analytics-summary.client";
6+
import {
7+
getTransactionAnalyticsSummary,
8+
type TransactionSummaryData,
9+
} from "../lib/analytics-summary.client";
510

611
// Renders the UI based on fetched data or pending state
712
function TransactionAnalyticsSummaryUI(props: {
@@ -88,9 +93,37 @@ function TransactionAnalyticsSummaryUI(props: {
8893
export function TransactionAnalyticsSummary(props: {
8994
teamId: string;
9095
clientId: string;
91-
initialData: TransactionSummaryData | undefined;
96+
authToken: string;
97+
startDate?: string;
98+
endDate?: string;
9299
}) {
100+
const engineTxSummaryQuery = useQuery({
101+
queryKey: [
102+
"engine-tx-analytics-summary",
103+
props.teamId,
104+
props.clientId,
105+
props.authToken,
106+
props.startDate,
107+
props.endDate,
108+
],
109+
queryFn: async () => {
110+
const data = await getTransactionAnalyticsSummary({
111+
clientId: props.clientId,
112+
teamId: props.teamId,
113+
authToken: props.authToken,
114+
startDate: props.startDate,
115+
endDate: props.endDate,
116+
});
117+
return data;
118+
},
119+
refetchOnWindowFocus: false,
120+
refetchOnMount: false,
121+
});
122+
93123
return (
94-
<TransactionAnalyticsSummaryUI data={props.initialData} isPending={false} />
124+
<TransactionAnalyticsSummaryUI
125+
data={engineTxSummaryQuery.data}
126+
isPending={engineTxSummaryQuery.isPending}
127+
/>
95128
);
96129
}

apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/analytics/tx-chart/tx-chart.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
import { IntervalSelector } from "@/components/analytics/interval-selector";
1010
import { normalizeTimeISOString } from "@/lib/time";
1111
import type { Wallet } from "../../server-wallets/wallet-table/types";
12+
import { TransactionAnalyticsSummary } from "../summary";
1213
import { getTransactionsChartData } from "./data";
1314
import { TransactionsChartCardUI } from "./tx-chart-ui";
1415

@@ -21,12 +22,15 @@ export function TransactionsAnalytics(props: {
2122
const [range, setRange] = useState(() => getLastNDaysRange("last-30"));
2223
const [interval, setInterval] = useState<"day" | "week">("day");
2324

25+
const normalizedFrom = normalizeTimeISOString(range.from);
26+
const normalizedTo = normalizeTimeISOString(range.to);
27+
2428
const params = {
2529
clientId: props.project.publishableKey,
26-
from: normalizeTimeISOString(range.from),
30+
from: normalizedFrom,
2731
interval: interval,
2832
teamId: props.project.teamId,
29-
to: normalizeTimeISOString(range.to),
33+
to: normalizedTo,
3034
authToken: props.authToken,
3135
};
3236

@@ -56,6 +60,13 @@ export function TransactionsAnalytics(props: {
5660
/>
5761
</div>
5862
</div>
63+
<TransactionAnalyticsSummary
64+
authToken={props.authToken}
65+
clientId={props.project.publishableKey}
66+
teamId={props.project.teamId}
67+
startDate={normalizedFrom}
68+
endDate={normalizedTo}
69+
/>
5970
<TransactionsChartCardUI
6071
isPending={engineTxAnalytics.isPending}
6172
project={props.project}

apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/lib/analytics-summary.client.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,21 @@ export async function getTransactionAnalyticsSummary(props: {
2727
teamId: string;
2828
clientId: string;
2929
authToken: string;
30+
startDate?: string;
31+
endDate?: string;
3032
}): Promise<TransactionSummaryData> {
31-
const body = {};
33+
const body: {
34+
startDate?: string;
35+
endDate?: string;
36+
} = {};
37+
38+
if (props.startDate) {
39+
body.startDate = props.startDate;
40+
}
41+
42+
if (props.endDate) {
43+
body.endDate = props.endDate;
44+
}
3245
const defaultData: TransactionSummaryData = {
3346
totalCount: 0,
3447
totalGasCostWei: "0",

0 commit comments

Comments
 (0)