connect-transfer-react-native-sdk
Version:
Connect Transfer React Native SDK for Mastercard Open Banking Connect
137 lines (136 loc) • 5.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
var _reactNative = require("react-native");
var _reactI18next = require("react-i18next");
var _reactRedux = require("react-redux");
var _errorIcon = _interopRequireDefault(require("../assets/errorIcon.png"));
var _MASecuredBy = _interopRequireDefault(require("../components/MASecuredBy"));
var _MAButton = _interopRequireDefault(require("../components/MAButton"));
var _ContainerStyles = require("./ContainerStyles");
var _constants = require("../constants");
var _transferEventHandlers = require("../events/transferEventHandlers");
var _utils = require("../utility/utils");
var _authenticationSlice = require("../redux/slices/authenticationSlice");
var _auditEventQueue = require("../events/auditEventQueue");
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const MAErrorView = ({
isExperienceError = false,
isInvalidUrl = false
}) => {
const dispatch = (0, _reactRedux.useDispatch)();
const timeoutRef = (0, _react.useRef)(null);
const {
t
} = (0, _reactI18next.useTranslation)();
const {
eventHandler: transferEventHandler
} = (0, _reactRedux.useSelector)(state => state.event || {});
const {
data
} = (0, _reactRedux.useSelector)(state => state.errorTranslation || {});
const errorData = (0, _reactRedux.useSelector)(state => state.user?.error?.response?.data ?? {}, _reactRedux.shallowEqual);
const error = (0, _reactRedux.useSelector)(state => state.user?.error);
const auditServiceToken = (0, _reactRedux.useSelector)(state => state.user?.data?.auditServiceDetails?.token);
const {
getResponseForClose,
getResponseForError
} = (0, _transferEventHandlers.useTransferEventResponse)();
const sendAuditData = (0, _auditEventQueue.useSendAuditData)();
const FIVE_MINUTES = 5 * 60 * 1000;
const {
code,
user_message
} = errorData;
const errorText = data && (0, _utils.getTranslation)(user_message, data);
const isApiTimeout = error?.code === _constants.TransferActionCodes.API_TIMEOUT;
const finalCode = getFinalCode();
(0, _react.useEffect)(() => {
transferEventHandler?.onErrorEvent(getResponseForError(finalCode));
auditServiceToken && sendAuditData(_constants.TransferActionEvents.ERROR, {
code: finalCode
});
timeoutRef.current = setTimeout(() => {
onExitPressed();
}, FIVE_MINUTES);
return () => {
clearTimeoutRef();
};
}, []);
function getFinalCode() {
let errorCode = isExperienceError ? -1 : code;
if (isInvalidUrl) {
errorCode = _constants.TransferActionCodes.INVALID_URL;
} else if (isApiTimeout) {
errorCode = _constants.TransferActionCodes.API_TIMEOUT;
}
return errorCode;
}
const clearTimeoutRef = () => {
if (timeoutRef?.current) {
clearTimeout(timeoutRef.current);
timeoutRef.current = null;
}
};
const onExitPressed = () => {
transferEventHandler?.onTransferEnd(getResponseForClose(_constants.RedirectReason.ERROR, finalCode));
auditServiceToken && sendAuditData(_constants.TransferActionEvents.END, {
code: finalCode,
reason: _constants.RedirectReason.ERROR,
listenerType: _constants.ListenerType.CLOSE
});
_auditEventQueue.eventQueue.destroy();
dispatch((0, _authenticationSlice.resetData)());
clearTimeoutRef();
};
const errorScreenFooter = () => {
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: _ContainerStyles.MAErrorViewStyles.footerView,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_MAButton.default, {
text: t('Exit'),
onPress: onExitPressed
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_MASecuredBy.default, {})]
});
};
const getErrorText = () => {
let title = t('ErrorTitle');
let subTitle = `${t('ErrorSubtitle')} (${_constants.TransferActionCodes.API_OR_ATOMIC_ERROR})`;
if (isInvalidUrl) {
subTitle = `${t('InvalidUrlErrorSubtitle')} (${_constants.TransferActionCodes.INVALID_URL})`;
} else if (isApiTimeout) {
subTitle = `${t('ServerTimeoutErrorSubtitle')} (${_constants.TransferActionCodes.API_TIMEOUT})`;
} else if (isExperienceError) {
title = t('ExperienceErrorTitle');
subTitle = `${t('ExperienceErrorSubtitle')} (${_constants.TransferActionCodes.INVALID_EXPERIENCE})`;
} else if (code && user_message) {
subTitle = `${errorText} (${code})`;
}
return {
title,
subTitle
};
};
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.SafeAreaView, {
style: _ContainerStyles.MAErrorViewStyles.safeAreaView,
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
style: _ContainerStyles.MAErrorViewStyles.errorView,
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: _ContainerStyles.MAErrorViewStyles.titleText,
children: getErrorText().title
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
style: _ContainerStyles.MAErrorViewStyles.descriptionText,
children: getErrorText().subTitle
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
source: _errorIcon.default,
resizeMode: "contain",
style: _ContainerStyles.MAErrorViewStyles.errorIcon
}), errorScreenFooter()]
})
});
};
var _default = exports.default = MAErrorView;
//# sourceMappingURL=MAErrorView.js.map