email.tsx 1.6 KB

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