diff options
author | Blaster4385 <venkateshchaturvedi12@gmail.com> | 2022-08-25 11:44:08 +0530 |
---|---|---|
committer | Blaster4385 <venkateshchaturvedi12@gmail.com> | 2022-08-25 11:44:08 +0530 |
commit | fcc4c3374d85b33755f852bcc559db0a8eb5115a (patch) | |
tree | 266005279ac7996b479e2cb3b5d48ccebd041290 | |
parent | 3450e5ad9c59403b9ad75aa24e71a1b925f7bbcf (diff) |
Misc changes and add more translation
29 files changed, 298 insertions, 178 deletions
diff --git a/admin/public/assets/images/error.svg b/admin/public/assets/images/error.svg new file mode 100644 index 0000000..d77b45f --- /dev/null +++ b/admin/public/assets/images/error.svg @@ -0,0 +1,27 @@ +<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="256" height="256" viewBox="0 0 64 64" + style=" fill:#000000;"> + <path fill="#FAB400" d="M44,14v41c0,0.55-0.44,1-1,1H9c-0.55,0-1-0.45-1-1V5c0-0.55,0.45-1,1-1h25L44,14z"></path> + <path fill="#DC9600" + d="M44,46.307v8.28l-7.526-7.557c-0.361-0.351-0.403-0.919-0.103-1.342l-2.282-2.271 c-2.416,1.807-5.42,2.891-8.673,2.891c-7.981,0-14.454-6.484-14.454-14.454c0-7.991,6.473-14.454,14.454-14.454 S39.87,23.861,39.87,31.852c0,3.232-1.063,6.215-2.87,8.631v0.01l2.292,2.271c0.413-0.258,0.96-0.207,1.311,0.134L44,46.307z"> + </path> + <rect width="3.999" height="4.487" x="34.998" y="38.757" fill="#F0F0F0" transform="rotate(-45.001 36.997 41)"> + </rect> + <path fill="#0A5078" + d="M27.557,16.102c6.095,0.751,11.09,5.56,12.045,11.626c0.627,3.985-0.436,7.741-2.602,10.624v0.01 c-0.8,1.07-1.75,2.02-2.82,2.83c-2.893,2.163-6.657,3.257-10.669,2.62c-6.087-0.967-10.905-5.99-11.63-12.111 C10.804,22.609,18.458,14.981,27.557,16.102z"> + </path> + <path fill="#DC9600" d="M44.02,16H34c-1.105,0-2-0.895-2-2V4h2.003L44,13.98L44.02,16z"></path> + <path fill="#FAB400" d="M44,14h-9c-0.552,0-1-0.448-1-1V4L44,14z"></path> + <path fill="#00143C" + d="M25.009,10h-12c-0.552,0-1,0.448-1,1s0.448,1,1,1h12c0.552,0,1-0.448,1-1S25.561,10,25.009,10z"></path> + <path fill="#00143C" + d="M31.009,50h-18c-0.552,0-1,0.448-1,1s0.448,1,1,1h18c0.552,0,1-0.448,1-1S31.561,50,31.009,50z"></path> + <path fill="#00143C" d="M18.009,46h-5c-0.552,0-1,0.448-1,1s0.448,1,1,1h5c0.552,0,1-0.448,1-1S18.561,46,18.009,46z"> + </path> + <circle cx="26" cy="30" r="10" fill="#FAB400"></circle> + <path fill="#C80A50" + d="M29.009,29.993l2.293-2.293c0.391-0.391,0.391-1.024,0-1.414L29.716,24.7 c-0.391-0.391-1.024-0.391-1.414,0l-2.293,2.293L23.716,24.7c-0.391-0.391-1.024-0.391-1.414,0l-1.586,1.586 c-0.391,0.391-0.391,1.024,0,1.414l2.293,2.293l-2.293,2.293c-0.391,0.391-0.391,1.024,0,1.414l1.586,1.586 c0.391,0.391,1.024,0.391,1.414,0l2.293-2.293l2.293,2.293c0.391,0.391,1.024,0.391,1.414,0l1.586-1.586 c0.391-0.391,0.391-1.024,0-1.414L29.009,29.993z"> + </path> + <path fill="#0A5078" + d="M55.159,59.183c-1.1,1.1-2.89,1.1-4,0l-14.44-14.48c-0.35-0.35-0.39-0.9-0.1-1.3 c0.03-0.04,0.06-0.08,0.1-0.12l2.58-2.58c0.05-0.05,0.1-0.09,0.15-0.13c0.4-0.25,0.93-0.21,1.27,0.13l14.44,14.48 C56.249,56.253,56.289,58.063,55.159,59.183z"> + </path> +</svg>
\ No newline at end of file diff --git a/admin/src/components/Error/Error.jsx b/admin/src/components/Error/Error.jsx new file mode 100644 index 0000000..110999b --- /dev/null +++ b/admin/src/components/Error/Error.jsx @@ -0,0 +1,29 @@ +import React, { useEffect } from 'react' +import { useNavigate } from 'react-router-dom' +import { initialUserData } from '../../constants/userData' +import { userContext } from '../../context/User' + +import styles from './Error.module.css' + +const Error = ({ message }) => { + const navigate = useNavigate() + useEffect(() => { + setTimeout(() => { + navigate('/') + }, 3000) + }, []) + + return ( + <> + <div className={styles.error}> + <img + src={`${process.env.PUBLIC_URL}/assets/images/error.svg`} + className={styles.error__image} + /> + <h1 className={styles.error__title}>{message}</h1> + </div> + </> + ) +} + +export default Error diff --git a/admin/src/components/Error/Error.module.css b/admin/src/components/Error/Error.module.css new file mode 100644 index 0000000..d58d354 --- /dev/null +++ b/admin/src/components/Error/Error.module.css @@ -0,0 +1,19 @@ +.error { + display: flex; + height: 100vh; + width: 100vw; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.error__title { + font-family: 'Barlow', sans-serif; + font-weight: 400; + font-size: var(--font-large); + text-align: center; +} + +.error__image { + margin-left: 40px; +} diff --git a/admin/src/components/Spinner/Spinner.jsx b/admin/src/components/Spinner/Spinner.jsx new file mode 100644 index 0000000..da16d0f --- /dev/null +++ b/admin/src/components/Spinner/Spinner.jsx @@ -0,0 +1,16 @@ +import React from 'react' +import CircularProgress from '@mui/material/CircularProgress' +import Header from '../Header/Header' +import styles from './Spinner.module.css' + +const Spinner = ({ heading }) => { + console.log(heading) + return ( + <div className={styles.spinner}> + <Header subheading={heading} /> + <CircularProgress /> + </div> + ) +} + +export default Spinner diff --git a/admin/src/components/Spinner/Spinner.module.css b/admin/src/components/Spinner/Spinner.module.css new file mode 100644 index 0000000..04197de --- /dev/null +++ b/admin/src/components/Spinner/Spinner.module.css @@ -0,0 +1,6 @@ +.spinner { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +}
\ No newline at end of file diff --git a/admin/src/pages/UnverifiedUsers/UnverifiedUsers.jsx b/admin/src/pages/UnverifiedUsers/UnverifiedUsers.jsx index 67de506..0c3a57d 100644 --- a/admin/src/pages/UnverifiedUsers/UnverifiedUsers.jsx +++ b/admin/src/pages/UnverifiedUsers/UnverifiedUsers.jsx @@ -10,13 +10,23 @@ import { import {useQuery, useMutation} from 'react-query'; import styles from './UnverifiedUsers.module.css'; +import Spinner from '../../components/Spinner/Spinner'; const UnverifiedUsers = () => { - const {data} = useQuery('unverified', getUnverifiedUsers); + const {data, isLoading, isError} = useQuery('unverified', getUnverifiedUsers); const deleteUse = useMutation((id) => deleteUser(id)); const updateUse = useMutation((id) => updateUser(id, {verified: true})); - + useEffect(() => {}, [data]); + + if (isLoading) { + return <Spinner heading='Admin' /> + } + + if (isError) { + return <div>Error</div> + } + return ( <div className={styles.unverified_users}> diff --git a/client/src/components/LanguageSelect/locales/en/translation.json b/client/src/components/LanguageSelect/locales/en/translation.json index 9b16513..a2a4470 100644 --- a/client/src/components/LanguageSelect/locales/en/translation.json +++ b/client/src/components/LanguageSelect/locales/en/translation.json @@ -103,8 +103,45 @@ "STATUS": "Status", "ENROLLMENT_STATUS": "Enrollment Status", "YOUR_AADHAAR_STATUS_IS_IN_PENDING_STATE": "Your Aadhaar enrollment request is in process.", - "PLEASE_HAVE_PATIENCE": "Please have patience, and wait for maximum 48hrs", + "PLEASE_HAVE_PATIENCE": "Please have patience, and wait for minimum 48hrs", "YOUR_AADHAAR_STATUS_IS_APPROVED": "Your Aadhaar enrollment request has been approved", "PRINT_YOUR_AADHAAR_CARD_FROM_WEBSITE": "You may now print your Aadhaar card from the official website", - "BACK_TO_HOME": "Back to Home" + "BACK_TO_HOME": "Back to Home", + "FILL_YOUR_INFORMATION": "Fill your information", + "SELECT_YOUR_RESIDENCY_BY_SELECTING_THE_APPROPRIATE_CHECKBOX": "Select your residency by selecting the appropriate checkbox", + "ENTER_YOUR_FULL_NAME_WITHOUT_ANY_TITLE_OR_SALUTATION": "Enter your full name without any title or salutation", + "SELECT_YOUR_GENDER_BY_CLICKING_ON_THE_APPROPRIATE_CARD": "Select your gender by clicking on the appropriate card", + "SELECT_YOUR_DATE_OF_BIRTH_FROM_THE_PROVIDED_CALENDER": "Select your date of birth from the provided calender", + "ENTER_YOUR_10_DIGIT_MOBILE_NUMBER_WITHOUT_ANY_PREFIX_OR_COUNTRY_ID": "Enter your 10 digit mobile number without any prefix or country ID", + "ENTER_YOUR_DETAILS_ACCORDING_TO_THE_RELEVANT_FIELDS": "Enter your details according to the relevant fields", + "SELECT_THE_STATE_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST": "Select the state you belong to from the dropdown list", + "SELECT_THE_DISTRICT_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST": "Select the district you belong to from the dropdown list", + "CAPTURE_YOUR_PHOTO": "Capture your photo", + "ENSURE_THAT_YOUR_PHOTO_IS_CLEAR_AND_IN_FOCUS": "Ensure that your photo is clear and in focus", + "ALSO_ENSURE_THAT_YOU_ARE_IN_THE_CENTER_OF_YOUR_PHOTO": "Also ensure that you are in the center of your photo", + "YOU_WONT_BE_ABLE_TO_PROCEED_UNTIL_YOU_HAVE_CAPTURED_A_CLEAR_AND_CENTERED_PHOTO": "You won't be able to proceed until you have captured a clear and centered photo", + "PLEASE_CAPTURE_CLEAR_PHOTOGRAPH": "Please capture clear photograph", + "PLEASE_WAIT": "Please wait", + "SCAN_YOUR_DOCUMENTS": "Scan your documents", + "CONSISTS_OF_3_STEPS": "Consists of 3 steps", + "ENSURE_THAT_YOUR_DOCUMENTS_ARE_IN_THE_CENTER_OF_THE_FRAME": "Ensure that your documents are in the center of the frame", + "YOU_WONT_BE_ABLE_TO_PROCEED_UNTIL_YOU_HAVE_SCANNED_ALL_THE_REQUIRED_DOCUMENTS": "You won't be able to proceed until you have scanned all the required documents", + "CLICK_ON_SEND_OTP": "Click on \"Send OTP\"", + "YOU_CAN_RESEND_THE_OTP_AFTER_30_SECONDS_IF_YOU_HAVENT_RECEIVED_IT_YET": "You can resend the OTP after 30 seconds if you haven't received it yet", + "CLICK_ON_VERIFY_OTP_TO_VERIFY_YOUR_MOBILE_NUMBER": "Click on Verify OTP to verify your mobile number", + "VERIFY_YOUR_MOBILE_NUMBER": "Verify your mobile number", + "UPDATE_THE_REQUIRED_DETAILS_IN_THE_RELEVANT_FIELDS_BY_CLICKING_THE_EDIT_BUTTON": "Update the required details in the relevant fields by clicking the edit button", + "IF_REQUIRED_SELECT_THE_STATE_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST": "If required, select the state you belong to from the dropdown list", + "IF_REQUIRED_SELECT_THE_DISTRICT_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST_THIS_WONT_SHOW_ANY_OPTIONS_UNTIL_YOU_HAVE_SELECTED_THE_STATE": "If required, select the district you belong to from the dropdown list. This won't show any options until you have selected the state", + "YOU_WILL_RECIEVE_AN_OTP_ON_YOUR_MOBILE_NUMBER": "You will receive an OTP on your mobile number", + "CLICK_ON_THE_EDIT_BUTTON_TO_UPDATE_THE_REQUIRED_BIOMETRICS": "Click on the edit button to update the required biometrics", + "YOU_CAN_EDIT_YOUR_PHOTOGRAPH_/_FINGERPRINTS_/_IRIS_SCANS": "You can edit your photograph / fingerprints / iris scans", + "SELECT_THE_OPTION_TO_BE_EDITED": "Select the option to be edited", + "CHECK_STATUS": "Check Status", + "PROVIDE_YOUR_EID_NUMBER": "Provide your EID number", + "UPDATE_STATUS": "Update Status", + "APPROVED": "Approved", + "YOUR_AADHAAR_UPDATE_STATUS_IS_APPROVED": "Your Aadhaar update status is approved", + "ENTER_YOUR_EID_NUMBER": "Enter your EID number", + "PENDING": "Pending" } diff --git a/client/src/components/LanguageSelect/locales/hi/translation.json b/client/src/components/LanguageSelect/locales/hi/translation.json index e293a15..fbdf254 100644 --- a/client/src/components/LanguageSelect/locales/hi/translation.json +++ b/client/src/components/LanguageSelect/locales/hi/translation.json @@ -102,5 +102,45 @@ "YOU_HAVENT_UPDATED_ANYTHING_DIRECTING_YOU_TO_MAIN_PAGE": "आपने कोई भी अपडेट नहीं किया है, आपको मुखपृष्ठ पर भेजा जा रहा हैं", "STATUS": "स्थिति", "ENROLLMENT_STATUS": "नामांकन की स्थिति", - "BACK_TO_HOME": "मुखपृष्ठ पर वापस" + "BACK_TO_HOME": "मुखपृष्ठ पर वापस", + "FILL_YOUR_INFORMATION": "अपनी जानकारी भरें", + "SELECT_YOUR_RESIDENCY_BY_SELECTING_THE_APPROPRIATE_CHECKBOX": "उचित चेकबॉक्स का चयन करके अपनी रहने की स्थिति का चयन करें", + "ENTER_YOUR_FULL_NAME_WITHOUT_ANY_TITLE_OR_SALUTATION": "कोई शीर्षक या संदेश बिना अपना पूरा नाम दर्ज करें", + "SELECT_YOUR_GENDER_BY_CLICKING_ON_THE_APPROPRIATE_CARD": "उचित कार्ड पर क्लिक करके अपना लिंग चुनें", + "SELECT_YOUR_DATE_OF_BIRTH_FROM_THE_PROVIDED_CALENDER": "प्रदान किए गए कैलेंडर से अपनी जन्मतिथि चुनें", + "ENTER_YOUR_10_DIGIT_MOBILE_NUMBER_WITHOUT_ANY_PREFIX_OR_COUNTRY_ID": "कोई उपसर्ग या देश आईडी बिना अपना 10 अंकों का मोबाइल नंबर दर्ज करें", + "ENTER_YOUR_DETAILS_ACCORDING_TO_THE_RELEVANT_FIELDS": "संबंधित क्षेत्रों के अनुसार अपना विवरण दर्ज करें", + "SELECT_THE_STATE_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST": "ड्रॉपडाउन सूची से जिस राज्य में आप शामिल हैं उसे चुनें", + "SELECT_THE_DISTRICT_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST": "ड्रॉपडाउन सूची से जिस जिले में आप शामिल हैं उसे चुनें", + "CAPTURE_YOUR_PHOTO": "अपनी तस्वीर लें", + "ENSURE_THAT_YOUR_PHOTO_IS_CLEAR_AND_IN_FOCUS": "यह सुनिश्चित करें कि आपकी तस्वीर स्पष्ट और फोकस में है", + "ALSO_ENSURE_THAT_YOU_ARE_IN_THE_CENTER_OF_YOUR_PHOTO": "यह सुनिश्चित करें कि आप अपनी तस्वीर के मध्य में हैं", + "YOU_WONT_BE_ABLE_TO_PROCEED_UNTIL_YOU_HAVE_CAPTURED_A_CLEAR_AND_CENTERED_PHOTO": "जब तक आप एक स्पष्ट और केंद्रित तस्वीर लेने तक आप आगे नहीं बढ़ सकते हैं", + "PLEASE_CAPTURE_CLEAR_PHOTOGRAPH": "कृपया स्पष्ट तस्वीर लें", + "PLEASE_WAIT": "कृपया प्रतीक्षा करें", + "SCAN_YOUR_DOCUMENTS": "अपने दस्तावेज़ों को स्कैन करें", + "CONSISTS_OF_3_STEPS": "3 चरणों का अवलोकन करें", + "ENSURE_THAT_YOUR_DOCUMENTS_ARE_IN_THE_CENTER_OF_THE_FRAME": "यह सुनिश्चित करें कि आपके दस्तावेज़ केंद्र में हैं", + "YOU_WONT_BE_ABLE_TO_PROCEED_UNTIL_YOU_HAVE_SCANNED_ALL_THE_REQUIRED_DOCUMENTS": "जब तक आप सभी आवश्यक दस्तावेज़ों को स्कैन नहीं करते तब तक आप आगे नहीं बढ़ सकते हैं", + "CLICK_ON_SEND_OTP": "ओटीपी भेजने पर क्लिक करें", + "YOU_CAN_RESEND_THE_OTP_AFTER_30_SECONDS_IF_YOU_HAVENT_RECEIVED_IT_YET": "यदि आपने अभी तक इसे प्राप्त नहीं किया है तो आप 30 सेकंड के बाद ओटीपी को फिर से भेज सकते हैं", + "CLICK_ON_VERIFY_OTP_TO_VERIFY_YOUR_MOBILE_NUMBER": "अपना मोबाइल नंबर सत्यापित करने के लिए ओटीपी सत्यापित करने पर क्लिक करें", + "VERIFY_YOUR_MOBILE_NUMBER": "अपना मोबाइल नंबर सत्यापित करें", + "UPDATE_THE_REQUIRED_DETAILS_IN_THE_RELEVANT_FIELDS_BY_CLICKING_THE_EDIT_BUTTON": "संशोधित बटन पर क्लिक करके उपयुक्त फ़ील्ड में आवश्यक विवरणों को अपडेट करें", + "IF_REQUIRED_SELECT_THE_STATE_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST": "यदि आवश्यक हो तो ड्रॉपडाउन सूची से आपके जिस राज्य में आप हैं उसे चुनें", + "IF_REQUIRED_SELECT_THE_DISTRICT_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST_THIS_WONT_SHOW_ANY_OPTIONS_UNTIL_YOU_HAVE_SELECTED_THE_STATE": "यदि आवश्यक हो तो ड्रॉपडाउन सूची से आपके जिस जिले में आप हैं उसे चुनें, यह राज्य का चयन करने तक कोई विकल्प नहीं दिखाएगा", + "YOU_WILL_RECIEVE_AN_OTP_ON_YOUR_MOBILE_NUMBER": "आपको अपने मोबाइल नंबर पर एक ओटीपी प्राप्त होगा", + "CLICK_ON_THE_EDIT_BUTTON_TO_UPDATE_THE_REQUIRED_BIOMETRICS": "आवश्यक बीयमेट्री को अपडेट करने के लिए बटन पर क्लिक करें", + "YOU_CAN_EDIT_YOUR_PHOTOGRAPH_/_FINGERPRINTS_/_IRIS_SCANS": "आप अपने फोटो/फिंगरप्रिंट/आईरिस स्कैन संपादित कर सकते हैं", + "SELECT_THE_OPTION_TO_BE_EDITED": "संपादित करने के लिए विकल्प चुनें", + "CHECK_STATUS": "स्थिति की जाँच करें", + "PROVIDE_YOUR_EID_NUMBER": "अपना ईडी नंबर दर्ज करें", + "UPDATE_STATUS": "अपडेट की स्तिथि", + "APPROVED": "स्वीकृत", + "YOUR_AADHAAR_UPDATE_STATUS_IS_APPROVED": "आपका आधार अपडेट स्तिथि स्वीकृत है", + "ENTER_YOUR_EID_NUMBER": "अपना ईडी नंबर दर्ज करें", + "YOUR_AADHAAR_STATUS_IS_APPROVED": "आपका आधार नामांकन अनुरोध स्वीकृत हो गया है", + "PENDING": "लंबित", + "YOUR_AADHAAR_STATUS_IS_IN_PENDING_STATE": "आपका आधार नामांकन अनुरोध प्रक्रिया में है", + "PLEASE_HAVE_PATIENCE": "कृपया धैर्य रखें, और कम से कम 48 घंटे तक प्रतीक्षा करें" } diff --git a/client/src/components/Modal/Modal.jsx b/client/src/components/Modal/Modal.jsx index 679503e..b9e3c5d 100644 --- a/client/src/components/Modal/Modal.jsx +++ b/client/src/components/Modal/Modal.jsx @@ -2,6 +2,7 @@ import React from 'react' import { Modal, Box, Button } from '@mui/material' import styles from './Modal.module.css' import { Container } from '@mui/system' +import { useTranslation } from 'react-i18next' const PopUpModal = ({ title, description, image }) => { const style = { @@ -15,6 +16,7 @@ const PopUpModal = ({ title, description, image }) => { boxShadow: 24, p: 4 } + const { t } = useTranslation() const [open, setOpen] = React.useState(false) const handleOpen = () => setOpen(true) const handleClose = () => setOpen(false) @@ -36,7 +38,7 @@ const PopUpModal = ({ title, description, image }) => { > <Box sx={style}> <h1 id="modal-modal-title" className={styles.modal__title}> - {title} + {t(`${title}`)} </h1> <Container sx={{ display: 'flex', alignItems: 'center' }}> <img diff --git a/client/src/components/Spinner/Spinner.jsx b/client/src/components/Spinner/Spinner.jsx new file mode 100644 index 0000000..fac2bd4 --- /dev/null +++ b/client/src/components/Spinner/Spinner.jsx @@ -0,0 +1,18 @@ +import React from 'react' +import CircularProgress from '@mui/material/CircularProgress' +import Header from '../Header/Header' +import { useTranslation } from 'react-i18next' +import styles from './Spinner.module.css' + +const Spinner = ({ heading }) => { + const { t } = useTranslation() + console.log(heading) + return ( + <div className={styles.spinner}> + <Header subheading={`${t(`${heading}`)}`} /> + <CircularProgress /> + </div> + ) +} + +export default Spinner diff --git a/client/src/components/Spinner/Spinner.module.css b/client/src/components/Spinner/Spinner.module.css new file mode 100644 index 0000000..04197de --- /dev/null +++ b/client/src/components/Spinner/Spinner.module.css @@ -0,0 +1,6 @@ +.spinner { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +}
\ No newline at end of file diff --git a/client/src/pages/CheckStatus/EnrollmentStatus.jsx b/client/src/pages/CheckStatus/EnrollmentStatus.jsx index 9ae0026..d1e1f4d 100644 --- a/client/src/pages/CheckStatus/EnrollmentStatus.jsx +++ b/client/src/pages/CheckStatus/EnrollmentStatus.jsx @@ -46,9 +46,6 @@ const EnrollmentStatus = () => { <p className={styles.status__content}> {t('YOUR_AADHAAR_STATUS_IS_APPROVED')} </p> - <p className={styles.status__content}> - {t('PRINT_YOUR_AADHAAR_CARD_FROM_WEBSITE')} - </p> </> )} <Button diff --git a/client/src/pages/CheckStatus/StatusOtp.jsx b/client/src/pages/CheckStatus/StatusOtp.jsx index d7d62d1..4955ab4 100644 --- a/client/src/pages/CheckStatus/StatusOtp.jsx +++ b/client/src/pages/CheckStatus/StatusOtp.jsx @@ -12,6 +12,7 @@ import { toast, ToastContainer } from 'react-toastify' import PopUpModal from '../../components/Modal/Modal' import styles from './StatusOtp.module.css' +import Spinner from '../../components/Spinner/Spinner' const StatusOtp = () => { const navigate = useNavigate() @@ -68,7 +69,7 @@ const StatusOtp = () => { } }) if (isLoading) { - return <div>{t('loading')}</div> + return <Spinner heading='STATUS' /> } if (isError) { @@ -85,7 +86,7 @@ const StatusOtp = () => { }) if (isLoading) { - return <div>{t('loading')}</div> + return <Spinner heading='STATUS' /> } if (isError) { @@ -97,6 +98,8 @@ const StatusOtp = () => { } } + const description = ['CLICK_ON_SEND_OTP', 'YOU_WILL_RECIEVE_AN_OTP_ON_YOUR_MOBILE_NUMBER', 'YOU_CAN_RESEND_THE_OTP_AFTER_30_SECONDS_IF_YOU_HAVENT_RECEIVED_IT_YET', 'CLICK_ON_VERIFY_OTP_TO_VERIFY_YOUR_MOBILE_NUMBER'] + return ( <> <ToastContainer @@ -106,22 +109,12 @@ const StatusOtp = () => { /> <Header subheading={`${t('STATUS')}`} /> <PopUpModal - title="Verify your mobile number" + title="VERIFY_YOUR_MOBILE_NUMBER" image={`${process.env.PUBLIC_URL}/assets/images/otp.svg`} description={ <> <ul> - <li className="list__item">Click on "SEND OTP"</li> - <li className="list__item"> - You will recieve an OTP on your entered mobile number - </li> - <li className="list__item"> - You can "RESEND" the OTP after 30 seconds, if you - haven't received it yet. - </li> - <li className="list__item"> - Click on "VERIFY OTP" to verify your mobile number - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } diff --git a/client/src/pages/CheckStatus/UpdateStatus.jsx b/client/src/pages/CheckStatus/UpdateStatus.jsx index 431f9d5..a9a4b58 100644 --- a/client/src/pages/CheckStatus/UpdateStatus.jsx +++ b/client/src/pages/CheckStatus/UpdateStatus.jsx @@ -46,9 +46,6 @@ const UpdateStatus = () => { <p className={styles.status__content}> {t('YOUR_AADHAAR_UPDATE_STATUS_IS_APPROVED')} </p> - <p className={styles.status__content}> - {t('PRINT_YOUR_AADHAAR_CARD_FROM_WEBSITE')} - </p> </> )} <Button diff --git a/client/src/pages/Enrollment/Address/Address.jsx b/client/src/pages/Enrollment/Address/Address.jsx index 78b0737..fc27448 100644 --- a/client/src/pages/Enrollment/Address/Address.jsx +++ b/client/src/pages/Enrollment/Address/Address.jsx @@ -45,25 +45,18 @@ const Address = () => { }) } + const description = ['ENTER_YOUR_DETAILS_ACCORDING_TO_THE_RELEVANT_FIELDS', 'SELECT_THE_STATE_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST', 'SELECT_THE_DISTRICT_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST'] + return ( <> <Header subheading={t('ENROLLMENT')} /> <PopUpModal - title="Fill your information" + title="FILL_YOUR_INFORMATION" image={`${process.env.PUBLIC_URL}/assets/images/address.svg`} description={ <> <ul> - <li className="list__item"> - Enter your details according to the relevant fields - </li> - <li className="list__item"> - State: Select the state you belong to. from the dropdown list - </li> - <li className="list__item"> - District: Select the district you belong to. from the dropdown - list - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } diff --git a/client/src/pages/Enrollment/Agreement/Agreement.jsx b/client/src/pages/Enrollment/Agreement/Agreement.jsx index 13b46ba..5b7950b 100644 --- a/client/src/pages/Enrollment/Agreement/Agreement.jsx +++ b/client/src/pages/Enrollment/Agreement/Agreement.jsx @@ -46,6 +46,8 @@ const Agreement = ({ unverified, setUnverified }) => { }, 30000) } + const description = ['CLICK_ON_SEND_OTP', 'YOU_WILL_RECIEVE_AN_OTP_ON_YOUR_MOBILE_NUMBER', 'YOU_CAN_RESEND_THE_OTP_AFTER_30_SECONDS_IF_YOU_HAVENT_RECEIVED_IT_YET', 'CLICK_ON_VERIFY_OTP_TO_VERIFY_YOUR_MOBILE_NUMBER'] + return ( <> <ToastContainer @@ -55,22 +57,12 @@ const Agreement = ({ unverified, setUnverified }) => { /> <Header subheading={t('ENROLLMENT')} /> <PopUpModal - title="Verify your mobile number" + title="VERIFY_YOUR_MOBILE_NUMBER" image={`${process.env.PUBLIC_URL}/assets/images/agreement.svg`} description={ <> <ul> - <li className="list__item">Click on "SEND OTP"</li> - <li className="list__item"> - You will recieve an OTP on your entered mobile number - </li> - <li className="list__item"> - You can "RESEND" the OTP after 30 seconds, if you - haven't received it yet. - </li> - <li className="list__item"> - Click on "VERIFY OTP" to verify your mobile number - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } diff --git a/client/src/pages/Enrollment/DocumentScanner/DocumentScanner.jsx b/client/src/pages/Enrollment/DocumentScanner/DocumentScanner.jsx index 3f7b0f6..2e40523 100644 --- a/client/src/pages/Enrollment/DocumentScanner/DocumentScanner.jsx +++ b/client/src/pages/Enrollment/DocumentScanner/DocumentScanner.jsx @@ -148,25 +148,24 @@ const DocumentScanner = () => { <> <Header subheading={t('ENROLLMENT')} /> <PopUpModal - title="Scan your documents" + title="SCAN_YOUR_DOCUMENTS" image={`${process.env.PUBLIC_URL}/assets/images/document.svg`} description={ <> <ul> <li className="list__item"> - Consists of 3 steps : + {t('CONSISTS_OF_3_STEPS')} <ul> - <li>Proof of Identity: </li> - <li>Proof of Address: </li> - <li>Proof of Date of Birth: </li> + <li>{t('PROOF_OF_IDENTITY')} </li> + <li>{t(t('PROOF_OF_ADDRESS'))}</li> + <li>{t('PROOF_OF_DOB')} </li> </ul> </li> <li className="list__item"> - Ensure that your documents are in the center of the frame + {t('ENSURE_THAT_YOUR_DOCUMENTS_ARE_IN_THE_CENTER_OF_THE_FRAME')} </li> <li className="list__item"> - You won't be able to proceed until you have scanned all the - required documents + {t('YOU_WONT_BE_ABLE_TO_PROCEED_UNTIL_YOU_HAVE_SCANNED_ALL_THE_REQUIRED_DOCUMENTS')} </li> </ul> </> diff --git a/client/src/pages/Enrollment/Enrollment.jsx b/client/src/pages/Enrollment/Enrollment.jsx index 35a599f..4d8fad2 100644 --- a/client/src/pages/Enrollment/Enrollment.jsx +++ b/client/src/pages/Enrollment/Enrollment.jsx @@ -28,6 +28,7 @@ import BackButton from '../../components/BackButton/BackButton' import { initialUserData } from '../../constants/userData' import * as cocoSsd from '@tensorflow-models/coco-ssd' import * as tf from '@tensorflow/tfjs' +import Spinner from '../../components/Spinner/Spinner' const Enrollment = () => { const { t } = useTranslation() @@ -73,6 +74,9 @@ const Enrollment = () => { }) setPage(page + 1) }, + onLoading: () => { + return <Spinner heading='ENROLLMENT' /> + }, onError: (error) => { console.log(error) if (error?.response?.data?.message === 'User already exists.') { @@ -152,7 +156,7 @@ const Enrollment = () => { toast.error(t('PLEASE_CAPTURE_PHOTOGRAPH')) } else if ( predictions[0].class === 'person' && - predictions[0].score > 0.8 + predictions[0].score > 0.7 ) { setPage(page + 1) } else { diff --git a/client/src/pages/Enrollment/FormOne/FormOne.jsx b/client/src/pages/Enrollment/FormOne/FormOne.jsx index fb37457..4fd2d41 100644 --- a/client/src/pages/Enrollment/FormOne/FormOne.jsx +++ b/client/src/pages/Enrollment/FormOne/FormOne.jsx @@ -31,27 +31,18 @@ const FormOne = () => { } }, [userData.gender]) + const description = ['SELECT_YOUR_RESIDENCY_BY_SELECTING_THE_APPROPRIATE_CHECKBOX', 'ENTER_YOUR_FULL_NAME_WITHOUT_ANY_TITLE_OR_SALUTATION', 'SELECT_YOUR_GENDER_BY_CLICKING_ON_THE_APPROPRIATE_CARD', 'SELECT_YOUR_DATE_OF_BIRTH_FROM_THE_PROVIDED_CALENDER'] + return ( <> <Header subheading={t('ENROLLMENT')} /> <PopUpModal - title="Fill your information" + title="FILL_YOUR_INFORMATION" image={`${process.env.PUBLIC_URL}/assets/images/id.svg`} description={ <> <ul> - <li className="list__item"> - Select your residency by selecting the appropriate checkbox - </li> - <li className="list__item"> - Enter your full name without any title or salutation - </li> - <li className="list__item"> - Select your gender by clicking on the appropriate card - </li> - <li className="list__item"> - Select your date of birth from the provided calender - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } diff --git a/client/src/pages/Enrollment/FormTwo/FormTwo.jsx b/client/src/pages/Enrollment/FormTwo/FormTwo.jsx index b4a53ed..e7c8ae1 100644 --- a/client/src/pages/Enrollment/FormTwo/FormTwo.jsx +++ b/client/src/pages/Enrollment/FormTwo/FormTwo.jsx @@ -10,22 +10,17 @@ import PopUpModal from '../../../components/Modal/Modal' const FormTwo = () => { const { t } = useTranslation() const { userData, setUserData } = userContext() + const description = ['ENTER_YOUR_10_DIGIT_MOBILE_NUMBER_WITHOUT_ANY_PREFIX_OR_COUNTRY_ID', 'ENTER_YOUR_EMAIL_ID'] return ( <> <Header subheading={t('ENROLLMENT')} /> <PopUpModal - title="Fill your information" + title="FILL_YOUR_INFORMATION" image={`${process.env.PUBLIC_URL}/assets/images/communication.svg`} description={ <> <ul> - <li className="list__item"> - Enter your 10 digit mobile number without any prefix or country - code - </li> - <li className="list__item"> - Enter your email address in proper format - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } diff --git a/client/src/pages/Enrollment/PhotoCapture/PhotoCapture.jsx b/client/src/pages/Enrollment/PhotoCapture/PhotoCapture.jsx index 2430016..fd5a051 100644 --- a/client/src/pages/Enrollment/PhotoCapture/PhotoCapture.jsx +++ b/client/src/pages/Enrollment/PhotoCapture/PhotoCapture.jsx @@ -20,25 +20,18 @@ const PhotoCapture = () => { setUserData({ ...userData, photo: imageSrc }) }) + const description = ['ENSURE_THAT_YOUR_PHOTO_IS_CLEAR_AND_IN_FOCUS', 'ALSO_ENSURE_THAT_YOU_ARE_IN_THE_CENTER_OF_YOUR_PHOTO', 'YOU_WONT_BE_ABLE_TO_PROCEED_UNTIL_YOU_HAVE_CAPTURED_A_CLEAR_AND_CENTERED_PHOTO'] + return ( <> <Header subheading={t('ENROLLMENT')} /> <PopUpModal - title="Capture your photo" + title="CAPTURE_YOUR_PHOTO" image={`${process.env.PUBLIC_URL}/assets/images/photo.svg`} description={ <> <ul> - <li className="list__item"> - Ensure that your photo is clear and in focus - </li> - <li className="list__item"> - Also, ensure that you are in the center of your photo - </li> - <li className="list__item"> - You won't be able to proceed until you have captured a - clear and centered photo - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } diff --git a/client/src/pages/Update/Address/Address.jsx b/client/src/pages/Update/Address/Address.jsx index 0af60a5..39d3f13 100644 --- a/client/src/pages/Update/Address/Address.jsx +++ b/client/src/pages/Update/Address/Address.jsx @@ -55,28 +55,18 @@ const Address = () => { setEditable2(!editable2) } + const description = ['UPDATE_THE_REQUIRED_DETAILS_IN_THE_RELEVANT_FIELDS_BY_CLICKING_THE_EDIT_BUTTON', 'IF_REQUIRED_SELECT_THE_STATE_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST', 'IF_REQUIRED_SELECT_THE_DISTRICT_YOU_BELONG_TO_FROM_THE_DROPDOWN_LIST_THIS_WONT_SHOW_ANY_OPTIONS_UNTIL_YOU_HAVE_SELECTED_THE_STATE'] + return ( <> <Header subheading={t('UPDATE')} /> <PopUpModal - title="Fill your information" + title="FILL_YOUR_INFORMATION" image={`${process.env.PUBLIC_URL}/assets/images/address.svg`} description={ <> <ul> - <li className="list__item"> - Update the required details in the relevant fields by clicking - the edit button - </li> - <li className="list__item"> - If required, select the state you belong to. from the dropdown - list - </li> - <li className="list__item"> - If required, select the district you belong to. from the - dropdown list. This won't show any options until you have - selected the state - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } diff --git a/client/src/pages/Update/Agreement/Agreement.jsx b/client/src/pages/Update/Agreement/Agreement.jsx index 22ffa80..720d8a0 100644 --- a/client/src/pages/Update/Agreement/Agreement.jsx +++ b/client/src/pages/Update/Agreement/Agreement.jsx @@ -13,6 +13,8 @@ import { useMutation } from 'react-query' import { ToastContainer, toast } from 'react-toastify' import PopUpModal from '../../../components/Modal/Modal' import 'react-toastify/dist/ReactToastify.css' +import Error from '../../Error/Error' +import Spinner from '../../../components/Spinner/Spinner' const Agreement = () => { const { t } = useTranslation() @@ -32,6 +34,12 @@ const Agreement = () => { mobile: `+91${userData.mobile}`, id: userData._id }) + }, + onLoading: () => { + return <Spinner heading='UPDATE' /> + }, + onError: () => { + return <Error message={t('SOMETHING_WENT_WRONG_PLEASE_TRY_AGAIN')} /> } } ) @@ -73,6 +81,8 @@ const Agreement = () => { }, 30000) } + const description = ['CLICK_ON_SEND_OTP', 'YOU_WILL_RECIEVE_AN_OTP_ON_YOUR_MOBILE_NUMBER', 'YOU_CAN_RESEND_THE_OTP_AFTER_30_SECONDS_IF_YOU_HAVENT_RECEIVED_IT_YET', 'CLICK_ON_VERIFY_OTP_TO_VERIFY_YOUR_MOBILE_NUMBER'] + return ( <> <ToastContainer @@ -82,22 +92,12 @@ const Agreement = () => { /> <Header subheading={t('ENROLLMENT')} /> <PopUpModal - title="Verify your mobile number" + title="VERIFY_YOUR_MOBILE_NUMBER" image={`${process.env.PUBLIC_URL}/assets/images/agreement.svg`} description={ <> <ul> - <li className="list__item">Click on "SEND OTP"</li> - <li className="list__item"> - You will recieve an OTP on your entered mobile number - </li> - <li className="list__item"> - You can "RESEND" the OTP after 30 seconds, if you - haven't received it yet. - </li> - <li className="list__item"> - Click on "VERIFY OTP" to verify your mobile number - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } diff --git a/client/src/pages/Update/Biometric/Biometric.jsx b/client/src/pages/Update/Biometric/Biometric.jsx index 10b2776..f8bf028 100644 --- a/client/src/pages/Update/Biometric/Biometric.jsx +++ b/client/src/pages/Update/Biometric/Biometric.jsx @@ -82,7 +82,7 @@ const Biometric = () => { setUserData({ ...userData, photo: oriUserData.photo }) } else if ( predictions[0].class === 'person' && - predictions[0].score > 0.8 + predictions[0].score > 0.7 ) { setPage(4) } else { diff --git a/client/src/pages/Update/BiometricSelect/BiometricSelect.jsx b/client/src/pages/Update/BiometricSelect/BiometricSelect.jsx index a942aef..89d2bfb 100644 --- a/client/src/pages/Update/BiometricSelect/BiometricSelect.jsx +++ b/client/src/pages/Update/BiometricSelect/BiometricSelect.jsx @@ -8,21 +8,17 @@ import { useTranslation } from 'react-i18next' const BiometricSelect = ({ page, setPage }) => { const { t } = useTranslation() + const description = ['CLICK_ON_THE_EDIT_BUTTON_TO_UPDATE_THE_REQUIRED_BIOMETRICS', 'YOU_CAN_EDIT_YOUR_PHOTOGRAPH_/_FINGERPRINTS_/_IRIS_SCANS'] return ( <> <Header subheading={t('UPDATE')} /> <PopUpModal - title="Select the option to be edited" + title="SELECT_THE_OPTION_TO_BE_EDITED" image={`${process.env.PUBLIC_URL}/assets/images/biometrics.svg`} description={ <> <ul> - <li className="list__item"> - Click on the edit button to update the required biometrics - </li> - <li className="list__item"> - You can edit your Photograph/Fingerprints/Iris Scans - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } diff --git a/client/src/pages/Update/DocumentScanner/DocumentScanner.jsx b/client/src/pages/Update/DocumentScanner/DocumentScanner.jsx index c4f8ad6..e4bffc9 100644 --- a/client/src/pages/Update/DocumentScanner/DocumentScanner.jsx +++ b/client/src/pages/Update/DocumentScanner/DocumentScanner.jsx @@ -199,31 +199,30 @@ const DocumentScanner = () => { return ( <> <Header subheading={t('UPDATE')} /> - <PopUpModal - title="Scan your documents" + {steps.length !== 0 && (<PopUpModal + title="SCAN_YOUR_DOCUMENTS" image={`${process.env.PUBLIC_URL}/assets/images/document.svg`} description={ <> <ul> <li className="list__item"> - Consists of 3 steps : + {t('CONSISTS_OF_3_STEPS')} <ul> - <li>Proof of Identity: </li> - <li>Proof of Address: </li> - <li>Proof of Date of Birth: </li> + <li>{t('PROOF_OF_IDENTITY')} </li> + <li>{t(t('PROOF_OF_ADDRESS'))}</li> + <li>{t('PROOF_OF_DOB')} </li> </ul> </li> <li className="list__item"> - Ensure that your documents are in the center of the frame + {t('ENSURE_THAT_YOUR_DOCUMENTS_ARE_IN_THE_CENTER_OF_THE_FRAME')} </li> <li className="list__item"> - You won't be able to proceed until you have scanned all the - required documents + {t('YOU_WONT_BE_ABLE_TO_PROCEED_UNTIL_YOU_HAVE_SCANNED_ALL_THE_REQUIRED_DOCUMENTS')} </li> </ul> </> } - /> + />)} <div className={styles.stepper__container}> <div className={styles.box}> <Stepper activeStep={activeStep} sx={{ width: '60%' }}> diff --git a/client/src/pages/Update/FormOne/FormOne.jsx b/client/src/pages/Update/FormOne/FormOne.jsx index 2c61fb9..fc7ec1c 100644 --- a/client/src/pages/Update/FormOne/FormOne.jsx +++ b/client/src/pages/Update/FormOne/FormOne.jsx @@ -32,34 +32,18 @@ const FormOne = () => { } }, [userData.gender]) + const description = ['SELECT_YOUR_RESIDENCY_BY_SELECTING_THE_APPROPRIATE_CHECKBOX', 'ENTER_YOUR_FULL_NAME_WITHOUT_ANY_TITLE_OR_SALUTATION', 'SELECT_YOUR_GENDER_BY_CLICKING_ON_THE_APPROPRIATE_CARD', 'SELECT_YOUR_DATE_OF_BIRTH_FROM_THE_PROVIDED_CALENDER'] + return ( <> <Header subheading={t('UPDATE')} /> <PopUpModal - title="Fill your information" + title="FILL_YOUR_INFORMATION" image={`${process.env.PUBLIC_URL}/assets/images/id.svg`} description={ <> <ul> - <li className="list__item"> - Select your residency by selecting the appropriate checkbox - </li> - <li className="list__item"> - Enter your full name without any title or salutation - </li> - <li className="list__item"> - Select your gender by clicking on the appropriate card - </li> - <li className="list__item"> - Select your date of birth from the provided calender - </li> - <li className="list__item"> - Enter your 10 digit mobile number without any prefix or country - code - </li> - <li className="list__item"> - Enter your email address in proper format - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } diff --git a/client/src/pages/Update/Otp/Otp.jsx b/client/src/pages/Update/Otp/Otp.jsx index 75a4d73..ca792fa 100644 --- a/client/src/pages/Update/Otp/Otp.jsx +++ b/client/src/pages/Update/Otp/Otp.jsx @@ -10,6 +10,7 @@ import { getUserByAadhaar, sendOTP } from '../../../services/apiservice' import SubmitButton from '../../../components/SubmitButton/SubmitButton' import { toast, ToastContainer } from 'react-toastify' import PopUpModal from '../../../components/Modal/Modal' +import Spinner from '../../../components/Spinner/Spinner' import styles from './Otp.module.css' @@ -63,7 +64,7 @@ const Otp = () => { } if (isLoading) { - return <div>{t('loading')}</div> + return <Spinner heading='UPDATE'/> } if (isError) { @@ -73,6 +74,9 @@ const Otp = () => { if (data) { setOriUserData(data?.data) } + + const description = ['CLICK_ON_SEND_OTP', 'YOU_WILL_RECIEVE_AN_OTP_ON_YOUR_MOBILE_NUMBER', 'YOU_CAN_RESEND_THE_OTP_AFTER_30_SECONDS_IF_YOU_HAVENT_RECEIVED_IT_YET', 'CLICK_ON_VERIFY_OTP_TO_VERIFY_YOUR_MOBILE_NUMBER'] + return ( <> <ToastContainer @@ -82,22 +86,12 @@ const Otp = () => { /> <Header subheading={`${t('UPDATE')}`} /> <PopUpModal - title="Verify your mobile number" + title="VERIFY_YOUR_MOBILE_NUMBER" image={`${process.env.PUBLIC_URL}/assets/images/otp.svg`} description={ <> <ul> - <li className="list__item">Click on "SEND OTP"</li> - <li className="list__item"> - You will recieve an OTP on your entered mobile number - </li> - <li className="list__item"> - You can "RESEND" the OTP after 30 seconds, if you - haven't received it yet. - </li> - <li className="list__item"> - Click on "VERIFY OTP" to verify your mobile number - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } diff --git a/client/src/pages/Update/PhotoCapture/PhotoCapture.jsx b/client/src/pages/Update/PhotoCapture/PhotoCapture.jsx index 25f8572..4fd4117 100644 --- a/client/src/pages/Update/PhotoCapture/PhotoCapture.jsx +++ b/client/src/pages/Update/PhotoCapture/PhotoCapture.jsx @@ -30,25 +30,18 @@ const PhotoCapture = () => { } } + const description = ['ENSURE_THAT_YOUR_PHOTO_IS_CLEAR_AND_IN_FOCUS', 'ALSO_ENSURE_THAT_YOU_ARE_IN_THE_CENTER_OF_YOUR_PHOTO', 'YOU_WONT_BE_ABLE_TO_PROCEED_UNTIL_YOU_HAVE_CAPTURED_A_CLEAR_AND_CENTERED_PHOTO'] + return ( <> <Header subheading={t('UPDATE')} /> <PopUpModal - title="Update your photo" + title="CAPTURE_YOUR_PHOTO" image={`${process.env.PUBLIC_URL}/assets/images/photo.svg`} description={ <> <ul> - <li className="list__item"> - Ensure that your photo is clear and in focus - </li> - <li className="list__item"> - Also, ensure that you are in the center of your photo - </li> - <li className="list__item"> - You won't be able to proceed until you have captured a - clear and centered photo - </li> + {description.map((item) => (<li className="list__item" key='id'>{t(item)}</li>))} </ul> </> } |