summaryrefslogtreecommitdiff
path: root/addons/base_import/static/src
diff options
context:
space:
mode:
authorpka-odoo <pka@odoo.com>2020-05-04 09:09:23 +0000
committerAaron Bohy <aab@odoo.com>2020-05-04 14:31:11 +0000
commit470fa48686f5ac430f0f7eb0853cf2c81dca62c0 (patch)
tree66a041b2002aec7ad45bceb64ce33d3cebfd2048 /addons/base_import/static/src
parent93c01a231a80a3a0795af33b4776bf679299c4b2 (diff)
[IMP] base_import,*: move Import button to Favorite menu
*account,crm_iap_lead,hr_expense Part of task 2234547 Co-authored-by: Mohammed Shekha <msh@odoo.com> Co-authored-by: Aaron Bohy <aab@odoo.com>
Diffstat (limited to 'addons/base_import/static/src')
-rw-r--r--addons/base_import/static/src/js/import_buttons.js123
-rw-r--r--addons/base_import/static/src/js/import_menu.js63
-rw-r--r--addons/base_import/static/src/xml/base_import.xml23
3 files changed, 71 insertions, 138 deletions
diff --git a/addons/base_import/static/src/js/import_buttons.js b/addons/base_import/static/src/js/import_buttons.js
deleted file mode 100644
index 89baedc8113..00000000000
--- a/addons/base_import/static/src/js/import_buttons.js
+++ /dev/null
@@ -1,123 +0,0 @@
-odoo.define('base_import.import_buttons', function (require) {
-"use strict";
-
-var config = require('web.config');
-var KanbanController = require('web.KanbanController');
-var KanbanView = require('web.KanbanView');
-var ListController = require('web.ListController');
-var ListView = require('web.ListView');
-
-
-// Mixins that enable the 'Import' feature
-var ImportViewMixin = {
- /**
- * @override
- * @param {Object} params
- * @param {boolean} [params.import_enabled=true] set to false to disable
- * the Import feature (no 'Import' button in the control panel). Can also
- * be disabled with 'import' attrs set to '0' in the arch.
- */
- init: function (viewInfo, params) {
- var importEnabled = !!JSON.parse(this.arch.attrs.import || '1') &&
- ('import_enabled' in params ? params.import_enabled : true);
- this.controllerParams.importEnabled = importEnabled && !config.device.isMobile;
- },
-};
-
-var ImportControllerMixin = {
- /**
- * @override
- */
- init: function (parent, model, renderer, params) {
- this.importEnabled = params.importEnabled;
- },
-
- //--------------------------------------------------------------------------
- // Private
- //--------------------------------------------------------------------------
-
- /**
- * Adds an event listener on the import button.
- *
- * @private
- */
- _bindImport: function () {
- if (!this.$buttons) {
- return;
- }
- var self = this;
- this.$buttons.on('click', '.o_button_import', function () {
- var state = self.model.get(self.handle, {raw: true});
- self.do_action({
- type: 'ir.actions.client',
- tag: 'import',
- params: {
- model: self.modelName,
- context: state.getContext(),
- }
- });
- });
- }
-};
-
-// Activate 'Import' feature on List views
-ListView.include({
- init: function () {
- this._super.apply(this, arguments);
- ImportViewMixin.init.apply(this, arguments);
- },
-});
-
-ListController.include({
- init: function () {
- this._super.apply(this, arguments);
- ImportControllerMixin.init.apply(this, arguments);
- },
-
- //--------------------------------------------------------------------------
- // Public
- //--------------------------------------------------------------------------
-
- /**
- * Extends the renderButtons function of ListView by adding an event listener
- * on the import button.
- *
- * @override
- */
- renderButtons: function () {
- this._super.apply(this, arguments); // Sets this.$buttons
- ImportControllerMixin._bindImport.call(this);
- }
-});
-
-// Activate 'Import' feature on Kanban views
-KanbanView.include({
- init: function () {
- this._super.apply(this, arguments);
- ImportViewMixin.init.apply(this, arguments);
- },
-});
-
-KanbanController.include({
- init: function () {
- this._super.apply(this, arguments);
- ImportControllerMixin.init.apply(this, arguments);
- },
-
- //--------------------------------------------------------------------------
- // Public
- //--------------------------------------------------------------------------
-
- /**
- * Extends the renderButtons function of ListView by adding an event listener
- * on the import button.
- *
- * @override
- */
- renderButtons: function () {
- this._super.apply(this, arguments); // Sets this.$buttons
- ImportControllerMixin._bindImport.call(this);
- }
-});
-
-});
diff --git a/addons/base_import/static/src/js/import_menu.js b/addons/base_import/static/src/js/import_menu.js
new file mode 100644
index 00000000000..a5c5c5e1293
--- /dev/null
+++ b/addons/base_import/static/src/js/import_menu.js
@@ -0,0 +1,63 @@
+odoo.define('base_import.ImportMenu', function (require) {
+ "use strict";
+
+ const DropdownMenuItem = require('web.DropdownMenuItem');
+ const FavoriteMenu = require('web.FavoriteMenu');
+ const { useModel } = require('web.model');
+
+ /**
+ * Import Records menu
+ *
+ * This component is used to import the records for particular model.
+ *
+ * @extends DropdownMenuItem
+ */
+ class ImportMenu extends DropdownMenuItem {
+ constructor() {
+ super(...arguments);
+ this.model = useModel('controlPanelModel');
+ }
+
+ //---------------------------------------------------------------------
+ // Handlers
+ //---------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ _onImportClick() {
+ const action = {
+ type: 'ir.actions.client',
+ tag: 'import',
+ params: {
+ model: this.model.modelName,
+ context: this.model.actionContext,
+ }
+ };
+ this.trigger('do-action', {action: action});
+ }
+
+ //---------------------------------------------------------------------
+ // Static
+ //---------------------------------------------------------------------
+
+ /**
+ * @param {Object} env
+ * @returns {boolean}
+ */
+ static shouldBeDisplayed(env) {
+ return env.view &&
+ ['kanban', 'list'].includes(env.view.type) &&
+ !env.device.isMobile &&
+ !!JSON.parse(env.view.arch.attrs.import || '1') &&
+ !!JSON.parse(env.view.arch.attrs.create || '1');
+ }
+ }
+
+ ImportMenu.props = {};
+ ImportMenu.template = 'base_import.ImportMenu';
+
+ FavoriteMenu.registry.add('import-menu', ImportMenu, 1);
+
+ return ImportMenu;
+});
diff --git a/addons/base_import/static/src/xml/base_import.xml b/addons/base_import/static/src/xml/base_import.xml
index d0dd6657a79..827f95a337a 100644
--- a/addons/base_import/static/src/xml/base_import.xml
+++ b/addons/base_import/static/src/xml/base_import.xml
@@ -1,4 +1,12 @@
<templates>
+ <t t-name="base_import.ImportMenu" owl="1">
+ <li class="o_menu_item o_import_menu" role="menuitem">
+ <button type="button" class="dropdown-item" t-on-click="_onImportClick">
+ Import Records
+ </button>
+ </li>
+ </t>
+
<t t-name="ImportView">
<t t-set="_id" t-value="_.uniqueId('export')"/>
<form action="" method="post" enctype="multipart/form-data" class="oe_import">
@@ -217,19 +225,4 @@
<t t-if="error.rows" t-esc="at(error.rows)"/>
<t t-if="error.moreinfo" t-raw="info(error.moreinfo)"/>
</t>
- <t t-name="ImportView.import_button">
- <button t-if='widget and widget.importEnabled' type="button" class="btn btn-secondary o_button_import">
- Import
- </button>
- </t>
- <t t-extend="ListView.buttons">
- <t t-jquery="button.o_list_button_add" t-operation="after">
- <t t-call="ImportView.import_button"/>
- </t>
- </t>
- <t t-extend="KanbanView.buttons">
- <t t-jquery="button" t-operation="after">
- <t t-call="ImportView.import_button"/>
- </t>
- </t>
</templates>