Przeglądaj źródła

[fix] grid refresh issue, fixed frappe/erpnext#5781

version-14
Rushabh Mehta 9 lat temu
rodzic
commit
70e860fec0
1 zmienionych plików z 68 dodań i 53 usunięć
  1. +68
    -53
      frappe/public/js/frappe/form/grid.js

+ 68
- 53
frappe/public/js/frappe/form/grid.js Wyświetl plik

@@ -532,7 +532,6 @@ frappe.ui.form.Grid = Class.extend({


frappe.ui.form.GridRow = Class.extend({ frappe.ui.form.GridRow = Class.extend({
init: function(opts) { init: function(opts) {
this.fields_dict = {};
this.on_grid_fields_dict = {}; this.on_grid_fields_dict = {};
this.on_grid_fields = []; this.on_grid_fields = [];
this.columns = {}; this.columns = {};
@@ -604,8 +603,8 @@ frappe.ui.form.GridRow = Class.extend({
this.render_row(true); this.render_row(true);


// refersh form fields // refersh form fields
if(this.get_open_form()) {
this.layout && this.layout.refresh(this.doc);
if(this.grid_form) {
this.grid_form.layout && this.grid_form.layout.refresh(this.doc);
} }
}, },
render_row: function(refresh) { render_row: function(refresh) {
@@ -775,51 +774,9 @@ frappe.ui.form.GridRow = Class.extend({
field.refresh(); field.refresh();
if(field.$input) { if(field.$input) {
field.$input.addClass('input-sm'); field.$input.addClass('input-sm');
field.$input.attr('data-col-idx', column.column_index).attr('placeholder', __(df.label));
field.$input.on('keydown', function(e) {
var values = me.frm.doc[me.grid.df.fieldname];
var fieldname = $(this).attr('data-fieldname');
// TAB
if(e.which==TAB) {
// last column
if(me.grid.wrapper.find('input:enabled:last').get(0)===this) {
setTimeout(function() {
if(me.doc.idx === values.length) {
// last row
me.grid.add_new_row(null, null, true);
me.grid.grid_rows[me.grid.grid_rows.length - 1].toggle_editable_row();
me.grid.set_focus_on_row();
} else {
me.grid.grid_rows[me.doc.idx].toggle_editable_row();
me.grid.set_focus_on_row(me.doc.idx+1);
}
}, 500);
}
} else if(e.which==UP_ARROW) {
if(me.doc.idx > 1) {
var prev = me.grid.grid_rows[me.doc.idx-2];
prev.toggle_editable_row();
setTimeout(function() {
var input = prev.columns[fieldname].field.$input;
if(input) {
input.focus();
}
}, 400)
}
} else if(e.which==DOWN_ARROW) {
if(me.doc.idx < values.length) {
var next = me.grid.grid_rows[me.doc.idx];
next.toggle_editable_row();
setTimeout(function() {
var input = next.columns[fieldname].field.$input;
if(input) {
input.focus();
}
}, 400)
}
}

});
field.$input
.attr('data-col-idx', column.column_index)
.attr('placeholder', __(df.label));
} }
column.field = field; column.field = field;
this.on_grid_fields_dict[df.fieldname] = field; this.on_grid_fields_dict[df.fieldname] = field;
@@ -827,6 +784,54 @@ frappe.ui.form.GridRow = Class.extend({


}, },


set_arrow_keys: function(field) {
var me = this;
field.$input.on('keydown', function(e) {
var values = me.frm.doc[me.grid.df.fieldname];
var fieldname = $(this).attr('data-fieldname');
// TAB
if(e.which==TAB) {
// last column
if(me.grid.wrapper.find('input:enabled:last').get(0)===this) {
setTimeout(function() {
if(me.doc.idx === values.length) {
// last row
me.grid.add_new_row(null, null, true);
me.grid.grid_rows[me.grid.grid_rows.length - 1].toggle_editable_row();
me.grid.set_focus_on_row();
} else {
me.grid.grid_rows[me.doc.idx].toggle_editable_row();
me.grid.set_focus_on_row(me.doc.idx+1);
}
}, 500);
}
} else if(e.which==UP_ARROW) {
if(me.doc.idx > 1) {
var prev = me.grid.grid_rows[me.doc.idx-2];
prev.toggle_editable_row();
setTimeout(function() {
var input = prev.columns[fieldname].field.$input;
if(input) {
input.focus();
}
}, 400)
}
} else if(e.which==DOWN_ARROW) {
if(me.doc.idx < values.length) {
var next = me.grid.grid_rows[me.doc.idx];
next.toggle_editable_row();
setTimeout(function() {
var input = next.columns[fieldname].field.$input;
if(input) {
input.focus();
}
}, 400)
}
}

});
},

get_open_form: function() { get_open_form: function() {
return frappe.ui.form.get_open_grid_form(); return frappe.ui.form.get_open_grid_form();
}, },
@@ -922,9 +927,8 @@ frappe.ui.form.GridRow = Class.extend({
} }


// in form // in form
if(this.fields_dict && this.fields_dict[fieldname]) {
this.fields_dict[fieldname].refresh();
this.layout && this.layout.refresh_dependency();
if(this.grid_form) {
this.grid_form.refresh_field(fieldname);
} }
}, },
get_visible_columns: function(blacklist) { get_visible_columns: function(blacklist) {
@@ -945,10 +949,15 @@ frappe.ui.form.GridRow = Class.extend({
if(!field) return; if(!field) return;
field.df[property] = value; field.df[property] = value;
field.refresh(); field.refresh();
me.layout && me.layout.refresh_sections();
} }


set_property(this.fields_dict[fieldname]);
// set property in grid form
if(this.grid_form) {
set_property(this.grid_form.fields_dict[fieldname]);
this.grid_form.layout && this.grid_form.layout.refresh_sections();
}

// set property in on grid fields
set_property(this.on_grid_fields_dict[fieldname]); set_property(this.on_grid_fields_dict[fieldname]);
}, },
toggle_reqd: function(fieldname, reqd) { toggle_reqd: function(fieldname, reqd) {
@@ -1028,6 +1037,12 @@ frappe.ui.form.GridRowForm = Class.extend({
$parent.find(".grid-delete-row, .grid-insert-row, .grid-append-row") $parent.find(".grid-delete-row, .grid-insert-row, .grid-append-row")
.toggle(this.row.grid.is_editable()); .toggle(this.row.grid.is_editable());
}, },
refresh_field: function(fieldname) {
if(this.fields_dict[fieldname]) {
this.fields_dict[fieldname].refresh();
this.layout && this.layout.refresh_dependency();
}
},
set_focus: function() { set_focus: function() {
// wait for animation and then focus on the first row // wait for animation and then focus on the first row
var me = this; var me = this;


Ładowanie…
Anuluj
Zapisz