* Remove icons folder * Create folders for badge, button, and dropdown components * Remove Bootstrap 5 from test * Rename `getBootstrap5Breakpoint` to `getBootstrapBreakpoint` * Cleanup and update BS 5 comments * Move components to the shared folder * Rename `tooltips-bs5` to `tooltip` * Remove `-bs5` suffix * Fix path * Delete BS3 version file * Rename `_form_marketing-bootstrap-5` to `_form_marketing` * Delete BS3 version file * Rename `_contact_general_modal-marketing-bootstrap-5` to `_contact_general_modal-marketing` * Delete BS3 version file * Rename `_contact_modal-marketing-bootstrap-5` to `_contact_modal-marketing` * Delete BS3 version file * Rename `thin-footer-bootstrap-5` to `thin-footer` * Delete BS3 version file * Rename `language-picker-bootstrap-5` to `language-picker` * Rename `fat-footer-react-bootstrap-5` to `fat-footer-react` * Delete BS3 version file * Rename `navbar-marketing-bootstrap-5` to `navbar-marketing` * Rename `navbar-marketing-react-bootstrap-5` to `navbar-marketing-react` * Delete BS3 version file * Rename `layout-website-redesign-cms-bootstrap-5` to `layout-website-redesign-cms` * Source format * Fix path GitOrigin-RevId: cf0f5db7c84cf545c69213dcc271d9ff17fe5db7
97 lines
2.9 KiB
TypeScript
97 lines
2.9 KiB
TypeScript
import { useState } from 'react'
|
|
import { useTranslation, Trans } from 'react-i18next'
|
|
import getMeta from '../../../../utils/meta'
|
|
import OLNotification from '@/shared/components/ol/ol-notification'
|
|
|
|
export function SSOAlert() {
|
|
const { t } = useTranslation()
|
|
|
|
const institutionLinked = getMeta('ol-institutionLinked')
|
|
const institutionEmailNonCanonical = getMeta(
|
|
'ol-institutionEmailNonCanonical'
|
|
)
|
|
const samlError = getMeta('ol-samlError')
|
|
|
|
const [infoClosed, setInfoClosed] = useState(false)
|
|
const [warningClosed, setWarningClosed] = useState(false)
|
|
const [errorClosed, setErrorClosed] = useState(false)
|
|
|
|
const handleInfoClosed = () => setInfoClosed(true)
|
|
const handleWarningClosed = () => setWarningClosed(true)
|
|
const handleErrorClosed = () => setErrorClosed(true)
|
|
|
|
if (samlError) {
|
|
return !errorClosed ? (
|
|
<OLNotification
|
|
type="error"
|
|
content={
|
|
<>
|
|
{samlError.translatedMessage
|
|
? samlError.translatedMessage
|
|
: samlError.message}
|
|
{samlError.tryAgain && <p>{t('try_again')}</p>}
|
|
</>
|
|
}
|
|
isDismissible
|
|
onDismiss={handleErrorClosed}
|
|
/>
|
|
) : null
|
|
}
|
|
|
|
if (!institutionLinked) {
|
|
return null
|
|
}
|
|
|
|
return (
|
|
<>
|
|
{!infoClosed && (
|
|
<OLNotification
|
|
type="info"
|
|
content={
|
|
<>
|
|
<p>
|
|
<Trans
|
|
i18nKey="institution_acct_successfully_linked_2"
|
|
components={[<strong />]} // eslint-disable-line react/jsx-key
|
|
values={{ institutionName: institutionLinked.universityName }}
|
|
shouldUnescape
|
|
tOptions={{ interpolation: { escapeValue: true } }}
|
|
/>
|
|
</p>
|
|
{institutionLinked.hasEntitlement && (
|
|
<p>
|
|
<Trans
|
|
i18nKey="this_grants_access_to_features_2"
|
|
components={[<strong />]} // eslint-disable-line react/jsx-key
|
|
values={{ featureType: t('professional') }}
|
|
shouldUnescape
|
|
tOptions={{ interpolation: { escapeValue: true } }}
|
|
/>
|
|
</p>
|
|
)}
|
|
</>
|
|
}
|
|
isDismissible
|
|
onDismiss={handleInfoClosed}
|
|
/>
|
|
)}
|
|
{!warningClosed && institutionEmailNonCanonical && (
|
|
<OLNotification
|
|
type="warning"
|
|
content={
|
|
<Trans
|
|
i18nKey="in_order_to_match_institutional_metadata_2"
|
|
components={[<strong />]} // eslint-disable-line react/jsx-key
|
|
values={{ email: institutionEmailNonCanonical }}
|
|
shouldUnescape
|
|
tOptions={{ interpolation: { escapeValue: true } }}
|
|
/>
|
|
}
|
|
isDismissible
|
|
onDismiss={handleWarningClosed}
|
|
/>
|
|
)}
|
|
</>
|
|
)
|
|
}
|