Display KYC status in success page (#8)
Part of [Sumsub KYC integration in onboarding app](https://www.notion.so/Sumsub-KYC-integration-in-onboarding-app-607b598c9c1d4d12adc71725e2ab5e7e) Co-authored-by: Adw8 <adwaitgharpure@gmail.com> Reviewed-on: #8
This commit is contained in:
parent
2a24985930
commit
cfaa1711c3
@ -32,7 +32,7 @@ const TermsAndConditionsCard = ({ handleAccept, handleRoleChange }: { handleAcce
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Paper elevation={3} style={{ padding: '2rem', marginTop: '2rem', display: isHidden ? "none" : "block" }}>
|
<Paper elevation={3} sx={{ padding: 2, marginTop: 2, display: isHidden ? "none" : "block", marginBottom: 3 }} >
|
||||||
<FormControl component="fieldset">
|
<FormControl component="fieldset">
|
||||||
<FormLabel component="legend">Select your role</FormLabel>
|
<FormLabel component="legend">Select your role</FormLabel>
|
||||||
<RadioGroup
|
<RadioGroup
|
||||||
|
@ -4,6 +4,10 @@ import { useLocation } from "react-router-dom";
|
|||||||
|
|
||||||
import { Box, Typography } from "@mui/material";
|
import { Box, Typography } from "@mui/material";
|
||||||
import { Registry } from "@cerc-io/registry-sdk";
|
import { Registry } from "@cerc-io/registry-sdk";
|
||||||
|
import SumsubWebSdk from "@sumsub/websdk-react";
|
||||||
|
import { MessageHandler } from "@sumsub/websdk";
|
||||||
|
|
||||||
|
import { config, fetchAccessToken, getAccessTokenExpirationHandler, options } from "../utils/sumsub";
|
||||||
|
|
||||||
interface Participant {
|
interface Participant {
|
||||||
cosmosAddress: string;
|
cosmosAddress: string;
|
||||||
@ -23,6 +27,12 @@ const OnboardingSuccess = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const [participant, setParticipant] = useState<Participant>();
|
const [participant, setParticipant] = useState<Participant>();
|
||||||
|
const [token, setToken] = useState<string>('');
|
||||||
|
const [loading, setLoading] = useState<boolean>(true);
|
||||||
|
|
||||||
|
const messageHandler: MessageHandler = (event, payload) => {
|
||||||
|
console.log('sumsubEvent:', event, payload);
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchParticipants = async () => {
|
const fetchParticipants = async () => {
|
||||||
@ -46,13 +56,28 @@ const OnboardingSuccess = () => {
|
|||||||
fetchParticipants();
|
fetchParticipants();
|
||||||
}, [cosmosAddress]);
|
}, [cosmosAddress]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const getToken = async (userId: string) => {
|
||||||
|
const newToken = await fetchAccessToken(userId);
|
||||||
|
setToken(newToken);
|
||||||
|
setLoading(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (cosmosAddress) {
|
||||||
|
getToken(cosmosAddress).catch(error => {
|
||||||
|
console.error(error);
|
||||||
|
alert("Failed to fetch token");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, [cosmosAddress]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
sx={{
|
sx={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
flexDirection: "column",
|
flexDirection: "column",
|
||||||
marginTop: "100px",
|
marginTop: 6,
|
||||||
gap: "10px",
|
gap: 1,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Typography variant="h5">Transaction Successful</Typography>
|
<Typography variant="h5">Transaction Successful</Typography>
|
||||||
@ -64,6 +89,7 @@ const OnboardingSuccess = () => {
|
|||||||
backgroundColor: "lightgray",
|
backgroundColor: "lightgray",
|
||||||
padding: 3,
|
padding: 3,
|
||||||
wordWrap: "break-word",
|
wordWrap: "break-word",
|
||||||
|
marginBottom: 6,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<pre style={{ whiteSpace: "pre-wrap", margin: 0 }}>
|
<pre style={{ whiteSpace: "pre-wrap", margin: 0 }}>
|
||||||
@ -78,6 +104,16 @@ const OnboardingSuccess = () => {
|
|||||||
)}
|
)}
|
||||||
</pre>
|
</pre>
|
||||||
</Box>
|
</Box>
|
||||||
|
<Typography variant="h5">KYC Status</Typography>
|
||||||
|
{!loading && token && cosmosAddress && (
|
||||||
|
<SumsubWebSdk
|
||||||
|
accessToken={token}
|
||||||
|
expirationHandler={getAccessTokenExpirationHandler(cosmosAddress)}
|
||||||
|
config={config}
|
||||||
|
options={options}
|
||||||
|
onMessage={messageHandler}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
<SnackbarProvider />
|
<SnackbarProvider />
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
@ -147,8 +147,8 @@ const SignWithCosmos = () => {
|
|||||||
sx={{
|
sx={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
flexDirection: "column",
|
flexDirection: "column",
|
||||||
marginY: "100px",
|
marginTop: 6,
|
||||||
gap: "10px",
|
gap: 1,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Typography variant="h5" display={`${isTncAccepted ? "none" : "block"}`}>Please accept terms and conditions to continue</Typography>
|
<Typography variant="h5" display={`${isTncAccepted ? "none" : "block"}`}>Please accept terms and conditions to continue</Typography>
|
||||||
@ -190,7 +190,10 @@ const SignWithCosmos = () => {
|
|||||||
</pre>
|
</pre>
|
||||||
</Box>
|
</Box>
|
||||||
|
|
||||||
<Box>
|
<Box
|
||||||
|
sx={{
|
||||||
|
paddingBottom: 2,
|
||||||
|
}}>
|
||||||
<LoadingButton
|
<LoadingButton
|
||||||
variant="contained"
|
variant="contained"
|
||||||
onClick={async () => {
|
onClick={async () => {
|
||||||
|
@ -75,11 +75,11 @@ const SignWithNitroKey = () => {
|
|||||||
<div>
|
<div>
|
||||||
{session ? (
|
{session ? (
|
||||||
<Box
|
<Box
|
||||||
style={{
|
sx={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
flexDirection: "column",
|
flexDirection: "column",
|
||||||
marginTop: "100px",
|
marginTop: 6,
|
||||||
gap: "10px",
|
gap: 1,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Typography variant="h5">Sign with Nitro key</Typography>
|
<Typography variant="h5">Sign with Nitro key</Typography>
|
||||||
@ -130,7 +130,7 @@ const SignWithNitroKey = () => {
|
|||||||
variant="contained"
|
variant="contained"
|
||||||
onClick={signEth}
|
onClick={signEth}
|
||||||
disabled={!Boolean(ethAddress)}
|
disabled={!Boolean(ethAddress)}
|
||||||
style={{ marginTop: "20px" }}
|
sx={{ marginTop: 2 }}
|
||||||
loading={isLoading}
|
loading={isLoading}
|
||||||
>
|
>
|
||||||
Sign using Nitro key
|
Sign using Nitro key
|
||||||
|
@ -6,17 +6,7 @@ import SumsubWebSdk from '@sumsub/websdk-react';
|
|||||||
import { MessageHandler } from '@sumsub/websdk';
|
import { MessageHandler } from '@sumsub/websdk';
|
||||||
import { EventPayload } from '@sumsub/websdk/types/types';
|
import { EventPayload } from '@sumsub/websdk/types/types';
|
||||||
|
|
||||||
import { fetchAccessToken } from '../utils/sumsub';
|
import { config, fetchAccessToken, getAccessTokenExpirationHandler, options } from '../utils/sumsub';
|
||||||
|
|
||||||
const config = {
|
|
||||||
lang: "en", // language of WebSDK texts and comments (ISO 639-1 format)
|
|
||||||
theme: "light",
|
|
||||||
};
|
|
||||||
|
|
||||||
const options = {
|
|
||||||
addViewportTag: false,
|
|
||||||
adaptIframeHeight: true,
|
|
||||||
};
|
|
||||||
|
|
||||||
const UserVerification = () => {
|
const UserVerification = () => {
|
||||||
const [kycId, setKycId] = useState<string>('unknown');
|
const [kycId, setKycId] = useState<string>('unknown');
|
||||||
@ -64,11 +54,6 @@ const UserVerification = () => {
|
|||||||
}
|
}
|
||||||
}, [applicationSubmitted, kycId, navigate, cosmosAddress, message, receivedEthSig]);
|
}, [applicationSubmitted, kycId, navigate, cosmosAddress, message, receivedEthSig]);
|
||||||
|
|
||||||
const accessTokenExpirationHandler = async () => {
|
|
||||||
alert("Please renew token");
|
|
||||||
return "Token expired";
|
|
||||||
};
|
|
||||||
|
|
||||||
const messageHandler: MessageHandler = (event, payload) => {
|
const messageHandler: MessageHandler = (event, payload) => {
|
||||||
console.log('sumsubEvent:', event);
|
console.log('sumsubEvent:', event);
|
||||||
|
|
||||||
@ -84,6 +69,9 @@ const UserVerification = () => {
|
|||||||
if ((payload as EventPayload<'idCheck.onApplicantStatusChanged'>).reviewStatus === 'pending') {
|
if ((payload as EventPayload<'idCheck.onApplicantStatusChanged'>).reviewStatus === 'pending') {
|
||||||
setApplicationSubmitted(true);
|
setApplicationSubmitted(true);
|
||||||
}
|
}
|
||||||
|
if ((payload as any).reviewResult.reviewAnswer === 'GREEN') {
|
||||||
|
setApplicationSubmitted(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -93,17 +81,17 @@ const UserVerification = () => {
|
|||||||
sx={{
|
sx={{
|
||||||
display: "flex",
|
display: "flex",
|
||||||
flexDirection: "column",
|
flexDirection: "column",
|
||||||
marginTop: "100px",
|
marginTop: 12,
|
||||||
gap: "10px",
|
gap: 1,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Typography variant="h5">User verification</Typography>
|
<Typography variant="h5">User verification</Typography>
|
||||||
<div id="sumsub-websdk-container"></div>
|
<div id="sumsub-websdk-container"></div>
|
||||||
</Box>
|
</Box>
|
||||||
{!loading && token && (
|
{!loading && token && userId && (
|
||||||
<SumsubWebSdk
|
<SumsubWebSdk
|
||||||
accessToken={token}
|
accessToken={token}
|
||||||
expirationHandler={accessTokenExpirationHandler}
|
expirationHandler={getAccessTokenExpirationHandler(userId)}
|
||||||
config={config}
|
config={config}
|
||||||
options={options}
|
options={options}
|
||||||
onMessage={messageHandler}
|
onMessage={messageHandler}
|
||||||
|
@ -14,3 +14,20 @@ export const fetchAccessToken = async (userId: string): Promise<string> => {
|
|||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
return data.token;
|
return data.token;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const config = {
|
||||||
|
lang: "en", // language of WebSDK texts and comments (ISO 639-1 format)
|
||||||
|
theme: "light",
|
||||||
|
};
|
||||||
|
|
||||||
|
export const options = {
|
||||||
|
addViewportTag: false,
|
||||||
|
adaptIframeHeight: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getAccessTokenExpirationHandler = (userId: string) => {
|
||||||
|
return async () => {
|
||||||
|
const newToken = await fetchAccessToken(userId);
|
||||||
|
return newToken;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user