1.0.17 • Published 12 months ago

protect-group-refundable-react v1.0.17

Weekly downloads
-
License
ISC
Repository
-
Last release
12 months ago

Protect Group Refundable React Component

This component is designed to place our Refundable Content on your React app, and allow you to also send transactions into our platform using a simple hook.

Installation

npm i --save protect-group-refundable-react

Usage

RefundableProvider

Add the provider somewhere near the root of your application

import {
	RefundableOptions,
	RefundableProvider
} from 'protect-group-refundable-react'

function MyApp() {
	const options: RefundableOptions = {
		environment: 'test',
		currencyCode: 'GBP',
		languageCode: 'en',
		offeringMethod: 'OPT-OUT',
		productCode: 'PKG',
		vendorCode: '<YOUR-VENDOR-CODE>',
		eventDateFormat: 'DD/MM/YYYY',
		premium: 10,
		whiteLabelled: false,
		displayTrustPilot: true,
		displayRefundText: true,
		allowNonRefundableLabelClick: false,
		labelText: 'Default',
		vertical: 'Default',
		compact: false
	}

	return (
		<RefundableProvider options={options}>
			<TheRestOfYourApp/>
		</RefundableProvider>
	)
}

RefundableContent

Add the RefundableContent component where you would like our Refundable Content to be placed on your page. Use the provided hook to write a transaction into our platform

import {
	RefundableContent,
	ProtectionChangeEventArgs,
	useRefundableActions,
	WriteTransactionRequest
} from 'protect-group-refundable-react'

function MyCheckoutPage() {
	const {writeTransaaction} = useRefundableActions()

	const handleProtectionChange = (args: ProtectionChangeEventArgs) => {
		//do something with the args
	}

	const handleMakePayment = async () => {
		try {
			// make the payment
			const request: WriteTransactionRequest = {
				bookingReference: 'your-booking-reference',
				eventDate: '31/12/2022',
				customerFirstName: 'Test',
				customerLastName: 'Test'
			}
			const response = await writeTransaaction(request)
			// Do something with the response

		} catch (e) {
			// Something went wrong somewhere
		}
	}

	return (
		<MyPageWrapper>
			//some components
			<RefundableContent bookingCost={10} onProtectionChange={handleProtectionChange}/>
			//some components
			<MakePaymentButton onClick={handleMakePayment}></MakePaymentButton>
		</MyPageWrapper>
	)
}

Types

  • Environment - 'test' | 'prod'
  • OfferingMethod - 'OPT-OUT' | 'SELECT'
  • ProductCode - 'TKT' | 'HTL' | 'PKG'
  • LabelText - 'Default' | 'Enhance' | 'Upgrade' | 'Question'
  • Vertical - 'Default' | 'Transport' | 'Accommodation' | 'Sport' | 'Tours' | 'VenuesEvents' | 'MassParticipation'

RefundableProvider Props

PropertyTypeRequired?DefaultDescription
environmentEnvironmentyesSend requests to either our test or production api. Should be either 'test' or 'prod'
currencyCodestringyesA valid currency code
languageCodestringyesA valid language code. Currently supported languages are 'en', 'fr', 'es' and 'pt'
offeringMethodOfferingMethodyesControls whether a refundable booking is pre-selected or not
productCodeProductCodeyesThe type of product offered to the customer
vendorCodestringyesYour vendor code supplied by our commercial team. Please ensure the correct vendor code is supplied for the environment
eventDateFormatstringnoOur api expects a date format of ISO 861 yyyy-MM-ddTHH:mm:ss.FFFFFzzz. If you are unable to supply a date in this format you can optionally configure the format here. The format you supply must match a javascript date format from the moment.js library
premiumnumberyesThe protection rate applied to the cost of a booking
whiteLabelledbooleannofalseOur Refundable Content comes styled. If you wish to theme the content to match our site, set this to true. Each of the sections in the content will then have well names classes you can target
displayTrustPilotbooleannotrueDisplays our TrustPilot widget
displayRefundTextbooleannofalseDisplays a line of text showing the average time it takes to process a refund application
allowNonRefundableLabelClickbooleannofalseAllow the entire label of the non-refundable booking option to be selected
labelTextLabelTextno'Default'Allows a subtly different title to be displayed
verticalVerticalno'Default'We can tailor the wording of different verticals to provide an optimum experience for a customer
compactbooleannofalseWe can tailor a more compact version the wording on different verticals to provide an optimum experience for a customer

RefundableContent Props

PropertyTypeRequired?DefaultDescription
bookingCostnumberyesThe cost of the booking
onProtectionChangefunctionyesFunction that is invoked when any of the components internal state changes

ProtectionChangeEventArgs

The parameter passed into the onProtectionChange function

interface ProtectionChangeEventArgs {
	protectionSelected: boolean
	protectionValue: number
	bookingCost: number
	totalValue: number
	formattedProtectionValue: string
	formattedBookingCost: string
	formattedTotalValue: string
}

Hooks

useRefundableActions

useRefundableActions returns an object containing functions to interact with our platform

interface WriteTransactionRequest {
	bookingReference: string
	eventDate: string
	customerFirstName: string
	customerLastName: string
}

interface WriteTransactionResponse {
	refundableLink: string
	refundableConfirmationHtml: string
}

interface RefundableActions {
	writeTransaction: (request: WriteTransactionRequest) => Promise<WriteTransactionResponse>
}

import {useRefundableActions} from 'protect-group-refundable-react'

function YourComponent() {
	const { writeTransaction } = useRefundableActions()
} 

useRefundableContext

useRefundableContext provides access to the RefundableContextOptions interface, which has functions allowing you to update the booking cost and currency code using functions, if required at runtime

interface RefundableOptions {
	environment: Environment
	vendorCode: string
	currencyCode: string
	languageCode: string
	productCode: ProductCode
	offeringMethod: OfferingMethod
	premium: number
	eventDateFormat?: string
	displayTrustPilot?: boolean
	displayRefundText?: boolean
	labelText?: LabelText
	vertical?: Vertical
	whiteLabelled?: boolean
	allowNonRefundableLabelClick?: boolean
	compact?: boolean
}

interface RefundableContextOptions extends RefundableOptions {
	bookingData: BookingData
	isWhiteLabelled: boolean
	isCompact: boolean
	toggleProtectionSelected: (isSelected: boolean) => void
	updateBookingCost: (bookingCost: number) => void
	updateCurrency: (currencyCode: string) => void
}

import {useRefundableContext} from 'protect-group-refundable-react'

function YourComponent() {
	const { updateBookingCost } = useRefundableContext() 
}
1.2.1-Beta-2

12 months ago

1.2.1-Beta-1

12 months ago

1.0.17

1 year ago

1.0.17-beta-1

1 year ago

1.0.16

2 years ago

1.0.15-beta-1

2 years ago

1.0.16-beta-1

2 years ago

1.0.15

2 years ago

1.0.14

2 years ago

1.0.14-beta

2 years ago

1.0.13

2 years ago

1.0.12

2 years ago

1.0.11

2 years ago

1.0.10-beta-3

2 years ago

1.0.10-beta-2

2 years ago

1.0.10-beta-1

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago