@stigg/react-sdk 7.7.1-beta.0 → 7.8.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/dist/index.d.mts +829 -0
  2. package/dist/index.d.ts +829 -935
  3. package/dist/stigg-sdk.cjs.js +5915 -0
  4. package/dist/stigg-sdk.esm.js +5915 -0
  5. package/package.json +18 -21
  6. package/dist/react-sdk.cjs.js +0 -3446
  7. package/dist/react-sdk.esm.js +0 -12191
  8. package/src/assets/add.svg +0 -3
  9. package/src/assets/addons.svg +0 -12
  10. package/src/assets/arrow-forward.svg +0 -3
  11. package/src/assets/arrow-right.svg +0 -6
  12. package/src/assets/billing-info-customer.svg +0 -11
  13. package/src/assets/check-stigg.svg +0 -3
  14. package/src/assets/check.svg +0 -5
  15. package/src/assets/close.svg +0 -3
  16. package/src/assets/contact-support.svg +0 -13
  17. package/src/assets/coupon.svg +0 -6
  18. package/src/assets/credit-card.svg +0 -10
  19. package/src/assets/dollar-coin.svg +0 -13
  20. package/src/assets/edit-icon.svg +0 -3
  21. package/src/assets/entitlement-check.svg +0 -3
  22. package/src/assets/lottie/checkout-success.json +0 -1
  23. package/src/assets/mini-schedule.svg +0 -3
  24. package/src/assets/outlined-checked-circle-disabled.svg +0 -6
  25. package/src/assets/outlined-checked-circle.svg +0 -6
  26. package/src/assets/outlined-circle.svg +0 -3
  27. package/src/assets/pay-as-you-go-charge.svg +0 -11
  28. package/src/assets/payment-method.svg +0 -4
  29. package/src/assets/plus-icon.svg +0 -6
  30. package/src/assets/powered-by-stigg.svg +0 -13
  31. package/src/assets/promotions.svg +0 -13
  32. package/src/assets/remove.svg +0 -3
  33. package/src/assets/restore.svg +0 -3
  34. package/src/assets/sand-clock.svg +0 -4
  35. package/src/assets/schedule-box.svg +0 -9
  36. package/src/assets/schedule.svg +0 -3
  37. package/src/assets/subscription-renews-icon.svg +0 -14
  38. package/src/assets/trash.svg +0 -8
  39. package/src/components/StiggProvider.tsx +0 -170
  40. package/src/components/checkout/Checkout.tsx +0 -37
  41. package/src/components/checkout/CheckoutContainer.style.ts +0 -51
  42. package/src/components/checkout/CheckoutContainer.tsx +0 -193
  43. package/src/components/checkout/CheckoutProvider.tsx +0 -181
  44. package/src/components/checkout/components/Button.tsx +0 -35
  45. package/src/components/checkout/components/ChangePlanButton.tsx +0 -30
  46. package/src/components/checkout/components/ContentLoadingSkeleton.tsx +0 -41
  47. package/src/components/checkout/components/DowngradeToFreeContainer.tsx +0 -115
  48. package/src/components/checkout/components/InputField.tsx +0 -26
  49. package/src/components/checkout/components/Skeletons.style.ts +0 -30
  50. package/src/components/checkout/components/StyledArrow.tsx +0 -9
  51. package/src/components/checkout/components/index.ts +0 -3
  52. package/src/components/checkout/configurations/steps.ts +0 -1
  53. package/src/components/checkout/configurations/textOverrides.ts +0 -150
  54. package/src/components/checkout/configurations/theme.ts +0 -46
  55. package/src/components/checkout/configurations/typography.ts +0 -30
  56. package/src/components/checkout/formatting.ts +0 -12
  57. package/src/components/checkout/hooks/index.ts +0 -8
  58. package/src/components/checkout/hooks/useAddonsStepModel.ts +0 -92
  59. package/src/components/checkout/hooks/useCheckoutModel.ts +0 -53
  60. package/src/components/checkout/hooks/useCouponModel.ts +0 -28
  61. package/src/components/checkout/hooks/useLoadCheckout.ts +0 -48
  62. package/src/components/checkout/hooks/usePaymentStepModel.ts +0 -68
  63. package/src/components/checkout/hooks/usePlanStepModel.ts +0 -184
  64. package/src/components/checkout/hooks/usePreviewSubscription.ts +0 -165
  65. package/src/components/checkout/hooks/useProgressBarModel.ts +0 -211
  66. package/src/components/checkout/hooks/useSubscriptionModel.ts +0 -22
  67. package/src/components/checkout/hooks/useSubscriptionState.ts +0 -26
  68. package/src/components/checkout/index.ts +0 -8
  69. package/src/components/checkout/planHeader/PlanHeader.tsx +0 -41
  70. package/src/components/checkout/planHeader/index.ts +0 -1
  71. package/src/components/checkout/progressBar/CheckoutProgressBar.style.ts +0 -35
  72. package/src/components/checkout/progressBar/CheckoutProgressBar.tsx +0 -82
  73. package/src/components/checkout/promotionCode/AddPromotionCode.tsx +0 -107
  74. package/src/components/checkout/promotionCode/AddPromotionCodeButton.tsx +0 -43
  75. package/src/components/checkout/promotionCode/AppliedPromotionCode.tsx +0 -49
  76. package/src/components/checkout/promotionCode/PromotionCodeSection.tsx +0 -40
  77. package/src/components/checkout/promotionCode/index.ts +0 -1
  78. package/src/components/checkout/steps/addons/CheckoutAddonsStep.style.tsx +0 -34
  79. package/src/components/checkout/steps/addons/CheckoutAddonsStep.tsx +0 -144
  80. package/src/components/checkout/steps/addons/addon.utils.ts +0 -67
  81. package/src/components/checkout/steps/addons/components/AddonInputContainer.tsx +0 -84
  82. package/src/components/checkout/steps/addons/components/AddonTextContainer.tsx +0 -45
  83. package/src/components/checkout/steps/addons/index.ts +0 -1
  84. package/src/components/checkout/steps/payment/PaymentMethods.style.ts +0 -36
  85. package/src/components/checkout/steps/payment/PaymentMethods.tsx +0 -106
  86. package/src/components/checkout/steps/payment/PaymentStep.tsx +0 -63
  87. package/src/components/checkout/steps/payment/index.ts +0 -1
  88. package/src/components/checkout/steps/payment/stripe/StripePaymentForm.tsx +0 -79
  89. package/src/components/checkout/steps/payment/stripe/index.ts +0 -3
  90. package/src/components/checkout/steps/payment/stripe/stripe.utils.ts +0 -122
  91. package/src/components/checkout/steps/payment/stripe/useStripeIntegration.ts +0 -33
  92. package/src/components/checkout/steps/payment/stripe/useSubmit.ts +0 -135
  93. package/src/components/checkout/steps/payment/zuora/ZuoraPaymentForm.tsx +0 -128
  94. package/src/components/checkout/steps/payment/zuora/index.ts +0 -9
  95. package/src/components/checkout/steps/payment/zuora/useZuoraIntegration.ts +0 -57
  96. package/src/components/checkout/steps/payment/zuora/useZuoraSubmit.ts +0 -125
  97. package/src/components/checkout/steps/payment/zuora/zuora.utils.ts +0 -72
  98. package/src/components/checkout/steps/plan/BillingPeriodPicker.style.tsx +0 -69
  99. package/src/components/checkout/steps/plan/BillingPeriodPicker.tsx +0 -86
  100. package/src/components/checkout/steps/plan/CheckoutChargeList.tsx +0 -223
  101. package/src/components/checkout/steps/plan/CheckoutPlanStep.style.tsx +0 -6
  102. package/src/components/checkout/steps/plan/CheckoutPlanStep.tsx +0 -31
  103. package/src/components/checkout/steps/plan/index.ts +0 -1
  104. package/src/components/checkout/summary/CheckoutSuccess.tsx +0 -82
  105. package/src/components/checkout/summary/CheckoutSummary.tsx +0 -458
  106. package/src/components/checkout/summary/CheckoutSummarySkeleton.tsx +0 -38
  107. package/src/components/checkout/summary/components/CheckoutCaptions.tsx +0 -145
  108. package/src/components/checkout/summary/components/GraduatedPriceBreakdown.tsx +0 -70
  109. package/src/components/checkout/summary/components/LineItems.tsx +0 -275
  110. package/src/components/checkout/summary/components/WithSkeleton.tsx +0 -16
  111. package/src/components/checkout/summary/components/getPriceBreakdownString.ts +0 -66
  112. package/src/components/checkout/summary/index.ts +0 -2
  113. package/src/components/checkout/types.ts +0 -82
  114. package/src/components/common/CollapsableSectionIcon.tsx +0 -9
  115. package/src/components/common/Icon.tsx +0 -61
  116. package/src/components/common/InformationTooltip.tsx +0 -28
  117. package/src/components/common/LongText.tsx +0 -100
  118. package/src/components/common/PoweredByStigg.tsx +0 -59
  119. package/src/components/common/ProgressBar.tsx +0 -41
  120. package/src/components/common/StatusChip.tsx +0 -29
  121. package/src/components/common/TiersSelectContainer.tsx +0 -39
  122. package/src/components/common/Typography.tsx +0 -117
  123. package/src/components/common/VolumeBulkSelect.tsx +0 -74
  124. package/src/components/common/VolumePerUnitInput.tsx +0 -42
  125. package/src/components/common/chart/chartjs.helpers.ts +0 -17
  126. package/src/components/common/chart/chartjs.plugins.ts +0 -34
  127. package/src/components/common/chart/chartjs.theme.ts +0 -41
  128. package/src/components/common/chart/chartjs.tooltip.plugin.tsx +0 -224
  129. package/src/components/common/customIcons.ts +0 -24
  130. package/src/components/common/iconColor.ts +0 -15
  131. package/src/components/common/mapExternalTheme.ts +0 -147
  132. package/src/components/common/mediaQuery.ts +0 -19
  133. package/src/components/common/table/DataRows.tsx +0 -33
  134. package/src/components/common/table/EmptyState.tsx +0 -19
  135. package/src/components/common/table/ErrorState.tsx +0 -19
  136. package/src/components/common/table/GenericTable.tsx +0 -155
  137. package/src/components/common/table/LoadingRows.tsx +0 -33
  138. package/src/components/common/table/index.ts +0 -6
  139. package/src/components/common/table/types.ts +0 -30
  140. package/src/components/credits/balance/CreditBalance.tsx +0 -70
  141. package/src/components/credits/balance/CreditBalanceValue.tsx +0 -60
  142. package/src/components/credits/creditUsageChart/CreditUsage.chartjs.ts +0 -223
  143. package/src/components/credits/creditUsageChart/CreditUsageChart.tsx +0 -128
  144. package/src/components/credits/creditUsageChart/CreditUsageChartEmptyState.tsx +0 -29
  145. package/src/components/credits/creditUsageChart/CreditUsageChartErrorState.tsx +0 -19
  146. package/src/components/credits/creditUsageChart/CreditUsageChartHeader.tsx +0 -104
  147. package/src/components/credits/creditUsageChart/CreditUsageChartTooltip.tsx +0 -93
  148. package/src/components/credits/creditUsageChart/CreditUsageLegend.tsx +0 -141
  149. package/src/components/credits/creditUsageChart/types.ts +0 -4
  150. package/src/components/credits/grants/CreditGrants.tsx +0 -64
  151. package/src/components/credits/grants/CreditGrantsTable.tsx +0 -101
  152. package/src/components/credits/grants/types.ts +0 -38
  153. package/src/components/credits/grants/utils.ts +0 -25
  154. package/src/components/credits/hooks/useCreditBalance.ts +0 -75
  155. package/src/components/credits/hooks/useCreditGrants.ts +0 -40
  156. package/src/components/credits/hooks/useCreditUsage.ts +0 -50
  157. package/src/components/credits/index.ts +0 -15
  158. package/src/components/credits/localization.ts +0 -25
  159. package/src/components/credits/utilization/CreditUtilization.tsx +0 -74
  160. package/src/components/credits/utilization/CreditUtilizationValue.tsx +0 -113
  161. package/src/components/credits/utils/creditBalanceUtils.ts +0 -31
  162. package/src/components/credits/utils/creditGrantUtils.ts +0 -27
  163. package/src/components/customerPortal/CustomerPortal.style.ts +0 -20
  164. package/src/components/customerPortal/CustomerPortal.tsx +0 -37
  165. package/src/components/customerPortal/CustomerPortalContainer.tsx +0 -77
  166. package/src/components/customerPortal/CustomerPortalContext.ts +0 -32
  167. package/src/components/customerPortal/CustomerPortalHeader.tsx +0 -18
  168. package/src/components/customerPortal/CustomerPortalProvider.tsx +0 -49
  169. package/src/components/customerPortal/billing/InformationGrid.tsx +0 -54
  170. package/src/components/customerPortal/billing/InvoicesSection.tsx +0 -41
  171. package/src/components/customerPortal/billing/PaymentDetailsSection.tsx +0 -140
  172. package/src/components/customerPortal/common/ExternalLinkButton.tsx +0 -34
  173. package/src/components/customerPortal/common/SectionContainer.tsx +0 -22
  174. package/src/components/customerPortal/common/SectionHeader.ts +0 -15
  175. package/src/components/customerPortal/common/SectionTitle.tsx +0 -23
  176. package/src/components/customerPortal/common/SkeletonButton.tsx +0 -5
  177. package/src/components/customerPortal/common/StyledButton.tsx +0 -13
  178. package/src/components/customerPortal/customerPortalTextOverrides.ts +0 -39
  179. package/src/components/customerPortal/customerPortalTheme.ts +0 -35
  180. package/src/components/customerPortal/hooks/useCustomerPortal.ts +0 -39
  181. package/src/components/customerPortal/index.ts +0 -16
  182. package/src/components/customerPortal/paywall/CustomerPortalPaywall.style.ts +0 -33
  183. package/src/components/customerPortal/paywall/CustomerPortalPaywall.tsx +0 -36
  184. package/src/components/customerPortal/subscriptionOverview/ContactCustomerSupport.tsx +0 -50
  185. package/src/components/customerPortal/subscriptionOverview/SubscriptionOverviewLoader.tsx +0 -28
  186. package/src/components/customerPortal/subscriptionOverview/SubscriptionsOverview.tsx +0 -106
  187. package/src/components/customerPortal/subscriptionOverview/SubscriptionsOverviewHeader.tsx +0 -48
  188. package/src/components/customerPortal/subscriptionOverview/charges/ChargeItem.tsx +0 -74
  189. package/src/components/customerPortal/subscriptionOverview/charges/ChargeList.tsx +0 -65
  190. package/src/components/customerPortal/subscriptionOverview/subscriptionScheduledUpdates/SubscriptionScheduledUpdateRow.tsx +0 -110
  191. package/src/components/customerPortal/subscriptionOverview/subscriptionScheduledUpdates/SubscriptionScheduledUpdatesAlert.tsx +0 -158
  192. package/src/components/customerPortal/subscriptionOverview/subscriptionView/SubscriptionView.style.ts +0 -6
  193. package/src/components/customerPortal/subscriptionOverview/subscriptionView/SubscriptionView.tsx +0 -37
  194. package/src/components/customerPortal/subscriptionOverview/subscriptionView/TrialPanel.tsx +0 -58
  195. package/src/components/customerPortal/subscriptionOverview/tabs/AddonsList.tsx +0 -28
  196. package/src/components/customerPortal/subscriptionOverview/tabs/Promotions.tsx +0 -62
  197. package/src/components/customerPortal/subscriptionOverview/tabs/SubscriptionTabs.style.tsx +0 -32
  198. package/src/components/customerPortal/subscriptionOverview/tabs/SubscriptionTabs.tsx +0 -100
  199. package/src/components/customerPortal/subscriptionOverview/types/customerPortal.types.ts +0 -4
  200. package/src/components/customerPortal/subscriptionOverview/upcomingBilling/NextEstimatedBill.tsx +0 -29
  201. package/src/components/customerPortal/subscriptionOverview/upcomingBilling/NoUpcomingBilling.tsx +0 -18
  202. package/src/components/customerPortal/subscriptionOverview/upcomingBilling/UpcomingBilling.tsx +0 -89
  203. package/src/components/customerPortal/types.ts +0 -20
  204. package/src/components/customerPortal/usage/CustomerUsageData.style.tsx +0 -22
  205. package/src/components/customerPortal/usage/CustomerUsageData.tsx +0 -124
  206. package/src/components/customerPortal/usage/featureUsage/EntitlementCTAButton.tsx +0 -62
  207. package/src/components/customerPortal/usage/featureUsage/FeatureUsage.helper.ts +0 -45
  208. package/src/components/customerPortal/usage/featureUsage/FeatureUsage.style.ts +0 -13
  209. package/src/components/customerPortal/usage/featureUsage/FeatureUsage.tsx +0 -96
  210. package/src/components/customerPortal/usage/featureUsage/FeatureUsageProgressBar.tsx +0 -56
  211. package/src/components/guards/BooleanEntitlementGuard.tsx +0 -21
  212. package/src/components/guards/EnumEntitlementGuard.tsx +0 -17
  213. package/src/components/guards/MeteredEntitlementGuard.tsx +0 -21
  214. package/src/components/guards/NumericEntitlementGuard.tsx +0 -21
  215. package/src/components/hooks/index.ts +0 -1
  216. package/src/components/hooks/useChargeSort.ts +0 -17
  217. package/src/components/hooks/useIsScreenWiderThan.ts +0 -6
  218. package/src/components/hooks/useWaitForCheckoutCompleted.ts +0 -65
  219. package/src/components/paywall/BillingPeriodPicker.tsx +0 -90
  220. package/src/components/paywall/EntitlementRow.tsx +0 -127
  221. package/src/components/paywall/Paywall.tsx +0 -189
  222. package/src/components/paywall/PaywallContainer.tsx +0 -119
  223. package/src/components/paywall/PaywallLoader.tsx +0 -96
  224. package/src/components/paywall/PlanCompatibleAddons.tsx +0 -127
  225. package/src/components/paywall/PlanEntitlements.tsx +0 -75
  226. package/src/components/paywall/PlanOffering.tsx +0 -256
  227. package/src/components/paywall/PlanOfferingButton.tsx +0 -232
  228. package/src/components/paywall/PlanPrice.tsx +0 -154
  229. package/src/components/paywall/hooks/useLoadPaywallData.ts +0 -75
  230. package/src/components/paywall/index.ts +0 -5
  231. package/src/components/paywall/paywallTextOverrides.ts +0 -79
  232. package/src/components/paywall/types.ts +0 -80
  233. package/src/components/paywall/utils/calculateTrialDaysLeft.ts +0 -5
  234. package/src/components/paywall/utils/calculateUnitQuantityText.ts +0 -23
  235. package/src/components/paywall/utils/computeDefaultBillingPeriod.ts +0 -36
  236. package/src/components/paywall/utils/getPlansToDisplay.ts +0 -13
  237. package/src/components/paywall/utils/hasPricePoints.ts +0 -10
  238. package/src/components/paywall/utils/mapPaywallData.ts +0 -126
  239. package/src/components/utils/calculateDiscountRate.ts +0 -49
  240. package/src/components/utils/currencyUtils.ts +0 -38
  241. package/src/components/utils/dateUtils.ts +0 -17
  242. package/src/components/utils/fixtures/price.fixtures.ts +0 -42
  243. package/src/components/utils/formatNumber.ts +0 -5
  244. package/src/components/utils/getFeatureName.ts +0 -26
  245. package/src/components/utils/getPaidPriceText.ts +0 -77
  246. package/src/components/utils/getPlanPrice.ts +0 -62
  247. package/src/components/utils/getSubscriptionScheduleUpdateTexts.tsx +0 -88
  248. package/src/components/utils/numberUtils.ts +0 -6
  249. package/src/components/utils/onWheelBlur.ts +0 -3
  250. package/src/components/utils/planPrices.ts +0 -10
  251. package/src/components/utils/priceTierUtils.spec.ts +0 -84
  252. package/src/components/utils/priceTierUtils.ts +0 -250
  253. package/src/components/utils/priceUtils.ts +0 -11
  254. package/src/custom.d.ts +0 -6
  255. package/src/hooks/index.ts +0 -8
  256. package/src/hooks/useActiveSubscriptions.ts +0 -21
  257. package/src/hooks/useBooleanEntitlement.ts +0 -20
  258. package/src/hooks/useCustomerPortal.ts +0 -21
  259. package/src/hooks/useEnumEntitlement.ts +0 -20
  260. package/src/hooks/useFetch.ts +0 -32
  261. package/src/hooks/useMeteredEntitlement.ts +0 -20
  262. package/src/hooks/useNumericEntitlement.ts +0 -20
  263. package/src/hooks/usePaywall.ts +0 -21
  264. package/src/hooks/useStiggContext.ts +0 -13
  265. package/src/index.ts +0 -103
  266. package/src/services/logger.ts +0 -22
  267. package/src/stories/Checkout.stories.tsx +0 -123
  268. package/src/stories/CreditBalance.stories.tsx +0 -248
  269. package/src/stories/CreditGrants.stories.tsx +0 -210
  270. package/src/stories/CreditUsageChart.stories.tsx +0 -347
  271. package/src/stories/CreditUtilization.stories.tsx +0 -287
  272. package/src/stories/CustomTheme.ts +0 -57
  273. package/src/stories/CustomerPortal.stories.tsx +0 -265
  274. package/src/stories/GenericTable.stories.tsx +0 -263
  275. package/src/stories/Paywall.stories.tsx +0 -147
  276. package/src/stories/ProgressBar.stories.tsx +0 -103
  277. package/src/stories/StatusChip.stories.tsx +0 -154
  278. package/src/stories/baseArgs.ts +0 -10
  279. package/src/stories/mocks/checkout/consts.ts +0 -15
  280. package/src/stories/mocks/checkout/mockCheckoutPreview.ts +0 -152
  281. package/src/stories/mocks/checkout/mockCheckoutState.ts +0 -212
  282. package/src/styles.css +0 -46
  283. package/src/theme/Fonts.tsx +0 -80
  284. package/src/theme/Theme.tsx +0 -64
  285. package/src/theme/emotion.d.ts +0 -17
  286. package/src/theme/getResolvedTheme.ts +0 -135
  287. package/src/theme/types.ts +0 -85
  288. package/src/types.ts +0 -22
  289. package/src/utils/styledUtils.ts +0 -64
@@ -1,100 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { CustomerPortal, CustomerPortalSubscription, CustomerPortalSubscriptionAddon } from '@stigg/js-client-sdk';
3
- import flatMap from 'lodash/flatMap';
4
- import Box from '@mui/material/Box';
5
- import Tab from '@mui/material/Tab';
6
- import { Typography } from '../../../common/Typography';
7
- import { AddonsList } from './AddonsList';
8
- import { Promotions } from './Promotions';
9
- import { CustomerPortalSection } from '../../CustomerPortal';
10
- import { CustomerPortalLocalization } from '../../customerPortalTextOverrides';
11
- import { StyledTabs, TabContent, TabsLayout } from './SubscriptionTabs.style';
12
- import { CustomerPortalTheme } from '../../customerPortalTheme';
13
- import { Icon, Icons } from '../../../common/Icon';
14
-
15
- type TabPanelProps = {
16
- children?: React.ReactNode;
17
- index: number;
18
- value: number;
19
- maxHeight: string;
20
- };
21
-
22
- function TabPanel(props: TabPanelProps) {
23
- const { children, value, index, maxHeight, ...other } = props;
24
-
25
- return (
26
- <div role="tabpanel" hidden={value !== index} {...other}>
27
- {value === index && <TabContent $maxHeight={maxHeight}>{children}</TabContent>}
28
- </div>
29
- );
30
- }
31
-
32
- export type SubscriptionTabsProps = {
33
- customerPortal: CustomerPortal;
34
- hiddenSections?: CustomerPortalSection[];
35
- textOverrides: CustomerPortalLocalization;
36
- theme: CustomerPortalTheme;
37
- };
38
-
39
- function TabTitle({ isSelected, label, icon }: { isSelected: boolean; label: string; icon: Icons }) {
40
- const color = isSelected ? 'primary' : 'secondary';
41
- return (
42
- <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>
43
- <Icon icon={icon} svgStrokeColor={color} />
44
- <Typography variant="h6" bold={isSelected} color={color}>
45
- {label}
46
- </Typography>
47
- </div>
48
- );
49
- }
50
-
51
- export function SubscriptionTabs({ customerPortal, hiddenSections, textOverrides, theme }: SubscriptionTabsProps) {
52
- const allAddons: CustomerPortalSubscriptionAddon[] = flatMap(
53
- customerPortal.subscriptions,
54
- (subscription: CustomerPortalSubscription) => subscription.addons,
55
- );
56
- const isSectionHidden = (sectionName: CustomerPortalSection) =>
57
- hiddenSections?.some((section) => section === sectionName);
58
- const showAddons = allAddons.length > 0 && !isSectionHidden('addons');
59
- const showPromotions =
60
- customerPortal.promotionalEntitlements.length > 0 && !isSectionHidden('promotionalEntitlements');
61
- const [value, setValue] = useState(showAddons ? 1 : 2);
62
-
63
- const handleChange = (_: React.SyntheticEvent, newValue: number) => {
64
- setValue(newValue);
65
- };
66
- const shouldShowTabs = showAddons || showPromotions;
67
-
68
- if (!shouldShowTabs) {
69
- return null;
70
- }
71
-
72
- return (
73
- <TabsLayout>
74
- <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
75
- <StyledTabs value={value} onChange={handleChange}>
76
- {showAddons ? (
77
- <Tab
78
- sx={{ textTransform: 'none' }}
79
- value={1}
80
- label={<TabTitle isSelected={value === 1} label={textOverrides.addonsTabTitle} icon="Addons" />}
81
- />
82
- ) : null}
83
- {showPromotions ? (
84
- <Tab
85
- sx={{ textTransform: 'none' }}
86
- value={2}
87
- label={<TabTitle isSelected={value === 2} label={textOverrides.promotionsTabTitle} icon="Promotions" />}
88
- />
89
- ) : null}
90
- </StyledTabs>
91
- </Box>
92
- <TabPanel value={value} index={1} maxHeight={theme.tabMaxHeight}>
93
- <AddonsList />
94
- </TabPanel>
95
- <TabPanel value={value} index={2} maxHeight={theme.tabMaxHeight}>
96
- <Promotions />
97
- </TabPanel>
98
- </TabsLayout>
99
- );
100
- }
@@ -1,4 +0,0 @@
1
- import { CustomerPortalSubscription } from '@stigg/js-client-sdk';
2
-
3
- export type SubscriptionPrice = CustomerPortalSubscription['prices'][number];
4
- export type FeatureType = NonNullable<SubscriptionPrice['feature']>;
@@ -1,29 +0,0 @@
1
- import { BillingPeriod, Currency } from '@stigg/js-client-sdk';
2
- import moment from 'moment';
3
- import { currencyPriceFormatter } from '../../../utils/currencyUtils';
4
- import { Typography } from '../../../common/Typography';
5
-
6
- export type NextEstimatedBillProps = {
7
- billingPeriod: BillingPeriod;
8
- rangeEnd: string;
9
- amount: number;
10
- currency: Currency;
11
- };
12
-
13
- export function NextEstimatedBill({ billingPeriod, rangeEnd, amount, currency }: NextEstimatedBillProps) {
14
- return (
15
- <>
16
- <Typography variant="h6">Next estimated bill</Typography>
17
- <Typography variant="h1">{currencyPriceFormatter({ amount, currency, maximumFractionDigits: 2 })}</Typography>
18
- <Typography as="div" variant="body1" color="secondary">
19
- Billed {billingPeriod === BillingPeriod.Monthly ? 'monthly' : 'annually'} on{' '}
20
- <Typography variant="body1" as="span" color="primary">
21
- {moment.utc(rangeEnd).format('MMM Do, YYYY')}
22
- </Typography>
23
- </Typography>
24
- <Typography variant="body1" color="secondary">
25
- * Additional tax rates may apply
26
- </Typography>
27
- </>
28
- );
29
- }
@@ -1,18 +0,0 @@
1
- import { Typography } from '../../../common/Typography';
2
-
3
- type NoUpcomingBillingProps = {
4
- description: string;
5
- };
6
-
7
- export function NoUpcomingBilling({ description }: NoUpcomingBillingProps) {
8
- return (
9
- <>
10
- <Typography variant="h6" color="secondary">
11
- No upcoming bill
12
- </Typography>
13
- <Typography variant="body1" color="secondary">
14
- {description}
15
- </Typography>
16
- </>
17
- );
18
- }
@@ -1,89 +0,0 @@
1
- import styled from '@utils/style';
2
- import { ReactNode } from 'react';
3
- import {
4
- BillingModel,
5
- CustomerPortalSubscription,
6
- PricingType,
7
- SubscriptionScheduleType,
8
- SubscriptionStatus,
9
- } from '@stigg/js-client-sdk';
10
- import { CustomerPortalTheme } from '../../customerPortalTheme';
11
- import { NextEstimatedBill } from './NextEstimatedBill';
12
- import { NoUpcomingBilling } from './NoUpcomingBilling';
13
- import { ContactCustomerSupport } from '../ContactCustomerSupport';
14
- import { CustomerPortalLocalization } from '../../customerPortalTextOverrides';
15
-
16
- const Container = styled.div<{ $borderColor: string }>`
17
- max-height: 278px;
18
- display: flex;
19
- flex-direction: column;
20
- border-radius: 10px;
21
- background-color: ${({ theme }) => theme.stigg.palette.backgroundSection};
22
- border: ${({ $borderColor }) => `1px solid ${$borderColor}`};
23
- padding: 32px;
24
- gap: 16px;
25
- `;
26
-
27
- export type UpcomingBillingProps = {
28
- subscription: CustomerPortalSubscription;
29
- theme: CustomerPortalTheme;
30
- textOverrides: CustomerPortalLocalization;
31
- onContactSupport?: () => Promise<void> | void;
32
- };
33
-
34
- export function UpcomingBilling({ subscription, theme, textOverrides, onContactSupport }: UpcomingBillingProps) {
35
- const { pricingType } = subscription;
36
- let content: ReactNode;
37
- const noUsageBasedPrices =
38
- subscription.prices?.every((price) => price.billingModel !== BillingModel.UsageBased) ?? true;
39
- const scheduledDowngradeToFree = subscription.scheduledUpdates?.find(
40
- ({ subscriptionScheduleType, targetPackage }) =>
41
- subscriptionScheduleType === SubscriptionScheduleType.Downgrade &&
42
- targetPackage?.pricingType === PricingType.Free,
43
- );
44
-
45
- if (pricingType === PricingType.Free) {
46
- content = <NoUpcomingBilling description="You're on a free plan, so you don’t have any upcoming charges" />;
47
- } else if (pricingType === PricingType.Paid) {
48
- if (scheduledDowngradeToFree && noUsageBasedPrices) {
49
- content = (
50
- <NoUpcomingBilling description="Your plan will be downgraded to a free plan, so you don’t have any upcoming charges" />
51
- );
52
- } else if (subscription.status === SubscriptionStatus.InTrial) {
53
- content = (
54
- <NoUpcomingBilling
55
- description={`You’re on a free trial of the ${subscription.planName} plan, so you don’t have any upcoming charges`}
56
- />
57
- );
58
- } else {
59
- const billingPeriod = subscription.prices?.[0]?.billingPeriod;
60
- const rangeEnd = subscription.billingPeriodRange?.end as string;
61
- const total = subscription.totalPrice?.total;
62
-
63
- if (billingPeriod && rangeEnd && total) {
64
- content = (
65
- <NextEstimatedBill
66
- billingPeriod={billingPeriod}
67
- rangeEnd={rangeEnd}
68
- amount={total.amount}
69
- currency={total.currency}
70
- />
71
- );
72
- }
73
- }
74
- } else if (pricingType === PricingType.Custom) {
75
- content = (
76
- <ContactCustomerSupport
77
- onContactSupport={onContactSupport}
78
- label={textOverrides.contactSupportTitle}
79
- linkLabel={textOverrides.contactSupportLink}
80
- />
81
- );
82
- }
83
-
84
- return (
85
- <Container className="stigg-subscription-total-price-layout" $borderColor={theme.borderColor}>
86
- {content}
87
- </Container>
88
- );
89
- }
@@ -1,20 +0,0 @@
1
- import { CustomerPortalEntitlement, CustomerPortalSubscription } from '@stigg/js-client-sdk';
2
- import { FeatureFragment } from '@stigg/api-client-js/src/generated/sdk';
3
-
4
- export type OnBuyMoreCallbackFn = (feature: FeatureFragment, entitlement: CustomerPortalEntitlement) => void;
5
-
6
- export type FilterEntitlementsFn = (entitlements: CustomerPortalEntitlement[]) => CustomerPortalEntitlement[];
7
-
8
- export enum CustomerPortalIntentionType {
9
- MANAGE_SUBSCRIPTION = 'MANAGE_SUBSCRIPTION',
10
- UPGRADE_PLAN = 'UPGRADE_PLAN',
11
- UPGRADE_TRIAL_PLAN = 'UPGRADE_TRIAL_PLAN',
12
- }
13
-
14
- export type OnManageSubscriptionFn = ({
15
- intentionType,
16
- customerSubscriptions,
17
- }: {
18
- intentionType: CustomerPortalIntentionType;
19
- customerSubscriptions: CustomerPortalSubscription[];
20
- }) => Promise<void> | void;
@@ -1,22 +0,0 @@
1
- import styled from '@utils/style';
2
- import Grid from '@mui/material/Grid';
3
- import { range } from 'lodash';
4
- import Skeleton from 'react-loading-skeleton';
5
- import { useIsScreenWiderThan } from '../../hooks/useIsScreenWiderThan';
6
-
7
- export const Footer = styled.div`
8
- margin-top: 32px;
9
- `;
10
-
11
- export function CustomerUsageLoader() {
12
- const isMdScreen = useIsScreenWiderThan('md');
13
- return (
14
- <Grid container spacing={4} className="stigg-subscription-usage-skeleton-layout" sx={{ flexWrap: 'wrap' }}>
15
- {range(6).map((item) => (
16
- <Grid key={item} item xs={isMdScreen ? 4 : 12}>
17
- <Skeleton width={280} height={120} />
18
- </Grid>
19
- ))}
20
- </Grid>
21
- );
22
- }
@@ -1,124 +0,0 @@
1
- import { CustomerPortalEntitlement, MeterType, PricingType, SubscriptionStatus } from '@stigg/js-client-sdk';
2
- import { useState } from 'react';
3
- import { compact, keyBy } from 'lodash';
4
- import { Minus, Plus } from 'react-feather';
5
- import Grid from '@mui/material/Grid';
6
- import { useCustomerPortalContext } from '../CustomerPortalContext';
7
- import { FeatureUsage } from './featureUsage/FeatureUsage';
8
- import { Footer, CustomerUsageLoader } from './CustomerUsageData.style';
9
- import { SectionContainer } from '../common/SectionContainer';
10
- import { SectionHeader } from '../common/SectionHeader';
11
- import { SectionTitle } from '../common/SectionTitle';
12
- import { StyledButton } from '../common/StyledButton';
13
- import { FilterEntitlementsFn, OnBuyMoreCallbackFn } from '../types';
14
- import { OnManageClick } from '../CustomerPortalContainer';
15
- import { useIsScreenWiderThan } from '../../hooks/useIsScreenWiderThan';
16
-
17
- const MAX_BOXES = 6;
18
-
19
- export type CustomerUsageDataProps = {
20
- onManageSubscription?: OnManageClick;
21
- onBuyMore?: OnBuyMoreCallbackFn;
22
- filterEntitlements?: FilterEntitlementsFn;
23
- };
24
-
25
- export function CustomerUsageData({ onManageSubscription, onBuyMore, filterEntitlements }: CustomerUsageDataProps) {
26
- const [showAll, setShowAll] = useState(false);
27
- const isMdScreen = useIsScreenWiderThan('md');
28
-
29
- const { customerPortal, isLoading, textOverrides, theme } = useCustomerPortalContext();
30
- const isLoadingData = isLoading || !customerPortal;
31
- const { entitlements, subscriptions } = customerPortal || {};
32
- const meteredEntitlements = entitlements?.filter(
33
- (entitlement) =>
34
- entitlement.feature?.meterType === MeterType.Fluctuating ||
35
- entitlement.feature?.meterType === MeterType.Incremental,
36
- );
37
- const activeSubscription = subscriptions?.find(({ status }) => status === SubscriptionStatus.Active);
38
- const hasCustomSubscription = activeSubscription?.pricingType === PricingType.Custom;
39
- const canUpgradeSubscription = !!customerPortal?.canUpgradeSubscription;
40
-
41
- const subscriptionPriceByFeature = keyBy(activeSubscription?.prices ?? [], 'feature.refId');
42
- const entitlementByFeature = keyBy(meteredEntitlements ?? [], 'feature.refId');
43
-
44
- // sort features by prices first, then other entitlements
45
- const priceEntitlements: CustomerPortalEntitlement[] = compact(
46
- (activeSubscription?.prices ?? []).map(
47
- (subscriptionPrice) =>
48
- (subscriptionPrice.feature && entitlementByFeature[subscriptionPrice.feature.refId]) || undefined,
49
- ),
50
- );
51
- const otherEntitlements: CustomerPortalEntitlement[] = compact(
52
- (meteredEntitlements ?? []).filter((entitlement) => !subscriptionPriceByFeature[entitlement.feature!.refId]),
53
- );
54
-
55
- const sortedEntitlements: CustomerPortalEntitlement[] = [...priceEntitlements, ...otherEntitlements].filter(
56
- (entitlement) => entitlement.usageLimit !== 0,
57
- );
58
-
59
- const filteredEntitlements = filterEntitlements ? filterEntitlements(sortedEntitlements) : sortedEntitlements;
60
-
61
- // 4 -> 3 per row, 6 -> 2 per row
62
- const xs = isMdScreen ? (filteredEntitlements.length > 2 ? 4 : 6) : 12;
63
-
64
- const entitlementsToShow = showAll ? filteredEntitlements : filteredEntitlements.slice(0, MAX_BOXES);
65
-
66
- const toggleShowAll = () => setShowAll((prevState) => !prevState);
67
-
68
- if (!isLoadingData && !meteredEntitlements?.length) {
69
- return null;
70
- }
71
-
72
- return (
73
- <SectionContainer
74
- className="stigg-subscription-usage-layout"
75
- $backgroundColor={theme.backgroundColor}
76
- $borderColor={theme.borderColor}>
77
- <SectionHeader>
78
- <SectionTitle
79
- title={textOverrides.usageTabTitle}
80
- className="stigg-customer-portal-usage-section-title"
81
- isLoading={isLoadingData}
82
- />
83
- </SectionHeader>
84
-
85
- {isLoadingData ? (
86
- <CustomerUsageLoader />
87
- ) : (
88
- <>
89
- <Grid container spacing={4}>
90
- {entitlementsToShow.map((entitlement) => (
91
- <Grid
92
- className={`stigg-entitlement-usage-${entitlement.feature!.refId}`}
93
- key={entitlement.feature!.refId}
94
- item
95
- xs={xs}>
96
- <FeatureUsage
97
- key={entitlement.feature!.refId}
98
- subscriptionPrice={subscriptionPriceByFeature[entitlement.feature!.refId]}
99
- entitlement={entitlement}
100
- onManageSubscription={onManageSubscription}
101
- onBuyMore={onBuyMore}
102
- hasCustomSubscription={hasCustomSubscription}
103
- canUpgradeSubscription={canUpgradeSubscription}
104
- />
105
- </Grid>
106
- ))}
107
- </Grid>
108
-
109
- {filteredEntitlements.length > MAX_BOXES && (
110
- <Footer>
111
- <StyledButton
112
- className="stigg-usage-toggle-many-button"
113
- variant="text"
114
- startIcon={showAll ? <Minus /> : <Plus />}
115
- onClick={toggleShowAll}>
116
- {showAll ? 'Show less' : 'Show more'}
117
- </StyledButton>
118
- </Footer>
119
- )}
120
- </>
121
- )}
122
- </SectionContainer>
123
- );
124
- }
@@ -1,62 +0,0 @@
1
- import { CustomerPortalEntitlement } from '@stigg/js-client-sdk';
2
- import { FeatureFragment } from '@stigg/api-client-js/src/generated/sdk';
3
- import Button from '@mui/material/Button';
4
- import styled from '@utils/style';
5
- import { getUsagePercentage, USAGE_PERCENTAGE_WARNING_THRESHOLD } from './FeatureUsage.helper';
6
- import { Typography } from '../../../common/Typography';
7
- import { CustomerPortalIntentionType, OnBuyMoreCallbackFn } from '../../types';
8
- import { OnManageClick } from '../../CustomerPortalContainer';
9
-
10
- const StyledButton = styled(Button)`
11
- text-transform: none;
12
- padding: 0;
13
- white-space: nowrap;
14
- `;
15
-
16
- export type EntitlementCtaButtonProps = {
17
- entitlement: Exclude<CustomerPortalEntitlement, 'feature'>;
18
- feature: FeatureFragment;
19
- onManageSubscription: OnManageClick | undefined;
20
- onBuyMore?: OnBuyMoreCallbackFn;
21
- canBuyMore: boolean;
22
- canUpgradeSubscription: boolean;
23
- hasCustomSubscription: boolean;
24
- };
25
-
26
- export function EntitlementCtaButton({
27
- entitlement,
28
- feature,
29
- onManageSubscription,
30
- onBuyMore,
31
- canBuyMore,
32
- canUpgradeSubscription,
33
- hasCustomSubscription,
34
- }: EntitlementCtaButtonProps) {
35
- if (hasCustomSubscription || entitlement.hasUnlimitedUsage) {
36
- return null;
37
- }
38
-
39
- if (getUsagePercentage(entitlement.currentUsage || 0, entitlement.usageLimit!) < USAGE_PERCENTAGE_WARNING_THRESHOLD) {
40
- return null;
41
- }
42
-
43
- if (canBuyMore) {
44
- return onBuyMore ? (
45
- <StyledButton variant="text" onClick={() => onBuyMore(feature, entitlement)}>
46
- <Typography color="primary.main">Buy more</Typography>
47
- </StyledButton>
48
- ) : null;
49
- }
50
-
51
- if (canUpgradeSubscription) {
52
- return onManageSubscription ? (
53
- <StyledButton
54
- variant="text"
55
- onClick={() => onManageSubscription({ intentionType: CustomerPortalIntentionType.UPGRADE_PLAN })}>
56
- <Typography color="primary.main">Upgrade</Typography>
57
- </StyledButton>
58
- ) : null;
59
- }
60
-
61
- return null;
62
- }
@@ -1,45 +0,0 @@
1
- import { CustomerPortalEntitlement, EntitlementResetPeriod } from '@stigg/js-client-sdk';
2
- import moment, { MomentInput } from 'moment';
3
-
4
- export const USAGE_PERCENTAGE_WARNING_THRESHOLD = 70;
5
-
6
- export function getUsagePercentage(currentUsage: number, limit: number) {
7
- return Math.min(Math.floor((currentUsage / limit) * 100), 100);
8
- }
9
-
10
- export function getUsageProgressStatus(currentUsage: number) {
11
- let status: 'standard' | 'warning' | 'error';
12
-
13
- if (currentUsage < USAGE_PERCENTAGE_WARNING_THRESHOLD) {
14
- status = 'standard';
15
- } else if (currentUsage < 100) {
16
- status = 'warning';
17
- } else {
18
- status = 'error';
19
- }
20
-
21
- return status;
22
- }
23
-
24
- export function getResetUsageText(entitlement: CustomerPortalEntitlement) {
25
- if (!entitlement.resetPeriod || !entitlement.usagePeriodEnd) {
26
- return null;
27
- }
28
-
29
- const calculateResetDiff = (unit: 'days' | 'hours' | 'minutes') => {
30
- return moment.utc(entitlement.usagePeriodEnd as MomentInput).diff(moment.utc(), unit);
31
- };
32
-
33
- switch (entitlement.resetPeriod) {
34
- case EntitlementResetPeriod.Month:
35
- return `Resets monthly - in ${calculateResetDiff('days')} days`;
36
- case EntitlementResetPeriod.Week:
37
- return `Resets weekly - in ${calculateResetDiff('days')} days`;
38
- case EntitlementResetPeriod.Day:
39
- return `Resets daily - in ${calculateResetDiff('hours')} hours`;
40
- case EntitlementResetPeriod.Hour:
41
- return `Resets hourly - in ${calculateResetDiff('minutes')} minutes`;
42
- default:
43
- return null;
44
- }
45
- }
@@ -1,13 +0,0 @@
1
- import styled from '@utils/style';
2
-
3
- export const FeatureUsageContainer = styled.div<{ $highlight: boolean; $borderColor: string }>`
4
- display: flex;
5
- flex-direction: column;
6
- padding: 24px;
7
- border: ${({ $borderColor }) => `1px solid ${$borderColor}`};
8
- border-radius: 10px;
9
- row-gap: 16px;
10
- height: 100%;
11
-
12
- ${({ theme, $highlight }) => $highlight && `background-color: ${theme.stigg.palette.backgroundSection}`};
13
- `;
@@ -1,96 +0,0 @@
1
- import isUndefined from 'lodash/isUndefined';
2
- import { BillingModel, CustomerPortalEntitlement } from '@stigg/js-client-sdk';
3
- import { CustomerPortalSubscriptionPriceFragment } from '@stigg/api-client-js/src/generated/sdk';
4
- import { Typography } from '../../../common/Typography';
5
- import { useCustomerPortalContext } from '../../CustomerPortalContext';
6
- import { getResetUsageText, getUsagePercentage } from './FeatureUsage.helper';
7
- import { getFeatureDisplayName } from '../../../utils/getFeatureName';
8
- import { FeatureUsageContainer } from './FeatureUsage.style';
9
- import { FeatureUsageProgressBar } from './FeatureUsageProgressBar';
10
- import { Icon } from '../../../common/Icon';
11
- import { InformationTooltip } from '../../../common/InformationTooltip';
12
- import { LongText } from '../../../common/LongText';
13
- import { EntitlementCtaButton } from './EntitlementCTAButton';
14
- import { OnBuyMoreCallbackFn } from '../../types';
15
- import { OnManageClick } from '../../CustomerPortalContainer';
16
-
17
- export type UsageBoxProps = {
18
- entitlement: CustomerPortalEntitlement;
19
- subscriptionPrice: CustomerPortalSubscriptionPriceFragment | undefined;
20
- onManageSubscription: OnManageClick | undefined;
21
- onBuyMore?: OnBuyMoreCallbackFn;
22
- hasCustomSubscription: boolean;
23
- canUpgradeSubscription: boolean;
24
- };
25
-
26
- export function FeatureUsage({
27
- entitlement,
28
- subscriptionPrice,
29
- onManageSubscription,
30
- onBuyMore,
31
- hasCustomSubscription,
32
- canUpgradeSubscription,
33
- }: UsageBoxProps) {
34
- const { theme } = useCustomerPortalContext();
35
-
36
- const hasOverageUsage = !entitlement.hasUnlimitedUsage && entitlement.currentUsage! > entitlement.usageLimit!;
37
-
38
- if (!entitlement.feature) {
39
- return null;
40
- }
41
-
42
- return (
43
- <FeatureUsageContainer $highlight={!!subscriptionPrice} $borderColor={theme.borderColor}>
44
- <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 16 }}>
45
- <LongText variant="body1">{entitlement.feature && getFeatureDisplayName(entitlement.feature)}</LongText>
46
- {subscriptionPrice && (
47
- <InformationTooltip
48
- title={
49
- <Typography variant="body1">
50
- {subscriptionPrice.billingModel === BillingModel.PerUnit
51
- ? 'Billed for committed usage'
52
- : 'Billed for actual usage'}
53
- </Typography>
54
- }>
55
- <Icon icon="DollarCoin" svgStrokeColor={theme.iconsColor} />
56
- </InformationTooltip>
57
- )}
58
- </div>
59
-
60
- <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 8 }}>
61
- <LongText
62
- variant="body1"
63
- color={hasOverageUsage ? 'error' : 'primary'}
64
- data-testid={`usage-data-${entitlement.feature?.refId}`}>
65
- {entitlement.currentUsage?.toLocaleString()}
66
- {!entitlement.hasUnlimitedUsage &&
67
- ` / ${entitlement.usageLimit?.toLocaleString()} (${getUsagePercentage(
68
- entitlement.currentUsage || 0,
69
- entitlement.usageLimit!,
70
- )}%)`}
71
- </LongText>
72
-
73
- <EntitlementCtaButton
74
- entitlement={entitlement}
75
- feature={entitlement.feature}
76
- onBuyMore={onBuyMore}
77
- canBuyMore={!!subscriptionPrice}
78
- onManageSubscription={onManageSubscription}
79
- canUpgradeSubscription={canUpgradeSubscription}
80
- hasCustomSubscription={hasCustomSubscription}
81
- />
82
- </div>
83
-
84
- <FeatureUsageProgressBar entitlement={entitlement} />
85
-
86
- {!entitlement.hasUnlimitedUsage &&
87
- !isUndefined(entitlement.usageLimit) &&
88
- !isUndefined(entitlement.currentUsage) &&
89
- entitlement.resetPeriod &&
90
- entitlement.usagePeriodEnd ? (
91
- <Typography color="secondary">{getResetUsageText(entitlement)}</Typography>
92
- ) : null}
93
- {entitlement.hasUnlimitedUsage && <Typography color="secondary">In current billing period</Typography>}
94
- </FeatureUsageContainer>
95
- );
96
- }