mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-11 22:51:26 +00:00
fix: simplify openRouterSpecificProvider handling without complex state tracking
- Remove userModifiedFields state tracking and isUserAction parameter - Initialize openRouterSpecificProvider with default value when dropdown becomes visible - Use useEffect to handle initialization cleanly without modifying state during render - Addresses feedback about unnecessary complexity in the original implementation
This commit is contained in:
parent
28ea03f9f0
commit
e513a5c983
2 changed files with 21 additions and 20 deletions
|
|
@ -178,6 +178,23 @@ const ApiOptions = ({
|
|||
apiConfiguration.openRouterModelId in routerModels.openrouter,
|
||||
})
|
||||
|
||||
// Initialize openRouterSpecificProvider with default value when the dropdown becomes available
|
||||
useEffect(() => {
|
||||
if (
|
||||
selectedProvider === "openrouter" &&
|
||||
openRouterModelProviders &&
|
||||
Object.keys(openRouterModelProviders).length > 0 &&
|
||||
apiConfiguration?.openRouterSpecificProvider === undefined
|
||||
) {
|
||||
setApiConfigurationField("openRouterSpecificProvider", OPENROUTER_DEFAULT_PROVIDER_NAME)
|
||||
}
|
||||
}, [
|
||||
selectedProvider,
|
||||
openRouterModelProviders,
|
||||
apiConfiguration?.openRouterSpecificProvider,
|
||||
setApiConfigurationField,
|
||||
])
|
||||
|
||||
// Update `apiModelId` whenever `selectedModelId` changes.
|
||||
useEffect(() => {
|
||||
if (selectedModelId && apiConfiguration.apiModelId !== selectedModelId) {
|
||||
|
|
|
|||
|
|
@ -197,8 +197,6 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
setCachedState((prevCachedState) => ({ ...prevCachedState, ...extensionState }))
|
||||
prevApiConfigName.current = currentApiConfigName
|
||||
setChangeDetected(false)
|
||||
// Reset user modified fields when loading new configuration
|
||||
setUserModifiedFields(new Set())
|
||||
}, [currentApiConfigName, extensionState, isChangeDetected])
|
||||
|
||||
// Bust the cache when settings are imported.
|
||||
|
|
@ -206,8 +204,6 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
if (settingsImportedAt) {
|
||||
setCachedState((prevCachedState) => ({ ...prevCachedState, ...extensionState }))
|
||||
setChangeDetected(false)
|
||||
// Reset user modified fields when importing settings
|
||||
setUserModifiedFields(new Set())
|
||||
}
|
||||
}, [settingsImportedAt, extensionState])
|
||||
|
||||
|
|
@ -222,11 +218,8 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
})
|
||||
}, [])
|
||||
|
||||
// Track which fields have been explicitly set by user interaction
|
||||
const [userModifiedFields, setUserModifiedFields] = useState<Set<keyof ProviderSettings>>(new Set())
|
||||
|
||||
const setApiConfigurationField = useCallback(
|
||||
<K extends keyof ProviderSettings>(field: K, value: ProviderSettings[K], isUserAction: boolean = true) => {
|
||||
<K extends keyof ProviderSettings>(field: K, value: ProviderSettings[K]) => {
|
||||
setCachedState((prevState) => {
|
||||
if (prevState.apiConfiguration?.[field] === value) {
|
||||
return prevState
|
||||
|
|
@ -234,15 +227,9 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
|
||||
const previousValue = prevState.apiConfiguration?.[field]
|
||||
|
||||
// Track if this field has been modified by the user
|
||||
if (isUserAction) {
|
||||
setUserModifiedFields((prev) => new Set(prev).add(field))
|
||||
}
|
||||
|
||||
// Don't treat initial sync from undefined to a defined value as a user change
|
||||
// unless this field has been explicitly modified by the user before
|
||||
const isInitialSync =
|
||||
previousValue === undefined && value !== undefined && !userModifiedFields.has(field)
|
||||
// This prevents the dirty state when the component initializes and auto-syncs the model ID
|
||||
const isInitialSync = previousValue === undefined && value !== undefined
|
||||
|
||||
if (!isInitialSync) {
|
||||
setChangeDetected(true)
|
||||
|
|
@ -250,7 +237,7 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
return { ...prevState, apiConfiguration: { ...prevState.apiConfiguration, [field]: value } }
|
||||
})
|
||||
},
|
||||
[userModifiedFields],
|
||||
[],
|
||||
)
|
||||
|
||||
const setExperimentEnabled: SetExperimentEnabled = useCallback((id: ExperimentId, enabled: boolean) => {
|
||||
|
|
@ -359,8 +346,6 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
vscode.postMessage({ type: "telemetrySetting", text: telemetrySetting })
|
||||
vscode.postMessage({ type: "profileThresholds", values: profileThresholds })
|
||||
setChangeDetected(false)
|
||||
// Reset user modified fields after saving
|
||||
setUserModifiedFields(new Set())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -384,7 +369,6 @@ const SettingsView = forwardRef<SettingsViewRef, SettingsViewProps>(({ onDone, t
|
|||
// Discard changes: Reset state and flag
|
||||
setCachedState(extensionState) // Revert to original state
|
||||
setChangeDetected(false) // Reset change flag
|
||||
setUserModifiedFields(new Set()) // Reset user modified fields
|
||||
confirmDialogHandler.current?.() // Execute the pending action (e.g., tab switch)
|
||||
}
|
||||
// If confirm is false (Cancel), do nothing, dialog closes automatically
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue