import type { FC } from "react"; import { observer } from "mobx-react"; // plane imports import { SUBSCRIPTION_REDIRECTION_URLS, SUBSCRIPTION_WITH_BILLING_FREQUENCY, TALK_TO_SALES_URL, WORKSPACE_SETTINGS_TRACKER_ELEMENTS, WORKSPACE_SETTINGS_TRACKER_EVENTS, } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { getButtonStyling } from "@plane/propel/button"; import type { TBillingFrequency } from "@plane/types"; import { EProductSubscriptionEnum } from "@plane/types"; import { getUpgradeButtonStyle } from "@plane/ui"; import { cn, getSubscriptionName } from "@plane/utils"; // components import { DiscountInfo } from "@/components/license/modal/card/discount-info"; import type { TPlanDetail } from "@/constants/plans"; // local imports import { captureSuccess } from "@/helpers/event-tracker.helper"; import { PlanFrequencyToggle } from "./frequency-toggle"; type TPlanDetailProps = { subscriptionType: EProductSubscriptionEnum; planDetail: TPlanDetail; billingFrequency: TBillingFrequency | undefined; setBillingFrequency: (frequency: TBillingFrequency) => void; }; const COMMON_BUTTON_STYLE = "relative inline-flex items-center justify-center w-full px-4 py-1.5 text-xs font-medium rounded-lg focus:outline-none transition-all duration-300 animate-slide-up"; export const PlanDetail: FC = observer((props) => { const { subscriptionType, planDetail, billingFrequency, setBillingFrequency } = props; // plane hooks const { t } = useTranslation(); // subscription details const subscriptionName = getSubscriptionName(subscriptionType); const isSubscriptionActive = planDetail.isActive; // pricing details const displayPrice = billingFrequency === "month" ? planDetail.monthlyPrice : planDetail.yearlyPrice; const pricingDescription = isSubscriptionActive ? "a user per month" : "Quote on request"; const pricingSecondaryDescription = billingFrequency === "month" ? planDetail.monthlyPriceSecondaryDescription : planDetail.yearlyPriceSecondaryDescription; // helper styles const upgradeButtonStyle = getUpgradeButtonStyle(subscriptionType, false) ?? getButtonStyling("primary", "lg"); const handleRedirection = () => { const frequency = billingFrequency ?? "year"; // Get the redirection URL based on the subscription type and billing frequency const redirectUrl = SUBSCRIPTION_REDIRECTION_URLS[subscriptionType][frequency] ?? TALK_TO_SALES_URL; captureSuccess({ eventName: WORKSPACE_SETTINGS_TRACKER_EVENTS.upgrade_plan_redirected, payload: { subscriptionType, }, }); // Open the URL in a new tab window.open(redirectUrl, "_blank"); }; return (
{/* Plan name and pricing section */}
{subscriptionName} {subscriptionType === EProductSubscriptionEnum.PRO && ( Popular )}
{isSubscriptionActive && displayPrice !== undefined && (
)}
{pricingDescription &&
{pricingDescription}
} {pricingSecondaryDescription && (
{pricingSecondaryDescription}
)}
{/* Billing frequency toggle */} {SUBSCRIPTION_WITH_BILLING_FREQUENCY.includes(subscriptionType) && billingFrequency && (
)} {/* Subscription button */}
); });