"use client"; import Link from "next/link"; import { ExternalLink, RotateCcw, Wrench } from "lucide-react"; import { useTranslation } from "react-i18next"; import { AdminRowActionsMenu } from "@/components/admin/admin-row-actions-menu"; import { buttonVariants } from "@/components/ui/button"; import { canCompleteTransferInCredit, canManuallyProcessTransferOrder, canReverseTransferOrder, transferOrderHasReconcileAction, } from "@/lib/wallet-transfer-actions"; import { cn } from "@/lib/utils"; import type { AdminReconcileItemRow } from "@/types/api/admin-reconcile"; type ReconcileItemActionsProps = { row: AdminReconcileItemRow; canWriteWallet: boolean; busy: boolean; compact?: boolean; onCompleteCredit: (transferNo: string) => void; onReverse: (transferNo: string) => void; onManualProcess: (transferNo: string) => void; }; export function ReconcileItemActions({ row, canWriteWallet, busy, compact = false, onCompleteCredit, onReverse, onManualProcess, }: ReconcileItemActionsProps): React.ReactElement { const { t } = useTranslation(["reconcile", "wallet"]); const transferNo = row.side_a_ref ?? ""; const actionRow = { direction: row.transfer_direction ?? undefined, status: row.current_transfer_status ?? row.status, fail_reason: row.transfer_fail_reason, external_ref_no: row.external_ref_no, can_reverse: row.can_reverse, can_complete_credit: row.can_complete_credit, can_manually_process: row.can_manually_process, }; const hasWalletAction = transferNo !== "" && transferOrderHasReconcileAction(actionRow, canWriteWallet); const menuActions = [ { key: "complete", label: t("completeCredit", { ns: "wallet" }), hidden: !canCompleteTransferInCredit(actionRow, canWriteWallet), onClick: () => onCompleteCredit(transferNo), }, { key: "manual", label: t("markCaseClosed", { ns: "wallet" }), icon: Wrench, hidden: !canManuallyProcessTransferOrder(actionRow, canWriteWallet), onClick: () => onManualProcess(transferNo), }, { key: "reverse", label: t("reverse", { ns: "wallet" }), icon: RotateCcw, destructive: true, hidden: !canReverseTransferOrder(actionRow, canWriteWallet), onClick: () => onReverse(transferNo), }, { key: "transfer", label: t("openTransferOrder"), icon: ExternalLink, hidden: transferNo === "", onClick: () => { window.location.href = `/admin/wallet/transfer-orders?transfer_no=${encodeURIComponent(transferNo)}`; }, }, { key: "txn", label: t("openWalletTxn"), icon: ExternalLink, hidden: !row.side_b_ref, onClick: () => { window.location.href = `/admin/wallet/transactions?txn_no=${encodeURIComponent(row.side_b_ref ?? "")}`; }, }, ]; if (compact) { if (!hasWalletAction && !transferNo && !row.side_b_ref) { return ; } return ; } return (
{hasWalletAction ? a.key !== "transfer" && a.key !== "txn")} /> : null} {transferNo !== "" ? ( {t("openTransferOrder")} ) : null} {row.side_b_ref ? ( {t("openWalletTxn")} ) : null} {!transferNo && !row.side_b_ref ? : null}
); }