import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { FetchError, postJSON } from '@/infrastructure/fetch-json' import useAsync from '../../../../shared/hooks/use-async' import { UserEmailData } from '../../../../../../types/user-email' 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'] groupLoading: boolean setGroupLoading: (loading: boolean) => void onSuccess: () => void triggerVariant: 'link' | 'secondary' } function ResendConfirmationCodeModal({ email, groupLoading, setGroupLoading, onSuccess, triggerVariant, }: ResendConfirmationEmailButtonProps) { const { t } = useTranslation() const { error, isLoading, isError, runAsync } = useAsync() const [modalVisible, setModalVisible] = useState(false) useEffect(() => { setGroupLoading(isLoading) }, [isLoading, setGroupLoading]) const handleResendConfirmationEmail = async () => { await runAsync( postJSON('/user/emails/send-confirmation-code', { body: { email } }) ) .catch(() => {}) .finally(() => setModalVisible(true)) } const rateLimited = error && error instanceof FetchError && error.response?.status === 429 return ( <> {modalVisible && ( setModalVisible(false)} id="action-project-modal" backdrop="static" > {t('confirm_your_email')} { onSuccess() setModalVisible(false) }} outerError={ isError ? rateLimited ? t('too_many_requests') : t('generic_something_went_wrong') : undefined } /> setModalVisible(false)} > {t('cancel')} )} {t('send_confirmation_code')} ) } export default ResendConfirmationCodeModal