managed-group-subscriptions.tsx 5.2 KB

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