email.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { useTranslation } from 'react-i18next'
  2. import { UserEmailData } from '../../../../../../types/user-email'
  3. import ResendConfirmationEmailButton from './resend-confirmation-email-button'
  4. import { ssoAvailableForInstitution } from '../../utils/sso'
  5. type EmailProps = {
  6. userEmailData: UserEmailData
  7. }
  8. function Email({ userEmailData }: EmailProps) {
  9. const { t } = useTranslation()
  10. const ssoAvailable = ssoAvailableForInstitution(
  11. userEmailData.affiliation?.institution || null
  12. )
  13. const isPrimary = userEmailData.default
  14. const isProfessional =
  15. userEmailData.confirmedAt &&
  16. userEmailData.affiliation?.institution.confirmed &&
  17. userEmailData.affiliation.licence !== 'free'
  18. const hasBadges = isPrimary || isProfessional
  19. return (
  20. <>
  21. {userEmailData.email}
  22. {!userEmailData.confirmedAt && (
  23. <div className="small">
  24. <strong>
  25. {t('unconfirmed')}.
  26. {!ssoAvailable && <span> {t('please_check_your_inbox')}.</span>}
  27. </strong>
  28. <br />
  29. {!ssoAvailable && (
  30. <ResendConfirmationEmailButton email={userEmailData.email} />
  31. )}
  32. </div>
  33. )}
  34. {hasBadges && (
  35. <div className="small">
  36. {isPrimary && (
  37. <>
  38. <span className="label label-info">Primary</span>{' '}
  39. </>
  40. )}
  41. {isProfessional && (
  42. <span className="label label-primary">{t('professional')}</span>
  43. )}
  44. </div>
  45. )}
  46. </>
  47. )
  48. }
  49. export default Email