React Installation
This is a react wrapper for the amwal-checkout-button package allowing it to be used directly in react projects
Example Repository and Demo
For a complete working example and live demonstration:
- Example Repository: https://github.com/amwal-tech/exmaple
- Live Demo: https://example.amwal.tech
Installation
npm i amwal-checkout-button-reactUsage
import { AmwalCheckoutButton } from 'amwal-checkout-button-react'
import React, { useEffect, useRef, useState } from 'react';
const ReactPage = () => {
const amwalRef = useRef<any>();
const [shippment, setShippment] = useState<any>([
{ "id": "1", "label": "Free shipping", "price": 0 }
]);
return (
<AmwalCheckoutButton
ref={amwalRef}
merchantId="sandbox-amwal-4e876d00-a50e-482c-a6e1-a1a9df400ce5"
amount="20"
countryCode="SA"
locale="ar"
darkMode="auto"
addressRequired={true}
emailRequired={false}
shippingMethods={shippment}
addressHandshake
// Address update event (you already have this)
onAmwalAddressUpdate={(event) => {
console.log('Address updated:', event.detail);
setShippment([{ "id": "1", "label": "Free shipping", "price": 0 }])
setTimeout(() => {
amwalRef.current.dispatchEvent(new Event('amwalAddressAck'))
}, 1000)
}}
// Country selection event
onAmwalAddressCountryUpdate={(event) => {
console.log('Country selected:', event.detail);
// Handle country change
}}
// State selection event
onAmwalAddressStateUpdate={(event) => {
console.log('State selected:', event.detail);
// Handle state change
}}
// Payment success event
onAmwalCheckoutSuccess={(event) => {
console.log('Payment successful!', event.detail);
const orderId = event.detail.orderId;
// Handle successful payment
}}
// Modal dismissed event
onAmwalDismissed={(event) => {
console.log('Modal dismissed, success:', event.detail);
// Handle modal dismissal
}}
// Pre-checkout trigger (requires enablePreCheckoutTrigger prop)
onAmwalPreCheckoutTrigger={(event) => {
console.log('Pre-checkout triggered:', event.detail);
// Perform validation or pre-checkout logic
// Then acknowledge or error:
// amwalRef.current.dispatchEvent(new Event('amwalPreCheckoutTriggerAck'))
// or
// amwalRef.current.dispatchEvent(new Event('amwalPreCheckoutTriggerError'))
}}
// Pre-pay trigger (requires enablePrePayTrigger prop)
onAmwalPrePayTrigger={(event) => {
console.log('Pre-pay triggered:', event.detail);
// Perform final validation before payment
// Then acknowledge or error:
// amwalRef.current.dispatchEvent(new Event('amwalPrePayTriggerAck'))
// or
// amwalRef.current.dispatchEvent(new Event('amwalPrePayTriggerError'))
}}
// Alternative payment success event
onUpdateOrderOnPaymentsuccess={(event) => {
console.log('Order updated on payment success:', event.detail);
const orderId = event.detail.orderId;
// Handle order update
}}
/>
);
}Properties
| Property | Attribute | Description | Type | Default |
|---|---|---|---|---|
addressHandshake | address-handshake | addressHandshake specifies if address event and ack is activated ("true" or "false") | boolean | false |
addressRequired | address-required | addressRequired specifies if shipping address is required or not ("true" or "false") | boolean | true |
allowedAddressCities | -- | allowedAddressCities specifies an array of allowed states for the address example {"SA":{"XX1":["Riady","Afif"],"XX2":["Jeddah","Makkah"]},"US":{"US1":["San Jose","San Francisco"],"US2":["New york"]}} | { [index: string]: CitySpecs; } | undefined |
allowedAddressCountries | -- | allowedAddressCountries specifies an array of allowed countries for the address | string[] | undefined |
allowedAddressStates | -- | allowedAddressStates specifies an array of allowed states for the address example {"SA":{"XX1":"State 1","XX2":"State 2"},"US":{"US1":"State 1","US2":"State 2"}} | { [index: string]: StateSpecs; } | undefined |
amount | amount | The amount of money to charge the customer | number | undefined |
countryCode | country-code | The country code of the merchant (e.g. SA) | SA | "SA" |
darkMode | dark-mode | Dark Mode: - on: turns on dark mode - off: turns on light mode - auto: use customer preference for dark mode | "auto" | "off" | "on" | "off" |
debug | debug | debug flag for verbose printing of debug messages | boolean | false |
disabled | disabled | disables the checkout button | boolean | false |
discount | discount | discount specifies any discount to be applied | number | 0 |
discountDescription | discount-description | discountDescription provides description for the discount | string | undefined |
emailRequired | email-required | emailRequired specifies if email address is required or not ("true" or "false"). Can only be true if addressRequired is true. | boolean | true |
enableAppleCheckout | enable-apple-checkout | enableAppleCheckout specifies if Apple Checkout is enabled | boolean | false |
enableDynamicShippingDetails | enable-dynamic-shipping-details | enableDynamicShippingDetails specifies if shipping countries, states and cities will load dynamically or prefilled in the parameters | boolean | false |
enablePreCheckoutTrigger | enable-pre-checkout-trigger | enable triggering a pre checkout click event to do initial tasks such as adding items to carts | boolean | false |
enablePrePayTrigger | enable-pre-pay-trigger | enable triggering a pre pay event to do final task such as order creation | boolean | false |
fees | fees | fees specifies any fees to be applied | number | 0 |
feesDescription | fees-description | feesDescription provides description for the fees | string | undefined |
footerMessage | footer-message | timelineFooterText specifies the text to be displayed in the footer of the timeline in the checkout modal. | string | '' |
initialAddress | -- | initialAddress specifies a default address, Country field is country code (two letter ISO country code) | IAddress | undefined |
initialEmail | initial-email | initialEmail specifies a default email | string | undefined |
initialFirstName | initial-first-name | initialFirstName specifies a default first name | string | undefined |
initialLastName | initial-last-name | initialLastName specifies a default last name | string | undefined |
initialPhoneNumber | initial-phone-number | initialPhone specifies a default phone number | string | undefined |
installmentOptionsUrl | installment-options-url | The installment options url is URL for the checkout page in the merchant website | string | undefined |
installmentsCount | installments-count | Number of installments | number | 6 |
label | label | the label of the button. Either checkout for final checkout or quicky-buy for per product buy | "Bank Installments" | "Pay with Apple Pay" | "Quick Checkout" | "Quick Checkout" |
locale | locale | the language of the plugin. supported languages are Arabic ("ar") and English ("en") | string | "en" |
merchantId | merchant-id | merchantId is the key to use obtained from https://merchant.sa.amwal.tech | string | undefined |
onlyShowBankInstallment | only-show-bank-installment | onlyShowBankInstallment specifies if only bank installments should be shown | boolean | false |
postcodeOptionalCountries | -- | enable postal code required option | string[] | undefined |
refId | ref-id | refId an identifier to be included in the installment transaction | string | undefined |
sendExtraAddressFields | send-extra-address-fields | sendExtraAddressFields specifies if extra address fields are sent in amwalAddressUpdate event | boolean | false |
shippingMethods | -- | shippingMethods an array of shipping methods | IShippingMethod[] | [] |
showContinueShoppingButton | show-continue-shopping-button | debug flag for verbose printing of debug messages | boolean | false |
showDiscountRibbon | show-discount-ribbon | showDiscountRibbon to show discount ribbon values are ("true" or "false") | boolean | false |
showPaymentBrands | show-payment-brands | showPaymentBrands to show supporeted brands under button values are ("true" or "false") | boolean | false |
street2Required | street2-required | street2Required specifies if street 2 is required or not ("true" or "false"). Can only be true if addressRequired is true. | boolean | false |
taxes | taxes | taxes specifies any additional taxes | number | 0 |
testEnvironment | test-environment | this is an internal testing feature. don't specify | string | undefined |
timelineStyle | timeline-style | timelineStyle specifies the style of the timeline in the checkout modal. | "default" | "simple" | 'default' |
uniqueRef | unique-ref | uniqueRef a boolean to enforce the uniqueness of refId | boolean | false |
Events
| Event | Description | Type |
|---|---|---|
amwalAddressCountryUpdate | amwalAddressCountryUpdate is a dom event fired on address country selection. | CustomEvent<ICountry> |
amwalAddressStateUpdate | amwalAddressStateUpdate is a dom event fired on address country selection. | CustomEvent<IState> |
amwalAddressUpdate | amwalAddressUpdate is a dom event fired on address selection. | CustomEvent<IAddress> |
amwalCheckoutSuccess | amwalCheckoutSuccess is a dom event fired on success of installment. the event has orderId field which can be used to lookup transaction status at https://backend.sa.amwal.tech | CustomEvent<AmwalCheckoutStatus> |
amwalDismissed | amwalDismissed is a dom event fired when the amwal modal or popup window is dismissed, event.detail indicates if it's successfull or not (boolean) | CustomEvent<AmwalDismissalStatus> |
amwalPreCheckoutTrigger | amwalPreCheckoutTrigger is a dom event fired once amwal checkout button is clicked before a transaction is created. It is enabled if enablePreCheckoutTrigger is set. It waits for either amwalPreCheckoutTriggerAck or amwalPreCheckoutTriggerError events to be sent back before proceeding with the normal checkout flow. | CustomEvent<ITransactionDetails> |
amwalPrePayTrigger | amwalPrePayTrigger is a dom event fired once installment button is clicked before installment is processed. It is enabled if enablePrePayTrigger is set. It waits for either amwalPrePayTriggerAck or amwalPrePayTriggerError events to be sent back before proceeding to payment or aborting respectively. | CustomEvent<ITransactionDetails> |
updateOrderOnPaymentsuccess | updateOrderOnPaymentsuccess is a dom event fired on success of installment. the event has orderId field which can be used to lookup transaction status at https://backend.sa.amwal.tech | CustomEvent<AmwalCheckoutStatus> |
ReferencesYou can find references regarding attributes and events Example
Updated 27 days ago