From ffd2c78b86111a5d1f7914e7dab4ffc946cb5287 Mon Sep 17 00:00:00 2001 From: rohan09-raj Date: Tue, 23 Aug 2022 14:39:22 +0530 Subject: check status feature --- client/public/assets/images/approved.svg | 6 + client/public/assets/images/enrollment.svg | 20 ++- client/public/assets/images/fingerprint_scan.svg | 177 ++++++++++--------- client/public/assets/images/otp.svg | 16 ++ client/public/assets/images/pending.svg | 12 ++ client/public/assets/images/status.svg | 33 +++- client/public/assets/images/update.svg | 20 ++- .../LanguageSelect/locales/en/translation.json | 10 +- .../LanguageSelect/locales/hi/translation.json | 6 +- client/src/context/User.js | 3 + client/src/pages/CheckStatus/CheckStatus.jsx | 130 ++++++++++++++ .../src/pages/CheckStatus/CheckStatus.module.css | 43 +++++ client/src/pages/CheckStatus/EnrollmentStatus.jsx | 70 ++++++++ .../pages/CheckStatus/EnrollmentStatus.module.css | 20 +++ client/src/pages/CheckStatus/StatusOtp.jsx | 192 +++++++++++++++++++++ client/src/pages/CheckStatus/StatusOtp.module.css | 19 ++ client/src/pages/CheckStatus/UpdateStatus.jsx | 70 ++++++++ .../src/pages/CheckStatus/UpdateStatus.module.css | 20 +++ .../src/pages/Enrollment/Agreement/Agreement.jsx | 12 +- client/src/pages/Enrollment/Enrollment.jsx | 34 ++-- client/src/pages/Enrollment/FormOne/FormOne.jsx | 4 +- client/src/pages/Error/Error.jsx | 6 + client/src/pages/Error/Error.module.css | 1 + client/src/pages/Home/Home.jsx | 6 + client/src/pages/Update/Address/Address.jsx | 27 ++- client/src/pages/Update/Agreement/Agreement.jsx | 24 ++- client/src/pages/Update/Biometric/Biometric.jsx | 69 +++++++- .../Update/BiometricSelect/BiometricSelect.jsx | 17 ++ .../Update/DocumentScanner/DocumentScanner.jsx | 28 ++- .../src/pages/Update/Fingerprint/Fingerprint.jsx | 12 ++ client/src/pages/Update/FormOne/FormOne.jsx | 30 ++++ client/src/pages/Update/IrisScan/IrisScan.jsx | 12 ++ client/src/pages/Update/Otp/Otp.jsx | 22 +++ .../src/pages/Update/PhotoCapture/PhotoCapture.jsx | 29 +++- .../src/pages/Update/UpdateSelect/UpdateSelect.jsx | 17 +- client/src/routes/index.js | 30 +++- client/src/services/apiservice.js | 7 +- client/src/styles/GlobalVariables.css | 2 + client/yarn.lock | 161 ++++++++++++++++- 39 files changed, 1260 insertions(+), 157 deletions(-) create mode 100644 client/public/assets/images/approved.svg create mode 100644 client/public/assets/images/otp.svg create mode 100644 client/public/assets/images/pending.svg create mode 100644 client/src/pages/CheckStatus/CheckStatus.jsx create mode 100644 client/src/pages/CheckStatus/CheckStatus.module.css create mode 100644 client/src/pages/CheckStatus/EnrollmentStatus.jsx create mode 100644 client/src/pages/CheckStatus/EnrollmentStatus.module.css create mode 100644 client/src/pages/CheckStatus/StatusOtp.jsx create mode 100644 client/src/pages/CheckStatus/StatusOtp.module.css create mode 100644 client/src/pages/CheckStatus/UpdateStatus.jsx create mode 100644 client/src/pages/CheckStatus/UpdateStatus.module.css (limited to 'client') diff --git a/client/public/assets/images/approved.svg b/client/public/assets/images/approved.svg new file mode 100644 index 0000000..c7ea907 --- /dev/null +++ b/client/public/assets/images/approved.svg @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/client/public/assets/images/enrollment.svg b/client/public/assets/images/enrollment.svg index 21b13c0..efbc75f 100644 --- a/client/public/assets/images/enrollment.svg +++ b/client/public/assets/images/enrollment.svg @@ -1,9 +1,11 @@ - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/client/public/assets/images/fingerprint_scan.svg b/client/public/assets/images/fingerprint_scan.svg index e197c71..69ef934 100644 --- a/client/public/assets/images/fingerprint_scan.svg +++ b/client/public/assets/images/fingerprint_scan.svg @@ -1,96 +1,93 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/client/public/assets/images/otp.svg b/client/public/assets/images/otp.svg new file mode 100644 index 0000000..908ca79 --- /dev/null +++ b/client/public/assets/images/otp.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/client/public/assets/images/pending.svg b/client/public/assets/images/pending.svg new file mode 100644 index 0000000..565d473 --- /dev/null +++ b/client/public/assets/images/pending.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/client/public/assets/images/status.svg b/client/public/assets/images/status.svg index f76823b..0f15378 100644 --- a/client/public/assets/images/status.svg +++ b/client/public/assets/images/status.svg @@ -1,9 +1,36 @@ - + + + + + + + + + + d="M70.9,10.417a8.989,8.989,0,0,0-17.806,0H41.5a4,4,0,0,0-4,4v8.5a2,2,0,0,0,2,2h45a2,2,0,0,0,2-2v-8.5a4,4,0,0,0-4-4Z"> + + d="M84.5,60.108V55.386a1.314,1.314,0,0,0-1.315-1.314H80.008a18.256,18.256,0,0,0-2.679-6.457l2.25-2.249a1.316,1.316,0,0,0,0-1.86l-3.338-3.338a1.315,1.315,0,0,0-1.86,0l-2.249,2.25a18.256,18.256,0,0,0-6.457-2.679V36.562a1.314,1.314,0,0,0-1.314-1.315H59.639a1.314,1.314,0,0,0-1.314,1.315v3.177a18.256,18.256,0,0,0-6.457,2.679l-2.249-2.25a1.315,1.315,0,0,0-1.86,0l-3.338,3.338a1.315,1.315,0,0,0,0,1.86l2.25,2.249a18.256,18.256,0,0,0-2.679,6.457H40.815A1.314,1.314,0,0,0,39.5,55.386v4.722a1.314,1.314,0,0,0,1.315,1.314h3.177a18.256,18.256,0,0,0,2.679,6.457l-2.25,2.249a1.315,1.315,0,0,0,0,1.86l3.338,3.338a1.316,1.316,0,0,0,1.86,0l2.249-2.25a18.256,18.256,0,0,0,6.457,2.679v3.177a1.314,1.314,0,0,0,1.314,1.315h4.722a1.314,1.314,0,0,0,1.314-1.315V75.755a18.256,18.256,0,0,0,6.457-2.679l2.249,2.25a1.316,1.316,0,0,0,1.86,0l3.338-3.338a1.316,1.316,0,0,0,0-1.86l-2.25-2.249a18.256,18.256,0,0,0,2.679-6.457h3.177A1.314,1.314,0,0,0,84.5,60.108ZM62,68.5A10.757,10.757,0,1,1,72.757,57.747,10.757,10.757,0,0,1,62,68.5Z"> + + + + + + + + + + \ No newline at end of file diff --git a/client/public/assets/images/update.svg b/client/public/assets/images/update.svg index ca318e2..08f6a12 100644 --- a/client/public/assets/images/update.svg +++ b/client/public/assets/images/update.svg @@ -1,9 +1,11 @@ - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/client/src/components/LanguageSelect/locales/en/translation.json b/client/src/components/LanguageSelect/locales/en/translation.json index 5f6da2c..9b16513 100644 --- a/client/src/components/LanguageSelect/locales/en/translation.json +++ b/client/src/components/LanguageSelect/locales/en/translation.json @@ -98,5 +98,13 @@ "PLEASE_VERIFY_OTP": "Please verify OTP", "USER_ALREADY_EXISTS": "USER ALREADY EXISTS", "YOU_HAVEN'T_UPDATED_ANYTHING": "You haven't updated anything.", - "YOU_MAY_EITHER_UPDATE_OR_MOVE_TO_NEXT_STEP": "You may either update or move to the next step" + "YOU_MAY_EITHER_UPDATE_OR_MOVE_TO_NEXT_STEP": "You may either update or move to the next step", + "YOU_HAVENT_UPDATED_ANYTHING_DIRECTING_YOU_TO_MAIN_PAGE": "You haven't updated anything. Directing you to main page", + "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", + "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" } diff --git a/client/src/components/LanguageSelect/locales/hi/translation.json b/client/src/components/LanguageSelect/locales/hi/translation.json index 99053c9..e293a15 100644 --- a/client/src/components/LanguageSelect/locales/hi/translation.json +++ b/client/src/components/LanguageSelect/locales/hi/translation.json @@ -98,5 +98,9 @@ "PLEASE_VERIFY_OTP": "कृपया ओटीपी सत्यापित करें", "USER_ALREADY_EXISTS": "उपयोगकर्ता पहले से मौजूद है", "YOU_HAVEN'T_UPDATED_ANYTHING": "आपने कोई भी अपडेट नहीं किया है", - "YOU_MAY_EITHER_UPDATE_OR_MOVE_TO_NEXT_STEP": "आप अपडेट कर सकते हैं या अगले चरण पर चले जाएँ" + "YOU_MAY_EITHER_UPDATE_OR_MOVE_TO_NEXT_STEP": "आप अपडेट कर सकते हैं या अगले चरण पर चले जाएँ", + "YOU_HAVENT_UPDATED_ANYTHING_DIRECTING_YOU_TO_MAIN_PAGE": "आपने कोई भी अपडेट नहीं किया है, आपको मुखपृष्ठ पर भेजा जा रहा हैं", + "STATUS": "स्थिति", + "ENROLLMENT_STATUS": "नामांकन की स्थिति", + "BACK_TO_HOME": "मुखपृष्ठ पर वापस" } diff --git a/client/src/context/User.js b/client/src/context/User.js index 881d302..6366d6e 100644 --- a/client/src/context/User.js +++ b/client/src/context/User.js @@ -5,12 +5,15 @@ export const UserContext = createContext() export const Context = ({ children }) => { const [aadhaarNumber, setAadhaarNumber] = useState(null) + const [eidNumber, setEidNumber] = useState(null) const [userData, setUserData] = useState(initialUserData) const [oriUserData, setOriUserData] = useState(initialUserData) const initialUser = { aadhaarNumber, setAadhaarNumber, + eidNumber, + setEidNumber, userData, setUserData, oriUserData, diff --git a/client/src/pages/CheckStatus/CheckStatus.jsx b/client/src/pages/CheckStatus/CheckStatus.jsx new file mode 100644 index 0000000..1732d21 --- /dev/null +++ b/client/src/pages/CheckStatus/CheckStatus.jsx @@ -0,0 +1,130 @@ +/* eslint-disable multiline-ternary */ +import React from 'react' +import Header from '../../components/Header/Header' +import { Grid, Button } from '@mui/material' +import Input from '../../components/Input/Input' +import { useTranslation } from 'react-i18next' +import { validAadhaar } from '../../constants/RegEx' +import { ToastContainer, toast } from 'react-toastify' +import { userContext } from '../../context/User' + +import styles from './CheckStatus.module.css' +import { useNavigate } from 'react-router-dom' + +const CheckStatus = () => { + const { t } = useTranslation() + const [status, setStatus] = React.useState('enrollment') + const { aadhaarNumber, setAadhaarNumber, eidNumber, setEidNumber } = + userContext() + const navigate = useNavigate() + + console.log(eidNumber, aadhaarNumber) + + return ( + <> + +
+
+
+ + { + setStatus('enrollment') + }} + required + /> + + + + { + setStatus('update') + }} + required + /> + + +
+
+
+ {status === 'enrollment' ? ( +
+

+ {t('PROVIDE_YOUR_EID_NUMBER')} +

+ setEidNumber(e.target.value)} + placeholder={`${t('ENTER_YOUR_EID_NUMBER')}`} + required + /> + + + + + +
+ ) : ( +
+

+ {t('PROVIDE_YOUR_AADHAAR_NUMBER')} +

+ setAadhaarNumber(e.target.value)} + placeholder={`${t('ENTER_YOUR_AADHAAR_NUMBER')}`} + required + /> + + + + + +
+ )} +
+ + ) +} + +export default CheckStatus diff --git a/client/src/pages/CheckStatus/CheckStatus.module.css b/client/src/pages/CheckStatus/CheckStatus.module.css new file mode 100644 index 0000000..800d969 --- /dev/null +++ b/client/src/pages/CheckStatus/CheckStatus.module.css @@ -0,0 +1,43 @@ +.status { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.formone__radio { + display: flex; + align-items: center; +} + +.formone__status { + display: flex; + align-items: center; + margin: 15px; + cursor: pointer; +} + +.formone__status input[type='radio'] { + width: 1.5rem; + height: 1.5rem; + cursor: pointer; +} + +.subheading__container { + font-family: 'Barlow'; + display: flex; + flex-direction: column; + align-items: center; + font-weight: bolder; + margin: 20px; + padding: 20px; +} + +.subheading { + font-size: var(--font-medium); + font-weight: 400; +} + +.formone__status label { + margin-left: 10px; +} diff --git a/client/src/pages/CheckStatus/EnrollmentStatus.jsx b/client/src/pages/CheckStatus/EnrollmentStatus.jsx new file mode 100644 index 0000000..9ae0026 --- /dev/null +++ b/client/src/pages/CheckStatus/EnrollmentStatus.jsx @@ -0,0 +1,70 @@ +/* eslint-disable multiline-ternary */ +import React from 'react' +import Header from '../../components/Header/Header' +import { useTranslation } from 'react-i18next' +import styles from './EnrollmentStatus.module.css' +import { Button } from '@mui/material' +import { useNavigate } from 'react-router-dom' +import { userContext } from '../../context/User' + +const EnrollmentStatus = () => { + const { t } = useTranslation() + const navigate = useNavigate() + + const { setAadhaarNumber, setEidNumber, userData } = userContext() + + return ( + <> +
+
+

{t('STATUS')}

+ {!userData?.verified ? ( + <> + +

{t('PENDING')}

+

+ {t('YOUR_AADHAAR_STATUS_IS_IN_PENDING_STATE')} +

+

+ {t('PLEASE_HAVE_PATIENCE')} +

+ + ) : ( + <> + +

{t('APPROVED')}

+

+ {t('YOUR_AADHAAR_STATUS_IS_APPROVED')} +

+

+ {t('PRINT_YOUR_AADHAAR_CARD_FROM_WEBSITE')} +

+ + )} + +
+ + ) +} + +export default EnrollmentStatus diff --git a/client/src/pages/CheckStatus/EnrollmentStatus.module.css b/client/src/pages/CheckStatus/EnrollmentStatus.module.css new file mode 100644 index 0000000..b4b56a2 --- /dev/null +++ b/client/src/pages/CheckStatus/EnrollmentStatus.module.css @@ -0,0 +1,20 @@ +.status__container { + font-family: 'Barlow', sans-serif; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.status__title { + font-size: var(--font-medium); +} + +.status { + font-size: var(--font-medium-lm); + margin-bottom: 20px; +} + +.status__content { + font-size: var(--font-medium-sm); +} diff --git a/client/src/pages/CheckStatus/StatusOtp.jsx b/client/src/pages/CheckStatus/StatusOtp.jsx new file mode 100644 index 0000000..d7d62d1 --- /dev/null +++ b/client/src/pages/CheckStatus/StatusOtp.jsx @@ -0,0 +1,192 @@ +import React, { useState, useEffect } from 'react' +import Header from '../../components/Header/Header' +import Input from '../../components/Input/Input' +import { Button } from '@mui/material' +import { useNavigate } from 'react-router-dom' +import { useTranslation } from 'react-i18next' +import { userContext } from '../../context/User' +import { useQuery, useMutation } from 'react-query' +import { getUserByAadhaar, sendOTP, getUser } from '../../services/apiservice' +import SubmitButton from '../../components/SubmitButton/SubmitButton' +import { toast, ToastContainer } from 'react-toastify' +import PopUpModal from '../../components/Modal/Modal' + +import styles from './StatusOtp.module.css' + +const StatusOtp = () => { + const navigate = useNavigate() + const { t } = useTranslation() + const [otp, setOtp] = useState() + const [disabled, setDisabled] = useState(false) + const [finalDisable, setFinalDisable] = useState(false) + const [unverified, setUnverified] = useState(true) + const [show, setShow] = useState(false) + const { + aadhaarNumber, + eidNumber, + userData, + setUserData, + oriUserData, + setOriUserData + } = userContext() + + const mutateOTP = useMutation(() => + sendOTP({ mobile: `+91${userData?.mobile}` }) + ) + + const verifyOTP = () => { + if (mutateOTP?.data?.data?.otpCode === Number(otp)) { + setFinalDisable(true) + setDisabled(true) + setShow(false) + setUnverified(false) + toast.success(t('OTP_VERIFIED!')) + } else { + toast.error(t('INCORRECT_OTP')) + } + } + + const sendResendOTP = () => { + setTimeout(() => { + if (finalDisable === false) { + console.log('Disabled: ', disabled, 'Final Disable: ', finalDisable) + setDisabled(false) + } + }, 30000) + } + + useEffect(() => { + setUserData(oriUserData) + }, [oriUserData]) + + if (aadhaarNumber) { + const isLongEnough = aadhaarNumber?.toString().length > 11 + const { isLoading, isError, data } = useQuery('user', async () => { + if (isLongEnough) { + const response = await getUserByAadhaar(aadhaarNumber) + return response + } + }) + if (isLoading) { + return
{t('loading')}
+ } + + if (isError) { + return
{t('error')}
+ } + + if (data) { + setOriUserData(data?.data) + } + } else if (eidNumber) { + const { isLoading, isError, data } = useQuery('user', async () => { + const response = await getUser(eidNumber) + return response + }) + + if (isLoading) { + return
{t('loading')}
+ } + + if (isError) { + return
{t('error')}
+ } + + if (data) { + setOriUserData(data?.data) + } + } + + return ( + <> + +
+ +
    +
  • Click on "SEND OTP"
  • +
  • + You will recieve an OTP on your entered mobile number +
  • +
  • + You can "RESEND" the OTP after 30 seconds, if you + haven't received it yet. +
  • +
  • + Click on "VERIFY OTP" to verify your mobile number +
  • +
+ + } + /> +
+

{t('ENTER_OTP')}

+

+ {t('SENT_TO_YOUR_REGISTERED_MOBILE_NUMBER')} +

+ + {show && ( + <> + setOtp(e.target.value)} + maxLength="6" + placeholder={t('ENTER_OTP')} + /> + + + )} +
+ { + if (unverified) { + toast.error(t('PLEASE_VERIFY_OTP')) + } else { + if (aadhaarNumber) { + navigate('/status/update') + } else if (eidNumber) { + navigate('/status/enrollment') + } + } + }} + /> + + ) +} + +export default StatusOtp diff --git a/client/src/pages/CheckStatus/StatusOtp.module.css b/client/src/pages/CheckStatus/StatusOtp.module.css new file mode 100644 index 0000000..b88d5d4 --- /dev/null +++ b/client/src/pages/CheckStatus/StatusOtp.module.css @@ -0,0 +1,19 @@ +.subheading__container { + font-family: 'Barlow'; + display: flex; + flex-direction: column; + align-items: center; + font-weight: bolder; + margin: 20px; + padding: 20px; +} + +.subheading { + font-size: var(--font-medium); + font-weight: 400; +} + +.subsubheading { + font-size: var(--font-medium-s); + margin: 10px 0px; +} diff --git a/client/src/pages/CheckStatus/UpdateStatus.jsx b/client/src/pages/CheckStatus/UpdateStatus.jsx new file mode 100644 index 0000000..431f9d5 --- /dev/null +++ b/client/src/pages/CheckStatus/UpdateStatus.jsx @@ -0,0 +1,70 @@ +/* eslint-disable multiline-ternary */ +import React from 'react' +import Header from '../../components/Header/Header' +import { useTranslation } from 'react-i18next' +import styles from './EnrollmentStatus.module.css' +import { Button } from '@mui/material' +import { useNavigate } from 'react-router-dom' +import { userContext } from '../../context/User' + +const UpdateStatus = () => { + const { t } = useTranslation() + const navigate = useNavigate() + + const { setAadhaarNumber, setEidNumber, userData } = userContext() + + return ( + <> +
+
+

{t('STATUS')}

+ {userData?.isUpdating ? ( + <> + +

{t('PENDING')}

+

+ {t('YOUR_AADHAAR_UPDATE_STATUS_IS_IN_PENDING_STATE')} +

+

+ {t('PLEASE_HAVE_PATIENCE')} +

+ + ) : ( + <> + +

{t('APPROVED')}

+

+ {t('YOUR_AADHAAR_UPDATE_STATUS_IS_APPROVED')} +

+

+ {t('PRINT_YOUR_AADHAAR_CARD_FROM_WEBSITE')} +

+ + )} + +
+ + ) +} + +export default UpdateStatus diff --git a/client/src/pages/CheckStatus/UpdateStatus.module.css b/client/src/pages/CheckStatus/UpdateStatus.module.css new file mode 100644 index 0000000..b4b56a2 --- /dev/null +++ b/client/src/pages/CheckStatus/UpdateStatus.module.css @@ -0,0 +1,20 @@ +.status__container { + font-family: 'Barlow', sans-serif; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.status__title { + font-size: var(--font-medium); +} + +.status { + font-size: var(--font-medium-lm); + margin-bottom: 20px; +} + +.status__content { + font-size: var(--font-medium-sm); +} diff --git a/client/src/pages/Enrollment/Agreement/Agreement.jsx b/client/src/pages/Enrollment/Agreement/Agreement.jsx index 9dedb56..13b46ba 100644 --- a/client/src/pages/Enrollment/Agreement/Agreement.jsx +++ b/client/src/pages/Enrollment/Agreement/Agreement.jsx @@ -60,7 +60,17 @@ const Agreement = ({ unverified, setUnverified }) => { description={ <>
    -
  • INSTRUCTIONS TO BE ADDED
  • +
  • Click on "SEND OTP"
  • +
  • + You will recieve an OTP on your entered mobile number +
  • +
  • + You can "RESEND" the OTP after 30 seconds, if you + haven't received it yet. +
  • +
  • + Click on "VERIFY OTP" to verify your mobile number +
} diff --git a/client/src/pages/Enrollment/Enrollment.jsx b/client/src/pages/Enrollment/Enrollment.jsx index 53d64d5..35a599f 100644 --- a/client/src/pages/Enrollment/Enrollment.jsx +++ b/client/src/pages/Enrollment/Enrollment.jsx @@ -1,3 +1,4 @@ +/* eslint-disable space-before-function-paren */ import React, { useState, useEffect } from 'react' import Address from './Address/Address' import Agreement from './Agreement/Agreement' @@ -37,7 +38,7 @@ const Enrollment = () => { const [model, setModel] = useState() - async function loadModel () { + async function loadModel() { try { const model = await cocoSsd.load() setModel(model) @@ -55,7 +56,7 @@ const Enrollment = () => { }, []) let predictions = [] - async function predictionFunction () { + async function predictionFunction() { predictions = await model.detect(document.getElementById('img')) if (predictions.length > 0) { console.log(predictions) @@ -140,21 +141,26 @@ const Enrollment = () => { } } else if (page === 3) { predictionFunction() - if (predictions.length === 0) { - toast.warning(t('PLEASE_WAIT'), { + if (predictions.length === 0) { + toast.warning(t('PLEASE_WAIT'), { timeout: 1000 - }) - } + }) + } setTimeout(() => { if (predictions.length > 0) { - if (!userData.photo) { - toast.error(t('PLEASE_CAPTURE_PHOTOGRAPH')) - } else if (predictions[0].class === 'person' && predictions[0].score > 0.5) { - setPage(page + 1) - } else { - toast.error(t('PLEASE_CAPTURE_CLEAR_PHOTOGRAPH')) - } - } + if (!userData.photo) { + toast.error(t('PLEASE_CAPTURE_PHOTOGRAPH')) + } else if ( + predictions[0].class === 'person' && + predictions[0].score > 0.8 + ) { + setPage(page + 1) + } else { + toast.error(t('PLEASE_CAPTURE_CLEAR_PHOTOGRAPH')) + } + } else { + toast.error(t('PLEASE_CAPTURE_CLEAR_PHOTOGRAPH')) + } }, 1000) } else if (page === 4) { if (!userData.documents.POI) { diff --git a/client/src/pages/Enrollment/FormOne/FormOne.jsx b/client/src/pages/Enrollment/FormOne/FormOne.jsx index 3fd5a21..fb37457 100644 --- a/client/src/pages/Enrollment/FormOne/FormOne.jsx +++ b/client/src/pages/Enrollment/FormOne/FormOne.jsx @@ -88,7 +88,9 @@ const FormOne = () => { }} required /> - + diff --git a/client/src/pages/Error/Error.jsx b/client/src/pages/Error/Error.jsx index 5d06226..dc4732c 100644 --- a/client/src/pages/Error/Error.jsx +++ b/client/src/pages/Error/Error.jsx @@ -1,13 +1,19 @@ 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() + const { setUserData, setOriUserData, setAadhaarNumber } = userContext() useEffect(() => { setTimeout(() => { + setUserData(initialUserData) + setOriUserData(initialUserData) + setAadhaarNumber('') navigate('/') }, 3000) }, []) diff --git a/client/src/pages/Error/Error.module.css b/client/src/pages/Error/Error.module.css index d66c6b7..d58d354 100644 --- a/client/src/pages/Error/Error.module.css +++ b/client/src/pages/Error/Error.module.css @@ -11,6 +11,7 @@ font-family: 'Barlow', sans-serif; font-weight: 400; font-size: var(--font-large); + text-align: center; } .error__image { diff --git a/client/src/pages/Home/Home.jsx b/client/src/pages/Home/Home.jsx index 4c9d620..9771877 100644 --- a/client/src/pages/Home/Home.jsx +++ b/client/src/pages/Home/Home.jsx @@ -33,6 +33,12 @@ const Home = ({ page, setPage }) => { image={`${process.env.PUBLIC_URL}/assets/images/update.svg`} /> + + + ) diff --git a/client/src/pages/Update/Address/Address.jsx b/client/src/pages/Update/Address/Address.jsx index 20a97f7..0af60a5 100644 --- a/client/src/pages/Update/Address/Address.jsx +++ b/client/src/pages/Update/Address/Address.jsx @@ -4,10 +4,10 @@ import UpdateInput from '../../../components/UpdateInput/UpdateInput' import { State, City } from 'country-state-city' import EditButton from '../../../components/EditButton/EditButton' import Select from 'react-select' - -import styles from './Address.module.css' +import PopUpModal from '../../../components/Modal/Modal' import { useTranslation } from 'react-i18next' import { userContext } from '../../../context/User' +import styles from './Address.module.css' const Address = () => { const { userData, setUserData } = userContext() @@ -58,6 +58,29 @@ const Address = () => { return ( <>
+ +
    +
  • + 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 won't show any options until you have + selected the state +
  • +
+ + } + />
{ @@ -24,7 +25,7 @@ const Agreement = () => { const { userData } = userContext() const updateUse = useMutation( - () => updateUser(userData._id, { ...userData }), + () => updateUser(userData._id, { ...userData, isUpdating: true }), { onSuccess: () => { setConfirm.mutate({ @@ -80,6 +81,27 @@ const Agreement = () => { theme={'colored'} />
+ +
    +
  • Click on "SEND OTP"
  • +
  • + You will recieve an OTP on your entered mobile number +
  • +
  • + You can "RESEND" the OTP after 30 seconds, if you + haven't received it yet. +
  • +
  • + Click on "VERIFY OTP" to verify your mobile number +
  • +
+ + } + />
{ + const { t } = useTranslation() const [page, setPage] = useState(4) const { userData, oriUserData, setUserData } = userContext() + const [model, setModel] = useState() + + async function loadModel() { + try { + const model = await cocoSsd.load() + setModel(model) + console.log('setloadedModel') + } catch (err) { + console.log(err) + console.log('failed load model') + } + } + + useEffect(() => { + tf.ready().then(() => { + loadModel() + }) + }, []) + + let predictions = [] + async function predictionFunction() { + predictions = await model.detect(document.getElementById('img')) + console.log(predictions) + if (predictions.length > 0) { + console.log(predictions) + console.log(predictions[0]) + } + return predictions + } + const conditionalComponent = () => { switch (page) { case 0: @@ -32,10 +69,29 @@ const Biometric = () => { } const handleSubmit = () => { - if (!userData.photo) { - setUserData({ ...userData, photo: oriUserData.photo }) + predictionFunction() + if (predictions.length === 0) { + toast.warning(t('PLEASE_WAIT'), { + timeout: 1000 + }) } - setPage(4) + console.log('befoer start') + setTimeout(() => { + if (predictions.length > 0) { + if (!userData.photo) { + setUserData({ ...userData, photo: oriUserData.photo }) + } else if ( + predictions[0].class === 'person' && + predictions[0].score > 0.8 + ) { + setPage(4) + } else { + toast.error(t('PLEASE_CAPTURE_CLEAR_PHOTOGRAPH')) + } + } else { + toast.error(t('PLEASE_CAPTURE_CLEAR_PHOTOGRAPH')) + } + }, 1000) } const conditionalButton = () => { @@ -65,6 +121,11 @@ const Biometric = () => { } return ( <> + {conditionalComponent()} {conditionalButton()} diff --git a/client/src/pages/Update/BiometricSelect/BiometricSelect.jsx b/client/src/pages/Update/BiometricSelect/BiometricSelect.jsx index b7be260..a942aef 100644 --- a/client/src/pages/Update/BiometricSelect/BiometricSelect.jsx +++ b/client/src/pages/Update/BiometricSelect/BiometricSelect.jsx @@ -3,6 +3,7 @@ import Header from '../../../components/Header/Header' import BiometricCard from '../../../components/BiometricCard/BiometricCard' import SubmitButton from '../../../components/SubmitButton/SubmitButton' import { Link } from 'react-router-dom' +import PopUpModal from '../../../components/Modal/Modal' import { useTranslation } from 'react-i18next' const BiometricSelect = ({ page, setPage }) => { @@ -10,6 +11,22 @@ const BiometricSelect = ({ page, setPage }) => { return ( <>
+ +
    +
  • + Click on the edit button to update the required biometrics +
  • +
  • + You can edit your Photograph/Fingerprints/Iris Scans +
  • +
+ + } + /> setPage(0)} /> setPage(1)} /> setPage(2)} /> diff --git a/client/src/pages/Update/DocumentScanner/DocumentScanner.jsx b/client/src/pages/Update/DocumentScanner/DocumentScanner.jsx index 89c9479..c4f8ad6 100644 --- a/client/src/pages/Update/DocumentScanner/DocumentScanner.jsx +++ b/client/src/pages/Update/DocumentScanner/DocumentScanner.jsx @@ -4,7 +4,7 @@ import Webcam from 'react-webcam' import Header from '../../../components/Header/Header' import styles from './DocumentScanner.module.css' import { Button, Typography, StepLabel, Step, Stepper } from '@mui/material' -import SubmitButton from '../../../components/SubmitButton/SubmitButton' +import PopUpModal from '../../../components/Modal/Modal' import { useTranslation } from 'react-i18next' import { userContext } from '../../../context/User' import { toast } from 'react-toastify' @@ -199,7 +199,31 @@ const DocumentScanner = () => { return ( <>
- + +
    +
  • + Consists of 3 steps : +
      +
    • Proof of Identity:
    • +
    • Proof of Address:
    • +
    • Proof of Date of Birth:
    • +
    +
  • +
  • + Ensure that your documents are in the center of the frame +
  • +
  • + You won't be able to proceed until you have scanned all the + required documents +
  • +
+ + } + />
diff --git a/client/src/pages/Update/Fingerprint/Fingerprint.jsx b/client/src/pages/Update/Fingerprint/Fingerprint.jsx index cda36d5..933e944 100644 --- a/client/src/pages/Update/Fingerprint/Fingerprint.jsx +++ b/client/src/pages/Update/Fingerprint/Fingerprint.jsx @@ -5,12 +5,24 @@ import styles from './Fingerprint.module.css' import { Button, Grid, Typography } from '@mui/material' import SubmitButton from '../../../components/SubmitButton/SubmitButton' import { useTranslation } from 'react-i18next' +import PopUpModal from '../../../components/Modal/Modal' const Fingerprint = () => { const { t } = useTranslation() return ( <>
+ +
    +
  • INSTRUCTIONS TO BE ADDED
  • +
+ + } + />
{ const { userData, setUserData } = userContext() @@ -34,6 +35,35 @@ const FormOne = () => { return ( <>
+ +
    +
  • + 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 + code +
  • +
  • + Enter your email address in proper format +
  • +
+ + } + />
{ const { t } = useTranslation() return ( <>
+ +
    +
  • INSTRUCTIONS TO BE ADDED
  • +
+ + } + />
{ theme={'colored'} />
+ +
    +
  • Click on "SEND OTP"
  • +
  • + You will recieve an OTP on your entered mobile number +
  • +
  • + You can "RESEND" the OTP after 30 seconds, if you + haven't received it yet. +
  • +
  • + Click on "VERIFY OTP" to verify your mobile number +
  • +
+ + } + />

{t('ENTER_OTP')}

diff --git a/client/src/pages/Update/PhotoCapture/PhotoCapture.jsx b/client/src/pages/Update/PhotoCapture/PhotoCapture.jsx index 8e483a6..25f8572 100644 --- a/client/src/pages/Update/PhotoCapture/PhotoCapture.jsx +++ b/client/src/pages/Update/PhotoCapture/PhotoCapture.jsx @@ -8,10 +8,11 @@ import styles from './PhotoCapture.module.css' import { Button, Grid, Typography } from '@mui/material' import { useTranslation } from 'react-i18next' import { userContext } from '../../../context/User' +import PopUpModal from '../../../components/Modal/Modal' const PhotoCapture = () => { const { t } = useTranslation() - const { userData, setUserData, oriUserData } = userContext() + const { userData, setUserData } = userContext() const navigate = useNavigate() @@ -22,8 +23,6 @@ const PhotoCapture = () => { setUserData({ ...userData, photo: imageSrc }) }) - console.log(oriUserData.photo) - const handleSubmit = () => { console.log(userData.photo) if (userData.photo) { @@ -31,11 +30,29 @@ const PhotoCapture = () => { } } - console.log(userData?.photo) - return ( <>

+ +
    +
  • + Ensure that your photo is clear and in focus +
  • +
  • + Also, ensure that you are in the center of your photo +
  • +
  • + You won't be able to proceed until you have captured a + clear and centered photo +
  • +
+ + } + />
{userData?.photo === '' ? ( { }} /> ) : ( - + )}
diff --git a/client/src/pages/Update/UpdateSelect/UpdateSelect.jsx b/client/src/pages/Update/UpdateSelect/UpdateSelect.jsx index 3c2edb3..3b6a717 100644 --- a/client/src/pages/Update/UpdateSelect/UpdateSelect.jsx +++ b/client/src/pages/Update/UpdateSelect/UpdateSelect.jsx @@ -1,13 +1,16 @@ import { t } from 'i18next' import React from 'react' -import { Link } from 'react-router-dom' +import { Link, useNavigate } from 'react-router-dom' import Card from '../../../components/Card/Card' import Header from '../../../components/Header/Header' import SubmitButton from '../../../components/SubmitButton/SubmitButton' +import { userContext } from '../../../context/User' import styles from './UpdateSelect.module.css' const UpdateSelect = () => { + const { userData, oriUserData } = userContext() + const navigate = useNavigate() return ( <>
@@ -24,9 +27,15 @@ const UpdateSelect = () => { image={`${process.env.PUBLIC_URL}/assets/images/biometrics.svg`} /> - - - + { + if (userData === oriUserData) { + navigate('/no-update') + } else { + navigate('/update/agreement') + } + }} + />
) diff --git a/client/src/routes/index.js b/client/src/routes/index.js index ad8b500..70b3adb 100644 --- a/client/src/routes/index.js +++ b/client/src/routes/index.js @@ -12,6 +12,10 @@ import FinalSlip from '../pages/Update/FinalSlip/FinalSlip' import Error from '../pages/Error/Error' import Otp from '../pages/Update/Otp/Otp' import { useTranslation } from 'react-i18next' +import CheckStatus from '../pages/CheckStatus/CheckStatus' +import StatusOtp from '../pages/CheckStatus/StatusOtp' +import EnrollmentStatus from '../pages/CheckStatus/EnrollmentStatus' +import UpdateStatus from '../pages/CheckStatus/UpdateStatus' const Index = () => { const { t } = useTranslation() @@ -21,10 +25,22 @@ const Index = () => { } /> - } - /> + + } + /> + + } + /> + } /> } /> @@ -34,6 +50,12 @@ const Index = () => { } /> } /> + + } /> + } /> + } /> + } /> + ) } diff --git a/client/src/services/apiservice.js b/client/src/services/apiservice.js index 31262f6..ffb6df6 100644 --- a/client/src/services/apiservice.js +++ b/client/src/services/apiservice.js @@ -1,7 +1,7 @@ import axios from 'axios' const apiClient = axios.create({ - baseURL: 'https://aadhaar-kiosk.herokuapp.com/' + baseURL: 'http://localhost:5000' }) export const createUser = async (payload) => { @@ -14,6 +14,11 @@ export const getUserByAadhaar = async (aadhaarNumber) => { return response } +export const getUser = async (id, payload) => { + const response = await apiClient.get(`/user/${id}`, payload) + return response +} + export const updateUser = async (id, payload) => { const response = await apiClient.patch(`/user/${id}`, payload) return response diff --git a/client/src/styles/GlobalVariables.css b/client/src/styles/GlobalVariables.css index 0d29d26..9184794 100644 --- a/client/src/styles/GlobalVariables.css +++ b/client/src/styles/GlobalVariables.css @@ -3,10 +3,12 @@ --color-shadow: rgba(0, 0, 0, 0.24); --font-large: 4rem; + --font-medium-lm: 3rem; --font-medium-large: 2.5rem; --font-medium: 2rem; --font-medium-sm: 1.5rem; --font-medium-s: 1.25rem; + --font-small: 1rem; } .list__item { diff --git a/client/yarn.lock b/client/yarn.lock index cac62fc..a1d1c9c 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -2018,6 +2018,81 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" +"@tensorflow-models/coco-ssd@^2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@tensorflow-models/coco-ssd/-/coco-ssd-2.2.2.tgz#2a308b3b11a106bf640c5245b980c79df8208b60" + integrity sha512-Jey2JscmKEValcFZH2ZLz14s8KPRmVtfJ0d0M3dPhvBp9dJiGNanVXr/pJAY5OS7emKj9uSciGhdkHWXY9Hovw== + +"@tensorflow/tfjs-backend-cpu@3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.19.0.tgz#c7524ccdfded81df0c5cb53185b14e5222ac51e5" + integrity sha512-02f+WkiL9gc9G7P8PwfsvuXREcAUdM/3uAL6fTle3xKEj7KOxX+E/mc3jxPY5UzjAsgHVBZrPJ2xi6AG16WPkQ== + dependencies: + "@types/seedrandom" "^2.4.28" + seedrandom "^3.0.5" + +"@tensorflow/tfjs-backend-webgl@3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.19.0.tgz#64b8a14df35ee7d27859c7d141c527cefc6d9484" + integrity sha512-2HTkAE21t3WQTt8P6iK80ni03AzC8UNZmbIB7/pBDYBbhDwZwe/C5fXrJWnP9m6u4hvCdMAJ3o+OP3NeaEL1pw== + dependencies: + "@tensorflow/tfjs-backend-cpu" "3.19.0" + "@types/offscreencanvas" "~2019.3.0" + "@types/seedrandom" "^2.4.28" + "@types/webgl-ext" "0.0.30" + "@types/webgl2" "0.0.6" + seedrandom "^3.0.5" + +"@tensorflow/tfjs-converter@3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.19.0.tgz#701db7255ef45578811a191478db5a09bcca6dda" + integrity sha512-B69HQq9/orsM8pGJPjNp1cV+hIcc90mxcRIsQSYGovTUNEcftmz2Sh+mqXDWysKUk0gRfx5CX6eJk6NaE55Xow== + +"@tensorflow/tfjs-core@3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-3.19.0.tgz#981c50bb38a6441a4375cfc8806784e7490f01bc" + integrity sha512-znJ+TOJ3NdNL5yjw8M7dn2jO96sokiH1wfFuD7gglCkbZ4SXlFpFj2xelNdRHHmeYanMhJzqeyOW9whUnNcBqw== + dependencies: + "@types/long" "^4.0.1" + "@types/offscreencanvas" "~2019.3.0" + "@types/seedrandom" "^2.4.28" + "@types/webgl-ext" "0.0.30" + "@webgpu/types" "0.1.16" + long "4.0.0" + node-fetch "~2.6.1" + seedrandom "^3.0.5" + +"@tensorflow/tfjs-data@3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-3.19.0.tgz#31de23cbea6cc594d60bd2216ab39faa8b2219cb" + integrity sha512-rkZv+YZowZwnm4RaedkV44WDrjokRHld9Py/0Fb7IvMyUh37lY0WsAsV94kJ+QuLc6iVNcDLaV29K+dUz57bRA== + dependencies: + "@types/node-fetch" "^2.1.2" + node-fetch "~2.6.1" + string_decoder "^1.3.0" + +"@tensorflow/tfjs-layers@3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.19.0.tgz#b624c25a2bdec09ea1c71db6547eb0952707fb35" + integrity sha512-+sVWjWWyTuT3sImrtNLtMv8/4FS30GAYpTgyJKhCQ3+GSvHUXulxJfncD0QqOg9fTbhtuF1TRAkzDU8v64791g== + +"@tensorflow/tfjs@^3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-3.19.0.tgz#a08c35e6101bdbc0bf9a58f468270eee15f77bb0" + integrity sha512-fZF3HOON8jgKhFk06WIScIXf7j/gkl6cLbU1brFWutBhHlPSzxSWvdJR/TivCK7p+yMBunoyK50TjiwOrcoclA== + dependencies: + "@tensorflow/tfjs-backend-cpu" "3.19.0" + "@tensorflow/tfjs-backend-webgl" "3.19.0" + "@tensorflow/tfjs-converter" "3.19.0" + "@tensorflow/tfjs-core" "3.19.0" + "@tensorflow/tfjs-data" "3.19.0" + "@tensorflow/tfjs-layers" "3.19.0" + argparse "^1.0.10" + chalk "^4.1.0" + core-js "3" + regenerator-runtime "^0.13.5" + yargs "^16.0.3" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -2189,16 +2264,34 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/long@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + "@types/mime@^1": version "1.3.2" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== +"@types/node-fetch@^2.1.2": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" + integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + "@types/node@*": version "18.0.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.5.tgz#96be8113b014e9e7f0c3609c4a25afadd85ff659" integrity sha512-En7tneq+j0qAiVwysBD79y86MT3ModuoIJbe7JXp+sb5UAjInSShmK3nXXMioBzfF7rXC12hv12d4IyCVwN4dA== +"@types/offscreencanvas@~2019.3.0": + version "2019.3.0" + resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz#3336428ec7e9180cf4566dfea5da04eb586a6553" + integrity sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -2269,6 +2362,11 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/seedrandom@^2.4.28": + version "2.4.30" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.30.tgz#d2efe425869b84163c2d56e779dddadb9372cbfa" + integrity sha512-AnxLHewubLVzoF/A4qdxBGHCKifw8cY32iro3DQX9TPcetE95zBeVt3jnsvtvAUf1vwzMfwzp4t/L2yqPlnjkQ== + "@types/serve-index@^1.9.1": version "1.9.1" resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" @@ -2301,6 +2399,16 @@ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== +"@types/webgl-ext@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d" + integrity sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg== + +"@types/webgl2@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.6.tgz#1ea2db791362bd8521548d664dbd3c5311cdf4b6" + integrity sha512-50GQhDVTq/herLMiqSQkdtRu+d5q/cWHn4VvKJtrj4DJAjo1MNkWYa2MA41BaBO1q1HgsUjuQvEOk0QHvlnAaQ== + "@types/ws@^8.5.1": version "8.5.3" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" @@ -2535,6 +2643,11 @@ "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" +"@webgpu/types@0.1.16": + version "0.1.16" + resolved "https://registry.yarnpkg.com/@webgpu/types/-/types-0.1.16.tgz#1f05497b95b7c013facf7035c8e21784645f5cc4" + integrity sha512-9E61voMP4+Rze02jlTXud++Htpjyyk8vw5Hyw9FGRrmhHQg2GqbuOfwf5Klrb8vTxc2XWI3EfO7RUHMpxTj26A== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -2713,7 +2826,7 @@ arg@^5.0.2: resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== -argparse@^1.0.7: +argparse@^1.0.10, argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== @@ -3473,6 +3586,11 @@ core-js-pure@^3.20.2, core-js-pure@^3.8.1: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.4.tgz#aba5c7fb297063444f6bf93afb0362151679a012" integrity sha512-lizxkcgj3XDmi7TUBFe+bQ1vNpD5E4t76BrBWI3HdUxdw/Mq1VF4CkiHzIKyieECKtcODK2asJttoofEeUKICQ== +core-js@3: + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f" + integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg== + core-js@^3.19.2: version "3.23.4" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.4.tgz#92d640faa7f48b90bbd5da239986602cfc402aa6" @@ -6376,6 +6494,11 @@ lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +long@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -6611,6 +6734,13 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-fetch@~2.6.1: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-forge@^1: version "1.3.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" @@ -7964,7 +8094,7 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9: +regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.5, regenerator-runtime@^0.13.9: version "0.13.9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== @@ -8231,6 +8361,11 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" +seedrandom@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -8552,7 +8687,7 @@ string.prototype.trimstart@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" -string_decoder@^1.1.1: +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -8864,6 +8999,11 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + tryer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" @@ -9123,6 +9263,11 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -9274,6 +9419,14 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" @@ -9560,7 +9713,7 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@^16.2.0: +yargs@^16.0.3, yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== -- cgit