changeset 68faa7af0553 in sao:default
details: https://hg.tryton.org/sao?cmd=changeset;node=68faa7af0553
description:
        Use Map to store sum widgets per column

        The field name is not a unique key to store the sum widgets, we must 
use a Map
        to allow the same field being rendered multiple times with sum 
attribute.

        issue9592
        review315951002
diffstat:

 src/view/tree.js |  27 ++++++++++++---------------
 1 files changed, 12 insertions(+), 15 deletions(-)

diffs (78 lines):

diff -r 2f272a66182b -r 68faa7af0553 src/view/tree.js
--- a/src/view/tree.js  Wed Sep 23 10:04:19 2020 +0200
+++ b/src/view/tree.js  Thu Sep 24 22:40:54 2020 +0200
@@ -112,7 +112,7 @@
                 var aggregate = jQuery('<label/>', {
                     'class': 'value',
                 });
-                this.view.sum_widgets[name] = [sum, aggregate];
+                this.view.sum_widgets.set(column, [sum, aggregate]);
             }
         },
         _parse_button: function(node, attributes) {
@@ -129,7 +129,7 @@
         display_size: Sao.config.display_size,
         init: function(view_id, screen, xml, children_field) {
             this.children_field = children_field;
-            this.sum_widgets = {};
+            this.sum_widgets = new Map();
             this.columns = [];
             this.selection_mode = (screen.attributes.selection_mode ||
                 Sao.common.SELECTION_MULTIPLE);
@@ -186,7 +186,7 @@
 
             this.tfoot = null;
             var sum_row;
-            if (!jQuery.isEmptyObject(this.sum_widgets)) {
+            if (this.sum_widgets.size) {
                 sum_row = jQuery('<tr/>');
                 sum_row.append(jQuery('<th/>'));
                 this.tfoot = jQuery('<tfoot/>');
@@ -229,14 +229,14 @@
                 column.col = col;
 
                 column.footers = [];
-                if (!jQuery.isEmptyObject(this.sum_widgets)) {
+                if (this.sum_widgets.size) {
                     var field_name = column.attributes.name;
                     var total_cell = jQuery('<th/>', {
                         'class': column.class_,
                     });
-                    if (field_name in this.sum_widgets) {
-                        var sum_label = this.sum_widgets[field_name][0];
-                        var sum_value = this.sum_widgets[field_name][1];
+                    if (this.sum_widgets.has(column)) {
+                        var sum_label = this.sum_widgets.get(column)[0];
+                        var sum_value = this.sum_widgets.get(column)[1];
                         total_cell.append(sum_label);
                         total_cell.append(sum_value);
                         total_cell.attr('data-title', sum_label.text());
@@ -801,15 +801,12 @@
             // TODO update_children
         },
         update_sum: function() {
-            for (var name in this.sum_widgets) {
-                if (!this.sum_widgets.hasOwnProperty(name)) {
-                    continue;
-                }
-
+            this.sum_widgets.forEach(function(sum_widget, column) {
+                var name = column.attributes.name;
                 var selected_records = this.selected_records;
                 var aggregate = '-';
-                var sum_label = this.sum_widgets[name][0];
-                var sum_value = this.sum_widgets[name][1];
+                var sum_label = sum_widget[0];
+                var sum_value = sum_widget[1];
                 var sum_ = null;
                 var selected_sum = null;
                 var loaded = true;
@@ -874,7 +871,7 @@
                 sum_value.text(aggregate);
                 sum_value.parent().attr(
                     'title', sum_label.text() + ' ' + sum_value.text());
-            }
+            }.bind(this));
         },
         get selected_records() {
             if (this.selection_mode == Sao.common.SELECTION_NONE) {

Reply via email to