UNPKG

connect-transfer-react-native-sdk

Version:

Connect Transfer React Native SDK for Mastercard Open Banking Connect

103 lines (102 loc) 3.62 kB
"use strict"; import { useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Atomic, Scope } from '@atomicfi/transact-react-native'; import { AtomicEvents, ListenerType, TransferActionEvents, UserEvents, API_KEYS } from '../../constants'; import { useTransferEventResponse, getUserEventMappingForPDS, useTransferEventCommonData, getTransferProductType } from '../../events/transferEventHandlers'; import { complete } from '../../services/api/complete'; import { resetData } from '../../redux/slices/authenticationSlice'; import { eventQueue, useSendAuditData } from '../../events/auditEventQueue'; import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime"; const BRAND_COLOR = '#CF4500'; const SEARCH_COMPANY = 'search-company'; const MALaunchConnectTransfer = () => { const dispatch = useDispatch(); const { data, language } = useSelector(state => state.user || {}); const { eventHandler: transferEventHandler } = useSelector(state => state.event || {}); const { getResponseForInitializeDepositSwitch, getResponseForFinish, getResponseForClose } = useTransferEventResponse(); const commonData = useTransferEventCommonData(); const sendAuditData = useSendAuditData(); const { userToken, product, metadata } = data?.data || {}; useEffect(() => { Atomic.transact({ config: { publicToken: userToken, scope: Scope.USERLINK, // @ts-ignore tasks: [{ product: getTransferProductType(product) }], theme: { brandColor: BRAND_COLOR, dark: false }, language: language, deeplink: { step: SEARCH_COMPANY }, metadata: metadata, customer: { name: metadata?.applicationName || '' } }, onInteraction: interaction => handleInteractionEvents(interaction), onFinish: response => handleFinishEvent(response), onClose: response => handleCloseEvent(response) }); }, [userToken, language]); const handleInteractionEvents = interaction => { if (interaction.name === AtomicEvents.INITIALIZED_TRANSACT) { transferEventHandler?.onLaunchTransferSwitch(getResponseForInitializeDepositSwitch(interaction?.value?.product)); sendAuditData(UserEvents.INITIALIZE_DEPOSIT_SWITCH); } else { const userEventData = getUserEventMappingForPDS(interaction, commonData); if (userEventData) { transferEventHandler?.onUserEvent(getUserEventMappingForPDS(interaction, commonData)); sendAuditData(userEventData.action, userEventData); } } }; const handleCloseEvent = response => { let reason = response?.reason; const failReason = response?.failReason; if (typeof failReason === 'string' && failReason?.length > 0) { reason = failReason; } transferEventHandler?.onTransferEnd(getResponseForClose(reason)); sendAuditData(TransferActionEvents.END, { reason, listenerType: ListenerType.CLOSE }); completeAndReset(); }; const handleFinishEvent = response => { transferEventHandler?.onTransferEnd(getResponseForFinish(response)); sendAuditData(TransferActionEvents.END, { ...response, listenerType: ListenerType.FINISH }); completeAndReset(); }; function completeAndReset() { dispatch(complete(API_KEYS.complete)); eventQueue.destroy(); dispatch(resetData()); } return /*#__PURE__*/_jsx(_Fragment, {}); }; export default MALaunchConnectTransfer; //# sourceMappingURL=MALaunchConnectTransfer.js.map