react-native-persona
Version:
Launch a mobile native implementation of the Persona inquiry flow from React Native.
84 lines • 2.85 kB
JavaScript
import React, { useCallback, useEffect, useRef } from 'react';
import { findNodeHandle, UIManager } from 'react-native';
import { PersonaInquiryViewManager } from './PersonaInquiryViewManager';
import { callOnCanceledCallback, callOnCompleteCallback, callOnErrorCallback, callOnEventCallback, callOnReadyCallback } from './util';
let onReadyCalled = false;
let onReadyCallback = () => {};
export const onPersonaInquiryViewEvent = event => {
if (event.type == 'start') {
onReadyCalled = false;
} else if (event.type == 'page_change' && !onReadyCalled) {
onReadyCalled = true;
setTimeout(function () {
onReadyCallback();
}, 400);
}
};
const resetOnReadyState = () => {
onReadyCalled = false;
onReadyCallback = () => {};
};
export default function PersonaInquiryView(props) {
const ref = useRef(null);
const create = viewId => {
try {
if (viewId == null) {
callOnErrorCallback({
debugMessage: 'PersonaInquiryView not found',
errorCode: 'UnexpectedError'
}, props.onError);
return;
}
const viewManagerConfig = UIManager.getViewManagerConfig('PersonaInquiryView');
if (!viewManagerConfig || !viewManagerConfig.Commands) {
callOnErrorCallback({
debugMessage: 'PersonaInquiryView config not found',
errorCode: 'UnexpectedError'
}, props.onError);
return;
}
UIManager.dispatchViewManagerCommand(viewId, viewManagerConfig.Commands.create, [viewId]);
} catch (error) {
callOnErrorCallback({
debugMessage: 'Error dispatching create command.',
errorCode: 'UnexpectedError'
}, props.onError);
}
};
useEffect(() => {
const viewId = findNodeHandle(ref.current);
onReadyCallback = () => {
props.onReady();
};
create(viewId);
return () => {
resetOnReadyState();
};
}, []);
const _onComplete = useCallback(event => {
callOnCompleteCallback(event.nativeEvent, props.onComplete);
}, [props.onComplete]);
const _onCanceled = useCallback(event => {
callOnCanceledCallback(event.nativeEvent, props.onCanceled);
}, [props.onCanceled]);
const _onError = useCallback(event => {
callOnErrorCallback(event.nativeEvent, props.onError);
}, [props.onError]);
const _onEvent = useCallback(event => {
callOnEventCallback(event.nativeEvent, props.onEvent);
}, [props.onEvent]);
const _onReady = useCallback(() => {
callOnReadyCallback(props.onReady);
}, [props.onReady]);
return /*#__PURE__*/React.createElement(PersonaInquiryViewManager, {
style: props.style,
inquiry: props.inquiry.toOptionsJson(),
onComplete: _onComplete,
onCanceled: _onCanceled,
onError: _onError,
onEvent: _onEvent,
onReady: _onReady,
ref: ref
});
}
//# sourceMappingURL=PersonaInquiryView.js.map