import React, { useRef, useEffect, useState } from "react"; import styles from "./Transactions.module.css"; import { useParams } from "react-router-dom"; import { ColorRing } from "react-loader-spinner"; import ButtonWithReplica from "../components/ButtonWithReplica"; import { getTransaction, confirmTransaction, handleClaimHasPaid, declineTransaction, cancelTransaction, } from "../helpers/transactionHelpers"; import { getTables } from "../helpers/tableHelper"; import TableCanvas from "../components/TableCanvas"; import { useSearchParams } from "react-router-dom"; export default function Transactions({ propsShopId, sendParam, deviceType, paymentUrl, }) { const { shopId, tableId } = useParams(); if (sendParam) sendParam({ shopId, tableId }); const [tables, setTables] = useState([]); const [selectedTable, setSelectedTable] = useState(null); const [isPaymentLoading, setIsPaymentLoading] = useState(false); const [searchParams] = useSearchParams(); const [transaction, setTransaction] = useState(null); const noteRef = useRef(null); const [isPaymentOpen, setIsPaymentOpen] = useState(false); useEffect(() => { const transactionId = searchParams.get("transactionId") || ""; const fetchData = async () => { try { const fetchedTransaction = await getTransaction(transactionId); setTransaction(fetchedTransaction); console.log(fetchedTransaction); // Log the fetched transaction } catch (error) { console.error("Error fetching transaction:", error); } }; const waitForLocalStorage = async () => { while (localStorage.getItem("auth") === null) { await new Promise((resolve) => setTimeout(resolve, 1000)); // Wait 1 second } }; const initialize = async () => { await waitForLocalStorage(); await fetchData(); }; initialize(); }, [searchParams]); useEffect(() => { const fetchData = async () => { try { const fetchedTables = await getTables(shopId || propsShopId); setTables(fetchedTables); } catch (error) { console.error("Error fetching tables:", error); } }; fetchData(); }, [shopId || propsShopId]); const calculateTotalPrice = (detailedTransactions) => { return detailedTransactions.reduce((total, dt) => { return total + dt.qty * dt.Item.price; }, 0); }; const handleConfirm = async (transactionId) => { if (isPaymentLoading) return; setIsPaymentLoading(true); try { const c = await handleClaimHasPaid(transactionId); if (c) { setTransaction({ ...transaction, confirmed: c.confirmed, paymentClaimed: true, }); console.log(transaction); } } catch (error) { console.error("Error processing payment:", error); } finally { setIsPaymentLoading(false); } }; const handleDecline = async (transactionId) => { if (isPaymentLoading) return; setIsPaymentLoading(true); try { const c = await cancelTransaction(transactionId); } catch (error) { console.error("Error processing payment:", error); } finally { setIsPaymentLoading(false); } }; const autoResizeTextArea = (textarea) => { if (textarea) { textarea.style.height = "auto"; // Reset height textarea.style.height = `${textarea.scrollHeight}px`; // Set new height } }; useEffect(() => { if (noteRef.current) { autoResizeTextArea(noteRef.current); } }, [transaction?.notes]); return (
{transaction && (
setSelectedTable(transaction.Table || { tableId: 0 }) } >
{transaction.payment_type == 'cashless' ?

silahkan bayar QR

:

silahkan bayar ke kasir

}

Transaction ID: {transaction.transactionId}

Payment Type: {transaction.payment_type}

Transaction ID: {transaction.transactionId}

Payment Type: {transaction.payment_type}

    {(isPaymentOpen ? transaction.DetailedTransactions.slice(0, 2) : transaction.DetailedTransactions ).map((detail) => (
  • {detail.Item.name} - {detail.qty} x Rp{" "} {detail.Item.price}
  • ))}

{transaction.serving_type === "pickup" ? "Self pickup" : `Serve to ${ transaction.Table ? transaction.Table.tableNo : "N/A" }`}

{(transaction.notes !== "") && ( <>
Note :