Skip to content
Snippets Groups Projects
TransactionTr.js 2.27 KiB
Newer Older
  • Learn to ignore specific revisions
  • import React, { useState, useRef } from "react";
    import { Overlay, Popover } from "react-bootstrap";
    
    meskio's avatar
    meskio committed
    import { LinkContainer } from "react-router-bootstrap";
    
    function transactionOverlay(transaction) {
      let title;
      let content;
      switch (transaction.type) {
        case "purchase":
          title = "compra";
    
    meskio's avatar
    meskio committed
          content =
            transaction.purchase
              .map((p) => (p.product !== null ? p.product.name : p.code))
              .join(",") + ".";
    
    meskio's avatar
    meskio committed
          break;
        case "topup":
          if (transaction.total < 0) {
            title = "devolución";
          } else {
            title = "recarga";
          }
          content = transaction.topup.comment;
          break;
        case "order":
    
          if (!transaction.order) {
            title = "pedido";
            break;
          }
    
    meskio's avatar
    meskio committed
          title = "pedido de " + transaction.order.name;
          content = transaction.order_purchase.map((p) => {
    
    meskio's avatar
    meskio committed
            const name =
              p.order_product.product !== null
                ? p.order_product.product.name
                : p.order_product.code;
    
    meskio's avatar
    meskio committed
            return (
              <div key={"O" + transaction.ID + "-" + p.order_product.ID}>
    
    meskio's avatar
    meskio committed
                {name + ": " + p.amount}
    
    meskio's avatar
    meskio committed
                <br />
              </div>
            );
          });
          break;
        case "refund":
    
          if (!transaction.refund) {
            title = "devolución";
            break;
          }
    
    meskio's avatar
    meskio committed
          title = "devolución de " + transaction.refund.name;
          break;
    
    meskio's avatar
    meskio committed
        case "dues":
          title = "cuota mensual";
          break;
    
    meskio's avatar
    meskio committed
        default:
          title = "transacción";
      }
      return (
        <Popover>
    
          <Popover.Header>{title}</Popover.Header>
          {content && <Popover.Body>{content}</Popover.Body>}
    
    meskio's avatar
    meskio committed
        </Popover>
      );
    }
    
    
    function TransactionTr({ transaction, children }) {
      const [show, setShow] = useState(false);
      const target = useRef(null);
    
      const colorClass = transaction.total < 0 ? "table-danger" : "table-success";
    
    meskio's avatar
    meskio committed
      return (
    
        <>
          <LinkContainer to={"/transaction/" + transaction.ID} key={transaction.ID}>
            <tr
              className={colorClass}
              ref={target}
              onMouseEnter={() => setShow(true)}
              onMouseLeave={() => setShow(false)}
            >
              {children}
            </tr>
    
    meskio's avatar
    meskio committed
          </LinkContainer>
    
          <Overlay target={target.current} show={show}>
            {transactionOverlay(transaction)}
          </Overlay>
        </>
    
    meskio's avatar
    meskio committed
      );
    }
    
    export default TransactionTr;