From 68d093189ade0eec47f4bbfbf435ca2ac7685f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 2 Oct 2024 12:07:48 +0200 Subject: [PATCH] Consider as loaded the fields marked as modified As the load method skips setting modified fields, so they are not and will never be marked as loaded. --- sao/src/model.js | 16 ++++++---------- sao/src/sao.js | 13 +++++++++++++ .../tryton/gui/window/view_form/model/record.py | 6 +++--- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/sao/src/model.js b/sao/src/model.js index f9db9c90e9..874a411e45 100644 --- a/sao/src/model.js +++ b/sao/src/model.js @@ -1355,17 +1355,13 @@ } }, get_loaded: function(fields) { - if (!jQuery.isEmptyObject(fields)) { - var result = true; - for (const field of fields) { - if (!(field in this._loaded) && !(field in this.modified_fields)) { - result = false; - } - } - return result; + if (!fields) { + fields = Object.keys(this.model.fields); } - return Sao.common.compare(Object.keys(this.model.fields).sort(), - Object.keys(this._loaded).sort()); + fields = new Set(fields); + var loaded = new Set(Object.keys(this._loaded)); + loaded = loaded.union(new Set(Object.keys(this.modified_fields))); + return fields.isSubsetOf(loaded); }, get root_parent() { var parent = this; diff --git a/sao/src/sao.js b/sao/src/sao.js index 3c3327ca20..afb8cccb09 100644 --- a/sao/src/sao.js +++ b/sao/src/sao.js @@ -136,6 +136,19 @@ var Sao = { } } + if (!Set.prototype.union) { + Set.prototype.union = function(other) { + if (this === null) { + throw new TypeError(); + } + const result = new Set(this); + for (const key of other.keys()) { + result.add(key); + } + return result + } + } + Sao.setdefault = function(object, key, value) { if (!Object.prototype.hasOwnProperty.call(object, key)) { object[key] = value; diff --git a/tryton/tryton/gui/window/view_form/model/record.py b/tryton/tryton/gui/window/view_form/model/record.py index a8fe8185c6..ef1bf3ef0e 100644 --- a/tryton/tryton/gui/window/view_form/model/record.py +++ b/tryton/tryton/gui/window/view_form/model/record.py @@ -303,9 +303,9 @@ class Record: self.reload(fields) def get_loaded(self, fields=None): - if fields: - return set(fields) <= (self._loaded | set(self.modified_fields)) - return set(self.group.fields.keys()) == self._loaded + if fields is None: + fields = self.group.fields.keys() + return set(fields) <= (self._loaded | set(self.modified_fields)) loaded = property(get_loaded)