@djb25/digit-ui-module-ekyc 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -0
- package/dist/index.modern.js +3290 -0
- package/dist/index.modern.js.map +1 -0
- package/package.json +1 -1
- package/src/Module.js +7 -23
- package/src/components/ConnectionDetailsView.js +114 -0
- package/src/components/DesktopInbox.js +84 -84
- package/src/components/Filter.js +59 -0
- package/src/components/MobileInbox.js +73 -0
- package/src/components/SearchConsumer.js +122 -0
- package/src/components/StatusCards.js +13 -22
- package/src/pages/employee/AadhaarVerification.js +357 -0
- package/src/pages/employee/AddressDetails.js +452 -0
- package/src/pages/employee/Create.js +94 -0
- package/src/pages/employee/Inbox.js +37 -20
- package/src/pages/employee/PropertyInfo.js +405 -0
- package/src/pages/employee/Review.js +118 -0
- package/src/pages/employee/index.js +104 -0
- package/src/components/Search.js +0 -77
|
@@ -5,29 +5,20 @@ import { useTranslation } from "react-i18next";
|
|
|
5
5
|
const StatusCards = ({ countData }) => {
|
|
6
6
|
const { t } = useTranslation();
|
|
7
7
|
|
|
8
|
-
const cardStyle = {
|
|
9
|
-
flex: 1,
|
|
10
|
-
textAlign: "center",
|
|
11
|
-
padding: "24px",
|
|
12
|
-
borderRadius: "12px",
|
|
13
|
-
boxShadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
|
|
14
|
-
border: "1px solid #EAECF0"
|
|
15
|
-
};
|
|
16
|
-
|
|
17
8
|
return (
|
|
18
|
-
<div className="status-container"
|
|
19
|
-
<
|
|
20
|
-
<div
|
|
21
|
-
<div
|
|
22
|
-
</
|
|
23
|
-
<
|
|
24
|
-
<div
|
|
25
|
-
<div
|
|
26
|
-
</
|
|
27
|
-
<
|
|
28
|
-
<div
|
|
29
|
-
<div
|
|
30
|
-
</
|
|
9
|
+
<div className="ekyc-status-container">
|
|
10
|
+
<div className="ekyc-status-card">
|
|
11
|
+
<div className="count">{countData?.total || 0}</div>
|
|
12
|
+
<div className="label">{t("EKYC_TOTAL")}</div>
|
|
13
|
+
</div>
|
|
14
|
+
<div className="ekyc-status-card">
|
|
15
|
+
<div className="count pending">{countData?.pending || 0}</div>
|
|
16
|
+
<div className="label">{t("EKYC_PENDING")}</div>
|
|
17
|
+
</div>
|
|
18
|
+
<div className="ekyc-status-card">
|
|
19
|
+
<div className="count completed">{countData?.completed || 0}</div>
|
|
20
|
+
<div className="label">{t("EKYC_COMPLETED")}</div>
|
|
21
|
+
</div>
|
|
31
22
|
</div>
|
|
32
23
|
);
|
|
33
24
|
};
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
import React, { useState, useRef, Fragment } from "react";
|
|
2
|
+
import { Header, Card, LabelFieldPair, CardLabel, TextInput, SubmitBar, CardHeader, RadioButtons, ActionBar, TickMark, HomeIcon, StatusTable, Row, ConnectingCheckPoints, CheckPoint } from "@djb25/digit-ui-react-components";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { useLocation, useHistory } from "react-router-dom";
|
|
5
|
+
import AddressDetails from "./AddressDetails";
|
|
6
|
+
|
|
7
|
+
// ─── Icons ──────────────────────────────────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
const FingerprintIcon = ({ size = 22, color = "#6366f1" }) => (
|
|
10
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
11
|
+
<path d="M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3 12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.67-.2-.13-.24-.04-.55.2-.68C7.82 2.52 9.86 2 12.01 2c2.13 0 3.96.46 5.57 1.41.24.13.33.43.2.67-.09.13-.24.39-.39.39zM12 21c-.28 0-.5-.22-.5-.5v-4.42c-2.33-.21-4.44-1.35-5.94-3.21-1.5-1.86-2.22-4.18-2.02-6.52.05-.59.55-1.03 1.14-.98s1.03.55.98 1.14c-.15 1.76.39 3.51 1.52 4.91 1.12 1.4 2.7 2.26 4.45 2.42.21.02.37.19.37.4v6.26c0 .28-.22.5-.5.5z" fill={color} />
|
|
12
|
+
<path d="M12 11c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z" fill={color} />
|
|
13
|
+
</svg>
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
const UserIcon = ({ size = 16, color = "#64748b" }) => (
|
|
17
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
18
|
+
<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" stroke={color} strokeWidth="2" strokeLinecap="round" />
|
|
19
|
+
<circle cx="12" cy="7" r="4" stroke={color} strokeWidth="2" />
|
|
20
|
+
</svg>
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
const PhoneIcon = ({ size = 16, color = "#64748b" }) => (
|
|
24
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
25
|
+
<path d="M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 013.07 10.6 19.79 19.79 0 0 0 3 1.82C3 .72 3.72 0 4.82 0h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L8.91 7.91a16 16 0 006.16 6.16l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z" stroke={color} strokeWidth="2" strokeLinecap="round" />
|
|
26
|
+
</svg>
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
const WhatsappIcon = ({ size = 16 }) => (
|
|
30
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
31
|
+
<path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347z" fill="#25D366" />
|
|
32
|
+
<path d="M12 2C6.477 2 2 6.477 2 12c0 1.89.525 3.66 1.438 5.168L2 22l4.832-1.438A9.96 9.96 0 0012 22c5.523 0 10-4.477 10-10S17.523 2 12 2z" stroke="#25D366" strokeWidth="2" strokeLinecap="round" />
|
|
33
|
+
</svg>
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
const MailIcon = ({ size = 16, color = "#64748b" }) => (
|
|
37
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
38
|
+
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z" stroke={color} strokeWidth="2" strokeLinecap="round" />
|
|
39
|
+
<path d="M22 6l-10 7L2 6" stroke={color} strokeWidth="2" strokeLinecap="round" />
|
|
40
|
+
</svg>
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
const UsersIcon = ({ size = 16, color = "#64748b" }) => (
|
|
44
|
+
<svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
45
|
+
<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" stroke={color} strokeWidth="2" strokeLinecap="round" />
|
|
46
|
+
<circle cx="9" cy="7" r="4" stroke={color} strokeWidth="2" />
|
|
47
|
+
<path d="M23 21v-2a4 4 0 0 0-3-3.87" stroke={color} strokeWidth="2" strokeLinecap="round" />
|
|
48
|
+
<path d="M16 3.13a4 4 0 0 1 0 7.75" stroke={color} strokeWidth="2" strokeLinecap="round" />
|
|
49
|
+
</svg>
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const AadhaarVerification = () => {
|
|
53
|
+
const { t } = useTranslation();
|
|
54
|
+
const location = useLocation();
|
|
55
|
+
const history = useHistory();
|
|
56
|
+
const addressSectionRef = useRef(null);
|
|
57
|
+
const { kNumber, selectedOption, connectionDetails } = location.state || {
|
|
58
|
+
kNumber: "EKYC-1234567890",
|
|
59
|
+
selectedOption: { code: "SELF", name: "EKYC_SELF" },
|
|
60
|
+
connectionDetails: { connectionDetailsInfo: { consumerName: "Rajesh Kumar Singh", address: "House No. 45, Sector 12, New Delhi - 110001", phoneNumber: "9876543210", email: "rajesh.singh@example.com" } }
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const [aadhaarLastFour, setAadhaarLastFour] = useState("");
|
|
64
|
+
const [isAadhaarVerified, setIsAadhaarVerified] = useState(false);
|
|
65
|
+
const [isVerifying, setIsVerifying] = useState(false);
|
|
66
|
+
const [nameCorrect, setNameCorrect] = useState({ code: "NO", name: "CORE_COMMON_NO" });
|
|
67
|
+
const [userName, setUserName] = useState(connectionDetails?.connectionDetailsInfo?.consumerName || "");
|
|
68
|
+
const [mobileChange, setMobileChange] = useState({ code: "NO", name: "CORE_COMMON_NO" });
|
|
69
|
+
const [mobileNumber, setMobileNumber] = useState(connectionDetails?.connectionDetailsInfo?.phoneNumber || "");
|
|
70
|
+
const [whatsappNumber, setWhatsappNumber] = useState(connectionDetails?.connectionDetailsInfo?.phoneNumber || "");
|
|
71
|
+
const [email, setEmail] = useState(connectionDetails?.connectionDetailsInfo?.email || "");
|
|
72
|
+
const [noOfPersons, setNoOfPersons] = useState("");
|
|
73
|
+
|
|
74
|
+
// New states for single-page flow
|
|
75
|
+
const [showAddressSection, setShowAddressSection] = useState(false);
|
|
76
|
+
const [addressData, setAddressData] = useState(null);
|
|
77
|
+
|
|
78
|
+
const yesNoOptions = [
|
|
79
|
+
{ code: "YES", name: "CORE_COMMON_YES" },
|
|
80
|
+
{ code: "NO", name: "CORE_COMMON_NO" }
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
const handleVerifyAadhaar = () => {
|
|
84
|
+
if (aadhaarLastFour.length === 4) {
|
|
85
|
+
setIsVerifying(true);
|
|
86
|
+
setTimeout(() => {
|
|
87
|
+
setIsVerifying(false);
|
|
88
|
+
setIsAadhaarVerified(true);
|
|
89
|
+
}, 1200);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const handleSaveAndContinueAadhaar = () => {
|
|
94
|
+
setShowAddressSection(true);
|
|
95
|
+
setTimeout(() => {
|
|
96
|
+
addressSectionRef.current?.scrollIntoView({ behavior: "smooth", block: "start" });
|
|
97
|
+
}, 100);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const handleCompleteAll = (addressDetails) => {
|
|
101
|
+
setAddressData(addressDetails);
|
|
102
|
+
history.push("/digit-ui/employee/ekyc/property-info", {
|
|
103
|
+
kNumber,
|
|
104
|
+
selectedOption,
|
|
105
|
+
connectionDetails,
|
|
106
|
+
aadhaarDetails: { aadhaarLastFour, isAadhaarVerified, userName, mobileNumber, whatsappNumber, email, noOfPersons },
|
|
107
|
+
addressDetails
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
return (
|
|
112
|
+
<div className="inbox-container">
|
|
113
|
+
<style>{`
|
|
114
|
+
@keyframes spin { to { transform: rotate(360deg); } }
|
|
115
|
+
@keyframes fadeSlideIn { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:translateY(0); } }
|
|
116
|
+
@keyframes pulseGreen { 0%,100% { box-shadow:0 0 0 0 rgba(22,163,74,0.4); } 50% { box-shadow:0 0 0 8px rgba(22,163,74,0); } }
|
|
117
|
+
`}</style>
|
|
118
|
+
|
|
119
|
+
<div className="filters-container">
|
|
120
|
+
{/* Sidebar Title Card */}
|
|
121
|
+
<Card className="sidebar-title-card" style={{ display: "flex", alignItems: "center", padding: "16px", marginBottom: "16px", borderRadius: "4px" }}>
|
|
122
|
+
<div className="icon-container" style={{ color: "#0068faff", marginRight: "12px" }}>
|
|
123
|
+
<HomeIcon style={{ width: "24px", height: "24px" }} />
|
|
124
|
+
</div>
|
|
125
|
+
<div style={{ fontWeight: "700", fontSize: "18px", color: "#0B0C0C" }}>
|
|
126
|
+
{t("EKYC_PROCESS")}
|
|
127
|
+
</div>
|
|
128
|
+
</Card>
|
|
129
|
+
|
|
130
|
+
{/* Progress Steps Sidebar */}
|
|
131
|
+
<div style={{ backgroundColor: "#FFFFFF", padding: "16px", borderRadius: "8px", border: "1px solid #EAECF0", boxShadow: "0 2px 4px rgba(0,0,0,0.02)" }}>
|
|
132
|
+
<ConnectingCheckPoints>
|
|
133
|
+
<CheckPoint label={t("EKYC_STEP_AADHAAR") || "Aadhaar"} isCompleted={showAddressSection} />
|
|
134
|
+
<CheckPoint label={t("EKYC_STEP_ADDRESS") || "Address"} isCompleted={addressData !== null} />
|
|
135
|
+
<CheckPoint label={t("EKYC_STEP_PROPERTY") || "Property"} isCompleted={false} />
|
|
136
|
+
<CheckPoint label={t("EKYC_STEP_REVIEW") || "Review"} />
|
|
137
|
+
</ConnectingCheckPoints>
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
<div style={{ flex: 1, marginLeft: "16px" }}>
|
|
142
|
+
<Card>
|
|
143
|
+
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: "24px" }}>
|
|
144
|
+
<Header>{t("EKYC_AADHAAR_VERIFICATION_HEADER") || "Aadhaar Verification"}</Header>
|
|
145
|
+
<div style={{ fontSize: "14px", fontWeight: "700", color: "#505A5F" }}>
|
|
146
|
+
{t("EKYC_K_NUMBER")}: <span style={{ color: "#0B0C0C" }}>{kNumber}</span>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
|
|
150
|
+
{/* Section 1: Aadhaar Number */}
|
|
151
|
+
<CardHeader style={{ fontSize: "20px", marginBottom: "16px" }}>{t("EKYC_AADHAAR_NUMBER_HEADER") || "Aadhaar Number"}</CardHeader>
|
|
152
|
+
|
|
153
|
+
<LabelFieldPair>
|
|
154
|
+
<CardLabel style={{ fontWeight: "600" }}>{t("EKYC_LAST_4_DIGIT_AADHAAR") || "Last 4-digit Aadhaar Number"}</CardLabel>
|
|
155
|
+
<div className="field" style={{ position: "relative" }}>
|
|
156
|
+
<div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: 0.6 }}>
|
|
157
|
+
<FingerprintIcon size={20} />
|
|
158
|
+
</div>
|
|
159
|
+
<TextInput
|
|
160
|
+
value={aadhaarLastFour}
|
|
161
|
+
onChange={(e) => {
|
|
162
|
+
const val = e.target.value;
|
|
163
|
+
if (val.length <= 4 && /^\d*$/.test(val)) setAadhaarLastFour(val);
|
|
164
|
+
}}
|
|
165
|
+
placeholder={t("EKYC_ENTER_LAST_4_DIGIT") || "Enter last 4 digits"}
|
|
166
|
+
textInputStyle={{ paddingLeft: "40px" }}
|
|
167
|
+
maxLength={4}
|
|
168
|
+
/>
|
|
169
|
+
{isAadhaarVerified && (
|
|
170
|
+
<div style={{ position: "absolute", right: "12px", top: "50%", transform: "translateY(-50%)" }}>
|
|
171
|
+
<TickMark fillColor="#00703C" />
|
|
172
|
+
</div>
|
|
173
|
+
)}
|
|
174
|
+
</div>
|
|
175
|
+
</LabelFieldPair>
|
|
176
|
+
|
|
177
|
+
{!isAadhaarVerified && (
|
|
178
|
+
<SubmitBar
|
|
179
|
+
label={isVerifying ? t("EKYC_VERIFYING") || "Verifying..." : t("EKYC_VERIFY_AADHAAR_BTN") || "Verify Aadhaar"}
|
|
180
|
+
onSubmit={handleVerifyAadhaar}
|
|
181
|
+
disabled={aadhaarLastFour.length !== 4 || isVerifying}
|
|
182
|
+
style={{ marginTop: "16px", opacity: aadhaarLastFour.length !== 4 ? 0.6 : 1 }}
|
|
183
|
+
/>
|
|
184
|
+
)}
|
|
185
|
+
|
|
186
|
+
{isAadhaarVerified && (
|
|
187
|
+
<div style={{ backgroundColor: "#E7F4EE", padding: "20px", borderRadius: "8px", marginTop: "24px", marginBottom: "24px", border: "1px solid #D1E9DB", animation: "fadeSlideIn 0.4s ease" }}>
|
|
188
|
+
<div style={{ display: "flex", alignItems: "center", gap: "10px", marginBottom: "16px" }}>
|
|
189
|
+
<div style={{ backgroundColor: "#D1E9DB", padding: "4px", borderRadius: "50%", display: "flex", animation: "pulseGreen 2s ease infinite" }}>
|
|
190
|
+
<TickMark fillColor="#00703C" />
|
|
191
|
+
</div>
|
|
192
|
+
<span style={{ fontWeight: "700", color: "#00703C", fontSize: "18px" }}>{t("EKYC_AADHAAR_VERIFIED_SUCCESS") || "Aadhaar Verified Successfully"}</span>
|
|
193
|
+
</div>
|
|
194
|
+
<div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: "16px" }}>
|
|
195
|
+
<div style={{ display: "flex", flexDirection: "column" }}>
|
|
196
|
+
<span style={{ color: "#667085", fontSize: "12px", fontWeight: "700", textTransform: "uppercase" }}>{t("EKYC_NAME")}</span>
|
|
197
|
+
<span style={{ fontWeight: "700", fontSize: "16px", color: "#101828" }}>Rajesh Kumar Singh</span>
|
|
198
|
+
</div>
|
|
199
|
+
<div style={{ display: "flex", flexDirection: "column" }}>
|
|
200
|
+
<span style={{ color: "#667085", fontSize: "12px", fontWeight: "700", textTransform: "uppercase" }}>{t("EKYC_AADHAAR")}</span>
|
|
201
|
+
<span style={{ fontWeight: "700", fontSize: "16px", color: "#101828" }}>XXXX XXXX {aadhaarLastFour}</span>
|
|
202
|
+
</div>
|
|
203
|
+
<div style={{ display: "flex", flexDirection: "column", gridColumn: "span 2" }}>
|
|
204
|
+
<span style={{ color: "#667085", fontSize: "12px", fontWeight: "700", textTransform: "uppercase" }}>{t("EKYC_ADDRESS")}</span>
|
|
205
|
+
<span style={{ fontWeight: "500", fontSize: "15px", color: "#344054" }}>House No. 45, Sector 12, New Delhi - 110001</span>
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
)}
|
|
210
|
+
|
|
211
|
+
<hr style={{ margin: "32px 0", border: "0", borderTop: "1px solid #EAECF0" }} />
|
|
212
|
+
|
|
213
|
+
{/* Section 2: Contact Details */}
|
|
214
|
+
<CardHeader style={{ fontSize: "20px", marginBottom: "16px" }}>{t("EKYC_CONTACT_DETAILS_HEADER") || "Contact Details"}</CardHeader>
|
|
215
|
+
<LabelFieldPair style={{ animation: "fadeSlideIn 0.3s ease" }}>
|
|
216
|
+
<div style={{ display: "flex", alignItems: "center", gap: "20px" }}>
|
|
217
|
+
<CardLabel style={{ fontWeight: "600", marginBottom: "0" }}>
|
|
218
|
+
{t("EKYC_USER_NAME") || "Corrected Name"}
|
|
219
|
+
</CardLabel>
|
|
220
|
+
|
|
221
|
+
<RadioButtons
|
|
222
|
+
options={yesNoOptions}
|
|
223
|
+
optionsKey="name"
|
|
224
|
+
selectedOption={nameCorrect}
|
|
225
|
+
onSelect={setNameCorrect}
|
|
226
|
+
t={t}
|
|
227
|
+
innerStyles={{ display: "flex", gap: "24px" }}
|
|
228
|
+
style={{ display: "flex", gap: "50px", marginBottom: "0" }}
|
|
229
|
+
/>
|
|
230
|
+
</div>
|
|
231
|
+
<div className="field" style={{ position: "relative" }}>
|
|
232
|
+
<div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: nameCorrect.code === "YES" ? 0.6 : 0.3 }}>
|
|
233
|
+
<UserIcon size={18} color={nameCorrect.code === "YES" ? "#64748b" : "#94a3b8"} />
|
|
234
|
+
</div>
|
|
235
|
+
<TextInput
|
|
236
|
+
value={userName}
|
|
237
|
+
onChange={(e) => setUserName(e.target.value)}
|
|
238
|
+
placeholder={t("EKYC_ENTER_NAME_PLACEHOLDER") || "Enter full name"}
|
|
239
|
+
textInputStyle={{ paddingLeft: "40px" }}
|
|
240
|
+
disabled={nameCorrect.code !== "YES"}
|
|
241
|
+
/>
|
|
242
|
+
</div>
|
|
243
|
+
</LabelFieldPair>
|
|
244
|
+
|
|
245
|
+
<LabelFieldPair>
|
|
246
|
+
<div style={{ display: "flex", alignItems: "center", gap: "20px", padding: "10px" }}>
|
|
247
|
+
<CardLabel style={{ fontWeight: "600", marginBottom: "0" }}>
|
|
248
|
+
{t("EKYC_USER_MOBILE_NUMBER") || "User Mobile Number"}
|
|
249
|
+
</CardLabel>
|
|
250
|
+
|
|
251
|
+
<RadioButtons
|
|
252
|
+
options={yesNoOptions}
|
|
253
|
+
optionsKey="name"
|
|
254
|
+
selectedOption={mobileChange}
|
|
255
|
+
onSelect={setMobileChange}
|
|
256
|
+
t={t}
|
|
257
|
+
innerStyles={{ display: "flex", gap: "24px" }}
|
|
258
|
+
style={{ display: "flex", gap: "50px", marginBottom: "0" }}
|
|
259
|
+
/>
|
|
260
|
+
</div>
|
|
261
|
+
<div className="field" style={{ position: "relative" }}>
|
|
262
|
+
<div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: mobileChange.code === "YES" ? 0.6 : 0.3 }}>
|
|
263
|
+
<PhoneIcon size={18} color={mobileChange.code === "YES" ? "#64748b" : "#94a3b8"} />
|
|
264
|
+
</div>
|
|
265
|
+
<TextInput
|
|
266
|
+
value={mobileNumber}
|
|
267
|
+
onChange={(e) => setMobileNumber(e.target.value)}
|
|
268
|
+
placeholder="+91 XXXXX XXXXX"
|
|
269
|
+
textInputStyle={{ paddingLeft: "40px" }}
|
|
270
|
+
disabled={mobileChange.code !== "YES"}
|
|
271
|
+
/>
|
|
272
|
+
</div>
|
|
273
|
+
</LabelFieldPair>
|
|
274
|
+
|
|
275
|
+
<div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: "24px", marginTop: "24px" }}>
|
|
276
|
+
<LabelFieldPair>
|
|
277
|
+
<CardLabel style={{ fontWeight: "600" }}>{t("EKYC_WHATSAPP_NUMBER") || "WhatsApp Number"}</CardLabel>
|
|
278
|
+
<div className="field" style={{ position: "relative" }}>
|
|
279
|
+
<div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: 0.6 }}>
|
|
280
|
+
<WhatsappIcon size={18} />
|
|
281
|
+
</div>
|
|
282
|
+
<TextInput
|
|
283
|
+
value={whatsappNumber}
|
|
284
|
+
onChange={(e) => setWhatsappNumber(e.target.value)}
|
|
285
|
+
placeholder="+91 XXXXX XXXXX"
|
|
286
|
+
textInputStyle={{ paddingLeft: "40px" }}
|
|
287
|
+
/>
|
|
288
|
+
</div>
|
|
289
|
+
</LabelFieldPair>
|
|
290
|
+
<LabelFieldPair>
|
|
291
|
+
<CardLabel style={{ fontWeight: "600" }}>{t("EKYC_EMAIL_ADDRESS") || "Email Address"} <span style={{ fontWeight: "400", color: "#667085" }}>({t("EKYC_OPTIONAL") || "Optional"})</span></CardLabel>
|
|
292
|
+
<div className="field" style={{ position: "relative" }}>
|
|
293
|
+
<div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: 0.6 }}>
|
|
294
|
+
<MailIcon size={18} />
|
|
295
|
+
</div>
|
|
296
|
+
<TextInput
|
|
297
|
+
value={email}
|
|
298
|
+
onChange={(e) => setEmail(e.target.value)}
|
|
299
|
+
placeholder={t("EKYC_EMAIL_ADDRESS_PLACEHOLDER") || "example@email.com"}
|
|
300
|
+
textInputStyle={{ paddingLeft: "40px" }}
|
|
301
|
+
/>
|
|
302
|
+
</div>
|
|
303
|
+
</LabelFieldPair>
|
|
304
|
+
</div>
|
|
305
|
+
|
|
306
|
+
<hr style={{ margin: "32px 0", border: "0", borderTop: "1px solid #EAECF0" }} />
|
|
307
|
+
|
|
308
|
+
{/* Section 3: Family Details */}
|
|
309
|
+
<CardHeader style={{ fontSize: "20px", marginBottom: "16px" }}>{t("EKYC_FAMILY_DETAILS_HEADER") || "Family Details"}</CardHeader>
|
|
310
|
+
|
|
311
|
+
<LabelFieldPair>
|
|
312
|
+
<CardLabel style={{ fontWeight: "600" }}>{t("EKYC_NO_OF_PERSONS") || "Number of Family Members"}</CardLabel>
|
|
313
|
+
<div className="field" style={{ position: "relative" }}>
|
|
314
|
+
<div style={{ position: "absolute", left: "12px", top: "50%", transform: "translateY(-50%)", zIndex: 1, opacity: 0.6 }}>
|
|
315
|
+
<UsersIcon size={18} />
|
|
316
|
+
</div>
|
|
317
|
+
<TextInput
|
|
318
|
+
value={noOfPersons}
|
|
319
|
+
onChange={(e) => { if (/^\d*$/.test(e.target.value)) setNoOfPersons(e.target.value); }}
|
|
320
|
+
placeholder={t("EKYC_ENTER_NO_OF_PERSONS") || "Enter total number of persons"}
|
|
321
|
+
textInputStyle={{ paddingLeft: "40px" }}
|
|
322
|
+
/>
|
|
323
|
+
</div>
|
|
324
|
+
</LabelFieldPair>
|
|
325
|
+
|
|
326
|
+
{!showAddressSection && (
|
|
327
|
+
<ActionBar>
|
|
328
|
+
<SubmitBar label={t("ES_COMMON_SAVE_CONTINUE") || "Save & Continue"} onSubmit={handleSaveAndContinueAadhaar} />
|
|
329
|
+
</ActionBar>
|
|
330
|
+
)}
|
|
331
|
+
|
|
332
|
+
{showAddressSection && (
|
|
333
|
+
<div ref={addressSectionRef}>
|
|
334
|
+
<AddressDetails
|
|
335
|
+
isSection={true}
|
|
336
|
+
onComplete={handleCompleteAll}
|
|
337
|
+
parentState={{ kNumber, selectedOption, connectionDetails }}
|
|
338
|
+
/>
|
|
339
|
+
</div>
|
|
340
|
+
)}
|
|
341
|
+
|
|
342
|
+
<div style={{ textAlign: "center", marginTop: "24px" }}>
|
|
343
|
+
<p style={{ fontSize: "12px", color: "#667085", display: "flex", alignItems: "center", justifyContent: "center", gap: "4px" }}>
|
|
344
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
|
|
345
|
+
<path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" />
|
|
346
|
+
<path d="M12 11V17M12 7H12.01" strokeLinecap="round" />
|
|
347
|
+
</svg>
|
|
348
|
+
{t("EKYC_SECURE_DATA_NOTICE") || "Your data is encrypted and secure"}
|
|
349
|
+
</p>
|
|
350
|
+
</div>
|
|
351
|
+
</Card>
|
|
352
|
+
</div>
|
|
353
|
+
</div>
|
|
354
|
+
);
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
export default AadhaarVerification;
|