import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import Icon from '../../../../shared/components/icon' import { FetchError, postJSON } from '@/infrastructure/fetch-json' import useAsync from '../../../../shared/hooks/use-async' import { UserEmailData } from '../../../../../../types/user-email' import { useUserEmailsContext } from '../../context/user-email-context' import OLButton from '@/features/ui/components/ol/ol-button' import OLModal, { OLModalBody, OLModalFooter, OLModalHeader, OLModalTitle, } from '@/features/ui/components/ol/ol-modal' import { ConfirmEmailForm } from '@/features/settings/components/emails/confirm-email-form' type ResendConfirmationEmailButtonProps = { email: UserEmailData['email'] } function ResendConfirmationCodeModal({ email, }: ResendConfirmationEmailButtonProps) { const { t } = useTranslation() const { error, isLoading, isError, runAsync } = useAsync() const { state, setLoading: setUserEmailsContextLoading, getEmails, } = useUserEmailsContext() const [modalVisible, setModalVisible] = useState(false) // Update global isLoading prop useEffect(() => { setUserEmailsContextLoading(isLoading) }, [setUserEmailsContextLoading, isLoading]) const handleResendConfirmationEmail = async () => { await runAsync( postJSON('/user/emails/send-confirmation-code', { body: { email } }) ) .then(() => setModalVisible(true)) .catch(() => {}) } if (isLoading) { return ( <> {t('sending')}… ) } const rateLimited = error && error instanceof FetchError && error.response?.status === 429 return ( <> {modalVisible && ( setModalVisible(false)} id="action-project-modal" backdrop="static" > {t('confirm_your_email')} { getEmails() setModalVisible(false) }} /> setModalVisible(false)} > {t('cancel')} )} {t('resend_confirmation_code')}
{isError && (
{rateLimited ? t('too_many_requests') : t('generic_something_went_wrong')}
)} ) } export default ResendConfirmationCodeModal