From 53a357315b7a6c5a84082777ef7265100b18e51a Mon Sep 17 00:00:00 2001 From: Nithishvb Date: Mon, 13 Jul 2026 09:16:28 -0700 Subject: [PATCH] fix: disable non-current projects in switcher when NAO_DEFAULT_PROJECT_PATH is set --- apps/backend/src/trpc/system.routes.ts | 1 + .../src/components/project-selector.tsx | 27 ++++++++++++------- .../src/components/sidebar-settings-nav.tsx | 10 +++++++ apps/frontend/src/components/sidebar.tsx | 2 ++ 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/apps/backend/src/trpc/system.routes.ts b/apps/backend/src/trpc/system.routes.ts index e66801bab..e5669bcca 100644 --- a/apps/backend/src/trpc/system.routes.ts +++ b/apps/backend/src/trpc/system.routes.ts @@ -10,6 +10,7 @@ export const systemRoutes = { enableUserSignup: await isUserSignupAvailable(), betaAutomationsEnabled: env.BETA_AUTOMATIONS_ENABLED, betaContextRecommendationsEnabled: env.BETA_CONTEXT_RECOMMENDATIONS_ENABLED, + hasDefaultProjectPath: Boolean(env.NAO_DEFAULT_PROJECT_PATH), })), version: adminProtectedProcedure.query(() => ({ diff --git a/apps/frontend/src/components/project-selector.tsx b/apps/frontend/src/components/project-selector.tsx index 6c061ce35..0eaa9525f 100644 --- a/apps/frontend/src/components/project-selector.tsx +++ b/apps/frontend/src/components/project-selector.tsx @@ -22,6 +22,7 @@ export function ProjectSelector({ projects, currentProjectId, onChange, + disabledProjectIds, className, triggerClassName, triggerVariant, @@ -32,6 +33,7 @@ export function ProjectSelector({ projects: ProjectOption[]; currentProjectId: string; onChange: (projectId: string) => void; + disabledProjectIds?: string[]; className?: string; triggerClassName?: string; triggerVariant?: 'default' | 'ghost'; @@ -50,16 +52,23 @@ export function ProjectSelector({ Projects - {projects.map((project) => ( - - - {project.name} - - {USER_ROLE_LABELS[project.userRole]} + {projects.map((project) => { + const isDisabled = disabledProjectIds?.includes(project.id); + return ( + + + {project.name} + + {USER_ROLE_LABELS[project.userRole]} + - - - ))} + + ); + })} diff --git a/apps/frontend/src/components/sidebar-settings-nav.tsx b/apps/frontend/src/components/sidebar-settings-nav.tsx index 04f155460..703948551 100644 --- a/apps/frontend/src/components/sidebar-settings-nav.tsx +++ b/apps/frontend/src/components/sidebar-settings-nav.tsx @@ -130,6 +130,7 @@ interface SidebarSettingsNavProps { hasLicense: boolean; projects: ProjectOption[]; currentProjectId?: string; + isProjectPinned?: boolean; onProjectChange: (projectId: string) => void; } @@ -153,6 +154,7 @@ export function SidebarSettingsNav({ hasLicense, projects, currentProjectId, + isProjectPinned, onProjectChange, }: SidebarSettingsNavProps) { const navigate = useNavigate(); @@ -378,6 +380,7 @@ export function SidebarSettingsNav({ )} @@ -393,12 +396,18 @@ export function SidebarSettingsNav({ function ProjectSwitcherSubItem({ projects, currentProjectId, + isProjectPinned, onChange, }: { projects: ProjectOption[]; currentProjectId: string; + isProjectPinned?: boolean; onChange: (projectId: string) => void; }) { + const disabledProjectIds = isProjectPinned + ? projects.filter((p) => p.id !== currentProjectId).map((p) => p.id) + : undefined; + return (
Switch project
@@ -406,6 +415,7 @@ function ProjectSwitcherSubItem({ projects={projects} currentProjectId={currentProjectId} onChange={onChange} + disabledProjectIds={disabledProjectIds} triggerVariant='ghost' triggerIcon={} triggerClassName={cn( diff --git a/apps/frontend/src/components/sidebar.tsx b/apps/frontend/src/components/sidebar.tsx index 73d1cef61..56d442b52 100644 --- a/apps/frontend/src/components/sidebar.tsx +++ b/apps/frontend/src/components/sidebar.tsx @@ -47,6 +47,7 @@ export function Sidebar() { const branding = useBranding(); const { isAdmin, isContextAdmin, isViewer } = usePermissions(); const isCloud = config.data?.naoMode === 'cloud'; + const isProjectPinned = !isCloud && config.data?.hasDefaultProjectPath === true; const betaAutomationsEnabled = config.data?.betaAutomationsEnabled === true; const { groupBy, filters, setGroupBy, toggleFilter } = useChatViewPreferences(); const hasLicense = license.data?.tokenProvided === true; @@ -246,6 +247,7 @@ export function Sidebar() { hasLicense={hasLicense} projects={projects.data ?? []} currentProjectId={project.data?.id} + isProjectPinned={isProjectPinned} onProjectChange={handleProjectChange} /> ) : (