JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 59
  • Score
    100M100P100Q59962F
  • License ISC

Paycargo Wrapper component our Express Payment Solutions

Package Exports

  • @paycargo/js-react
  • @paycargo/js-react/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@paycargo/js-react) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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