[FIX] mail: fix model manager isDebug
Mix of proxy and non-proxy was causing issue in set of records. closes odoo/odoo#99388 Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
@@ -656,7 +656,7 @@ export class ModelManager {
|
||||
const record = owl.markRaw(!this.isDebug ? nonProxyRecord : new Proxy(nonProxyRecord, {
|
||||
get: function getFromProxy(record, prop) {
|
||||
if (
|
||||
!model.__fieldMap.has(prop) &&
|
||||
(model.__fieldMap && !model.__fieldMap.has(prop)) &&
|
||||
!['_super', 'then', 'localId'].includes(prop) &&
|
||||
typeof prop !== 'symbol' &&
|
||||
!(prop in record)
|
||||
@@ -666,6 +666,9 @@ export class ModelManager {
|
||||
return record[prop];
|
||||
},
|
||||
}));
|
||||
if (this.isDebug) {
|
||||
record.__proxifiedRecord = record;
|
||||
}
|
||||
// Ensure X2many relations are Set initially (other fields can stay undefined).
|
||||
for (const field of model.__fieldList) {
|
||||
if (field.fieldType === 'relation') {
|
||||
@@ -1214,26 +1217,27 @@ export class ModelManager {
|
||||
// Add field accessors.
|
||||
Object.defineProperty(model.prototype, fieldName, {
|
||||
get: function getFieldValue() { // this is bound to record
|
||||
const record = this.modelManager.isDebug ? this.__proxifiedRecord : this;
|
||||
if (this.modelManager._listeners.size) {
|
||||
let entryRecord = this.__listenersObservingRecord;
|
||||
const reason = this.modelManager.isDebug && `getField - ${field} of ${this}`;
|
||||
let entryField = this.__listenersObservingFieldsOfRecord.get(field);
|
||||
let entryRecord = record.__listenersObservingRecord;
|
||||
const reason = record.modelManager.isDebug && `getField - ${field} of ${record}`;
|
||||
let entryField = record.__listenersObservingFieldsOfRecord.get(field);
|
||||
if (!entryField) {
|
||||
entryField = new Map();
|
||||
this.__listenersObservingFieldsOfRecord.set(field, entryField);
|
||||
record.__listenersObservingFieldsOfRecord.set(field, entryField);
|
||||
}
|
||||
for (const listener of this.modelManager._listeners) {
|
||||
listener.lastObservedRecords.add(this);
|
||||
for (const listener of record.modelManager._listeners) {
|
||||
listener.lastObservedRecords.add(record);
|
||||
const info = { listener, reason };
|
||||
if (entryRecord.has(listener)) {
|
||||
entryRecord.get(listener).push(info);
|
||||
} else {
|
||||
entryRecord.set(listener, [info]);
|
||||
}
|
||||
if (!listener.lastObservedFieldsByRecord.has(this)) {
|
||||
listener.lastObservedFieldsByRecord.set(this, new Set());
|
||||
if (!listener.lastObservedFieldsByRecord.has(record)) {
|
||||
listener.lastObservedFieldsByRecord.set(record, new Set());
|
||||
}
|
||||
listener.lastObservedFieldsByRecord.get(this).add(field);
|
||||
listener.lastObservedFieldsByRecord.get(record).add(field);
|
||||
if (entryField.has(listener)) {
|
||||
entryField.get(listener).push(info);
|
||||
} else {
|
||||
@@ -1241,7 +1245,7 @@ export class ModelManager {
|
||||
}
|
||||
}
|
||||
}
|
||||
return field.get(this);
|
||||
return field.get(record);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -252,7 +252,6 @@ async function start(param0 = {}) {
|
||||
param0.serverData.views = { ...pyEnv.getViews(), ...param0.serverData.views };
|
||||
const webClient = await getWebClientReady({ ...param0, messagingBus, testSetupDoneDeferred });
|
||||
|
||||
webClient.env.services.messaging.modelManager;
|
||||
registerCleanup(async () => {
|
||||
await webClient.env.services.messaging.modelManager.messagingInitializedPromise;
|
||||
webClient.env.services.messaging.modelManager.destroy();
|
||||
|
||||
Reference in New Issue
Block a user