diff --git a/addons/web/static/src/views/fields/field.js b/addons/web/static/src/views/fields/field.js index 41b7aaa90b7..e8d49314c9c 100644 --- a/addons/web/static/src/views/fields/field.js +++ b/addons/web/static/src/views/fields/field.js @@ -120,10 +120,6 @@ export class Field extends Component { const modifiers = fieldInfo.modifiers || {}; const readonlyFromModifiers = evalDomain(modifiers.readonly, evalContext); - const readonlyFromRecord = !record.isInEdition; - const readonlyFromViewMode = record.model.root - ? !record.model.root.isInEdition - : readonlyFromRecord; // Decoration props const decorationMap = {}; @@ -159,15 +155,18 @@ export class Field extends Component { if (record.selected && record.model.multiEdit) { return; } + const rootRecord = + record.model.root instanceof record.constructor && record.model.root; + const isInEdition = rootRecord ? rootRecord.isInEdition : record.isInEdition; // We save only if we're on view mode readonly and no readonly field modifier - if (readonlyFromViewMode && !readonlyFromModifiers) { + if (!isInEdition && !readonlyFromModifiers) { // TODO: maybe move this in the model return record.save(); } }, value: this.props.record.data[this.props.name], decorations: decorationMap, - readonly: readonlyFromRecord || readonlyFromModifiers || false, + readonly: !record.isInEdition || readonlyFromModifiers || false, ...propsFromAttrs, ...props, type: field.type, diff --git a/addons/web/static/src/views/relational_model.js b/addons/web/static/src/views/relational_model.js index 33cbbe0b493..ec01a45cd02 100644 --- a/addons/web/static/src/views/relational_model.js +++ b/addons/web/static/src/views/relational_model.js @@ -1395,10 +1395,6 @@ class DynamicList extends DataPoint { // Getters // ------------------------------------------------------------------------- - get isInEdition() { - return !!this.editedRecord; - } - get currentParams() { return JSON.stringify([this.domain, this.groupBy]); } @@ -1790,7 +1786,8 @@ export class DynamicRecordList extends DynamicList { } await this.model.keepLast.add(this.model.mutex.exec(() => newRecord.load())); this.editedRecord = newRecord; - this.onCreateRecord(newRecord); + this.onRemoveNewRecord = await this.onCreateRecord(newRecord); + return this.addRecord(newRecord, atFirstPosition ? 0 : this.count); } @@ -1889,7 +1886,12 @@ export class DynamicRecordList extends DynamicList { this.count--; if (this.editedRecord === record) { this.editedRecord = null; + if (this.onRemoveNewRecord) { + this.onRemoveNewRecord(record); + this.onRemoveNewRecord = null; + } } + this.model.notify(); return record; } @@ -2001,6 +2003,12 @@ export class DynamicGroupList extends DynamicList { } } this.editedRecord = record; + const onRemoveRecord = (record) => { + if (this.editedRecord === record) { + this.editedRecord = null; + } + }; + return onRemoveRecord; }); } 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 ccc6786b93e..7851c4397e2 100644 --- a/addons/web/static/tests/views/fields/priority_field_tests.js +++ b/addons/web/static/tests/views/fields/priority_field_tests.js @@ -316,6 +316,50 @@ QUnit.module("Fields", (hooks) => { ); }); + QUnit.test("PriorityField can write after adding a record -- kanban", async function (assert) { + serverData.models.partner.fields.selection.selection = [ + ["0", 0], + ["1", 1], + ]; + serverData.models.partner.records[0].selection = "0"; + + serverData.views = { + "partner,myquickview,form": `
`, + }; + await makeView({ + type: "kanban", + resModel: "partner", + serverData, + domain: [["id", "=", 1]], + groupBy: ["foo"], + arch: ` +