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