connect-transfer-react-native-sdk
Version:
Connect Transfer React Native SDK for Mastercard Open Banking Connect
127 lines (126 loc) • 4.82 kB
JavaScript
;
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