UNPKG

react-native-persona

Version:

Launch a mobile native implementation of the Persona inquiry flow from React Native.

138 lines (123 loc) 3.62 kB
import type { CollectedData, ExternalCollectedData, ExtraData, OnCanceledCallback, OnCompleteCallback, OnErrorCallback, OnReadyCallback, } from './callbacks'; import { Fields, InquiryField, RawInquiryField } from './fields'; import { DocumentStepData, GovernmentIdStepData, SelfieStepData, UiStepData, } from './StepData'; const HEX_REGEX = /^[a-fA-F0-9]{6}$/; export function processThemeValues(themeObject: Object) { const result: { [key: string]: string } = {}; for (const [key, value] of Object.entries(themeObject)) { if (value === null) { continue; } if (key.includes('Color')) { let colorValue = value; if (value[0] === '#') { colorValue = value.slice(1); } if (HEX_REGEX.test(colorValue)) { result[key] = `#${colorValue}`; } else { continue; } } else { result[key] = value.toString(); } } return result; } export function callOnCompleteCallback( event: { inquiryId: string; status: string; fields: Record<string, RawInquiryField>; collectedData: ExternalCollectedData | null; }, callback: OnCompleteCallback | undefined ) { if (callback) { let fields: Fields = {}; for (let key of Object.keys(event.fields || {})) { let field = event.fields[key]; if (field == undefined) { fields[key] = new InquiryField.Unknown('null'); continue; } switch (field.type) { case 'integer': fields[key] = new InquiryField.Integer(Number.parseInt(field.value)); break; case 'boolean': fields[key] = new InquiryField.Boolean(field.value); break; case 'string': fields[key] = new InquiryField.String(field.value); break; default: fields[key] = new InquiryField.Unknown(field.type); break; } } let collectedData: CollectedData | null = null; let stepData = event.collectedData?.stepData; if (stepData != null) { // Translate the step data from JSON to actual class objects let translatedStepData = []; for (let stepDatum of stepData) { switch (stepDatum.type) { case 'DocumentStepData': translatedStepData.push( Object.assign(new DocumentStepData(), stepDatum) ); break; case 'GovernmentIdStepData': translatedStepData.push( Object.assign(new GovernmentIdStepData(), stepDatum) ); break; case 'SelfieStepData': translatedStepData.push( Object.assign(new SelfieStepData(), stepDatum) ); break; case 'UiStepData': translatedStepData.push(Object.assign(new UiStepData(), stepDatum)); break; } } collectedData = { stepData: translatedStepData, }; } let extraData: ExtraData = { collectedData: collectedData, }; callback(event.inquiryId, event.status, fields, extraData); } } export function callOnCanceledCallback( event: { inquiryId?: string; sessionToken?: string }, callback: OnCanceledCallback | undefined ) { if (callback) callback(event.inquiryId, event.sessionToken); } export function callOnErrorCallback( event: { debugMessage: string; errorCode?: string }, callback: OnErrorCallback | undefined ) { if (callback) callback(new Error(event.debugMessage), event.errorCode); } export function callOnReadyCallback(callback: OnReadyCallback | undefined) { if (callback) callback(); }