From 36988d0edcfb423ab8ba76f3f675505184641a17 Mon Sep 17 00:00:00 2001 From: Bruno Boi Date: Thu, 16 Sep 2021 13:12:34 +0000 Subject: [PATCH] [IMP] *: use new dropdown in legacy too This commit replaces the control panel dropdowns with the new component, in order to get consistent through the new/legacy views (because the current Odoo version is in a state where some views uses the new infrastructure and some others are still not converted - see odoo/odoo#73311). The diff seems massive, but it is mostly due to tests adaptations. closes odoo/odoo#77001 X-original-commit: d679cd0d8ba9a2420e81a42a698763e9be2327e1 Related: odoo/enterprise#21077 Signed-off-by: Aaron Bohy (aab) Co-authored-by: Aaron Bohy Co-authored-by: Mathieu Duckerts-Antoine --- .../static/src/legacy/js/import_menu.js | 11 +- .../static/src/legacy/xml/base_import.xml | 8 - .../static/tests/import_buttons_tests.js | 14 +- .../static/src/legacy/js/add_to_board_menu.js | 12 +- addons/board/static/src/legacy/xml/board.xml | 22 - addons/board/static/tests/dashboard_tests.js | 84 ++-- .../crm/static/tests/forecast_view_tests.js | 8 +- .../google_drive/static/tests/gdrive_test.js | 16 +- .../js/add_to_google_spreadsheet_menu.js | 10 +- .../src/legacy/xml/addtospreadsheet.xml | 7 - addons/web/__manifest__.py | 1 + .../js/control_panel/comparison_menu.js | 44 +- .../js/control_panel/custom_favorite_item.js | 46 +- .../js/control_panel/custom_filter_item.js | 48 +- .../js/control_panel/custom_group_by_item.js | 25 +- .../legacy/js/control_panel/favorite_menu.js | 39 +- .../legacy/js/control_panel/filter_menu.js | 43 +- .../legacy/js/control_panel/groupby_menu.js | 49 +-- .../src/legacy/js/views/pivot/pivot_model.js | 2 + .../legacy/js/views/pivot/pivot_renderer.js | 64 +-- addons/web/static/src/legacy/xml/base.xml | 231 ---------- .../static/src/legacy/xml/control_panel.xml | 31 ++ addons/web/static/src/legacy/xml/pivot.xml | 77 ++-- .../static/tests/helpers/legacy_env_utils.js | 21 + addons/web/static/tests/helpers/mock_env.js | 1 + .../legacy/components/action_menus_tests.js | 23 +- .../tests/legacy/components/pager_tests.js | 29 +- .../control_panel/comparison_menu_tests.js | 2 +- .../control_panel/control_panel_tests.js | 22 +- .../control_panel/custom_filter_item_tests.js | 130 +++--- .../custom_group_by_item_tests.js | 16 +- .../control_panel/favorite_menu_tests.js | 20 +- .../legacy/control_panel/filter_menu_tests.js | 18 +- .../control_panel/groupby_menu_tests.js | 14 +- .../legacy/control_panel/search_bar_tests.js | 28 +- .../field_many2many_tests.js | 21 +- .../relational_fields/field_many2one_tests.js | 25 +- .../relational_fields/field_one2many_tests.js | 10 +- .../legacy/fields/relational_fields_tests.js | 12 +- .../static/tests/legacy/helpers/test_env.js | 2 + .../tests/legacy/helpers/test_utils_mock.js | 2 +- .../static/tests/legacy/views/form_tests.js | 117 +++-- .../static/tests/legacy/views/graph_tests.js | 64 +-- .../static/tests/legacy/views/kanban_tests.js | 26 +- .../static/tests/legacy/views/list_tests.js | 146 +++--- .../static/tests/legacy/views/pivot_tests.js | 414 ++++++++++-------- .../tests/legacy/views/search_panel_tests.js | 75 ++-- .../tests/legacy/views/state_mapping_tests.js | 2 + .../tests/legacy/views/view_dialogs_tests.js | 20 +- .../tests/legacy/widgets/data_export_tests.js | 25 +- .../search/custom_favorite_item_tests.js | 2 + .../tests/search/favorite_menu_tests.js | 49 ++- addons/web/static/tests/search/helpers.js | 15 + addons/web/static/tests/setup.js | 2 + .../static/tests/views/graph_view_tests.js | 2 + .../static/tests/views/pivot_view_tests.js | 2 + .../webclient/actions/concurrency_tests.js | 7 +- .../webclient/actions/load_state_tests.js | 6 +- .../tests/webclient/actions/misc_tests.js | 18 +- .../webclient/actions/url_action_tests.js | 4 +- .../webclient/actions/window_action_tests.js | 23 +- addons/web/static/tests/webclient/helpers.js | 27 +- 62 files changed, 1043 insertions(+), 1291 deletions(-) delete mode 100644 addons/google_spreadsheet/static/src/legacy/xml/addtospreadsheet.xml create mode 100644 addons/web/static/src/legacy/xml/control_panel.xml diff --git a/addons/base_import/static/src/legacy/js/import_menu.js b/addons/base_import/static/src/legacy/js/import_menu.js index 011a19abe11..de557592c6f 100644 --- a/addons/base_import/static/src/legacy/js/import_menu.js +++ b/addons/base_import/static/src/legacy/js/import_menu.js @@ -1,18 +1,17 @@ odoo.define('base_import.ImportMenu', function (require) { "use strict"; - const DropdownMenuItem = require('web.DropdownMenuItem'); const FavoriteMenu = require('web.FavoriteMenu'); const { useModel } = require('web.Model'); + const { Component } = owl; + /** * Import Records menu * * This component is used to import the records for particular model. - * - * @extends DropdownMenuItem */ - class ImportMenu extends DropdownMenuItem { + class ImportMenu extends Component { constructor() { super(...arguments); this.model = useModel('searchModel'); @@ -25,7 +24,7 @@ odoo.define('base_import.ImportMenu', function (require) { /** * @private */ - _onImportClick() { + importRecords() { const action = { type: 'ir.actions.client', tag: 'import', @@ -56,7 +55,7 @@ odoo.define('base_import.ImportMenu', function (require) { } ImportMenu.props = {}; - ImportMenu.template = 'base_import.ImportMenu'; + ImportMenu.template = "base_import.ImportRecords"; FavoriteMenu.registry.add('import-menu', ImportMenu, 1); diff --git a/addons/base_import/static/src/legacy/xml/base_import.xml b/addons/base_import/static/src/legacy/xml/base_import.xml index 21d8cdf0d1e..af816a9c8ef 100644 --- a/addons/base_import/static/src/legacy/xml/base_import.xml +++ b/addons/base_import/static/src/legacy/xml/base_import.xml @@ -1,12 +1,4 @@ - - - -
diff --git a/addons/base_import/static/tests/import_buttons_tests.js b/addons/base_import/static/tests/import_buttons_tests.js index 8c7e556802d..e36f6178763 100644 --- a/addons/base_import/static/tests/import_buttons_tests.js +++ b/addons/base_import/static/tests/import_buttons_tests.js @@ -6,12 +6,15 @@ const FormView = require('web.FormView'); const ListView = require('web.ListView'); const PivotView = require('web.PivotView'); const testUtils = require('web.test_utils'); +const FavoriteMenu = require("web.FavoriteMenu"); +const ImportMenu = require("base_import.ImportMenu"); -const cpHelpers = testUtils.controlPanel; +const cpHelpers = require('@web/../tests/search/helpers'); const createView = testUtils.createView; QUnit.module('Base Import Tests', { beforeEach: function () { + FavoriteMenu.registry.add("import-menu", ImportMenu, 1); this.data = { foo: { fields: { @@ -42,7 +45,7 @@ QUnit.test('import in favorite dropdown in list', async function (assert) { await testUtils.dom.click(list.$('.o_favorite_menu button')); assert.containsOnce(list, '.o_import_menu'); - await testUtils.dom.click(list.$('.o_import_menu button')); + await testUtils.dom.click(list.$('.o_import_menu')); list.destroy(); }); @@ -102,7 +105,7 @@ QUnit.test('import in favorite dropdown in kanban', async function (assert) { await testUtils.dom.click(kanban.$('.o_favorite_menu button')); assert.containsOnce(kanban, '.o_import_menu'); - await testUtils.dom.click(kanban.$('.o_import_menu button')); + await testUtils.dom.click(kanban.$('.o_import_menu')); kanban.destroy(); }); @@ -198,8 +201,9 @@ QUnit.test('import should not be available in favorite dropdown in dialog view', item: 'Search More', search: '', }); - await cpHelpers.toggleFavoriteMenu('.modal'); - assert.containsNone(document.querySelector('.modal'), '.o_import_menu', + const modal = document.querySelector('.modal'); + await cpHelpers.toggleFavoriteMenu(modal); + assert.containsNone(modal, '.o_import_menu', "Import menu should not be available"); form.destroy(); diff --git a/addons/board/static/src/legacy/js/add_to_board_menu.js b/addons/board/static/src/legacy/js/add_to_board_menu.js index 42a4a70749b..99d057d9f3d 100644 --- a/addons/board/static/src/legacy/js/add_to_board_menu.js +++ b/addons/board/static/src/legacy/js/add_to_board_menu.js @@ -3,12 +3,11 @@ odoo.define('board.AddToBoardMenu', function (require) { const Context = require('web.Context'); const Domain = require('web.Domain'); - const DropdownMenuItem = require('web.DropdownMenuItem'); const FavoriteMenu = require('web.FavoriteMenu'); const { sprintf } = require('web.utils'); const { useAutofocus } = require('web.custom_hooks'); - const { useState } = owl.hooks; + const { Component, useState } = owl; /** * 'Add to board' menu @@ -21,9 +20,8 @@ odoo.define('board.AddToBoardMenu', function (require) { * properties to the server to add the current view (and its context) to the * user's dashboard. * This component is only available in actions of type 'ir.actions.act_window'. - * @extends DropdownMenuItem */ - class AddToBoardMenu extends DropdownMenuItem { + class AddToBoardMenu extends Component { constructor() { super(...arguments); @@ -46,7 +44,7 @@ odoo.define('board.AddToBoardMenu', function (require) { * information. * @private */ - async _addToBoard() { + async addToBoard() { const searchQuery = this.env.searchModel.get('query'); const context = new Context(this.env.action.context); context.add(searchQuery.context); @@ -116,7 +114,7 @@ odoo.define('board.AddToBoardMenu', function (require) { * @private * @param {KeyboardEvent} ev */ - _onInputKeydown(ev) { + onInputKeydown(ev) { switch (ev.key) { case 'Enter': ev.preventDefault(); @@ -144,7 +142,7 @@ odoo.define('board.AddToBoardMenu', function (require) { } AddToBoardMenu.props = {}; - AddToBoardMenu.template = 'AddToBoardMenu'; + AddToBoardMenu.template = 'board.AddToBoard'; FavoriteMenu.registry.add('add-to-board-menu', AddToBoardMenu, 10); diff --git a/addons/board/static/src/legacy/xml/board.xml b/addons/board/static/src/legacy/xml/board.xml index 306bf590ec0..2a43bf20e12 100644 --- a/addons/board/static/src/legacy/xml/board.xml +++ b/addons/board/static/src/legacy/xml/board.xml @@ -80,28 +80,6 @@