From cb5f593494fd79d1d96242356c61d9379571cf0a Mon Sep 17 00:00:00 2001 From: JACOB STANLEY Date: Thu, 28 May 2026 17:00:51 +0100 Subject: [PATCH 1/3] Add dedicated transaction history page. Expose /transactions with API-backed history, shared mock data, and navigation from dashboard and mobile nav. Co-authored-by: Cursor --- src/app/api/transactions/route.ts | 17 +++ src/app/dashboard/page.tsx | 14 ++- src/app/page.tsx | 3 +- src/app/transactions/layout.tsx | 14 +++ src/app/transactions/loading.tsx | 14 +++ src/app/transactions/page.tsx | 72 +++++++++++++ src/components/MobileBottomNavigation.tsx | 18 ++-- src/components/TransactionHistory.tsx | 93 +++++++++------- src/hooks/useTransactionQuery.ts | 106 ++++++++++--------- src/lib/__tests__/transactionService.test.ts | 46 ++++++++ src/lib/mockTransactionData.ts | 43 ++++++++ src/lib/transactionService.ts | 72 +++++++++++++ src/locales/en/common.json | 30 +++++- tests/mocks/handlers.ts | 29 +---- 14 files changed, 438 insertions(+), 133 deletions(-) create mode 100644 src/app/api/transactions/route.ts create mode 100644 src/app/transactions/layout.tsx create mode 100644 src/app/transactions/loading.tsx create mode 100644 src/app/transactions/page.tsx create mode 100644 src/lib/__tests__/transactionService.test.ts create mode 100644 src/lib/mockTransactionData.ts create mode 100644 src/lib/transactionService.ts diff --git a/src/app/api/transactions/route.ts b/src/app/api/transactions/route.ts new file mode 100644 index 00000000..5d4af90d --- /dev/null +++ b/src/app/api/transactions/route.ts @@ -0,0 +1,17 @@ +import { NextRequest, NextResponse } from 'next/server'; +import { getMockApiTransactions } from '@/lib/mockTransactionData'; + +export async function GET(request: NextRequest) { + const { searchParams } = new URL(request.url); + const walletAddress = searchParams.get('walletAddress')?.trim(); + + if (!walletAddress) { + return NextResponse.json({ error: 'Wallet address required' }, { status: 400 }); + } + + if (walletAddress.length < 6) { + return NextResponse.json({ error: 'Invalid wallet address' }, { status: 400 }); + } + + return NextResponse.json(getMockApiTransactions()); +} diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx index c86ed4f7..c0bad99e 100644 --- a/src/app/dashboard/page.tsx +++ b/src/app/dashboard/page.tsx @@ -12,6 +12,7 @@ import { ComplianceAuditLog } from "@/components/kyc/ComplianceAuditLog"; import { KycStatusBadge } from "@/components/kyc/KycStatusBadge"; import { useKycStore } from "@/store/kycStore"; import Link from "next/link"; +import { useTranslation } from "react-i18next"; import { TransactionSecuritySettings } from "@/components/security/TransactionSecuritySettings"; import { Skeleton } from "@/components/ui/skeleton"; @@ -61,6 +62,7 @@ const DataRefreshWrapper = dynamic( ); const Index = () => { + const { t } = useTranslation("common"); const [sidebarOpen, setSidebarOpen] = useState(false); const [activeItem, setActiveItem] = useState("dashboard"); const { profile } = useKycStore(); @@ -142,14 +144,22 @@ const Index = () => { Transaction Queue - Transaction History + Transactions Staking & Yield My Certificates - + +
+ + {t("transactions.viewFullHistory")} → + +
diff --git a/src/app/page.tsx b/src/app/page.tsx index f324170d..77228be3 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -165,9 +165,10 @@ function HomeContent() { {/* Feature links — Issues #75, #76, #85, #89 */} -