UNPKG

connect-transfer-react-native-sdk

Version:

Connect Transfer React Native SDK for Mastercard Open Banking Connect

127 lines (126 loc) 4.82 kB
"use strict"; import React, { useEffect, useRef, useState } from 'react'; import { Modal, SafeAreaView, View } from 'react-native'; import { useDispatch, useSelector } from 'react-redux'; import i18next from 'i18next'; import { authenticateUser } from '../services/api/authenticate'; import { errorTranslation } from '../services/api/errorTranslation'; import { setUrl, setUrlData, resetData, setModalVisible } from '../redux/slices/authenticationSlice'; import { extractUrlData } from '../utility/utils'; import { setEventHandlers } from '../redux/slices/eventHandlerSlice'; import { useTransferEventResponse } from '../events/transferEventHandlers'; import { ListenerType, RedirectReason, TransferActionEvents, TransferModuleType, API_KEYS } from '../constants'; import { MARootContainerStyle as styles } from './ContainerStyles'; import MALandingView from './LandingView/MALandingView'; import MARedirectingView from './MARedirectingView'; import MAErrorView from './MAErrorView'; import MALoader from '../components/MALoader'; import { eventQueue, useSendAuditData } from '../events/auditEventQueue'; import { jsx as _jsx } from "react/jsx-runtime"; const MARootContainer = ({ connectTransferUrl, eventHandlers }) => { const dispatch = useDispatch(); const hasInitializedRef = useRef(false); const { modalVisible, language, error, data, baseURL } = useSelector(state => state.user || {}); const { eventHandler: transferEventHandler } = useSelector(state => state.event || {}); const [showRedirecting, setShowRedirecting] = useState(false); const { getResponseForInitializeTransfer, getResponseForClose } = useTransferEventResponse(); const sendAuditData = useSendAuditData(); const skipLandingPage = isSkipLandingPageEnabled(data); const isRedirecting = skipLandingPage || showRedirecting; const isValidUrlData = extractUrlData(connectTransferUrl); const isError = error || !connectTransferUrl || isExperienceError(data) || !isValidUrlData; const auditServiceToken = data?.auditServiceDetails?.token; useEffect(() => { dispatch(setModalVisible()); eventHandlers && dispatch(setEventHandlers(eventHandlers)); eventQueue.reset(); if (isValidUrlData) { dispatch(setUrl(connectTransferUrl)); dispatch(setUrlData(isValidUrlData)); } }, [connectTransferUrl]); useEffect(() => { if (baseURL) { dispatch(authenticateUser(API_KEYS.authenticateUser)); dispatch(errorTranslation(API_KEYS.errorTranslation)); i18next.changeLanguage(language); } }, [baseURL]); useEffect(() => { if (!isError && data && !hasInitializedRef.current) { transferEventHandler?.onInitializeConnectTransfer(getResponseForInitializeTransfer()); sendAuditData(TransferActionEvents.INITIALIZE_TRANSFER); hasInitializedRef.current = true; } }, [data, isError]); const closeModal = () => { transferEventHandler?.onTransferEnd(getResponseForClose(RedirectReason.EXIT)); auditServiceToken && sendAuditData(TransferActionEvents.END, { reason: RedirectReason.EXIT, listenerType: ListenerType.CLOSE }); setShowRedirecting(false); eventQueue.destroy(); dispatch(resetData()); }; const renderConditionalViews = () => { if (isError) return /*#__PURE__*/_jsx(MAErrorView, { isExperienceError: isExperienceError(data), isInvalidUrl: !isValidUrlData }); if (isRedirecting) return /*#__PURE__*/_jsx(MARedirectingView, {}); if (!isError && data) return /*#__PURE__*/_jsx(MALandingView, { onNextPress: () => setShowRedirecting(true) }); return /*#__PURE__*/_jsx(View, { style: styles.loader, children: /*#__PURE__*/_jsx(MALoader, { color: "gray", size: 70, strokeWidth: 7, borderRadius: 35 }) }); }; return /*#__PURE__*/_jsx(Modal, { visible: modalVisible, animationType: 'slide', transparent: false, testID: "test-modal", onRequestClose: closeModal, children: /*#__PURE__*/_jsx(SafeAreaView, { style: styles.safeAreaView, children: renderConditionalViews() }) }); }; export function isSkipLandingPageEnabled(data) { const { transferModule, customizations } = data?.data?.experience ?? {}; return transferModule?.moduleType?.toUpperCase?.() === TransferModuleType.PDS && transferModule?.enabled && customizations?.skipLandingPage; } export function isExperienceError(data) { const { id, transferModule } = data?.data?.experience ?? {}; return !!id && (!transferModule || Object.keys(transferModule).length === 0 || transferModule.moduleType?.toUpperCase?.() !== TransferModuleType.PDS || transferModule.enabled !== true); } export default MARootContainer; //# sourceMappingURL=MARootContainer.js.map