From dd323eccd44a404fac54eb17d8b8e878b11262f9 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 15 Apr 2025 22:00:22 +0530 Subject: [PATCH 1/4] feat: added banner on projects when limit reached --- .../layouts/ProjectLayout/ProjectLayout.tsx | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx b/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx index 8b0d88ad5..caab7ddff 100644 --- a/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx +++ b/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx @@ -1,9 +1,10 @@ import { useTranslation } from "react-i18next"; import { faMobile } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { Link, Outlet, useRouterState } from "@tanstack/react-router"; +import { Link, Outlet, useNavigate, useRouterState } from "@tanstack/react-router"; import { motion } from "framer-motion"; +import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal"; import { BreadcrumbContainer, Menu, @@ -31,6 +32,19 @@ export const ProjectLayout = () => { const { t } = useTranslation(); const workspaceId = currentWorkspace?.id || ""; const projectSlug = currentWorkspace?.slug || ""; + const { subscription } = useSubscription(); + const navigate = useNavigate(); + const hasIdentityLimitCrossed = + subscription?.identityLimit && subscription?.identitiesUsed > subscription?.identityLimit; + const hasUserLimitCrossed = + subscription?.memberLimit && subscription?.membersUsed > subscription?.memberLimit; + const shouldUpgrade = Boolean(hasUserLimitCrossed || hasIdentityLimitCrossed); + let upgradeText = ""; + if (hasUserLimitCrossed) { + upgradeText = `You've reached the maximum number of organisation users(${subscription.membersUsed}/${subscription?.memberLimit}).`; + } else if (hasIdentityLimitCrossed) { + upgradeText = `You've reached the maximum number of organisation identities(${subscription.identitiesUsed}/${subscription?.identityLimit}).`; + } const isSecretManager = currentWorkspace?.type === ProjectType.SecretManager; const isCertManager = currentWorkspace?.type === ProjectType.CertificateManager; @@ -47,7 +61,6 @@ export const ProjectLayout = () => { }); // we only show the secret rotations v1 tab if they have existing rotations - const { subscription } = useSubscription(); const { data: secretRotations } = useGetSecretRotations({ workspaceId, options: { @@ -267,6 +280,17 @@ export const ProjectLayout = () => { + {shouldUpgrade && ( + { + if (!isOpen) { + navigate({ to: "/organization/access-management" }); + } + }} + /> + )}

From ac73800acb3a0701d91c877de164d8715f0f97a1 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 16 Apr 2025 00:25:21 +0530 Subject: [PATCH 2/4] feat: added banner on crossing user/identity limit --- frontend/src/layouts/ProjectLayout/ProjectLayout.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx b/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx index caab7ddff..948b65e9d 100644 --- a/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx +++ b/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx @@ -41,9 +41,9 @@ export const ProjectLayout = () => { const shouldUpgrade = Boolean(hasUserLimitCrossed || hasIdentityLimitCrossed); let upgradeText = ""; if (hasUserLimitCrossed) { - upgradeText = `You've reached the maximum number of organisation users(${subscription.membersUsed}/${subscription?.memberLimit}).`; + upgradeText = `You've reached the maximum number of organisation users(${subscription?.memberLimit}).`; } else if (hasIdentityLimitCrossed) { - upgradeText = `You've reached the maximum number of organisation identities(${subscription.identitiesUsed}/${subscription?.identityLimit}).`; + upgradeText = `You've reached the maximum number of organisation identities(${subscription?.identityLimit}).`; } const isSecretManager = currentWorkspace?.type === ProjectType.SecretManager; From 5b20c1feba19c04fff4a1951d32e2618a127ca4a Mon Sep 17 00:00:00 2001 From: = Date: Wed, 16 Apr 2025 00:30:11 +0530 Subject: [PATCH 3/4] feat: reptile jaw spaced --- frontend/src/layouts/ProjectLayout/ProjectLayout.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx b/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx index 948b65e9d..92356b9d7 100644 --- a/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx +++ b/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx @@ -41,9 +41,9 @@ export const ProjectLayout = () => { const shouldUpgrade = Boolean(hasUserLimitCrossed || hasIdentityLimitCrossed); let upgradeText = ""; if (hasUserLimitCrossed) { - upgradeText = `You've reached the maximum number of organisation users(${subscription?.memberLimit}).`; + upgradeText = `You've reached the maximum number of organisation users (${subscription?.memberLimit}).`; } else if (hasIdentityLimitCrossed) { - upgradeText = `You've reached the maximum number of organisation identities(${subscription?.identityLimit}).`; + upgradeText = `You've reached the maximum number of organisation identities (${subscription?.identityLimit}).`; } const isSecretManager = currentWorkspace?.type === ProjectType.SecretManager; From 7364717f6044ee74408ec16490edfdda6078338d Mon Sep 17 00:00:00 2001 From: = Date: Fri, 18 Apr 2025 22:35:41 +0530 Subject: [PATCH 4/4] feat: added an additional 10 as threshold --- frontend/src/layouts/ProjectLayout/ProjectLayout.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx b/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx index 92356b9d7..0e2d8bba9 100644 --- a/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx +++ b/frontend/src/layouts/ProjectLayout/ProjectLayout.tsx @@ -35,9 +35,9 @@ export const ProjectLayout = () => { const { subscription } = useSubscription(); const navigate = useNavigate(); const hasIdentityLimitCrossed = - subscription?.identityLimit && subscription?.identitiesUsed > subscription?.identityLimit; + subscription?.identityLimit && subscription?.identitiesUsed > subscription.identityLimit + 10; const hasUserLimitCrossed = - subscription?.memberLimit && subscription?.membersUsed > subscription?.memberLimit; + subscription?.memberLimit && subscription?.membersUsed > subscription.memberLimit + 10; const shouldUpgrade = Boolean(hasUserLimitCrossed || hasIdentityLimitCrossed); let upgradeText = ""; if (hasUserLimitCrossed) {