| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import { useCallback, useState } from 'react'
- import { Trans, useTranslation } from 'react-i18next'
- import { postJSON } from '../../../../infrastructure/fetch-json'
- import { useSubscriptionDashboardContext } from '../../context/subscription-dashboard-context'
- import { ManagedInstitution as Institution } from '../../../../../../types/subscription/dashboard/managed-institution'
- import { RowLink } from './row-link'
- import { debugConsole } from '@/utils/debugging'
- import getMeta from '@/utils/meta'
- import OLButton from '@/shared/components/ol/ol-button'
- type ManagedInstitutionProps = {
- institution: Institution
- }
- export default function ManagedInstitution({
- institution,
- }: ManagedInstitutionProps) {
- const { t } = useTranslation()
- const [subscriptionChanging, setSubscriptionChanging] = useState(false)
- const { updateManagedInstitution } = useSubscriptionDashboardContext()
- const changeInstitutionalEmailSubscription = useCallback(
- (
- e: React.MouseEvent<HTMLButtonElement, MouseEvent>,
- institutionId: Institution['v1Id']
- ) => {
- const updateSubscription = async (institutionId: Institution['v1Id']) => {
- setSubscriptionChanging(true)
- try {
- const data = await postJSON<string[]>(
- `/institutions/${institutionId}/emailSubscription`
- )
- institution.metricsEmail.optedOutUserIds = data
- updateManagedInstitution(institution)
- } catch (error) {
- debugConsole.error(error)
- }
- setSubscriptionChanging(false)
- }
- e.preventDefault()
- updateSubscription(institutionId)
- },
- [institution, updateManagedInstitution]
- )
- return (
- <div>
- <p>
- <Trans
- i18nKey="you_are_a_manager_of_commons_at_institution_x"
- components={[<strong />]} // eslint-disable-line react/jsx-key
- values={{
- institutionName: institution.name || '',
- }}
- shouldUnescape
- tOptions={{ interpolation: { escapeValue: true } }}
- />
- </p>
- <ul className="list-group p-0">
- <RowLink
- href={`/metrics/institutions/${institution.v1Id}`}
- heading={t('view_metrics')}
- subtext={t('view_metrics_commons_subtext')}
- icon="insights"
- />
- <RowLink
- href={`/institutions/${institution.v1Id}/hub`}
- heading={t('view_hub')}
- subtext={t('view_hub_subtext')}
- icon="account_circle"
- />
- <RowLink
- href={`/manage/institutions/${institution.v1Id}/managers`}
- heading={t('manage_institution_managers')}
- subtext={t('manage_managers_subtext')}
- icon="manage_accounts"
- />
- </ul>
- <div>
- <p>
- <span>Monthly metrics emails: </span>
- <OLButton
- variant="link"
- className="btn-inline-link"
- isLoading={subscriptionChanging}
- loadingLabel={t('loading')}
- onClick={e =>
- changeInstitutionalEmailSubscription(e, institution.v1Id)
- }
- >
- {institution.metricsEmail.optedOutUserIds.includes(
- getMeta('ol-user_id')!
- )
- ? t('subscribe')
- : t('unsubscribe')}
- </OLButton>
- </p>
- </div>
- <hr />
- </div>
- )
- }
|