@paycargo/js-react v0.1.6
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 | :heavy_check_mark: | Passing necessary options into the component | |
env | string | :heavy_check_mark: | Options: local , dev , test , prod | |
code | string | :heavy_check_mark: | PayCargo integration code | |
originURL | string | :heavy_check_mark: | Host URL where component is loaded | |
brand | string | |||
size | string | Options: full , lg , md where the default size is md | ||
visible | true / false | boolean | :heavy_check_mark: | To make PayCargo Checkout component visible or hidden |
pcTransactions | object[] | :heavy_check_mark: | PayCargo transaction object | |
type | string | :heavy_check_mark: | Transaction type (example: Invoice , Terminal Fee , etc) | |
vendorId | number / null | :heavy_check_mark: | ||
number | string | :heavy_check_mark: | ||
direction | 'Inbound' / 'Outbound' | :heavy_check_mark: | ||
total | number | :heavy_check_mark: | 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' | :heavy_check_mark: | ||
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 | :heavy_check_mark: | Amount for transaction line | |
DESCRIPTION | string | :heavy_check_mark: | ||
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 |