@paycargo/js-react
TypeScript icon, indicating that this package has built-in type declarations

0.1.5 • Public • Published

React TypeScript

First, run npm i @paycargo/js-react in your Command Line Interface. Afterwards, the following dependency will be found in the package.json. The ellipses (...) represent the presence of other possible code.

. . .
{
   "dependencies": {
      . . .
      "@paycargo/js-react": "^0.0.2"
      . . .
}
. . .

Next, import React into the file, set up the useState, and define handleOnClick. We have included some dummy transaction information to fully illustrate what this implementation would look like.

import React, { useState, ChangeEvent} from "react";
import "./styles.css";

export default function App() {
  const [selectedTransactions, setSelectedTransactions] = useState<any[]>([]);
  const transactions = [
    {
      number: "2123190692",
      departureDate: "2023-11-17T00:00:00.000Z",
      arrivalDate: "2023-11-29T00:00:00.000Z",
      paymentDueDate: "2023-11-22T00:00:00.000Z",
      hasArrived: "N",
      total: 45.38,
      direction: "Inbound",
      customerRefNumber: "29338586",
      parent: "HLCUDUB231004840",
      notes: "4716747",
      type: "Invoice",
      index: 0,
      vendorId: 281573,
    },
    {
      number: "2123190470",
      departureDate: "2023-10-10T00:00:00.000Z",
      arrivalDate: "2023-11-26T00:00:00.000Z",
      paymentDueDate: "2023-11-22T00:00:00.000Z",
      total: 6395.04,
      direction: "Inbound",
      customerRefNumber: "23686246",
      parent: "HLCUBKK231007945",
      batchId: 344788,
      notes: "4716734",
      type: "Invoice",
      index: 1,
      vendorId: 281573,
    },
    {
      number: "2123190469",
      departureDate: "2023-10-10T00:00:00.000Z",
      arrivalDate: "2023-11-26T00:00:00.000Z",
      paymentDueDate: "2023-11-22T00:00:00.000Z",
      hasArrived: "N",
      total: 6595.04,
      customerRefNumber: "23686246",
      parent: "HLCUBKK231007945",
      notes: "4716733",
      type: "Invoice",
      index: 2,
      vendorId: 281573,
    },
  ];

  function handleOnClick(event: ChangeEvent<HTMLInputElement>) {
    const { target } = event;
    const { value, checked } = target;
    if (checked) {
      setSelectedTransactions((state) => [
        ...state,
        transactions[Number(value)],
      ]);
    } else {
      setSelectedTransactions((state) => {
        const newState = state.filter((trans) => trans.index !== Number(value));
        return newState;
      });
    }
  }

Now, the PayCargo Checkout button must be loaded by importing and defining defineCustomElements as well as importing the PayCargo Checkout component itself and passing Options into it.

import React, { useState, ChangeEvent, useEffect, useRef } from "react";
import { defineCustomElements, PaycargoCheckout } from "@paycargo/js-react";
import "./styles.css";

defineCustomElements();

// OPTIONS that will be passed as a prop to the PaycargoCheckout Component
const options = {
  env: "dev", // PROD , TEST, DEV
  code: "odex", // Provied by PayCargo
  brand: "odex", // Provied By PayCargo
  originURL: "https://d566dp.csb.app", // URL to whitelist
};

. . .

      <div style={{ border: "1px solid black", marginBottom: "10px" }} />
      <div id="paycargo-button-container" className="text-center">
        <PaycargoCheckout
          options={options}
          pcTransactions={selectedTransactions}
        />
      </div>

Event Listeners

We want to listen to two types of events: (1) when the transaction is being closed to see if any action was taken, and (2) when a payment has been attempted or successfully approved. To do this, we need to implement useEffect and add event listeners to the PayCargo Checkout component.

import React, { useState, ChangeEvent, useEffect, useRef } from "react";

. . .

export default function App() {
  . . . 
  const paycargoRef = useRef<HTMLPaycargoCheckoutElement | null>(null);
  . . .

. . .

  useEffect(() => {
    const listener = (event: any) => {
      console.log("PaycargoCheckout Event", event.detail);
    };

    paycargoRef?.current?.addEventListener("close", listener);
    paycargoRef?.current?.addEventListener("paymentResponse", listener);

    return () => {
      paycargoRef?.current?.removeEventListener("close", listener);
      paycargoRef?.current?.removeEventListener("paymentResponse", listener);
    };
  }, [paycargoRef]);

  return ( . . .

        <PaycargoCheckout
          ref={paycargoRef}
          options={options}
          pcTransactions={selectedTransactions}
        />
. . .

How to Pass Data to the PayCargo Checkout Component

Properties

Property Name Values Type Required Description
options object ✔️ Passing necessary options into the component
env string ✔️ Options: local, dev, test, prod
code string ✔️ PayCargo integration code
originURL string ✔️ Host URL where component is loaded
brand string
size string Options: full, lg, md where the default size is md
visible true / false boolean ✔️ To make PayCargo Checkout component visible or hidden
pcTransactions object[] ✔️ PayCargo transaction object
type string ✔️ Transaction type (example: Invoice, Terminal Fee, etc)
vendorId number / null ✔️
number string ✔️
direction 'Inbound' / 'Outbound' ✔️
total number ✔️ Amount of total transaction. If transaction lines are present, then the total should equal the sum of all transaction line amounts
arrivalDate string / date
hasArrived 'Y' / 'N' ✔️
bolLink string
parent string
shipperRefNumber string
customerRefNumber string
subcategory string
paymentDueDate date
notes string / null
transactionLines array

Transaction Lines

Property Name Values Type Required Description
transactionLines object Passing necessary options into the component. Note: these property names are case sensitive
AMOUNT number ✔️ Amount for transaction line
DESCRIPTION string ✔️
START_DATE string / date
END_DATE string / date
QUANTITY number
UNIT_PRICE number
containerNumber string OSRA: container number
availabilityDate string / date OSRA: first available date
pod string OSRA: port of discharge
sfd string OSRA: start free day
lfd string OSRA: last free day
freeTimeDays string OSRA: free time days
ddr string OSRA: demurrage detention rule
feeContact string OSRA: mitigation contact
complianceStatement string OSRA: compliance statement
commonCarrierStatement string OSRA: common carrier statement

Package Sidebar

Install

npm i @paycargo/js-react

Weekly Downloads

21

Version

0.1.5

License

ISC

Unpacked Size

33 kB

Total Files

22

Last publish

Collaborators

  • courtney-mq
  • nbhavsar21
  • aszewc-mq
  • javier_media_query
  • mrodiles
  • andrearestrepox
  • kamila143
  • darboleda
  • idowling
  • sylthedev
  • nicholas-palomba1
  • mq-eduardo
  • indrias
  • dyurov
  • jcdieppa
  • mediaqueryinc
  • aqaffaf
  • scottmatsumoto
  • albe070
  • mannysin
  • dianyrs
  • eyazayub
  • forzaturian
  • nalvarezpay