changeset 89b3eed38e6b in sao:default
details: https://hg.tryton.org/sao?cmd=changeset&node=89b3eed38e6b
description:
        Do not trigger on change when setting change values

        Also unify the keyword argument to trigger modified record.

        issue11325
        review356361002
diffstat:

 src/model.js     |  37 +++++++++++++++++++------------------
 src/screen.js    |   2 +-
 src/view/tree.js |   2 +-
 3 files changed, 21 insertions(+), 20 deletions(-)

diffs (154 lines):

diff -r 33bfd6702029 -r 89b3eed38e6b src/model.js
--- a/src/model.js      Mon Apr 25 18:08:58 2022 +0200
+++ b/src/model.js      Mon Apr 25 23:19:07 2022 +0200
@@ -129,7 +129,7 @@
             }
             return record;
         };
-        array.add = function(record, position=-1, changed=true) {
+        array.add = function(record, position=-1, modified=true) {
             if (position == -1) {
                 position = this.length;
             }
@@ -152,8 +152,8 @@
                             this.record_deleted.indexOf(record_del), 1);
                 }
             }
-            record.set_modified('id');
-            if (changed) {
+            record.modified_fields.id = true;
+            if (modified) {
                 // Set parent field to trigger on_change
                 if (this.parent && this.model.fields[this.parent_name]) {
                     var field = this.model.fields[this.parent_name];
@@ -170,7 +170,7 @@
             return record;
         };
         array.remove = function(
-            record, remove, modified=true, force_remove=false, signal=true) {
+            record, remove, force_remove=false, modified=true) {
             var idx = this.indexOf(record);
             if (record.id >= 0) {
                 if (remove) {
@@ -191,16 +191,11 @@
                     }
                 }
             }
-            if (record.group.parent) {
-                record.group.parent.set_modified('id');
-            }
-            if (modified) {
-                record.set_modified('id');
-            }
+            record.modified_fields.id = true;
             if ((record.id < 0) || force_remove) {
                 this._remove(record);
             }
-            if (signal) {
+            if (modified) {
                 this.record_modified();
             }
         };
@@ -805,7 +800,7 @@
                 }
             }
         },
-        set: function(values, validate=true) {
+        set: function(values, modified=true, validate=true) {
             var name, value;
             var rec_named_fields = ['many2one', 'one2one', 'reference'];
             var later = {};
@@ -852,6 +847,9 @@
             if (validate) {
                 this.validate(fieldnames, true, false, false);
             }
+            if (modified) {
+                this.set_modified();
+            }
         },
         get: function() {
             var value = {};
@@ -935,7 +933,7 @@
             }
             return jQuery.when();
         },
-        set_default: function(values, validate=true, display=true) {
+        set_default: function(values, validate=true, modified=true) {
             var promises = [];
             var fieldnames = [];
             for (var fname in values) {
@@ -968,7 +966,8 @@
                 this.on_change(fieldnames);
                 this.on_change_with(fieldnames);
                 const callback = () => {
-                    if (display) {
+                    if (modified) {
+                        this.set_modified();
                         return jQuery.when.apply(
                             jQuery, this.group.root_group.screens
                             .map(screen => screen.display()));
@@ -2139,7 +2138,7 @@
                     }
                 }
                 for (const record_to_remove of records_to_remove) {
-                    group.remove(record_to_remove, true, true, false, false);
+                    group.remove(record_to_remove, true, false, false);
                 }
                 group.load(value, modified || default_);
             } else {
@@ -2150,10 +2149,12 @@
                         new_record.set_default(vals, false, false);
                         group.add(new_record, -1, false);
                     } else {
-                        new_record.set(vals);
+                        new_record.set(vals, false);
                         group.push(new_record);
                     }
                 }
+                // Trigger modified only once
+                group.record_modified();
             }
         },
         set: function(record, value, _default=false) {
@@ -2309,7 +2310,7 @@
                 for (const record_id of value.delete) {
                     const record2 = group.get(record_id);
                     if (record2) {
-                        group.remove(record2, false, true, false, false);
+                        group.remove(record2, false, false, false);
                     }
                 }
             }
@@ -2317,7 +2318,7 @@
                 for (const record_id of value.remove) {
                     const record2 = group.get(record_id);
                     if (record2) {
-                        group.remove(record2, true, true, false, false);
+                        group.remove(record2, true, false, false);
                     }
                 }
             }
diff -r 33bfd6702029 -r 89b3eed38e6b src/screen.js
--- a/src/screen.js     Mon Apr 25 18:08:58 2022 +0200
+++ b/src/screen.js     Mon Apr 25 23:19:07 2022 +0200
@@ -1642,7 +1642,7 @@
             var path = top_record.get_path(this.group);
             return prm.then(() => {
                 for (const record of records) {
-                    record.group.remove(record, remove, true, force_remove, 
false);
+                    record.group.remove(record, remove, force_remove, false);
                 }
                 // trigger changed only once
                 records[0].group.record_modified();
diff -r 33bfd6702029 -r 89b3eed38e6b src/view/tree.js
--- a/src/view/tree.js  Mon Apr 25 18:08:58 2022 +0200
+++ b/src/view/tree.js  Mon Apr 25 23:19:07 2022 +0200
@@ -651,7 +651,7 @@
                     origin_group.splice(dest_position, 0, record);
                     origin_group.record_modified();
                 } else {
-                    origin_group.remove(record, true, true, true);
+                    origin_group.remove(record, true, true);
                     // Don't remove record from previous group
                     // as the new parent will change the parent
                     // This prevents concurrency conflict

Reply via email to