summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/views/list/list_controller.js61
-rw-r--r--addons/web/static/src/js/views/list/list_editable_renderer.js12
2 files changed, 65 insertions, 8 deletions
diff --git a/addons/web/static/src/js/views/list/list_controller.js b/addons/web/static/src/js/views/list/list_controller.js
index 06c27a61e94..0d66eb3d4f1 100644
--- a/addons/web/static/src/js/views/list/list_controller.js
+++ b/addons/web/static/src/js/views/list/list_controller.js
@@ -18,6 +18,7 @@ var qweb = core.qweb;
var ListController = BasicController.extend({
custom_events: _.extend({}, BasicController.prototype.custom_events, {
+ add_record: '_onAddRecord',
button_clicked: '_onButtonClicked',
change_mode: '_onChangeMode',
selection_changed: '_onSelectionChanged',
@@ -149,6 +150,28 @@ var ListController = BasicController.extend({
// Private
//--------------------------------------------------------------------------
+ /**
+ * Add a record to the list
+ *
+ * @private
+ */
+ _addRecord: function () {
+ var self = this;
+ this.model.addDefaultRecord(this.handle, {position: this.editable}).then(function (recordID) {
+ self._toggleNoContentHelper(false);
+ var state = self.model.get(self.handle);
+ self.renderer.updateState(state);
+ self.renderer.editRecord(recordID);
+ });
+ },
+ /**
+ * Archive the current selection
+ *
+ * @private
+ * @param {string[]} ids
+ * @param {boolean} archive
+ * @returns {Deferred}
+ */
_archive: function (ids, archive) {
if (ids.length === 0) {
return $.when();
@@ -205,8 +228,19 @@ var ListController = BasicController.extend({
//--------------------------------------------------------------------------
/**
+ * Add a record to the list
+ *
+ * @private
+ * @param {OdooEvent} event
+ */
+ _onAddRecord: function (event) {
+ event.stopPropagation();
+ this._addRecord();
+ },
+ /**
* Handles a click on a button by performing its action.
*
+ * @private
* @param {OdooEvent} event
*/
_onButtonClicked: function (event) {
@@ -218,6 +252,7 @@ var ListController = BasicController.extend({
* edit, and vice versa. In that case, we need to make sure that the buttons
* displayed in the control panel are correct.
*
+ * @private
* @param {OdooEvent} event
*/
_onChangeMode: function (event) {
@@ -228,6 +263,7 @@ var ListController = BasicController.extend({
* can switch to the form view with no active res_id, so it is in 'create'
* mode, or we can edit inline.
*
+ * @private
* @param {MouseEvent} event
*/
_onCreateRecord: function (event) {
@@ -236,33 +272,36 @@ var ListController = BasicController.extend({
// list editable renderer and would unselect the newly created row
event.stopPropagation();
- var self = this;
if (this.editable) {
- this.model.addDefaultRecord(this.handle).then(function (recordID) {
- self._toggleNoContentHelper(false);
- var state = self.model.get(self.handle);
- self.renderer.updateState(state);
- self.renderer.editRecord(recordID);
- });
+ this._addRecord();
} else {
this.trigger_up('switch_view', {view_type: 'form', res_id: undefined});
}
},
/**
* Called when the 'delete' action is clicked on in the side bar.
+ *
+ * @private
*/
_onDeleteSelectedRecords: function () {
this._deleteRecords(this.selectedRecords);
},
/**
* Handler called when the user clicked on the 'Discard' button.
+ *
+ * @private
+ * @param {MouseEvent} event
*/
- _onDiscard: function () {
+ _onDiscard: function (event) {
+ event.stopPropagation();
this.model.discardChanges(this.handle);
+ this._updateButtons('readonly');
this.update(this.handle, {reload: false});
},
/**
* Opens the Export Dialog
+ *
+ * @private
*/
_onExportData: function () {
var record = this.model.get(this.handle);
@@ -274,6 +313,7 @@ var ListController = BasicController.extend({
* This should be moved in basic controller, and shared between basic views.
*
* @override
+ * @private
* @param {OdooEvent} event
*/
_onFieldChanged: function (event) {
@@ -287,6 +327,7 @@ var ListController = BasicController.extend({
* row, which is done when clicking on 'Save' (anywhere outside the row
* actually), so this function should only switch back to readonly mode
*
+ * @private
* @param {MouseEvent} event
*/
_onSave: function (event) {
@@ -300,6 +341,7 @@ var ListController = BasicController.extend({
* When the current selection changes (by clicking on the checkboxes on the
* left), we need to display (or hide) the 'sidebar'.
*
+ * @private
* @param {OdooEvent} event
*/
_onSelectionChanged: function (event) {
@@ -309,6 +351,7 @@ var ListController = BasicController.extend({
/**
* Called when clicking on 'Archive' or 'Unarchive' in the sidebar.
*
+ * @private
* @param {boolean} archive
*/
_onToggleArchiveState: function (archive) {
@@ -319,6 +362,7 @@ var ListController = BasicController.extend({
* tell the model to sort itself properly, to update the pager and to
* rerender the view.
*
+ * @private
* @param {OdooEvent} event
*/
_onToggleColumnOrder: function (event) {
@@ -335,6 +379,7 @@ var ListController = BasicController.extend({
* This method just transfer the request to the model, then update the
* renderer.
*
+ * @private
* @param {OdooEvent} event
*/
_onToggleGroup: function (event) {
diff --git a/addons/web/static/src/js/views/list/list_editable_renderer.js b/addons/web/static/src/js/views/list/list_editable_renderer.js
index df7a953c632..b24ec6a0c29 100644
--- a/addons/web/static/src/js/views/list/list_editable_renderer.js
+++ b/addons/web/static/src/js/views/list/list_editable_renderer.js
@@ -272,6 +272,15 @@ ListRenderer.include({
return $rows;
},
/**
+ * @override
+ * @private
+ * @returns {Deferred} this deferred is resolved immediately
+ */
+ _renderView: function () {
+ this.currentRow = null;
+ return this._super.apply(this, arguments);
+ },
+ /**
* This is one of the trickiest method in the editable renderer. It has to
* do a lot of stuff: it has to determine which cell should be selected (if
* the target cell is readonly, we need to find another suitable cell), then
@@ -563,6 +572,9 @@ ListRenderer.include({
_onMoveNextLine: function () {
if (this.currentRow < this.state.data.length - 1) {
this._selectCell(this.currentRow + 1, 0);
+ } else {
+ this._unselectRow();
+ this.trigger_up('add_record');
}
},
/**