diff --git a/web/pgadmin/static/js/backgrid.pgadmin.js b/web/pgadmin/static/js/backgrid.pgadmin.js index 1c4f6f1e99..f90ed380a6 100644 --- a/web/pgadmin/static/js/backgrid.pgadmin.js +++ b/web/pgadmin/static/js/backgrid.pgadmin.js @@ -1753,6 +1753,7 @@ define([ }, }, }); + this.tabKeyPress = false; this.$el.datetimepicker(options); this.$el.datetimepicker('show'); this.picker = this.$el.data('DateTimePicker'); @@ -1760,27 +1761,41 @@ define([ events: { 'hide.datetimepicker': 'closeIt', 'focusout':'closeIt', + 'keydown': 'keydownHandler', + }, + keydownHandler: function(event) { + // If Tab key pressed from Cell and not from Datetime picker element + // then we should trigger edited event so that we can goto next cell + let self = this; + let tabKeyPressed = true; + if (event.keyCode === 9 && self.el === event.target) { + self.closeIt(event, tabKeyPressed); + } }, - closeIt: function(ev) { + closeIt: function(ev, isTabKeyPressed) { + if (this.is_closing || this.tabKeyPress) + return; + + this.is_closing = true; + this.tabKeyPress = isTabKeyPressed; + var formatter = this.formatter, model = this.model, column = this.column, val = this.$el.val(), newValue = formatter.toRaw(val, model); - if (this.is_closing) - return; - this.is_closing = true; this.$el.datetimepicker('destroy'); this.is_closing = false; - var command = new Backgrid.Command(ev); - if (_.isUndefined(newValue)) { model.trigger('backgrid:error', model, column, val); } else { model.set(column.get('name'), newValue); - model.trigger('backgrid:edited', model, column, command); + let command = new Backgrid.Command(ev); + setTimeout(() => { + model.trigger('backgrid:edited', model, column, command); + }, 20); } }, });