reconfirmation-info.tsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import { useState } from 'react'
  2. import { UserEmailData } from '../../../../../../types/user-email'
  3. import getMeta from '../../../../utils/meta'
  4. import ReconfirmationInfoSuccess from './reconfirmation-info/reconfirmation-info-success'
  5. import ReconfirmationInfoPromptText from './reconfirmation-info/reconfirmation-info-prompt-text'
  6. import OLRow from '@/shared/components/ol/ol-row'
  7. import OLCol from '@/shared/components/ol/ol-col'
  8. import OLNotification from '@/shared/components/ol/ol-notification'
  9. import { useUserEmailsContext } from '@/features/settings/context/user-email-context'
  10. import { ssoAvailableForInstitution } from '@/features/settings/utils/sso'
  11. import { useTranslation } from 'react-i18next'
  12. import { useLocation } from '@/shared/hooks/use-location'
  13. import OLButton from '@/shared/components/ol/ol-button'
  14. import ResendConfirmationCodeModal from '@/features/settings/components/emails/resend-confirmation-code-modal'
  15. type ReconfirmationInfoProps = {
  16. userEmailData: UserEmailData
  17. }
  18. function ReconfirmationInfo({ userEmailData }: ReconfirmationInfoProps) {
  19. const reconfirmedViaSAML = getMeta('ol-reconfirmedViaSAML')
  20. const affiliation = userEmailData.affiliation
  21. const { t } = useTranslation()
  22. const { samlInitPath } = getMeta('ol-ExposedSettings')
  23. const {
  24. state,
  25. setLoading: setUserEmailsContextLoading,
  26. getEmails,
  27. } = useUserEmailsContext()
  28. const [isPending, setIsPending] = useState(false)
  29. const location = useLocation()
  30. const ssoAvailable = Boolean(
  31. ssoAvailableForInstitution(affiliation?.institution ?? null)
  32. )
  33. if (!affiliation) {
  34. return null
  35. }
  36. if (
  37. userEmailData.samlProviderId &&
  38. userEmailData.samlProviderId === reconfirmedViaSAML
  39. ) {
  40. return (
  41. <OLRow>
  42. <OLCol lg={12}>
  43. <OLNotification
  44. type="info"
  45. content={
  46. <ReconfirmationInfoSuccess
  47. institution={affiliation.institution}
  48. />
  49. }
  50. />
  51. </OLCol>
  52. </OLRow>
  53. )
  54. }
  55. if (!affiliation.inReconfirmNotificationPeriod) {
  56. return null
  57. }
  58. return (
  59. <OLNotification
  60. type="info"
  61. content={
  62. <ReconfirmationInfoPromptText
  63. institutionName={affiliation.institution.name}
  64. primary={userEmailData.default}
  65. />
  66. }
  67. action={
  68. affiliation?.institution && ssoAvailable ? (
  69. <OLButton
  70. variant="secondary"
  71. disabled={isPending}
  72. onClick={() => {
  73. setIsPending(true)
  74. location.assign(
  75. `${samlInitPath}?university_id=${affiliation.institution.id}&reconfirm=/user/settings`
  76. )
  77. }}
  78. >
  79. {t('confirm_affiliation')}
  80. </OLButton>
  81. ) : (
  82. <ResendConfirmationCodeModal
  83. email={userEmailData.email}
  84. setGroupLoading={setUserEmailsContextLoading}
  85. groupLoading={state.isLoading}
  86. onSuccess={getEmails}
  87. triggerVariant="secondary"
  88. />
  89. )
  90. }
  91. />
  92. )
  93. }
  94. export default ReconfirmationInfo