Skip to content

Commit 78c4046

Browse files
committed
feat(settings): Integrate commit language control into AI commit messages experimental feature
The commit language setting has been refactored and moved from the general language settings section. It is now managed by a new dedicated component, . This component is conditionally rendered within the section, specifically when the experimental feature is active. This change ensures that the commit language option is logically grouped with the AI commit message functionality it directly supports, improving the clarity and organization of settings. Additionally, minor styling adjustments were applied to the component for improved layout.
1 parent e942e26 commit 78c4046

File tree

5 files changed

+90
-42
lines changed

5 files changed

+90
-42
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { HTMLAttributes } from "react"
2+
import type { Language } from "@roo-code/types"
3+
import { LANGUAGES } from "@roo/language"
4+
import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from "@src/components/ui"
5+
import { cn } from "@src/lib/utils"
6+
import { useAppTranslation } from "@/i18n/TranslationContext"
7+
import { SetCachedStateField } from "./types"
8+
9+
type CommitLanguageSettingsProps = HTMLAttributes<HTMLDivElement> & {
10+
commitLanguage: string
11+
setCachedStateField: SetCachedStateField<"commitLanguage">
12+
aiCommitMessagesEnabled?: boolean // Dodano prop
13+
}
14+
15+
export const CommitLanguageSettings = ({
16+
commitLanguage,
17+
setCachedStateField,
18+
aiCommitMessagesEnabled, // Dodano do destrukturyzacji
19+
className,
20+
...props
21+
}: CommitLanguageSettingsProps) => {
22+
const { t } = useAppTranslation()
23+
24+
return (
25+
<>
26+
{aiCommitMessagesEnabled && ( // Warunkowe renderowanie z wcięciem i paskiem
27+
<div
28+
className={cn("flex flex-col gap-3 pl-3 border-l-2 border-vscode-button-background", className)}
29+
{...props}>
30+
<div className="text-sm text-vscode-descriptionForeground">
31+
{t("settings:sections.commitLanguage")}
32+
</div>
33+
<Select
34+
value={commitLanguage}
35+
onValueChange={(value) => setCachedStateField("commitLanguage", value as Language)}>
36+
<SelectTrigger className="w-full">
37+
<SelectValue placeholder={t("settings:common.select")} />
38+
</SelectTrigger>
39+
<SelectContent>
40+
<SelectGroup>
41+
{Object.entries(LANGUAGES).map(([code, name]) => (
42+
<SelectItem key={code} value={code}>
43+
{name}
44+
<span className="text-muted-foreground">({code})</span>
45+
</SelectItem>
46+
))}
47+
</SelectGroup>
48+
</SelectContent>
49+
</Select>
50+
</div>
51+
)}
52+
</>
53+
)
54+
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ export const ExperimentalFeature = ({ enabled, onChange, experimentKey }: Experi
1616
const descriptionKey = experimentKey ? `settings:experimental.${experimentKey}.description` : ""
1717

1818
return (
19-
<div>
19+
<div className="flex flex-col gap-2">
20+
{" "}
21+
{/* Dodano flex-col i gap-2 */}
2022
<div className="flex items-center gap-2">
2123
<VSCodeCheckbox checked={enabled} onChange={(e: any) => onChange(e.target.checked)}>
2224
<span className="font-medium">{t(nameKey)}</span>

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

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { HTMLAttributes } from "react"
22
import { FlaskConical } from "lucide-react"
33

4-
import type { Experiments, CodebaseIndexConfig, CodebaseIndexModels, ProviderSettings } from "@roo-code/types"
4+
import type { Experiments, CodebaseIndexConfig, CodebaseIndexModels, ProviderSettings, Language } from "@roo-code/types"
55

66
import { EXPERIMENT_IDS, experimentConfigsMap } from "@roo/experiments"
77

@@ -14,17 +14,19 @@ import { SectionHeader } from "./SectionHeader"
1414
import { Section } from "./Section"
1515
import { ExperimentalFeature } from "./ExperimentalFeature"
1616
import { CodeIndexSettings } from "./CodeIndexSettings"
17+
import { CommitLanguageSettings } from "./CommitLanguageSettings"
1718

1819
type ExperimentalSettingsProps = HTMLAttributes<HTMLDivElement> & {
1920
experiments: Experiments
2021
setExperimentEnabled: SetExperimentEnabled
21-
setCachedStateField: SetCachedStateField<"codebaseIndexConfig">
22+
setCachedStateField: SetCachedStateField<"codebaseIndexConfig" | "commitLanguage"> // Combined the types
2223
// CodeIndexSettings props
2324
codebaseIndexModels: CodebaseIndexModels | undefined
2425
codebaseIndexConfig: CodebaseIndexConfig | undefined
2526
apiConfiguration: ProviderSettings
2627
setApiConfigurationField: <K extends keyof ProviderSettings>(field: K, value: ProviderSettings[K]) => void
2728
areSettingsCommitted: boolean
29+
commitLanguage: Language
2830
}
2931

3032
export const ExperimentalSettings = ({
@@ -36,6 +38,7 @@ export const ExperimentalSettings = ({
3638
apiConfiguration,
3739
setApiConfigurationField,
3840
areSettingsCommitted,
41+
commitLanguage,
3942
className,
4043
...props
4144
}: ExperimentalSettingsProps) => {
@@ -65,6 +68,27 @@ export const ExperimentalSettings = ({
6568
}
6669
/>
6770
)
71+
} else if (config[0] === "AI_COMMIT_MESSAGES") {
72+
// Dodano warunek dla AI_COMMIT_MESSAGES
73+
return (
74+
<>
75+
<ExperimentalFeature
76+
key={config[0]}
77+
experimentKey={config[0]}
78+
enabled={experiments[EXPERIMENT_IDS.AI_COMMIT_MESSAGES] ?? false}
79+
onChange={(enabled) =>
80+
setExperimentEnabled(EXPERIMENT_IDS.AI_COMMIT_MESSAGES, enabled)
81+
}
82+
/>
83+
<CommitLanguageSettings
84+
commitLanguage={commitLanguage}
85+
setCachedStateField={
86+
setCachedStateField as SetCachedStateField<"commitLanguage">
87+
}
88+
aiCommitMessagesEnabled={experiments?.aiCommitMessages} // Przekazujemy prop
89+
/>
90+
</>
91+
)
6892
}
6993
return (
7094
<ExperimentalFeature

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

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,10 @@ import { Section } from "./Section"
1515

1616
type LanguageSettingsProps = HTMLAttributes<HTMLDivElement> & {
1717
language: string
18-
commitLanguage: string
19-
setCachedStateField: SetCachedStateField<"language" | "commitLanguage">
20-
aiCommitMessagesEnabled?: boolean
18+
setCachedStateField: SetCachedStateField<"language">
2119
}
2220

23-
export const LanguageSettings = ({
24-
language,
25-
commitLanguage,
26-
setCachedStateField,
27-
aiCommitMessagesEnabled,
28-
className,
29-
...props
30-
}: LanguageSettingsProps) => {
21+
export const LanguageSettings = ({ language, setCachedStateField, className, ...props }: LanguageSettingsProps) => {
3122
const { t } = useAppTranslation()
3223

3324
return (
@@ -56,30 +47,6 @@ export const LanguageSettings = ({
5647
</SelectGroup>
5748
</SelectContent>
5849
</Select>
59-
{aiCommitMessagesEnabled && (
60-
<>
61-
<div className="text-sm text-vscode-descriptionForeground">
62-
{t("settings:sections.commitLanguage")}
63-
</div>
64-
<Select
65-
value={commitLanguage}
66-
onValueChange={(value) => setCachedStateField("commitLanguage", value as Language)}>
67-
<SelectTrigger className="w-full">
68-
<SelectValue placeholder={t("settings:common.select")} />
69-
</SelectTrigger>
70-
<SelectContent>
71-
<SelectGroup>
72-
{Object.entries(LANGUAGES).map(([code, name]) => (
73-
<SelectItem key={code} value={code}>
74-
{name}
75-
<span className="text-muted-foreground">({code})</span>
76-
</SelectItem>
77-
))}
78-
</SelectGroup>
79-
</SelectContent>
80-
</Select>
81-
</>
82-
)}
8350
</Section>
8451
</div>
8552
)

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -685,22 +685,23 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
685685
<ExperimentalSettings
686686
setExperimentEnabled={setExperimentEnabled}
687687
experiments={experiments}
688-
setCachedStateField={setCachedStateField}
688+
setCachedStateField={
689+
setCachedStateField as SetCachedStateField<"codebaseIndexConfig" | "commitLanguage">
690+
}
689691
codebaseIndexModels={codebaseIndexModels}
690692
codebaseIndexConfig={codebaseIndexConfig}
691693
apiConfiguration={apiConfiguration}
692694
setApiConfigurationField={setApiConfigurationField}
693695
areSettingsCommitted={!isChangeDetected}
696+
commitLanguage={commitLanguage || "en"}
694697
/>
695698
)}
696699

697700
{/* Language Section */}
698701
{activeTab === "language" && (
699702
<LanguageSettings
700703
language={language || "en"}
701-
commitLanguage={commitLanguage || "en"}
702-
setCachedStateField={setCachedStateField}
703-
aiCommitMessagesEnabled={experiments?.aiCommitMessages}
704+
setCachedStateField={setCachedStateField as SetCachedStateField<"language">}
704705
/>
705706
)}
706707

0 commit comments

Comments
 (0)