@@ -5,12 +5,14 @@ import { Button } from "@/components/ui/button"
55import { vscode } from "@/utils/vscode"
66import { cn } from "@/lib/utils"
77import { useExtensionState } from "@/context/ExtensionStateContext"
8- import { Select , SelectContent , SelectItem , SelectTrigger , SelectValue } from "@/components/ui"
8+ import { Select , SelectContent , SelectItem , SelectTrigger , SelectValue , StandardTooltip } from "@/components/ui"
99
1010import { SectionHeader } from "./SectionHeader"
1111import { Section } from "./Section"
1212
13- type RulesSettingsProps = HTMLAttributes < HTMLDivElement >
13+ type RulesSettingsProps = HTMLAttributes < HTMLDivElement > & {
14+ hasUnsavedChanges ?: boolean
15+ }
1416
1517interface RuleType {
1618 id : string
@@ -20,7 +22,7 @@ interface RuleType {
2022 exists ?: boolean
2123}
2224
23- export const RulesSettings = ( { className, ...props } : RulesSettingsProps ) => {
25+ export const RulesSettings = ( { className, hasUnsavedChanges , ...props } : RulesSettingsProps ) => {
2426 const { t } = useAppTranslation ( )
2527 const [ isGenerating , setIsGenerating ] = useState ( false )
2628 const [ generationStatus , setGenerationStatus ] = useState < {
@@ -287,25 +289,33 @@ export const RulesSettings = ({ className, ...props }: RulesSettingsProps) => {
287289 </ SelectContent >
288290 </ Select >
289291
290- < Button
291- onClick = { handleGenerateRules }
292- disabled = { isGenerating || ! selectedApiConfig }
293- variant = "default"
294- size = "default"
295- className = "w-full"
296- title = { t ( "settings:rules.generateButtonTooltip" ) } >
297- { isGenerating ? (
298- < >
299- < Loader2 className = "mr-2 h-4 w-4 animate-spin" />
300- { t ( "settings:rules.generating" ) }
301- </ >
302- ) : (
303- < >
304- < FileText className = "mr-2 h-4 w-4" />
305- { t ( "settings:rules.generateButton" ) }
306- </ >
307- ) }
308- </ Button >
292+ < StandardTooltip
293+ content = {
294+ hasUnsavedChanges
295+ ? t ( "settings:rules.unsavedChangesError" )
296+ : t ( "settings:rules.generateButtonTooltip" )
297+ } >
298+ < span className = "w-full" >
299+ < Button
300+ onClick = { handleGenerateRules }
301+ disabled = { isGenerating || ! selectedApiConfig || hasUnsavedChanges }
302+ variant = "default"
303+ size = "default"
304+ className = "w-full" >
305+ { isGenerating ? (
306+ < >
307+ < Loader2 className = "mr-2 h-4 w-4 animate-spin" />
308+ { t ( "settings:rules.generating" ) }
309+ </ >
310+ ) : (
311+ < >
312+ < FileText className = "mr-2 h-4 w-4" />
313+ { t ( "settings:rules.generateButton" ) }
314+ </ >
315+ ) }
316+ </ Button >
317+ </ span >
318+ </ StandardTooltip >
309319 </ div >
310320
311321 { isGenerating && (
@@ -316,8 +326,7 @@ export const RulesSettings = ({ className, ...props }: RulesSettingsProps) => {
316326
317327 { generationStatus . type === "success" && (
318328 < div className = "text-vscode-testing-iconPassed text-sm" >
319- < p > { t ( "settings:rules.taskCreated" ) } </ p >
320- < p className = "text-vscode-descriptionForeground" > { generationStatus . message } </ p >
329+ < p > { generationStatus . message || t ( "settings:rules.taskCreated" ) } </ p >
321330 </ div >
322331 ) }
323332
0 commit comments