managed-group-subscriptions.tsx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import GroupSettingsButton from '@/features/subscription/components/dashboard/group-settings-button'
  2. import getMeta from '@/utils/meta'
  3. import { Trans, useTranslation } from 'react-i18next'
  4. import { useSubscriptionDashboardContext } from '../../context/subscription-dashboard-context'
  5. import { RowLink } from './row-link'
  6. import { ManagedGroupSubscription } from '../../../../../../types/subscription/dashboard/subscription'
  7. function ManagedGroupAdministrator({
  8. subscription,
  9. }: {
  10. subscription: ManagedGroupSubscription
  11. }) {
  12. const usersEmail = getMeta('ol-usersEmail')
  13. const values = {
  14. planName: subscription.planLevelName,
  15. groupName: subscription.teamName || '',
  16. adminEmail: subscription.admin_id.email,
  17. }
  18. const isAdmin = usersEmail === subscription.admin_id.email
  19. if (subscription.userIsGroupMember && !isAdmin) {
  20. return (
  21. <Trans
  22. i18nKey="you_are_a_manager_and_member_of_x_plan_as_member_of_group_subscription_y_administered_by_z"
  23. components={[
  24. // eslint-disable-next-line react/jsx-key, jsx-a11y/anchor-has-content
  25. <a href="/user/subscription/plans" />,
  26. // eslint-disable-next-line react/jsx-key
  27. <strong />,
  28. ]}
  29. values={values}
  30. shouldUnescape
  31. tOptions={{ interpolation: { escapeValue: true } }}
  32. />
  33. )
  34. } else if (subscription.userIsGroupMember && isAdmin) {
  35. return (
  36. <Trans
  37. i18nKey="you_are_a_manager_and_member_of_x_plan_as_member_of_group_subscription_y_administered_by_z_you"
  38. components={[
  39. // eslint-disable-next-line react/jsx-key, jsx-a11y/anchor-has-content
  40. <a href="/user/subscription/plans" />,
  41. // eslint-disable-next-line react/jsx-key
  42. <strong />,
  43. ]}
  44. values={values}
  45. shouldUnescape
  46. tOptions={{ interpolation: { escapeValue: true } }}
  47. />
  48. )
  49. } else if (isAdmin) {
  50. return (
  51. <Trans
  52. i18nKey="you_are_a_manager_of_x_plan_as_member_of_group_subscription_y_administered_by_z_you"
  53. components={[
  54. // eslint-disable-next-line react/jsx-key, jsx-a11y/anchor-has-content
  55. <a href="/user/subscription/plans" />,
  56. // eslint-disable-next-line react/jsx-key
  57. <strong />,
  58. ]}
  59. values={values}
  60. shouldUnescape
  61. tOptions={{ interpolation: { escapeValue: true } }}
  62. />
  63. )
  64. }
  65. return (
  66. <Trans
  67. i18nKey="you_are_a_manager_of_x_plan_as_member_of_group_subscription_y_administered_by_z"
  68. components={[
  69. // eslint-disable-next-line react/jsx-key, jsx-a11y/anchor-has-content
  70. <a href="/user/subscription/plans" />,
  71. // eslint-disable-next-line react/jsx-key
  72. <strong />,
  73. ]}
  74. values={values}
  75. shouldUnescape
  76. tOptions={{ interpolation: { escapeValue: true } }}
  77. />
  78. )
  79. }
  80. export default function ManagedGroupSubscriptions() {
  81. const { t } = useTranslation()
  82. const { managedGroupSubscriptions } = useSubscriptionDashboardContext()
  83. if (!managedGroupSubscriptions) {
  84. return null
  85. }
  86. const groupSettingsEnabledFor = getMeta('ol-groupSettingsEnabledFor') || []
  87. return (
  88. <>
  89. {managedGroupSubscriptions.map(subscription => {
  90. return (
  91. <div key={`managed-group-${subscription._id}`}>
  92. <p>
  93. <ManagedGroupAdministrator subscription={subscription} />
  94. </p>
  95. <ul className="list-group p-0">
  96. <RowLink
  97. href={`/manage/groups/${subscription._id}/members`}
  98. heading={t('manage_members')}
  99. subtext={t('manage_group_members_subtext')}
  100. icon="groups"
  101. />
  102. <RowLink
  103. href={`/manage/groups/${subscription._id}/managers`}
  104. heading={t('manage_group_managers')}
  105. subtext={t('manage_managers_subtext')}
  106. icon="manage_accounts"
  107. />
  108. {groupSettingsEnabledFor?.includes(subscription._id) && (
  109. <GroupSettingsButton subscription={subscription} />
  110. )}
  111. <RowLink
  112. href={`/metrics/groups/${subscription._id}`}
  113. heading={t('view_metrics')}
  114. subtext={t('view_metrics_group_subtext')}
  115. icon="insights"
  116. />
  117. </ul>
  118. <hr />
  119. </div>
  120. )
  121. })}
  122. </>
  123. )
  124. }