diff --git a/addons/web/static/src/views/fields/field.js b/addons/web/static/src/views/fields/field.js index 7ff90bddda3..41b7aaa90b7 100644 --- a/addons/web/static/src/views/fields/field.js +++ b/addons/web/static/src/views/fields/field.js @@ -119,13 +119,11 @@ export class Field extends Component { const fieldInfo = this.props.fieldInfo; const modifiers = fieldInfo.modifiers || {}; - const required = evalDomain(modifiers.required, evalContext); const readonlyFromModifiers = evalDomain(modifiers.readonly, evalContext); const readonlyFromRecord = !record.isInEdition; const readonlyFromViewMode = record.model.root ? !record.model.root.isInEdition : readonlyFromRecord; - const emptyRequiredValue = required && !this.props.value; // Decoration props const decorationMap = {}; @@ -162,7 +160,7 @@ export class Field extends Component { return; } // We save only if we're on view mode readonly and no readonly field modifier - if (readonlyFromViewMode && !readonlyFromModifiers && !emptyRequiredValue) { + if (readonlyFromViewMode && !readonlyFromModifiers) { // TODO: maybe move this in the model return record.save(); } 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 b0e9a59c64d..93cea9f1a4a 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 @@ -508,4 +508,37 @@ QUnit.module("Fields", (hooks) => { ); assert.deepEqual(dropdownItemTexts, ["Custom blocked", "Custom done"]); }); + + QUnit.test("works when required in a readonly view ", async function (assert) { + serverData.models.partner.records[0].selection = "normal"; + serverData.models.partner.records = [serverData.models.partner.records[0]]; + await makeView({ + type: "kanban", + resModel: "partner", + serverData, + arch: ` + + + +
+ +
+
+
+
`, + mockRPC: (route, args, performRPC) => { + if (route === "/web/dataset/call_kw/partner/write") { + assert.step("write"); + } + return performRPC(route, args); + }, + }); + + await click(target, ".o_field_state_selection button"); + const doneItem = target.querySelectorAll(".dropdown-item")[1]; // item "done"; + await click(doneItem); + + assert.verifySteps(["write"]); + assert.hasClass(target.querySelector(".o_field_state_selection span"), "o_status_green"); + }); });