// app/transactions/page.tsx 'use client'; import { useState } from 'react'; 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'; import { transactionDummyData } from './transactionData'; 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 }); }), ]; // 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, } ];