@ -17,8 +17,8 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) {
widget_class : 'oe_form_field_x2many_2d_matrix' ,
// those will be filled with rows from the dataset
by_x_axis : { } ,
by_y_axis : { } ,
by_x_axis : new Map ( ) ,
by_y_axis : new Map ( ) ,
by_id : { } ,
// configuration values
field_x_axis : 'x' ,
@ -89,8 +89,8 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) {
var self = this ,
result = this . _super ( value_ ) ;
self . by_x_axis = { } ;
self . by_y_axis = { } ;
self . by_x_axis = new Map ( ) ;
self . by_y_axis = new Map ( ) ;
self . by_id = { } ;
return $ . when ( result ) . then ( function ( )
@ -172,30 +172,36 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) {
}
return true ;
} ) ;
this . by_x_axis [ x ] = this . by_x_axis [ x ] || { } ;
this . by_y_axis [ y ] = this . by_y_axis [ y ] || { } ;
this . by_x_axis [ x ] [ y ] = row ;
this . by_y_axis [ y ] [ x ] = row ;
if ( ! this . by_x_axis . has ( x ) )
{
this . by_x_axis . set ( x , new Map ( ) ) ;
}
if ( ! this . by_y_axis . has ( y ) )
{
this . by_y_axis . set ( y , new Map ( ) ) ;
}
this . by_x_axis . get ( x ) . set ( y , row ) ;
this . by_y_axis . get ( y ) . set ( x , row ) ;
this . by_id [ row . id ] = row ;
} ,
// get x axis values in the correct order
get_x_axis_values : function ( )
{
return _ . keys ( this . by_x_axis ) ;
return Array . from ( this . by_x_axis . keys ( ) ) ;
} ,
// get y axis values in the correct order
get_y_axis_values : function ( )
{
return _ . keys ( this . by_y_axis ) ;
return Array . from ( this . by_y_axis . keys ( ) ) ;
} ,
// get the label for a value on the x axis
get_x_axis_label : function ( x )
{
return this . get_field_value (
_ . first ( _ . values ( this . by_x_axis [ x ] ) ) ,
_ . first ( Array . from ( this . by_x_axis . get ( x ) . values ( ) ) ) ,
this . field_label_x_axis , true ) ;
} ,
@ -203,7 +209,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) {
get_y_axis_label : function ( y )
{
return this . get_field_value (
_ . first ( _ . values ( this . by_y_axis [ y ] ) ) ,
_ . first ( Array . from ( this . by_y_axis . get ( y ) . values ( ) ) ) ,
this . field_label_y_axis , true ) ;
} ,
@ -221,7 +227,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) {
// return row id of a coordinate
get_xy_id : function ( x , y )
{
return this . by_x_axis [ x ] [ y ] [ 'id' ] ;
return this . by_x_axis . get ( x ) . get ( y ) [ 'id' ] ;
} ,
get_xy_att : function ( x , y )
@ -229,7 +235,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) {
var vals = { } ;
for ( var att in this . fields_att ) {
var val = this . get_field_value (
this . by_x_axis [ x ] [ y ] , this . fields_att [ att ] ) ;
this . by_x_axis . get ( x ) . get ( y ) , this . fields_att [ att ] ) ;
// Discard empty values
if ( val ) {
vals [ att ] = val ;
@ -242,7 +248,7 @@ odoo.define('web_widget_x2many_2d_matrix.widget', function (require) {
get_xy_value : function ( x , y )
{
return this . get_field_value (
this . by_x_axis [ x ] [ y ] , this . field_value ) ;
this . by_x_axis . get ( x ) . get ( y ) , this . field_value ) ;
} ,
// validate a value