@@ -59,84 +59,109 @@ export function UpsellWrapper({
{/* Upsell content */}
-
+ );
+}
-
-
-
- Unlock {featureName}
-
-
- {featureDescription}
-
-
-
+export function UpsellContent(props: {
+ teamSlug: string;
+ featureName: string;
+ featureDescription: string;
+ requiredPlan: Team["billingPlan"];
+ currentPlan: Team["billingPlan"];
+ benefits?: {
+ description: string;
+ status: "available" | "soon";
+ }[];
+}) {
+ return (
+
+
+
+
+
-
- {benefits.length > 0 && (
-
-
- What you'll get:
-
-
- {benefits.map((benefit) => (
-
-
-
-
-
{benefit.description}
- {benefit.status === "soon" && (
-
- Coming Soon
-
- )}
-
- ))}
-
-
- )}
+
+
+
+
+ Unlock {props.featureName}
+
+
+ {props.featureDescription}
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+ You are currently on the{" "}
+ {props.currentPlan}{" "}
+ plan.
+
+
+
+
);
}
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/audit-log/layout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/audit-log/layout.tsx
index b3295bf6114..16f58d38a37 100644
--- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/audit-log/layout.tsx
+++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/audit-log/layout.tsx
@@ -1,6 +1,6 @@
import { redirect } from "next/navigation";
-import { getTeamBySlug } from "../../../../../../../@/api/team";
-import { UpsellWrapper } from "../../../../../../../@/components/blocks/upsell-wrapper";
+import { getTeamBySlug } from "@/api/team";
+import { UpsellWrapper } from "@/components/blocks/upsell-wrapper";
export default async function Layout(props: {
children: React.ReactNode;
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/page.tsx
index 99bcdb3d59a..262d5449e70 100644
--- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/page.tsx
+++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/page.tsx
@@ -3,6 +3,7 @@ import { InfoIcon } from "lucide-react";
import { redirect } from "next/navigation";
import { getTeamBySlug } from "@/api/team";
import { getBilledUsage } from "@/api/usage/billing-preview";
+import { UpsellContent } from "@/components/blocks/upsell-wrapper";
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
import {
Card,
@@ -12,6 +13,7 @@ import {
CardHeader,
CardTitle,
} from "@/components/ui/card";
+import { getValidTeamPlan } from "@/utils/getValidTeamPlan";
import { getValidAccount } from "../../../../../account/settings/getAccount";
import {
formatPrice,
@@ -34,23 +36,28 @@ export default async function Page(props: {
}
const usagePreview = await getBilledUsage(team.slug);
+ const validPlan = getValidTeamPlan(team);
+
+ if (validPlan === "free") {
+ return (
+
+
+
+ );
+ }
if (usagePreview.status === "error") {
- switch (usagePreview.reason) {
- case "free_plan":
- return (
-
- You are on a free plan. Please upgrade to a paid plan to view your
- usage.
-
- );
- default:
- return (
-
- Something went wrong. Please try again later.
-
- );
- }
+ return (
+
+ Something went wrong. Please try again later.
+
+ );
}
const grandTotalCents = usagePreview.data.result.reduce((total, category) => {