Skip to content

Commit 904fb55

Browse files
committed
feat: move codebase indexing toggle to General Settings
- Create new GeneralSettings component with codebase indexing enable/disable toggle - Add "General" as first section in SettingsView with SquareMousePointer icon - Remove enable/disable checkbox from CodeIndexPopover to focus on configuration - Add conditional rendering to IndexingStatusBadge to hide when indexing disabled - Add translation keys for General Settings section - Fix React hooks rules by moving conditional return after all hooks Fixes #5680
1 parent a163053 commit 904fb55

File tree

5 files changed

+68
-15
lines changed

5 files changed

+68
-15
lines changed

webview-ui/src/components/chat/CodeIndexPopover.tsx

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import {
77
VSCodeDropdown,
88
VSCodeOption,
99
VSCodeLink,
10-
VSCodeCheckbox,
1110
} from "@vscode/webview-ui-toolkit/react"
1211
import * as ProgressPrimitive from "@radix-ui/react-progress"
1312
import { vscode } from "@src/utils/vscode"
@@ -513,20 +512,6 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
513512
</div>
514513

515514
<div className="p-4">
516-
{/* Enable/Disable Toggle */}
517-
<div className="mb-4">
518-
<div className="flex items-center gap-2">
519-
<VSCodeCheckbox
520-
checked={currentSettings.codebaseIndexEnabled}
521-
onChange={(e: any) => updateSetting("codebaseIndexEnabled", e.target.checked)}>
522-
<span className="font-medium">{t("settings:codeIndex.enableLabel")}</span>
523-
</VSCodeCheckbox>
524-
<StandardTooltip content={t("settings:codeIndex.enableDescription")}>
525-
<span className="codicon codicon-info text-xs text-vscode-descriptionForeground cursor-help" />
526-
</StandardTooltip>
527-
</div>
528-
</div>
529-
530515
{/* Status Section */}
531516
<div className="space-y-2">
532517
<h4 className="text-sm font-medium">{t("settings:codeIndex.statusTitle")}</h4>

webview-ui/src/components/chat/IndexingStatusBadge.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { cn } from "@src/lib/utils"
44
import { vscode } from "@src/utils/vscode"
55
import { useAppTranslation } from "@/i18n/TranslationContext"
66
import { useTooltip } from "@/hooks/useTooltip"
7+
import { useExtensionState } from "@src/context/ExtensionStateContext"
78
import { CodeIndexPopover } from "./CodeIndexPopover"
89
import type { IndexingStatus, IndexingStatusUpdateMessage } from "@roo/ExtensionMessage"
910

@@ -15,6 +16,7 @@ export const IndexingStatusBadge: React.FC<IndexingStatusBadgeProps> = ({ classN
1516
const { t } = useAppTranslation()
1617
const { showTooltip, handleMouseEnter, handleMouseLeave, cleanup } = useTooltip({ delay: 300 })
1718
const [isHovered, setIsHovered] = useState(false)
19+
const { codebaseIndexConfig } = useExtensionState()
1820

1921
const [indexingStatus, setIndexingStatus] = useState<IndexingStatus>({
2022
systemStatus: "Standby",
@@ -52,6 +54,11 @@ export const IndexingStatusBadge: React.FC<IndexingStatusBadgeProps> = ({ classN
5254
[indexingStatus.processedItems, indexingStatus.totalItems],
5355
)
5456

57+
// Don't render if codebase indexing is disabled
58+
if (!codebaseIndexConfig?.codebaseIndexEnabled) {
59+
return null
60+
}
61+
5562
// Get tooltip text with internationalization
5663
const getTooltipText = () => {
5764
switch (indexingStatus.systemStatus) {
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import React from "react"
2+
import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"
3+
import { useExtensionState } from "@/context/ExtensionStateContext"
4+
import { useAppTranslation } from "@/i18n/TranslationContext"
5+
import { vscode } from "@/utils/vscode"
6+
7+
export const GeneralSettings: React.FC = () => {
8+
const { t } = useAppTranslation()
9+
const { codebaseIndexConfig } = useExtensionState()
10+
11+
const updateSetting = (key: string, value: any) => {
12+
vscode.postMessage({
13+
type: "saveCodeIndexSettingsAtomic",
14+
codeIndexSettings: {
15+
codebaseIndexEnabled: codebaseIndexConfig?.codebaseIndexEnabled ?? true,
16+
codebaseIndexQdrantUrl: codebaseIndexConfig?.codebaseIndexQdrantUrl ?? "",
17+
codebaseIndexEmbedderProvider: codebaseIndexConfig?.codebaseIndexEmbedderProvider ?? "openai",
18+
codebaseIndexEmbedderBaseUrl: codebaseIndexConfig?.codebaseIndexEmbedderBaseUrl,
19+
codebaseIndexEmbedderModelId: codebaseIndexConfig?.codebaseIndexEmbedderModelId ?? "",
20+
codebaseIndexEmbedderModelDimension: codebaseIndexConfig?.codebaseIndexEmbedderModelDimension,
21+
codebaseIndexSearchMaxResults: codebaseIndexConfig?.codebaseIndexSearchMaxResults,
22+
codebaseIndexSearchMinScore: codebaseIndexConfig?.codebaseIndexSearchMinScore,
23+
codebaseIndexOpenAiCompatibleBaseUrl: codebaseIndexConfig?.codebaseIndexOpenAiCompatibleBaseUrl,
24+
...codebaseIndexConfig,
25+
[key]: value,
26+
},
27+
})
28+
}
29+
30+
return (
31+
<div className="space-y-4">
32+
<div className="space-y-2">
33+
<h3 className="text-lg font-medium text-vscode-foreground">
34+
{t("settings:general.codebaseIndexing.title")}
35+
</h3>
36+
<p className="text-sm text-vscode-descriptionForeground">
37+
{t("settings:general.codebaseIndexing.description")}
38+
</p>
39+
<VSCodeCheckbox
40+
checked={codebaseIndexConfig?.codebaseIndexEnabled ?? true}
41+
onChange={(e: any) => updateSetting("codebaseIndexEnabled", e.target.checked)}>
42+
{t("settings:general.codebaseIndexing.enabled")}
43+
</VSCodeCheckbox>
44+
</div>
45+
</div>
46+
)
47+
}

webview-ui/src/components/settings/SettingsView.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import { SetCachedStateField, SetExperimentEnabled } from "./types"
5454
import { SectionHeader } from "./SectionHeader"
5555
import ApiConfigManager from "./ApiConfigManager"
5656
import ApiOptions from "./ApiOptions"
57+
import { GeneralSettings } from "./GeneralSettings"
5758
import { AutoApproveSettings } from "./AutoApproveSettings"
5859
import { BrowserSettings } from "./BrowserSettings"
5960
import { CheckpointSettings } from "./CheckpointSettings"
@@ -79,6 +80,7 @@ export interface SettingsViewRef {
7980
}
8081

8182
const sectionNames = [
83+
"general",
8284
"providers",
8385
"autoApprove",
8486
"browser",
@@ -392,6 +394,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
392394

393395
const sections: { id: SectionName; icon: LucideIcon }[] = useMemo(
394396
() => [
397+
{ id: "general", icon: SquareMousePointer },
395398
{ id: "providers", icon: Webhook },
396399
{ id: "autoApprove", icon: CheckCheck },
397400
{ id: "browser", icon: SquareMousePointer },
@@ -539,6 +542,9 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
539542

540543
{/* Content area */}
541544
<TabContent className="p-0 flex-1 overflow-auto">
545+
{/* General Section */}
546+
{activeTab === "general" && <GeneralSettings />}
547+
542548
{/* Providers Section */}
543549
{activeTab === "providers" && (
544550
<div>

webview-ui/src/i18n/locales/en/settings.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"discardButton": "Discard changes"
2222
},
2323
"sections": {
24+
"general": "General",
2425
"providers": "Providers",
2526
"autoApprove": "Auto-Approve",
2627
"browser": "Browser",
@@ -33,6 +34,13 @@
3334
"language": "Language",
3435
"about": "About Roo Code"
3536
},
37+
"general": {
38+
"description": "Configure general application settings and features.",
39+
"codebaseIndexing": {
40+
"title": "Codebase Indexing",
41+
"description": "Enable semantic search of your project codebase for improved context understanding and code assistance."
42+
}
43+
},
3644
"prompts": {
3745
"description": "Configure support prompts that are used for quick actions like enhancing prompts, explaining code, and fixing issues. These prompts help Roo provide better assistance for common development tasks."
3846
},

0 commit comments

Comments
 (0)