From dcb068022807177870c50acb8584f0964b5de71b Mon Sep 17 00:00:00 2001 From: Matt Aitken Date: Wed, 26 Jun 2024 16:30:05 +0100 Subject: [PATCH] Paid plans working --- ...ces.orgs.$organizationSlug.select-plan.tsx | 110 +++++++++++++----- 1 file changed, 84 insertions(+), 26 deletions(-) diff --git a/apps/webapp/app/routes/resources.orgs.$organizationSlug.select-plan.tsx b/apps/webapp/app/routes/resources.orgs.$organizationSlug.select-plan.tsx index c6d336cd7..8e48c39e0 100644 --- a/apps/webapp/app/routes/resources.orgs.$organizationSlug.select-plan.tsx +++ b/apps/webapp/app/routes/resources.orgs.$organizationSlug.select-plan.tsx @@ -16,10 +16,8 @@ import { SubscriptionResult, } from "@trigger.dev/billing/v3"; import { GitHubLightIcon } from "@trigger.dev/companyicons"; -import { redirect } from "remix-typedjson"; import { z } from "zod"; import { DefinitionTip } from "~/components/DefinitionTooltip"; -import { DeleteJobDialog } from "~/components/jobs/DeleteJobModalContent"; import { Button, LinkButton } from "~/components/primitives/Buttons"; import { Dialog, @@ -97,12 +95,6 @@ export async function action({ request, params }: ActionFunctionArgs) { return billingService.setPlan(organization, request, form.callerPath, payload); } -type PricingPlansProps = { - plans: Plans; - subscription?: SubscriptionResult; - organizationSlug: string; -}; - const pricingDefinitions = { usage: { title: "Usage", @@ -140,17 +132,28 @@ const pricingDefinitions = { }, }; +type PricingPlansProps = { + plans: Plans; + subscription?: SubscriptionResult; + organizationSlug: string; +}; + export function PricingPlans({ plans, subscription, organizationSlug }: PricingPlansProps) { + console.log({ plans, subscription }); return (
- - + +
@@ -161,11 +164,11 @@ export function PricingPlans({ plans, subscription, organizationSlug }: PricingP export function TierFree({ plan, - status, + subscription, organizationSlug, }: { plan: FreePlanDefinition; - status: FreeTierStatus; + subscription?: SubscriptionResult; organizationSlug: string; }) { const location = useLocation(); @@ -173,14 +176,17 @@ export function TierFree({ const formAction = `/resources/orgs/${organizationSlug}/select-plan`; const isLoading = navigation.formAction === formAction; + const status = subscription?.freeTierStatus ?? "requires_connect"; + return (
{status === "approved" && ( +
GitHub verified
@@ -272,7 +278,11 @@ export function TierFree({ disabled={isLoading} LeadingIcon={isLoading ? Spinner : undefined} > - Select plan + {subscription?.plan === undefined + ? "Select plan" + : subscription.plan.type === "free" + ? "Current plan" + : `Downgrade to ${plan.title}`} )}
@@ -303,21 +313,45 @@ export function TierFree({ export function TierHobby({ plan, organizationSlug, + subscription, }: { plan: PaidPlanDefinition; organizationSlug: string; + subscription?: SubscriptionResult; }) { + const location = useLocation(); + const navigation = useNavigation(); + const formAction = `/resources/orgs/${organizationSlug}/select-plan`; + const isLoading = navigation.formAction === formAction; + return ( ${plan.limits.includedUsage} usage included -
- -
+
+
+ + + + +
+
    @@ -342,21 +376,45 @@ export function TierHobby({ export function TierPro({ plan, organizationSlug, + subscription, }: { plan: PaidPlanDefinition; organizationSlug: string; + subscription?: SubscriptionResult; }) { + const location = useLocation(); + const navigation = useNavigation(); + const formAction = `/resources/orgs/${organizationSlug}/select-plan`; + const isLoading = navigation.formAction === formAction; + return ( - + ${plan.limits.includedUsage} usage included -
    - -
    +
    +
    + + + + +
    +