Skip to content

Commit 27388c7

Browse files
committed
Add date range filtering to transaction analytics
Introduces start and end date parameters to transaction analytics summary queries, enabling date range filtering. Refactors the summary and chart components to use these parameters, ensuring analytics data reflects the selected date range. Removes the summary card from the analytics page and integrates it within the chart view for consistency. Closes MNY-306
1 parent 3d48826 commit 27388c7

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)