diff --git a/addons/web/static/src/views/fields/boolean_toggle/boolean_toggle_field.js b/addons/web/static/src/views/fields/boolean_toggle/boolean_toggle_field.js index 8f199b22bf5..77b0cd4fece 100644 --- a/addons/web/static/src/views/fields/boolean_toggle/boolean_toggle_field.js +++ b/addons/web/static/src/views/fields/boolean_toggle/boolean_toggle_field.js @@ -6,10 +6,16 @@ import { booleanField, BooleanField } from "../boolean/boolean_field"; export class BooleanToggleField extends BooleanField { static template = "web.BooleanToggleField"; + static props = { + ...BooleanField.props, + autosave: { type: Boolean, optional: true }, + }; async onChange(newValue) { await this.props.record.update({ [this.props.name]: newValue }); - return this.props.record.save(); + if (this.props.autosave) { + return this.props.record.save(); + } } } @@ -17,8 +23,9 @@ export const booleanToggleField = { ...booleanField, component: BooleanToggleField, displayName: _lt("Toggle"), - extractProps(fieldInfo, dynamicInfo) { + extractProps({ options }, dynamicInfo) { return { + autosave: "autosave" in options ? Boolean(options.autosave) : true, readonly: dynamicInfo.readonly, }; }, diff --git a/addons/web/static/src/views/fields/boolean_toggle/list_boolean_toggle_field.js b/addons/web/static/src/views/fields/boolean_toggle/list_boolean_toggle_field.js index 3da22ac6477..cb62d2766bc 100644 --- a/addons/web/static/src/views/fields/boolean_toggle/list_boolean_toggle_field.js +++ b/addons/web/static/src/views/fields/boolean_toggle/list_boolean_toggle_field.js @@ -11,7 +11,9 @@ export class ListBooleanToggleField extends BooleanToggleField { await this.props.record.update({ [this.props.name]: !this.props.record.data[this.props.name], }); - return this.props.record.save(); + if (this.props.autosave) { + return this.props.record.save(); + } } } } diff --git a/addons/web/static/tests/views/fields/boolean_toggle_field_tests.js b/addons/web/static/tests/views/fields/boolean_toggle_field_tests.js index 24a89b62ad2..9c8eed49acd 100644 --- a/addons/web/static/tests/views/fields/boolean_toggle_field_tests.js +++ b/addons/web/static/tests/views/fields/boolean_toggle_field_tests.js @@ -257,4 +257,24 @@ QUnit.module("Fields", (hooks) => { await click(target, ".o_field_widget[name='bar'] input"); assert.verifySteps(["write"]); }); + + QUnit.test("BooleanToggleField - autosave option set to false", async function (assert) { + await makeView({ + type: "form", + resModel: "partner", + serverData, + arch: ` +
`, + resId: 1, + mockRPC(_route, { method }) { + if (method === "write") { + assert.step("write"); + } + }, + }); + await click(target, ".o_field_widget[name='bar'] input"); + assert.verifySteps([]); + }); });