Spaces:
Sleeping
Sleeping
Merge branch 'main' of hf.co:spaces/ppaihack/PoCInnovation
Browse files
front/src/VerificationScene.tsx
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
import { useState } from "react";
|
|
|
2 |
import BoxContainer from "./components/BoxContainer";
|
3 |
import VideoWrapper from "@/components/VideoWrapper.tsx";
|
4 |
import ResultContainer from "@/components/ResultContainer.tsx";
|
@@ -26,11 +27,12 @@ export default function VerificationScene() {
|
|
26 |
const [profilePicture, setProfilePicture] = useState<string>();
|
27 |
|
28 |
const handleNextStep = () => {
|
29 |
-
if (currentStep
|
30 |
setCurrentStep((currentStep + 1) % stepsArray.length);
|
31 |
};
|
|
|
32 |
const handlePrevStep = () => {
|
33 |
-
if (currentStep
|
34 |
setCurrentStep((currentStep - 1) % stepsArray.length);
|
35 |
};
|
36 |
|
@@ -61,11 +63,23 @@ export default function VerificationScene() {
|
|
61 |
}
|
62 |
};
|
63 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
let stepContent = undefined;
|
65 |
|
66 |
-
if (currentStep
|
67 |
stepContent = (
|
68 |
-
|
|
|
|
|
|
|
|
|
69 |
<h1 className="text-black text-2xl mt-20 text-center px-28">
|
70 |
Take a picture of the Capture the front side of your ID Card
|
71 |
</h1>
|
@@ -76,16 +90,20 @@ export default function VerificationScene() {
|
|
76 |
height="250px"
|
77 |
width="400px"
|
78 |
/>
|
79 |
-
|
80 |
);
|
81 |
}
|
82 |
-
if (currentStep
|
83 |
stepContent = (
|
84 |
-
|
|
|
|
|
|
|
|
|
85 |
<div className="overflow-hidden w-2/3 h-2/4 mt-10">
|
86 |
<img src={idCardPicture} alt="captured" />
|
87 |
</div>
|
88 |
-
<h1 className="text-2xl font-bold">Is This Picture Correct
|
89 |
<div className="mt-32 space-x-20">
|
90 |
<button
|
91 |
onClick={handlePrevStep}
|
@@ -100,29 +118,37 @@ export default function VerificationScene() {
|
|
100 |
Yes
|
101 |
</button>
|
102 |
</div>
|
103 |
-
|
104 |
);
|
105 |
}
|
106 |
|
107 |
-
if (currentStep
|
108 |
stepContent = (
|
109 |
-
|
|
|
|
|
|
|
|
|
110 |
<h1 className="mt-5 font-bold text-lg">Center your face</h1>
|
111 |
<DarkVideoWrapper
|
112 |
setImage={setProfilePicture}
|
113 |
-
className="mt-
|
114 |
handleNextStep={handleNextStep}
|
115 |
/>
|
116 |
-
|
117 |
);
|
118 |
}
|
119 |
-
if (currentStep
|
120 |
stepContent = (
|
121 |
-
|
|
|
|
|
|
|
|
|
122 |
<div className="overflow-hidden w-2/3 h-2/4 mt-10">
|
123 |
<img src={profilePicture} alt="captured" />
|
124 |
</div>
|
125 |
-
<h1 className="text-2xl font-bold">Is This Picture Correct
|
126 |
<div className="mt-32 space-x-20">
|
127 |
<button
|
128 |
onClick={handlePrevStep}
|
@@ -137,17 +163,23 @@ export default function VerificationScene() {
|
|
137 |
Yes (Submit)
|
138 |
</button>
|
139 |
</div>
|
140 |
-
|
141 |
);
|
142 |
}
|
143 |
|
144 |
-
if (currentStep
|
145 |
stepContent = (
|
146 |
-
<
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
151 |
);
|
152 |
}
|
153 |
|
@@ -155,7 +187,7 @@ export default function VerificationScene() {
|
|
155 |
<>
|
156 |
<div className="bg-gray-100">
|
157 |
<BoxContainer headerName="Identity Verification Required">
|
158 |
-
<div className="h-full w-full flex flex-col items-center overflow-hidden">
|
159 |
{stepContent}
|
160 |
</div>
|
161 |
</BoxContainer>
|
|
|
1 |
import { useState } from "react";
|
2 |
+
import { motion } from "framer-motion";
|
3 |
import BoxContainer from "./components/BoxContainer";
|
4 |
import VideoWrapper from "@/components/VideoWrapper.tsx";
|
5 |
import ResultContainer from "@/components/ResultContainer.tsx";
|
|
|
27 |
const [profilePicture, setProfilePicture] = useState<string>();
|
28 |
|
29 |
const handleNextStep = () => {
|
30 |
+
if (currentStep === StepType.result) return;
|
31 |
setCurrentStep((currentStep + 1) % stepsArray.length);
|
32 |
};
|
33 |
+
|
34 |
const handlePrevStep = () => {
|
35 |
+
if (currentStep === StepType.takeId) return;
|
36 |
setCurrentStep((currentStep - 1) % stepsArray.length);
|
37 |
};
|
38 |
|
|
|
63 |
}
|
64 |
};
|
65 |
|
66 |
+
// Animation settings for Framer Motion
|
67 |
+
const animationProps = {
|
68 |
+
initial: { opacity: 0, y: 50 },
|
69 |
+
animate: { opacity: 1, y: 0 },
|
70 |
+
exit: { opacity: 0, y: -50 },
|
71 |
+
transition: { duration: 0.5 },
|
72 |
+
};
|
73 |
+
|
74 |
let stepContent = undefined;
|
75 |
|
76 |
+
if (currentStep === StepType.takeId) {
|
77 |
stepContent = (
|
78 |
+
<motion.div
|
79 |
+
key="takeId"
|
80 |
+
{...animationProps}
|
81 |
+
className="flex flex-col items-center"
|
82 |
+
>
|
83 |
<h1 className="text-black text-2xl mt-20 text-center px-28">
|
84 |
Take a picture of the Capture the front side of your ID Card
|
85 |
</h1>
|
|
|
90 |
height="250px"
|
91 |
width="400px"
|
92 |
/>
|
93 |
+
</motion.div>
|
94 |
);
|
95 |
}
|
96 |
+
if (currentStep === StepType.verifyId) {
|
97 |
stepContent = (
|
98 |
+
<motion.div
|
99 |
+
key="verifyId"
|
100 |
+
{...animationProps}
|
101 |
+
className="flex flex-col items-center"
|
102 |
+
>
|
103 |
<div className="overflow-hidden w-2/3 h-2/4 mt-10">
|
104 |
<img src={idCardPicture} alt="captured" />
|
105 |
</div>
|
106 |
+
<h1 className="text-2xl font-bold mt-10">Is This Picture Correct?</h1>
|
107 |
<div className="mt-32 space-x-20">
|
108 |
<button
|
109 |
onClick={handlePrevStep}
|
|
|
118 |
Yes
|
119 |
</button>
|
120 |
</div>
|
121 |
+
</motion.div>
|
122 |
);
|
123 |
}
|
124 |
|
125 |
+
if (currentStep === StepType.takeFrontPic) {
|
126 |
stepContent = (
|
127 |
+
<motion.div
|
128 |
+
key="takeFrontPic"
|
129 |
+
{...animationProps}
|
130 |
+
className="flex flex-col items-center"
|
131 |
+
>
|
132 |
<h1 className="mt-5 font-bold text-lg">Center your face</h1>
|
133 |
<DarkVideoWrapper
|
134 |
setImage={setProfilePicture}
|
135 |
+
className="mt-12 w-3/4 h-3/5 overflow-hidden"
|
136 |
handleNextStep={handleNextStep}
|
137 |
/>
|
138 |
+
</motion.div>
|
139 |
);
|
140 |
}
|
141 |
+
if (currentStep === StepType.verifyProfile) {
|
142 |
stepContent = (
|
143 |
+
<motion.div
|
144 |
+
key="verifyProfile"
|
145 |
+
{...animationProps}
|
146 |
+
className="flex flex-col items-center"
|
147 |
+
>
|
148 |
<div className="overflow-hidden w-2/3 h-2/4 mt-10">
|
149 |
<img src={profilePicture} alt="captured" />
|
150 |
</div>
|
151 |
+
<h1 className="text-2xl font-bold mt-10">Is This Picture Correct?</h1>
|
152 |
<div className="mt-32 space-x-20">
|
153 |
<button
|
154 |
onClick={handlePrevStep}
|
|
|
163 |
Yes (Submit)
|
164 |
</button>
|
165 |
</div>
|
166 |
+
</motion.div>
|
167 |
);
|
168 |
}
|
169 |
|
170 |
+
if (currentStep === StepType.result) {
|
171 |
stepContent = (
|
172 |
+
<motion.div
|
173 |
+
key="result"
|
174 |
+
{...animationProps}
|
175 |
+
className="flex flex-col items-center"
|
176 |
+
>
|
177 |
+
<ResultContainer
|
178 |
+
sendImageToServer={sendImageToServer}
|
179 |
+
idCardPicture={idCardPicture ?? ""}
|
180 |
+
profileImage={profilePicture ?? ""}
|
181 |
+
/>
|
182 |
+
</motion.div>
|
183 |
);
|
184 |
}
|
185 |
|
|
|
187 |
<>
|
188 |
<div className="bg-gray-100">
|
189 |
<BoxContainer headerName="Identity Verification Required">
|
190 |
+
<div className="h-full w-full flex flex-col items-center justify-center overflow-hidden">
|
191 |
{stepContent}
|
192 |
</div>
|
193 |
</BoxContainer>
|
front/src/components/ResultContainer.tsx
CHANGED
@@ -18,5 +18,13 @@ export default function ResultContainer({
|
|
18 |
useEffect(() => {
|
19 |
sendImageToServer(idCardPicture ?? "", profileImage ?? "", setLoading);
|
20 |
}, []);
|
21 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
}
|
|
|
18 |
useEffect(() => {
|
19 |
sendImageToServer(idCardPicture ?? "", profileImage ?? "", setLoading);
|
20 |
}, []);
|
21 |
+
return (
|
22 |
+
<div className="flex w-full h-full items-center justify-center">
|
23 |
+
{loading ? (
|
24 |
+
<h1 className="text-2xl font-bold text-orange-600">Fetching....</h1>
|
25 |
+
) : (
|
26 |
+
<h1 className="text-2xl font-bold text-green-800">Process Completed</h1>
|
27 |
+
)}
|
28 |
+
</div>
|
29 |
+
);
|
30 |
}
|