PoCInnovation / front /src /VerificationScene.tsx
pierrelissope
feat: added front core
9a9d08c
raw
history blame
4.59 kB
import { useState } from "react";
import BoxContainer from "./components/BoxContainer";
import VideoWrapper from "@/components/VideoWrapper.tsx";
import ResultContainer from "@/components/ResultContainer.tsx";
import DarkVideoWrapper from "@/components/DarkVideoWrapper.tsx";
enum StepType {
takeId,
verifyId,
takeFrontPic,
verifyProfile,
result,
}
const stepsArray: StepType[] = [
StepType.takeId,
StepType.verifyId,
StepType.takeFrontPic,
StepType.verifyProfile,
StepType.result,
];
export default function VerificationScene() {
const [currentStep, setCurrentStep] = useState<StepType>(StepType.takeId);
const [idCardPicture, setIdCardPicture] = useState<string>();
const [profilePicture, setProfilePicture] = useState<string>();
const handleNextStep = () => {
if (currentStep == StepType.result) return;
setCurrentStep((currentStep + 1) % stepsArray.length);
};
const handlePrevStep = () => {
if (currentStep == StepType.takeId) return;
setCurrentStep((currentStep - 1) % stepsArray.length);
};
const sendImageToServer = async (
imageDataUrl: string,
setLoading: (n: boolean) => void,
) => {
try {
const response = await fetch("YOUR_BACKEND_URL/api/upload", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ image: imageDataUrl }),
});
if (!response.ok) {
throw new Error("Erreur lors de l'envoi de l'image");
}
const data = await response.json();
console.log("Image envoyée avec succès:", data);
setLoading(true);
} catch (error) {
console.error("Erreur:", error);
setLoading(false);
}
};
let stepContent = undefined;
if (currentStep == StepType.takeId) {
stepContent = (
<>
<h1 className="text-black text-2xl mt-20 text-center px-28">
Take a picture of the Capture the front side of your ID Card
</h1>
<VideoWrapper
handleNextStep={handleNextStep}
setImage={setIdCardPicture}
className="shadow-lg mt-20"
height="250px"
width="400px"
/>
</>
);
}
if (currentStep == StepType.verifyId) {
stepContent = (
<>
<div className="overflow-hidden w-2/3 h-2/4 mt-10">
<img src={idCardPicture} alt="captured" />
</div>
<h1 className="text-2xl font-bold">Is This Picture Correct ?</h1>
<div className="mt-32 space-x-20">
<button
onClick={handlePrevStep}
className="bg-red-600 transition text-white rounded-2xl text-xl hover:bg-red-800 w-40 h-16"
>
No
</button>
<button
onClick={handleNextStep}
className="bg-blue-600 transition text-white rounded-2xl text-xl hover:bg-gray-800 w-40 h-16"
>
Yes
</button>
</div>
</>
);
}
if (currentStep == StepType.takeFrontPic) {
stepContent = (
<>
<h1 className="mt-5 font-bold text-lg">Center your face</h1>
<DarkVideoWrapper
setImage={setProfilePicture}
className="mt-20 w-2/4 h-3/5 overflow-hidden"
handleNextStep={handleNextStep}
/>
</>
);
}
if (currentStep == StepType.verifyProfile) {
stepContent = (
<>
<div className="overflow-hidden w-2/3 h-2/4 mt-10">
<img src={profilePicture} alt="captured" />
</div>
<h1 className="text-2xl font-bold">Is This Picture Correct ?</h1>
<div className="mt-32 space-x-20">
<button
onClick={handlePrevStep}
className="bg-red-600 transition text-white rounded-2xl text-xl hover:bg-red-800 w-40 h-16"
>
No
</button>
<button
onClick={handleNextStep}
className="bg-blue-600 transition text-white rounded-2xl text-xl hover:bg-gray-800 w-40 h-16"
>
Yes (Submit)
</button>
</div>
</>
);
}
if (currentStep == StepType.result) {
stepContent = (
<ResultContainer
sendImageToServer={sendImageToServer}
idCardPicture={idCardPicture ?? ""}
/>
);
}
return (
<>
<div className="bg-gray-100">
<BoxContainer headerName="Identity Verification Required">
<div className="h-full w-full flex flex-col items-center overflow-hidden">
{stepContent}
</div>
</BoxContainer>
</div>
</>
);
}