From a5a63a5af8e121263a8208873c381e871d86b6c7 Mon Sep 17 00:00:00 2001 From: Kiril Kartunov Date: Fri, 24 Mar 2023 06:00:40 +0200 Subject: [PATCH] Add price info on cert details page --- .../CertificationDetailsSidebar.tsx | 49 +++++++++++++++++-- .../stripe/stripe-product.provider.ts | 2 +- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src-ts/tools/learn/certification-details/certification-details-sidebar/CertificationDetailsSidebar.tsx b/src-ts/tools/learn/certification-details/certification-details-sidebar/CertificationDetailsSidebar.tsx index 2f79e7b7e..20fe32843 100644 --- a/src-ts/tools/learn/certification-details/certification-details-sidebar/CertificationDetailsSidebar.tsx +++ b/src-ts/tools/learn/certification-details/certification-details-sidebar/CertificationDetailsSidebar.tsx @@ -12,6 +12,8 @@ import { TCACertificationProgress, } from '../../learn-lib' import { EnrollCtaBtn } from '../enroll-cta-btn' +import { EnvironmentConfig } from '../../../../config' +import { StripeProduct, useGetStripeProduct } from '../../learn-lib/data-providers/payments' import styles from './CertificationDetailsSidebar.module.scss' @@ -33,9 +35,25 @@ function renderTooltipContents(icon: ReactNode, text: Array): ReactNode ) } +// eslint-disable-next-line complexity const CertificationDetailsSidebar: FC = (props: CertificationDetailsSidebarProps) => { const completed: boolean = !!props.certProgress?.completedAt + const tcaMonetizationEnabled: boolean = EnvironmentConfig.REACT_APP_ENABLE_TCA_CERT_MONETIZATION || false + + // fetch Stripe product data conditionally + const { product }: { product: StripeProduct | undefined } + = useGetStripeProduct( + tcaMonetizationEnabled && !completed && !props.certProgress + ? props.certification?.stripeProductId as string + : '', + ) + const price: string + = Number((product?.default_price.unit_amount || 0) / 100) + .toFixed(2) + + const suggestedRetailPrice: string = product?.metadata?.estimatedRetailPrice || '20' + return (
@@ -85,9 +103,34 @@ const CertificationDetailsSidebar: FC = (props - $20  - FREE -  enrollment ends on April 30th + + $ + {suggestedRetailPrice} +   + + {tcaMonetizationEnabled ? ( + <> + + $ + {price} +   + + one-time payment + , [ + 'One-off, non-recurring payment', + ])} + place='bottom' + trigger={} + triggerOn='hover' + /> + + ) : ( + <> + FREE +  enrollment ends on April 30th + + )} )} diff --git a/src-ts/tools/learn/learn-lib/data-providers/payments/stripe/stripe-product.provider.ts b/src-ts/tools/learn/learn-lib/data-providers/payments/stripe/stripe-product.provider.ts index 1b9bd25f2..86f565f9d 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/payments/stripe/stripe-product.provider.ts +++ b/src-ts/tools/learn/learn-lib/data-providers/payments/stripe/stripe-product.provider.ts @@ -15,7 +15,7 @@ export function useGetStripeProduct(productId: string): StripeProductData { ) const swrCacheConfig: SWRConfiguration = useSwrCache(url) - const { data: product, error }: SWRResponse = useSWR(url, swrCacheConfig) + const { data: product, error }: SWRResponse = useSWR(productId ? url : undefined, swrCacheConfig) return { loading: !product && !error,