From f38533590dec14323696ff7925375323c005d3d2 Mon Sep 17 00:00:00 2001 From: Henry Date: Sat, 16 May 2026 22:23:56 +0100 Subject: [PATCH] feat(cloud): fix upgrade/downgrade and migrate webhook handler --- apps/web/src/pages/api/partner/webhook.ts | 6 +++-- apps/web/src/views/members/index.tsx | 30 +++++++++++++---------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/apps/web/src/pages/api/partner/webhook.ts b/apps/web/src/pages/api/partner/webhook.ts index 143246a8..87c8711d 100644 --- a/apps/web/src/pages/api/partner/webhook.ts +++ b/apps/web/src/pages/api/partner/webhook.ts @@ -87,6 +87,8 @@ export default withApiLogging( const { event, license_key, license_status, tier, prev_license_key } = payload; + log.info({ headers: req.headers, payload }, "partner webhook received"); + const { db } = await createNextApiContext(req); switch (event) { @@ -141,7 +143,7 @@ export default withApiLogging( const cfg = tierConfig(tier); await subscriptionRepo.upsertByPartnerLicenseKey(db, license_key, { plan: cfg.plan, - status: license_status, + status: "active", partnerTier: tier, seats: cfg.seats, unlimitedSeats: cfg.unlimitedSeats, @@ -163,7 +165,7 @@ export default withApiLogging( const cfg = tierConfig(tier); await subscriptionRepo.upsertByPartnerLicenseKey(db, license_key, { plan: cfg.plan, - status: sub.status, + status: "active", partnerTier: tier, seats: cfg.seats, unlimitedSeats: cfg.unlimitedSeats, diff --git a/apps/web/src/views/members/index.tsx b/apps/web/src/views/members/index.tsx index 0b6d138b..56eaff46 100644 --- a/apps/web/src/views/members/index.tsx +++ b/apps/web/src/views/members/index.tsx @@ -27,8 +27,8 @@ import { useWorkspace } from "~/providers/workspace"; import { api } from "~/utils/api"; import { getAvatarUrl } from "~/utils/helpers"; import { DeleteMemberConfirmation } from "./components/DeleteMemberConfirmation"; -import { InviteMemberForm } from "./components/InviteMemberForm"; import { EditMemberPermissionsModal } from "./components/EditMemberPermissionsModal"; +import { InviteMemberForm } from "./components/InviteMemberForm"; export default function MembersPage() { const { modalContentType, openModal, isOpen } = useModal(); @@ -76,6 +76,13 @@ export default function MembersPage() { const unlimitedSeats = hasUnlimitedSeats(subscriptions); + const isProPlan = + !!proSubscription || + workspace.plan === "pro" || + workspace.plan === "enterprise"; + const isTeamPlan = !!teamSubscription || workspace.plan === "team"; + const isPaidPlan = isProPlan || isTeamPlan; + const TableRow = ({ memberPublicId, memberId, @@ -144,8 +151,8 @@ export default function MembersPage() { {memberName}

- {((workspace.role === "admin" || - data?.showEmailsToMembers === true) || + {(workspace.role === "admin" || + data?.showEmailsToMembers === true || showSkeleton) && (

{memberRole && - memberRole.charAt(0).toUpperCase() + - memberRole.slice(1)} + memberRole.charAt(0).toUpperCase() + memberRole.slice(1)} {canEditMember && session?.user.id !== memberId && ( )} @@ -266,32 +272,30 @@ export default function MembersPage() {

{env("NEXT_PUBLIC_KAN_ENV") === "cloud" && ( <> - {!proSubscription && !teamSubscription && ( + {!isPaidPlan && ( - - {t`Launch offer: Get unlimited members with Pro`} - + {t`Upgrade`} )}
- {proSubscription + {isProPlan ? t`Pro Plan` - : teamSubscription + : isTeamPlan ? t`Team Plan` : t`Free Plan`} - {proSubscription && unlimitedSeats && ( + {isProPlan && unlimitedSeats && ( )}