fix(ui): preserve empty plugin allowlists

Signed-off-by: samzong <samzong.lu@gmail.com>
This commit is contained in:
samzong
2026-05-06 15:44:19 +08:00
committed by Peter Steinberger
parent adafd4f5be
commit 3e87e55604
2 changed files with 46 additions and 0 deletions

View File

@@ -324,6 +324,48 @@ describe("updateConfigFormValue", () => {
});
expect(state.configFormDirty).toBe(true);
});
it("preserves empty plugin allowlists when enabling a plugin", () => {
const state = createState();
applyConfigSnapshot(state, {
hash: "hash-plugins",
config: {
plugins: {
allow: [],
entries: {
deepseek: { enabled: false },
},
},
},
valid: true,
issues: [],
raw: "{}",
});
updateConfigFormValue(state, ["plugins", "entries", "deepseek", "enabled"], true);
expect(state.configForm).toEqual({
plugins: {
allow: [],
entries: {
deepseek: { enabled: true },
},
},
});
expect(state.configFormDirty).toBe(true);
updateConfigFormValue(state, ["plugins", "entries", "deepseek", "enabled"], false);
expect(state.configForm).toEqual({
plugins: {
allow: [],
entries: {
deepseek: { enabled: false },
},
},
});
expect(state.configFormDirty).toBe(false);
});
});
describe("stageConfigPreset", () => {

View File

@@ -332,6 +332,10 @@ function syncEnabledPluginAllowlist(
if (allow.includes(pluginId)) {
return;
}
if (allow.length === 0) {
untrackAutoAllowlistedPluginId(state, pluginId);
return;
}
setPathValue(draft, ["plugins", "allow"], [...allow, pluginId]);
trackAutoAllowlistedPluginId(state, pluginId);
return;