import React, { useContext, useEffect, useState } from 'react' import { VerificationMethod } from '@sudoplatform/sudo-secure-id-verification' import { Button, Card, Form, FormItem, HSpace, Input, useForm, VSpace, } from '@sudoplatform/web-ui' import { useAsyncFn } from 'react-use' import { ErrorFeedback } from './ErrorFeedback' import { message } from 'antd' import { LearnMore } from './LearnMore' import { AppContext } from '../containers/AppContext' import { AuthContext } from './AuthContext' import { IdentityVerificationConsent } from './IdentityVerificationConsent' interface Props { isVerified: boolean onIsVerifiedChanged?: (isVerified: boolean) => void onChange?: () => void } interface IdentityVerificationFormInputs { firstName: string lastName: string address: string city?: string state?: string postalCode: string country: string dateOfBirth: string } /** * Component used to display a card for user input identification verification. */ export const IdentityVerification: React.FC = (props) => { const { userClient, authenticationTokens } = useContext(AuthContext) const { identityVerificationClient } = useContext(AppContext) const [isChecking, setIsChecking] = useState(false) const [isChecked, setIsChecked] = useState(false) const [isVerified, setIsVerified] = useState(false) useEffect(() => { const check = async () => { if (authenticationTokens) { console.log('refreshing auth token') await userClient.refreshTokens(authenticationTokens.refreshToken) } const result = await identityVerificationClient.checkIdentityVerification() setIsChecked(true) setIsVerified(result.verified) props.onIsVerifiedChanged?.(result.verified) if (result.verified) { props.onChange?.() } setIsChecking(false) setIsChecked(true) } if (!isChecked) { setIsChecking(true) void check() } }, [ authenticationTokens, identityVerificationClient, props, userClient, isChecked, ]) const [form] = useForm() const [submitIdentityVerificationResult, submitIdentityVerification] = useAsyncFn(async (identity: IdentityVerificationFormInputs) => { console.log({ identity }) const verified = await identityVerificationClient.verifyIdentity({ ...identity, verificationMethod: VerificationMethod.KnowledgeOfPII, }) if (authenticationTokens) { console.log('refreshing auth token') await userClient.refreshTokens(authenticationTokens.refreshToken) } setIsVerified(verified.verified) props.onIsVerifiedChanged?.(verified.verified) if (verified.verified) { props.onChange?.() void message.success('Identity verified') form.resetFields() } else { void message.error('Failed to verify') throw new Error(`Failed to verify.`) } }) return (

Status: {isVerified ? 'Verified ✅' : 'Not Verified ❌'}

 }> {submitIdentityVerificationResult.error && ( )}
) }