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 { getTransaction, confirmTransaction, declineTransaction, } 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, handleMoveToTransaction, depth, shopImg, setModal }) { 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 [notAcceptedItems, setNotAcceptedItems] = useState([]); const noteRef = useRef(null); const [transactionRefreshKey, setTransactionRefreshKey] = useState(0); useEffect(() => { const transactionId = searchParams.get("transactionId") || ""; const fetchData = async () => { try { const fetchedTransaction = await getTransaction(transactionId); setTransaction(fetchedTransaction); console.log(transaction); } catch (error) { console.error("Error fetching transaction:", error); } }; fetchData(); }, [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.promoPrice ? dt.promoPrice : dt.price); }, 0); }; const handleConfirm = async (transactionId) => { if (isPaymentLoading) return; setIsPaymentLoading(true); try { const c = await confirmTransaction(transactionId, notAcceptedItems); if (c) { console.log(c) setTransaction(c); setTransactionRefreshKey(transactionRefreshKey+1); } } catch (error) { console.error("Error processing payment:", error); } finally { setIsPaymentLoading(false); } }; const handleDecline = async (transactionId) => { if (isPaymentLoading) return; setIsPaymentLoading(true); try { const c = await declineTransaction(transactionId); if (c) { console.log(c) setTransaction({ ...transaction, confirmed: c.confirmed }); setTransactionRefreshKey(transactionRefreshKey+1); } // if (c) { // // Update the confirmed status locally // setTransactions((prevTransactions) => // prevTransactions.map((transaction) => // transaction.transactionId === transactionId // ? { ...transaction, confirmed: -1 } // Set to confirmed // : transaction // ) // ); // } } 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 == 'cash' ? 'Tunai' : transaction.payment_type == 'cashless' ? 'Non tunai' : transaction.payment_type == 'paylater' ? 'Open bill' :'Close bill' }

Transaction ID: {transaction.transactionId}

{ transaction.payment_type == 'paylater/cash' ?

Cash

: (transaction.payment_type == 'paylater/cashless' &&

Non tunai

) }
handleMoveToTransaction('previous', transaction.transactionId)}>
{depth > 0 &&
{depth}
}
handleMoveToTransaction('next', transaction.transactionId)}>
{transaction.DetailedTransactions.map((detail) => (
= 0 && detail.acceptedStatus == 0 ? 'visible' : 'hidden', margin: transaction.confirmed >= 0 && detail.acceptedStatus == 0 ? '4px 10px 0px 10px' : '4px 0px 0px 0px' }} onClick={() => setNotAcceptedItems(prevState => prevState.includes(detail.detailedTransactionId) ? prevState.filter(item => item !== detail.detailedTransactionId) : [...prevState, detail.detailedTransactionId] ) } > {!notAcceptedItems.includes(detail.detailedTransactionId) ? : }
{detail.Item.name} - {notAcceptedItems.includes(detail.detailedTransactionId) || detail.qty < 1 ? 'tidak tersedia' : `${detail.qty} x Rp ${detail.promoPrice ? detail.promoPrice : detail.price}`}
))}
{!transaction.is_paid && transaction.confirmed > -1 &&
{ localStorage.setItem('lastTransaction', JSON.stringify(transaction)); setModal("message", { captMessage: 'Silahkan tambahkan pesanan', descMessage: 'Pembayaran akan ditambahkan ke transaksi sebelumnya.' }, null, null); // Dispatch the custom event window.dispatchEvent(new Event("localStorageUpdated")); }} className={styles["addNewItem"]} > Tambah pesanan
}

{transaction.serving_type === "pickup" ? "Ambil sendiri" : `Diantar ke ${transaction.Table ? transaction.Table.tableNo : "N/A" }`}

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