diff --git a/addons/web/static/src/views/fields/priority/priority_field.js b/addons/web/static/src/views/fields/priority/priority_field.js index 71d67a79260..10798cf6e39 100644 --- a/addons/web/static/src/views/fields/priority/priority_field.js +++ b/addons/web/static/src/views/fields/priority/priority_field.js @@ -12,6 +12,7 @@ export class PriorityField extends Component { static props = { ...standardFieldProps, withCommand: { type: Boolean, optional: true }, + autosave: { type: Boolean, optional: true }, }; setup() { @@ -82,7 +83,9 @@ export class PriorityField extends Component { async updateRecord(value) { await this.props.record.update({ [this.props.name]: value }); - return this.props.record.save(); + if (this.props.autosave) { + return this.props.record.save(); + } } } @@ -90,10 +93,11 @@ export const priorityField = { component: PriorityField, displayName: _lt("Priority"), supportedTypes: ["selection"], - extractProps({ viewType }, dynamicInfo) { + extractProps({ options, viewType }, dynamicInfo) { return { withCommand: viewType === "form", readonly: dynamicInfo.readonly, + autosave: "autosave" in options ? !!options.autosave : true, }; }, }; diff --git a/addons/web/static/src/views/fields/state_selection/state_selection_field.js b/addons/web/static/src/views/fields/state_selection/state_selection_field.js index ed31d19763c..1e27ed34830 100644 --- a/addons/web/static/src/views/fields/state_selection/state_selection_field.js +++ b/addons/web/static/src/views/fields/state_selection/state_selection_field.js @@ -20,6 +20,7 @@ export class StateSelectionField extends Component { ...standardFieldProps, showLabel: { type: Boolean, optional: true }, withCommand: { type: Boolean, optional: true }, + autosave: { type: Boolean, optional: true }, }; static defaultProps = { showLabel: true, @@ -72,7 +73,9 @@ export class StateSelectionField extends Component { async updateRecord(value) { await this.props.record.update({ [this.props.name]: value }); - return this.props.record.save(); + if (this.props.autosave) { + return this.props.record.save(); + } } } @@ -85,6 +88,7 @@ export const stateSelectionField = { showLabel: viewType === "list" && !options.hide_label, withCommand: viewType === "form", readonly: dynamicInfo.readonly, + autosave: "autosave" in options ? !!options.autosave : true, }; }, }; diff --git a/addons/web/static/tests/views/fields/priority_field_tests.js b/addons/web/static/tests/views/fields/priority_field_tests.js index b1586067b47..07634f61447 100644 --- a/addons/web/static/tests/views/fields/priority_field_tests.js +++ b/addons/web/static/tests/views/fields/priority_field_tests.js @@ -639,4 +639,32 @@ QUnit.module("Fields", (hooks) => { await click(stars[stars.length - 1]); assert.verifySteps(["write"]); }); + + QUnit.test("PriorityField - prevent auto save with autosave option", async function (assert) { + await makeView({ + type: "form", + resModel: "partner", + resId: 1, + serverData, + arch: ` +
`, + mockRPC(_route, { method }) { + if (method === "write") { + assert.step("write"); + } + }, + }); + + const stars = target.querySelectorAll( + ".o_field_widget .o_priority a.o_priority_star.fa-star-o" + ); + await click(stars[stars.length - 1]); + assert.verifySteps([]); + }); }); diff --git a/addons/web/static/tests/views/fields/state_selection_field_tests.js b/addons/web/static/tests/views/fields/state_selection_field_tests.js index 06455545e6d..b23a023e160 100644 --- a/addons/web/static/tests/views/fields/state_selection_field_tests.js +++ b/addons/web/static/tests/views/fields/state_selection_field_tests.js @@ -570,4 +570,33 @@ QUnit.module("Fields", (hooks) => { assert.verifySteps(["write"]); } ); + + QUnit.test( + "StateSelectionField - prevent auto save with autosave option", + 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.o_field_state_selection .o_status"); + await click(target, ".dropdown-menu .dropdown-item:last-child"); + assert.verifySteps([]); + } + ); });