From 2ab0b988e4593d56e822738d4365bd27b71e515d Mon Sep 17 00:00:00 2001 From: msukkari Date: Sun, 27 Jul 2025 22:12:02 -0700 Subject: [PATCH] limit to one search context in demo --- .../homepage/askSourcebotDemoCards.tsx | 133 ++++++++++-------- .../components/chatBox/contextSelector.tsx | 33 +++-- 2 files changed, 93 insertions(+), 73 deletions(-) diff --git a/packages/web/src/app/[domain]/components/homepage/askSourcebotDemoCards.tsx b/packages/web/src/app/[domain]/components/homepage/askSourcebotDemoCards.tsx index 532c9e06..fc8ef092 100644 --- a/packages/web/src/app/[domain]/components/homepage/askSourcebotDemoCards.tsx +++ b/packages/web/src/app/[domain]/components/homepage/askSourcebotDemoCards.tsx @@ -33,11 +33,11 @@ export const AskSourcebotDemoCards = ({ const getContextIcon = (context: DemoSearchContext, size: number = 20) => { const sizeClass = size === 12 ? "h-3 w-3" : "h-5 w-5"; - + if (context.type === "set") { return ; } - + if (context.codeHostType) { const codeHostIcon = getCodeHostIcon(context.codeHostType); if (codeHostIcon) { @@ -52,7 +52,7 @@ export const AskSourcebotDemoCards = ({ ); } } - + return ; } @@ -63,40 +63,48 @@ export const AskSourcebotDemoCards = ({ return; } - if (context.type === "set") { - const searchContext = searchContexts.find((item) => item.name === context.value); - if (!searchContext) { - console.error(`Search context ${context.value} not found on handleContextClick`); - return; - } - - const isSelected = selectedItems.some( - (selected) => selected.type === 'context' && selected.value === context.value - ); - const newSelectedItems = isSelected - ? selectedItems.filter( - (selected) => !(selected.type === 'context' && selected.value === context.value) - ) - : [...selectedItems, { type: 'context', value: context.value, name: context.displayName, repoCount: searchContext.repoNames.length } as SearchContextItem]; + const isDemoMode = process.env.NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT === "demo"; + const isSelected = selectedItems.some((item) => item.value === context.value); + if (isSelected) { + setSelectedItems(selectedItems.filter((item) => item.value !== context.value)); + return; + } - setSelectedItems(newSelectedItems); + const getNewSelectedItem = (): ContextItem | null => { + if (context.type === "set") { + const searchContext = searchContexts.find((item) => item.name === context.value); + if (!searchContext) { + console.error(`Search context ${context.value} not found on handleContextClick`); + return null; + } + + return { + type: 'context', + value: context.value, + name: context.displayName, + repoCount: searchContext.repoNames.length + } as SearchContextItem; + } else { + const repo = repos.find((repo) => repo.repoName === context.value); + if (!repo) { + console.error(`Repo ${context.value} not found on handleContextClick`); + return null; + } + + return { + type: 'repo', + value: context.value, + name: context.displayName, + codeHostType: repo.codeHostType + } as RepoContextItem; + } + } + + const newSelectedItem = getNewSelectedItem(); + if (newSelectedItem) { + setSelectedItems(isDemoMode ? [newSelectedItem] : [...selectedItems, newSelectedItem]); } else { - const repo = repos.find((repo) => repo.repoName === context.value); - if (!repo) { - console.error(`Repo ${context.value} not found on handleContextClick`); - return; - } - - const isSelected = selectedItems.some( - (selected) => selected.type === 'repo' && selected.value === context.value - ); - const newSelectedItems = isSelected - ? selectedItems.filter( - (selected) => !(selected.type === 'repo' && selected.value === context.value) - ) - : [...selectedItems, { type: 'repo', value: context.value, name: context.displayName, codeHostType: repo.codeHostType } as RepoContextItem]; - - setSelectedItems(newSelectedItems); + console.error(`No new selected item found on handleContextClick`); } } @@ -107,7 +115,7 @@ export const AskSourcebotDemoCards = ({
-

Search Context

+

Search Contexts

Select the context you want to ask questions about

@@ -177,33 +185,34 @@ export const AskSourcebotDemoCards = ({ {demoExamples.searchExamples.map((example) => { const searchContexts = demoExamples.searchContexts.filter((context) => example.searchContext.includes(context.id)) return ( - handleExampleClick(example)} - > - -
-
- {searchContexts.map((context) => ( - - {getContextIcon(context, 12)} - {context.displayName} - - ))} + handleExampleClick(example)} + > + +
+
+ {searchContexts.map((context) => ( + + {getContextIcon(context, 12)} + {context.displayName} + + ))} +
+
+

+ {example.title} +

+

+ {example.description} +

+
-
-

- {example.title} -

-

- {example.description} -

-
-
- - - )})} + + + ) + })}
diff --git a/packages/web/src/features/chat/components/chatBox/contextSelector.tsx b/packages/web/src/features/chat/components/chatBox/contextSelector.tsx index 3bec39c5..103b0195 100644 --- a/packages/web/src/features/chat/components/chatBox/contextSelector.tsx +++ b/packages/web/src/features/chat/components/chatBox/contextSelector.tsx @@ -96,12 +96,23 @@ export const ContextSelector = React.forwardRef< const isSelected = selectedItems.some( (selected) => selected.type === item.type && selected.value === item.value ); - - const newSelectedItems = isSelected - ? selectedItems.filter( + + const isDemoMode = process.env.NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT === "demo"; + + let newSelectedItems: ContextItem[]; + if (isSelected) { + newSelectedItems = selectedItems.filter( (selected) => !(selected.type === item.type && selected.value === item.value) - ) - : [...selectedItems, item]; + ); + } else { + // Limit selected context to 1 in demo mode + if (isDemoMode) { + newSelectedItems = [item]; + } else { + newSelectedItems = [...selectedItems, item]; + } + } + onSelectedItemsChange(newSelectedItems); }; @@ -120,14 +131,14 @@ export const ContextSelector = React.forwardRef< name: context.name, repoCount: context.repoNames.length })); - + const repoItems: ContextItem[] = repos.map(repo => ({ type: 'repo' as const, value: repo.repoName, name: repo.repoDisplayName || repo.repoName.split('/').pop() || repo.repoName, codeHostType: repo.codeHostType, })); - + return [...contextItems, ...repoItems]; }, [repos, searchContexts]); @@ -225,8 +236,8 @@ export const ContextSelector = React.forwardRef< (() => { const codeHostIcon = item.codeHostType ? getCodeHostIcon(item.codeHostType) : null; return codeHostIcon ? ( - {`${item.codeHostType} {item.type === 'context' && ( - {item.repoCount} repo{item.repoCount === 1 ? '' : 's'}