mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-02 16:03:15 -05:00
d6e9508aed
* Migrate managed publishers to React dash * Decaf cleanup + async/await PublishersGetter * Continue migration of managed publishers to react dash * Fix linting * Add tests * Decaf cleanup PublishersGetterTests * Update PublishersGetter tests * Rename component files to kebab-case GitOrigin-RevId: cb1fe14d120457c965a9d23a8ddb2c2c92e1d5da
94 lines
2.8 KiB
TypeScript
94 lines
2.8 KiB
TypeScript
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 { Institution } from './managed-institutions'
|
|
|
|
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, 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) {
|
|
console.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 || '',
|
|
}}
|
|
/>
|
|
</p>
|
|
<p>
|
|
<a
|
|
className="btn btn-primary"
|
|
href={`/metrics/institutions/${institution.v1Id}`}
|
|
>
|
|
<i className="fa fa-fw fa-line-chart" /> {t('view_metrics')}
|
|
</a>
|
|
</p>
|
|
<p>
|
|
<a href={`/institutions/${institution.v1Id}/hub`}>
|
|
<i className="fa fa-fw fa-user-circle" /> {t('view_hub')}
|
|
</a>
|
|
</p>
|
|
<p>
|
|
<a href={`/manage/institutions/${institution.v1Id}/managers`}>
|
|
<i className="fa fa-fw fa-users" /> {t('manage_institution_managers')}
|
|
</a>
|
|
</p>
|
|
<div>
|
|
<p>
|
|
<span>Monthly metrics emails: </span>
|
|
{subscriptionChanging ? (
|
|
<i className="fa fa-spin fa-refresh" />
|
|
) : (
|
|
<button
|
|
className="btn-inline-link"
|
|
style={{ border: 0 }}
|
|
onClick={e =>
|
|
changeInstitutionalEmailSubscription(e, institution.v1Id)
|
|
}
|
|
>
|
|
{institution.metricsEmail.optedOutUserIds.includes(
|
|
window.user_id!
|
|
)
|
|
? t('subscribe')
|
|
: t('unsubscribe')}
|
|
</button>
|
|
)}
|
|
</p>
|
|
</div>
|
|
<hr />
|
|
</div>
|
|
)
|
|
}
|