diff --git a/src/vs/platform/void/common/voidConfigService.ts b/src/vs/platform/void/common/voidConfigService.ts index cec77891..4b065f70 100644 --- a/src/vs/platform/void/common/voidConfigService.ts +++ b/src/vs/platform/void/common/voidConfigService.ts @@ -36,7 +36,6 @@ export interface IVoidConfigStateService { readonly _serviceBrand: undefined; readonly state: VoidConfigState; onDidChangeState: Event; - onDidGetInitState: Event; setSettingOfProvider: SetSettingOfProviderFn; setModelSelectionOfFeature: SetModelSelectionOfFeature; } @@ -58,9 +57,6 @@ class VoidConfigService extends Disposable implements IVoidConfigStateService { private readonly _onDidChangeState = new Emitter(); readonly onDidChangeState: Event = this._onDidChangeState.event; // this is primarily for use in react, so react can listen + update on state changes - private readonly _onDidGetInitState = new Emitter(); - readonly onDidGetInitState: Event = this._onDidGetInitState.event; - state: VoidConfigState; constructor( @@ -77,7 +73,6 @@ class VoidConfigService extends Disposable implements IVoidConfigStateService { // read and update the actual state immediately this._readVoidConfigState().then(voidConfigState => { this._setState(voidConfigState) - this._onDidGetInitState.fire() }) } diff --git a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/ModelSelectionSettings.tsx b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/ModelSelectionSettings.tsx index 0eb34136..48f7be2c 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/ModelSelectionSettings.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/ModelSelectionSettings.tsx @@ -36,6 +36,8 @@ export const ModelSelectionOfFeature = ({ featureName }: { featureName: FeatureN } } + let weChangedText = false + return <>

{featureName}

{ @@ -43,6 +45,8 @@ export const ModelSelectionOfFeature = ({ featureName }: { featureName: FeatureN options={modelOptions} onChangeSelection={useCallback((newVal: [string, string]) => { if (isDummy) return // don't set state to the dummy value + if (weChangedText) return + voidConfigService.setModelSelectionOfFeature(featureName, { providerName: newVal[0] as ProviderName, modelName: newVal[1] }) }, [voidConfigService, featureName, isDummy])} // we are responsible for setting the initial state here @@ -50,11 +54,14 @@ export const ModelSelectionOfFeature = ({ featureName }: { featureName: FeatureN const updateInstance = () => { const settingsAtProvider = voidConfigService.state.modelSelectionOfFeature[featureName] const index = modelOptions.findIndex(v => v.value[0] === settingsAtProvider?.providerName && v.value[1] === settingsAtProvider?.modelName) - if (index !== -1) + if (index !== -1) { + weChangedText = true instance.select(index) + weChangedText = false + } } updateInstance() - const disposable = voidConfigService.onDidGetInitState(updateInstance) + const disposable = voidConfigService.onDidChangeState(updateInstance) return [disposable] }, [voidConfigService, modelOptions, featureName])} />} diff --git a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/VoidProviderSettings.tsx b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/VoidProviderSettings.tsx index 7296490a..57fcf4e8 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/VoidProviderSettings.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/VoidProviderSettings.tsx @@ -17,11 +17,14 @@ const Setting = ({ providerName, settingName }: { providerName: ProviderName, se const voidConfigService = useService('configStateService') + let weChangedText = false + return <> { + if (weChangedText) return voidConfigService.setSettingOfProvider(providerName, settingName, newVal) // if we just disabeld this provider, we should unselect all models that use it @@ -39,10 +42,12 @@ const Setting = ({ providerName, settingName }: { providerName: ProviderName, se const settingsAtProvider = voidConfigService.state.settingsOfProvider[providerName]; // @ts-ignore const stateVal = settingsAtProvider[settingName] + weChangedText = true instance.value = stateVal + weChangedText = false } updateInstance() - const disposable = voidConfigService.onDidGetInitState(updateInstance) + const disposable = voidConfigService.onDidChangeState(updateInstance) return [disposable] }, [voidConfigService, providerName, settingName])} multiline={false}