From 6db93ef0c7ee42d1946e063a1c8826697134272e Mon Sep 17 00:00:00 2001
From: Philipinho <16838612+Philipinho@users.noreply.github.com>
Date: Tue, 29 Jul 2025 14:28:40 -0700
Subject: [PATCH] upsell
---
.../components/settings/settings-sidebar.tsx | 50 +++++++++++++++++--
.../src/ee/licence/components/oss-details.tsx | 2 +-
.../src/ee/mfa/components/mfa-settings.tsx | 27 +++++++---
.../page/components/page-import-modal.tsx | 2 +-
.../user/components/account-mfa-section.tsx | 9 ----
5 files changed, 66 insertions(+), 24 deletions(-)
diff --git a/apps/client/src/components/settings/settings-sidebar.tsx b/apps/client/src/components/settings/settings-sidebar.tsx
index 79ee511d..f506d746 100644
--- a/apps/client/src/components/settings/settings-sidebar.tsx
+++ b/apps/client/src/components/settings/settings-sidebar.tsx
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from "react";
-import { Group, Text, ScrollArea, ActionIcon } from "@mantine/core";
+import { Group, Text, ScrollArea, ActionIcon, Tooltip } from "@mantine/core";
import {
IconUser,
IconSettings,
@@ -42,6 +42,7 @@ interface DataItem {
isEnterprise?: boolean;
isAdmin?: boolean;
isSelfhosted?: boolean;
+ showDisabledInNonEE?: boolean;
}
interface DataGroup {
@@ -84,6 +85,7 @@ const groupedData: DataGroup[] = [
isCloud: true,
isEnterprise: true,
isAdmin: true,
+ showDisabledInNonEE: true,
},
{ label: "Groups", icon: IconUsersGroup, path: "/settings/groups" },
{ label: "Spaces", icon: IconSpaces, path: "/settings/spaces" },
@@ -117,6 +119,12 @@ export default function SettingsSidebar() {
}, [location.pathname]);
const canShowItem = (item: DataItem) => {
+ // For items with showDisabledInCommunity, always show them but in disabled state
+ if (item.showDisabledInNonEE && item.isEnterprise) {
+ // Check admin permission regardless of license
+ return item.isAdmin ? isAdmin : true;
+ }
+
if (item.isCloud && item.isEnterprise) {
if (!(isCloud() || workspace?.hasLicenseKey)) return false;
return item.isAdmin ? isAdmin : true;
@@ -141,6 +149,13 @@ export default function SettingsSidebar() {
return true;
};
+ const isItemDisabled = (item: DataItem) => {
+ if (item.showDisabledInNonEE && item.isEnterprise) {
+ return !(isCloud() || workspace?.hasLicenseKey);
+ }
+ return false;
+ };
+
const menuItems = groupedData.map((group) => {
if (group.heading === "System" && (!isAdmin || isCloud())) {
return null;
@@ -185,23 +200,48 @@ export default function SettingsSidebar() {
break;
}
- return (
+ const isDisabled = isItemDisabled(item);
+ const linkElement = (
{
+ to={isDisabled ? "#" : item.path}
+ onClick={(e) => {
+ if (isDisabled) {
+ e.preventDefault();
+ return;
+ }
if (mobileSidebarOpened) {
toggleMobileSidebar();
}
}}
+ style={{
+ opacity: isDisabled ? 0.5 : 1,
+ cursor: isDisabled ? "not-allowed" : "pointer",
+ }}
>