// app/transactions/page.tsx "use client"; import { useState } from "react"; // mocks/transactionData.ts export const transactionDummyData = [ { id: 1, merchandId: 100987998, transactionID: 1049131973, user: 1, created: "2025-06-18 10:10:30", state: "FAILED", statusDescription: "ERR_ABOVE_LIMIT", pspStatusCode: 100501, }, { id: 2, merchandId: 100987998, transactionID: 1049131973, user: 2, created: "2025-06-18 10:10:30", state: "FAILED", statusDescription: "ERR_ABOVE_LIMIT", pspStatusCode: 100501, }, { id: 3, merchandId: 100987998, transactionID: 1049131973, user: 3, created: "2025-06-18 10:10:30", state: "FAILED", statusDescription: "ERR_ABOVE_LIMIT", pspStatusCode: 100501, }, ]; export default function TransactionsPage() { const [userId, setUserId] = useState(""); const [state, setState] = useState(""); const [statusCode, setStatusCode] = useState(""); const [transactions, setTransactions] = useState([]); const [loading, setLoading] = useState(false); const fetchTransactions = async () => { setLoading(true); try { const url = new URL("https://api.example.com/transactions"); if (userId) url.searchParams.append("userId", userId); if (state) url.searchParams.append("state", state); if (statusCode) url.searchParams.append("statusCode", statusCode); const response = await fetch(url.toString()); const data = await response.json(); setTransactions(data.transactions); } catch (error) { console.error("Error fetching transactions:", error); } finally { setLoading(false); } }; return (

Transaction Search

setUserId(e.target.value)} className="border p-2 rounded text-sm" placeholder="Filter by user ID" />
setState(e.target.value)} className="border p-2 rounded text-sm" placeholder="Filter by state" />
setStatusCode(e.target.value)} className="border p-2 rounded text-sm" placeholder="Filter by status code" />
{transactions.length > 0 ? (
{transactions.map((tx) => ( ))}
ID User State Status Code Created
{tx.id} {tx.user} {tx.state} {tx.pspStatusCode} {tx.created}
) : (
{loading ? "Loading transactions..." : "No transactions found"}
)}
); } // mocks/handlers.ts import { http, HttpResponse } from "msw"; export const handlers = [ http.get("https://api.example.com/transactions", ({ request }) => { const url = new URL(request.url); // Get query parameters const userId = url.searchParams.get("userId"); const state = url.searchParams.get("state"); const statusCode = url.searchParams.get("statusCode"); // Filter transactions based on query parameters let filteredTransactions = [...transactionDummyData]; if (userId) { filteredTransactions = filteredTransactions.filter( (tx) => tx.user.toString() === userId ); } if (state) { filteredTransactions = filteredTransactions.filter( (tx) => tx.state.toLowerCase() === state.toLowerCase() ); } if (statusCode) { filteredTransactions = filteredTransactions.filter( (tx) => tx.pspStatusCode.toString() === statusCode ); } return HttpResponse.json({ transactions: filteredTransactions, count: filteredTransactions.length, }); }), ];