diff --git a/src/features/PluginSettings/index.tsx b/src/features/PluginSettings/index.tsx index 04691f16423..6986f2ddb5c 100644 --- a/src/features/PluginSettings/index.tsx +++ b/src/features/PluginSettings/index.tsx @@ -74,7 +74,7 @@ const PluginSettingsConfig = memo(({ schema, id }) => maximum={item.maximum} minimum={item.minimum} onChange={(value) => { - updatePluginSettings(id, { ...pluginSetting, [item.name]: value }); + updatePluginSettings(id, { [item.name]: value }); }} type={item.type as any} /> diff --git a/src/store/tool/slices/plugin/action.ts b/src/store/tool/slices/plugin/action.ts index 217bb38c798..289e21f89b0 100644 --- a/src/store/tool/slices/plugin/action.ts +++ b/src/store/tool/slices/plugin/action.ts @@ -3,6 +3,7 @@ import useSWR, { SWRResponse } from 'swr'; import { StateCreator } from 'zustand/vanilla'; import { pluginService } from '@/services/plugin'; +import { merge } from '@/utils/merge'; import { ToolStore } from '../../store'; import { pluginStoreSelectors } from '../store/selectors'; @@ -44,7 +45,11 @@ export const createPluginSlice: StateCreator< await get().refreshPlugins(); }, updatePluginSettings: async (id, settings) => { - await pluginService.updatePluginSettings(id, settings); + const previousSettings = pluginSelectors.getPluginSettingsById(id)(get()); + + const nextSettings = merge(previousSettings, settings); + await pluginService.updatePluginSettings(id, nextSettings); + await get().refreshPlugins(); }, useCheckPluginsIsInstalled: (plugins) => useSWR(plugins, get().checkPluginsIsInstalled),