react-native-unit-components
Version:
Unit React Native components
100 lines • 3.84 kB
JavaScript
import React, { useEffect, useState } from 'react';
import { Platform } from 'react-native';
import { WebComponent } from '../../webComponent/WebComponent';
import { PageMessage } from '../../messages/webMessages/pageMessage';
import { UnitComponentsMessage } from '../../messages/webMessages/unitComponentsMessages';
import { getCheckDepositParams, getCheckDepositScript } from './UNCheckDepositComponent.utils';
import { CheckMessage } from '../../messages/webMessages/checkMessage';
import { RESPONSE_KEYS } from '../../messages/webMessages/onLoadMessage';
import { PresentationMode, WebComponentType } from '../../types/internal/webComponent.types';
import { withReduxStore } from '../../helpers/store/helpers';
import { PaymentMessage } from '../../messages/webMessages/paymentsMessage';
import { UNBaseView } from '../../nativeComponents/UNBaseView';
import UNPermissionsModule from '../../nativeModulesHelpers/UNPermissionsHelper/UNPermissionsHelper';
const UNCheckDepositComponent = props => {
const [height, setHeight] = useState(0);
const [presentationMode, setPresentationMode] = useState(PresentationMode.Inherit);
useEffect(() => {
const requestCameraAccess = async () => {
try {
await UNPermissionsModule.camera();
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} catch (error) {
console.error(error);
}
};
if (Platform.OS == 'ios') {
requestCameraAccess();
}
}, []);
const handleUnitOnLoad = response => {
if (!props.onLoad) {
return;
}
if (RESPONSE_KEYS.errors in response) {
props.onLoad(response);
return;
}
if (RESPONSE_KEYS.account in response) {
// AccountOnLoadResponse;
props.onLoad(response[RESPONSE_KEYS.account]);
return;
}
console.error('On Load Error: unexpected response type');
return;
};
const handleWebViewMessage = message => {
if (!message || !message.details) return;
switch (message.type) {
case PaymentMessage.INITIAL_STAGE_BACK_BUTTON_CLICKED:
{
props.onInitialStageBackButtonClicked && props.onInitialStageBackButtonClicked();
break;
}
case PaymentMessage.FINAL_STAGE_DONE_BUTTON_CLICKED:
{
props.onFinalStageDoneButtonClicked && props.onFinalStageDoneButtonClicked();
break;
}
case CheckMessage.CHECK_DEPOSIT_CREATED:
props.onDepositCreated && props.onDepositCreated(message.details);
break;
case CheckMessage.CHECK_DEPOSIT_RESTART_REQUEST:
props.onRestartRequest && props.onRestartRequest(message.details);
break;
case UnitComponentsMessage.UNIT_ON_LOAD:
handleUnitOnLoad(message.details);
break;
case PageMessage.PAGE_HEIGHT:
{
const currentHeight = message.details.height;
setHeight(currentHeight);
if (presentationMode === PresentationMode.Inherit && currentHeight === 0) {
setPresentationMode(PresentationMode.Default);
}
break;
}
}
};
const style = presentationMode === PresentationMode.Inherit ? {
flex: 1
} : {
height: height
};
return /*#__PURE__*/React.createElement(UNBaseView, {
style: style,
onLoadError: handleUnitOnLoad,
fallback: /*#__PURE__*/React.createElement(React.Fragment, null)
}, /*#__PURE__*/React.createElement(WebComponent, {
type: WebComponentType.checkDeposit,
presentationMode: presentationMode,
params: getCheckDepositParams(props),
script: getCheckDepositScript(),
onMessage: message => handleWebViewMessage(message),
theme: props.theme,
language: props.language,
isScrollable: true
}));
};
export default withReduxStore(UNCheckDepositComponent);
//# sourceMappingURL=UNCheckDepositComponent.js.map