From a596b1c40bdb96fff864c7d63b77475d4c83622e Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 2 Sep 2025 22:19:42 +0100 Subject: [PATCH] feat: rework upgrade --- .../members/components/InviteMemberForm.tsx | 107 +++++++++++------- apps/web/src/views/members/index.tsx | 7 +- 2 files changed, 71 insertions(+), 43 deletions(-) diff --git a/apps/web/src/views/members/components/InviteMemberForm.tsx b/apps/web/src/views/members/components/InviteMemberForm.tsx index 081f4b65..f22049cf 100644 --- a/apps/web/src/views/members/components/InviteMemberForm.tsx +++ b/apps/web/src/views/members/components/InviteMemberForm.tsx @@ -18,18 +18,22 @@ import { useWorkspace } from "~/providers/workspace"; import { api } from "~/utils/api"; export function InviteMemberForm({ + numberOfMembers, activeTeamSubscription, + userId, }: { + numberOfMembers: number; activeTeamSubscription: | { - id: string; + id: number | null; plan: string; status: string; - seats: number; - periodStart: Date; - periodEnd: Date; + seats: number | null; + periodStart: Date | null; + periodEnd: Date | null; } | undefined; + userId: string | undefined; }) { const utils = api.useUtils(); const [isCreateAnotherEnabled, setIsCreateAnotherEnabled] = useState(false); @@ -103,32 +107,32 @@ export function InviteMemberForm({ billingType = isYearly ? t`billed annually` : t`billed monthly`; } - const onSubmit = async (member: InviteMemberInput) => { - if (env("NEXT_PUBLIC_KAN_ENV") === "cloud" && !activeTeamSubscription?.id) { - const { data, error } = await authClient.subscription.upgrade({ - plan: "team", - referenceId: workspace.publicId, - metadata: { userId: "123" }, // @todo: add the user id - seats: 1, - successUrl: "/members", - cancelUrl: "/members", - returnUrl: "/members", - disableRedirect: true, + const onSubmit = (member: InviteMemberInput) => { + inviteMember.mutate(member); + }; + + const handleUpgrade = async () => { + const { data, error } = await authClient.subscription.upgrade({ + plan: "team", + referenceId: workspace.publicId, + metadata: { userId }, + seats: numberOfMembers, + successUrl: "/members", + cancelUrl: "/members", + returnUrl: "/members", + disableRedirect: true, + }); + + if (data?.url) { + window.location.href = data.url; + } + + if (error) { + showPopup({ + header: t`Error upgrading subscription`, + message: t`Please try again later, or contact customer support.`, + icon: "error", }); - - if (data?.url) { - window.location.href = data.url; - } - - if (error) { - showPopup({ - header: t`Error upgrading subscription`, - message: t`Please try again later, or contact customer support.`, - icon: "error", - }); - } - } else { - inviteMember.mutate(member); } }; @@ -157,6 +161,10 @@ export function InviteMemberForm({ { if (e.key === "Enter") { @@ -193,19 +201,36 @@ export function InviteMemberForm({
- setIsCreateAnotherEnabled(!isCreateAnotherEnabled)} - /> + {activeTeamSubscription?.id && + env("NEXT_PUBLIC_KAN_ENV") === "cloud" && ( + + setIsCreateAnotherEnabled(!isCreateAnotherEnabled) + } + /> + )}
- + {env("NEXT_PUBLIC_KAN_ENV") === "cloud" && + !activeTeamSubscription?.id ? ( + + ) : ( + + )}
diff --git a/apps/web/src/views/members/index.tsx b/apps/web/src/views/members/index.tsx index 64d86a26..b35e46ed 100644 --- a/apps/web/src/views/members/index.tsx +++ b/apps/web/src/views/members/index.tsx @@ -28,6 +28,8 @@ export default function MembersPage() { // { enabled: workspace?.publicId ? true : false }, ); + const { data: session } = authClient.useSession(); + const subscription = data?.subscriptions; const activeTeamSubscription = subscription?.find( @@ -57,7 +59,6 @@ export default function MembersPage() { isLastRow?: boolean; showSkeleton?: boolean; }) => { - const { data: session } = authClient.useSession(); return (