-
-
- {t("billingCurrentKeys") ||
- "Current Keys"}
-
-
-
- {getLicenseKeyCount()}
-
-
- {getLicenseKeyCount() === 1
- ? "key"
- : "keys"}
-
-
-
;
+ const hasNonPersonalLicenseKey = licenseKeys.some(
+ (key) => key.tier !== "personal"
+ );
+
+ return (
+ <>
+ {hasNonPersonalLicenseKey && (
+
+ )}
+
+ >
+ );
}
diff --git a/src/components/LicenseBillingBanner.tsx b/src/components/LicenseBillingBanner.tsx
new file mode 100644
index 000000000..27c184648
--- /dev/null
+++ b/src/components/LicenseBillingBanner.tsx
@@ -0,0 +1,39 @@
+"use client";
+
+import { Globe, CreditCard, ArrowRight } from "lucide-react";
+import { useTranslations } from "next-intl";
+import Link from "next/link";
+import { Button } from "@app/components/ui/button";
+import DismissableBanner from "./DismissableBanner";
+
+type LicenseBillingBannerProps = {
+ orgId: string;
+};
+
+export const LicenseBillingBanner = ({ orgId }: LicenseBillingBannerProps) => {
+ const t = useTranslations();
+
+ return (
+
}
+ description={t("licenseBillingBannerDescription")}
+ >
+
+
+
+
+ );
+};
+
+export default LicenseBillingBanner;
diff --git a/src/components/NewPricingLicenseForm.tsx b/src/components/NewPricingLicenseForm.tsx
index 14a05e7e1..21b608796 100644
--- a/src/components/NewPricingLicenseForm.tsx
+++ b/src/components/NewPricingLicenseForm.tsx
@@ -330,7 +330,7 @@ export default function NewPricingLicenseForm({
cols={2}
/>
@@ -79,13 +85,12 @@ export default function SiteInfoCard({}: SiteInfoCardProps) {
{t("agent")}
- {site.agent == "newt" ? "Newt" : null}
- {site.agent == "cli"
- ? "Pangolin CLI"
- : null}{" "}
- {site.agentVersion
- ? `v${site.agentVersion}`
- : "-"}
+
+ {agentLabel}
+ {agentVersion && (
+ v{agentVersion}
+ )}
+
{endpointSection}
diff --git a/src/components/SitesTable.tsx b/src/components/SitesTable.tsx
index f9d541d3f..6e125d1bd 100644
--- a/src/components/SitesTable.tsx
+++ b/src/components/SitesTable.tsx
@@ -373,7 +373,7 @@ export default function SitesTable({
accessorKey: "type",
friendlyName: t("agent"),
header: () => {
- return {t("type")};
+ return {t("agent")};
},
cell: ({ row }) => {
const originalRow = row.original;
@@ -395,7 +395,9 @@ export default function SitesTable({
// Without these fallbacks the badge renders with no label and
// no version at all.
const agentLabel =
- originalRow.agent == "cli" ? "Pangolin CLI" : "Newt";
+ originalRow.agent == "cli"
+ ? "Pangolin CLI"
+ : "Newt";
const agentVersion =
originalRow.agentVersion ?? originalRow.newtVersion;
return (