"use client"; import { useEffect, useState } from "react"; import { Box, Button, IconButton, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography, } from "@mui/material"; import CheckCircleIcon from "@mui/icons-material/CheckCircle"; import CancelIcon from "@mui/icons-material/Cancel"; import MoreVertIcon from "@mui/icons-material/MoreVert"; import { dashboardService } from "@/app/services/dashboardService"; import { formatToDateTimeString } from "@/app/utils/formatDate"; import "./TransactionsWaitingApproval.scss"; import { type IReviewTransactionsData, type IReviewTransaction, } from "@/app/services/types"; interface ITransactionsWaitingApprovalProps { initialReviewTransactions?: IReviewTransactionsData | null; } export const TransactionsWaitingApproval = ({ initialReviewTransactions = null, }: ITransactionsWaitingApprovalProps) => { const [reviewTransactions, setReviewTransactions] = useState( initialReviewTransactions || dashboardService.getCurrentDashboardData()?.reviewTransactions || null ); /** * Subscribe to dashboard data changes */ useEffect(() => { const subscription = dashboardService .getDashboardData$() .subscribe(data => { if (data?.reviewTransactions) { setReviewTransactions(data.reviewTransactions); } }); // Cleanup subscription on unmount return () => subscription.unsubscribe(); }, []); /** * Format transaction for display */ const formatTransaction = (tx: IReviewTransaction) => { const createdDate = tx.created || tx.modified || ""; const formattedDate = createdDate ? formatToDateTimeString(createdDate) : ""; return { id: tx.id?.toString() || tx.external_id || "", user: tx.customer || "", created: formattedDate, type: tx.type || "", amount: tx.amount ? `${tx.amount < 0 ? "-" : ""}${Math.abs(tx.amount).toFixed(2)} ${tx.currency || ""}` : "", psp: tx.psp_id || "", }; }; const transactions = reviewTransactions?.transactions || []; const displayTransactions = transactions.map(formatTransaction); return ( Transactions Waiting for Approval {reviewTransactions && ( ID User Created Type Amount PSP Action {displayTransactions.length > 0 ? ( displayTransactions.map((tx, i) => ( {tx.id} {tx.user} {tx.created} {tx.type} {tx.amount} {tx.psp} )) ) : ( No transactions waiting for approval )}
)}
); };