JSPM

  • Created
  • Published
  • Downloads 109
  • Score
    100M100P100Q69197F
  • License ISC

Paycargo Wrapper component our Express Payment Solutions

Package Exports

    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