From ffc359dc5ca2040bffc35bf246b239b43fc0366f Mon Sep 17 00:00:00 2001 From: Pierre Paridans Date: Fri, 14 Apr 2023 09:14:52 +0000 Subject: [PATCH] [IMP] web,*: CP's CogMenu rework to add misc items from favorite Part-of: odoo/odoo#116641 --- .../src/import_records/import_records.js | 4 +- .../static/src/add_to_board/add_to_board.js | 4 +- .../src/views/activity/activity_controller.js | 3 +- .../views/activity/activity_controller.xml | 3 ++ .../action_menus_items.js} | 5 +- .../search/cog_menu/action_menus_items.xml | 30 ++++++++++++ .../static/src/search/cog_menu/cog_menu.js | 48 +++++++++++++++++++ .../static/src/search/cog_menu/cog_menu.xml | 22 +++++++++ .../combined_action_menus.xml | 37 -------------- .../src/views/calendar/calendar_controller.js | 2 + .../views/calendar/calendar_controller.xml | 3 ++ .../static/src/views/form/form_controller.js | 6 ++- .../static/src/views/form/form_controller.xml | 22 +++++---- .../src/views/graph/graph_controller.js | 3 +- .../src/views/graph/graph_controller.xml | 3 ++ .../src/views/kanban/kanban_controller.js | 3 +- .../src/views/kanban/kanban_controller.xml | 3 ++ .../static/src/views/list/list_controller.js | 4 +- .../static/src/views/list/list_controller.xml | 17 +++++-- .../src/views/pivot/pivot_controller.js | 3 +- .../src/views/pivot/pivot_controller.xml | 3 ++ 21 files changed, 163 insertions(+), 65 deletions(-) rename addons/web/static/src/search/{combined_action_menus/combined_action_menus.js => cog_menu/action_menus_items.js} (84%) create mode 100644 addons/web/static/src/search/cog_menu/action_menus_items.xml create mode 100644 addons/web/static/src/search/cog_menu/cog_menu.js create mode 100644 addons/web/static/src/search/cog_menu/cog_menu.xml delete mode 100644 addons/web/static/src/search/combined_action_menus/combined_action_menus.xml diff --git a/addons/base_import/static/src/import_records/import_records.js b/addons/base_import/static/src/import_records/import_records.js index 8b035061d47..83e7ce22bec 100644 --- a/addons/base_import/static/src/import_records/import_records.js +++ b/addons/base_import/static/src/import_records/import_records.js @@ -5,7 +5,7 @@ import { registry } from "@web/core/registry"; import { useService } from "@web/core/utils/hooks"; import { Component } from "@odoo/owl"; -const favoriteMenuRegistry = registry.category("favoriteMenu"); +const cogMenuRegistry = registry.category("cogMenu"); /** * 'Import records' menu @@ -46,4 +46,4 @@ export const importRecordsItem = { !!JSON.parse(config.viewArch.getAttribute("create") || "1"), }; -favoriteMenuRegistry.add("import-menu", importRecordsItem, { sequence: 1 }); +cogMenuRegistry.add("import-menu", importRecordsItem, { sequence: 1 }); diff --git a/addons/board/static/src/add_to_board/add_to_board.js b/addons/board/static/src/add_to_board/add_to_board.js index 4602e156c21..7b257200e60 100644 --- a/addons/board/static/src/add_to_board/add_to_board.js +++ b/addons/board/static/src/add_to_board/add_to_board.js @@ -6,7 +6,7 @@ import { useAutofocus, useService } from "@web/core/utils/hooks"; import { sprintf } from "@web/core/utils/strings"; const { Component, useState } = owl; -const favoriteMenuRegistry = registry.category("favoriteMenu"); +const cogMenuRegistry = registry.category("cogMenu"); /** * 'Add to board' menu @@ -99,4 +99,4 @@ export const addToBoardItem = { isDisplayed: ({ config }) => config.actionType === "ir.actions.act_window" && config.actionId, }; -favoriteMenuRegistry.add("add-to-board", addToBoardItem, { sequence: 10 }); +cogMenuRegistry.add("add-to-board", addToBoardItem, { sequence: 10 }); diff --git a/addons/mail/static/src/views/activity/activity_controller.js b/addons/mail/static/src/views/activity/activity_controller.js index be247c0e156..9a3fe0d71c2 100644 --- a/addons/mail/static/src/views/activity/activity_controller.js +++ b/addons/mail/static/src/views/activity/activity_controller.js @@ -11,9 +11,10 @@ import { sprintf } from "@web/core/utils/strings"; import { useModel } from "@web/views/model"; import { useService } from "@web/core/utils/hooks"; import { SearchBar } from "@web/search/search_bar/search_bar"; +import { CogMenu } from "@web/search/cog_menu/cog_menu"; export class ActivityController extends Component { - static components = { Layout, SearchBar }; + static components = { Layout, SearchBar, CogMenu }; static props = { ...standardViewProps, Model: Function, diff --git a/addons/mail/static/src/views/activity/activity_controller.xml b/addons/mail/static/src/views/activity/activity_controller.xml index 96b2faac37c..fb3f56e89da 100644 --- a/addons/mail/static/src/views/activity/activity_controller.xml +++ b/addons/mail/static/src/views/activity/activity_controller.xml @@ -3,6 +3,9 @@
+ + + diff --git a/addons/web/static/src/search/combined_action_menus/combined_action_menus.js b/addons/web/static/src/search/cog_menu/action_menus_items.js similarity index 84% rename from addons/web/static/src/search/combined_action_menus/combined_action_menus.js rename to addons/web/static/src/search/cog_menu/action_menus_items.js index 87f7de24961..1dc0406c531 100644 --- a/addons/web/static/src/search/combined_action_menus/combined_action_menus.js +++ b/addons/web/static/src/search/cog_menu/action_menus_items.js @@ -2,6 +2,7 @@ import { ActionMenus } from "@web/search/action_menus/action_menus"; + /** * Combined Action menus (or Action/Print bar, previously called 'Sidebar') * @@ -14,6 +15,6 @@ import { ActionMenus } from "@web/search/action_menus/action_menus"; * * @extends Component */ -export class CombinedActionMenus extends ActionMenus { - static template = "web.CombinedActionMenus"; +export class ActionMenusItems extends ActionMenus { + static template = "web.ActionMenusItems"; } diff --git a/addons/web/static/src/search/cog_menu/action_menus_items.xml b/addons/web/static/src/search/cog_menu/action_menus_items.xml new file mode 100644 index 00000000000..b38bada3f18 --- /dev/null +++ b/addons/web/static/src/search/cog_menu/action_menus_items.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/web/static/src/search/cog_menu/cog_menu.js b/addons/web/static/src/search/cog_menu/cog_menu.js new file mode 100644 index 00000000000..7c2a110236a --- /dev/null +++ b/addons/web/static/src/search/cog_menu/cog_menu.js @@ -0,0 +1,48 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import { Dropdown } from "@web/core/dropdown/dropdown"; + +import { Component } from "@odoo/owl"; + +const cogMenuRegistry = registry.category("cogMenu"); + +/** + * Combined Action menus (or Action/Print bar, previously called 'Sidebar') + * + * This is a variation of the ActionMenus, combined into a single DropDown. + * + * The side bar is the group of dropdown menus located on the left side of the + * control panel. Its role is to display a list of items depending on the view + * type and selected records and to execute a set of actions on active records. + * It is made out of 2 dropdown: Print and Action. + * + * @extends Component + */ +export class CogMenu extends Component { + static template = "web.CogMenu"; + static components = { + Dropdown, + } + static props = { + slots: { type: Object, optional: true }, + }; + + get hasItems() { + return this.cogItems.length || !!this.props.slots?.default; + } + + get cogItems() { + const registryMenus = []; + for (const item of cogMenuRegistry.getAll()) { + if ("isDisplayed" in item ? item.isDisplayed(this.env) : true) { + registryMenus.push({ + Component: item.Component, + groupNumber: item.groupNumber, + key: item.Component.name, + }); + } + } + return registryMenus; + } +} diff --git a/addons/web/static/src/search/cog_menu/cog_menu.xml b/addons/web/static/src/search/cog_menu/cog_menu.xml new file mode 100644 index 00000000000..975cc28293a --- /dev/null +++ b/addons/web/static/src/search/cog_menu/cog_menu.xml @@ -0,0 +1,22 @@ + + + + +
+ + + + + + + + + + diff --git a/addons/web/static/src/search/combined_action_menus/combined_action_menus.xml b/addons/web/static/src/search/combined_action_menus/combined_action_menus.xml deleted file mode 100644 index d6c0a775336..00000000000 --- a/addons/web/static/src/search/combined_action_menus/combined_action_menus.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
-
- -
diff --git a/addons/web/static/src/views/calendar/calendar_controller.js b/addons/web/static/src/views/calendar/calendar_controller.js index 842aa5932d7..1c0f50f8c9d 100644 --- a/addons/web/static/src/views/calendar/calendar_controller.js +++ b/addons/web/static/src/views/calendar/calendar_controller.js @@ -14,6 +14,7 @@ import { CalendarMobileFilterPanel } from "./mobile_filter_panel/calendar_mobile import { CalendarQuickCreate } from "./quick_create/calendar_quick_create"; import { SearchBar } from "@web/search/search_bar/search_bar"; import { ViewScaleSelector } from "@web/views/view_components/view_scale_selector"; +import { CogMenu } from "@web/search/cog_menu/cog_menu"; import { Component, useState } from "@odoo/owl"; @@ -220,5 +221,6 @@ CalendarController.components = { Layout, SearchBar, ViewScaleSelector, + CogMenu, }; CalendarController.template = "web.CalendarController"; diff --git a/addons/web/static/src/views/calendar/calendar_controller.xml b/addons/web/static/src/views/calendar/calendar_controller.xml index a16f23cf50a..5d329324cfc 100644 --- a/addons/web/static/src/views/calendar/calendar_controller.xml +++ b/addons/web/static/src/views/calendar/calendar_controller.xml @@ -4,6 +4,9 @@
+ + + diff --git a/addons/web/static/src/views/form/form_controller.js b/addons/web/static/src/views/form/form_controller.js index 03bb5abee5a..46db5cd192b 100644 --- a/addons/web/static/src/views/form/form_controller.js +++ b/addons/web/static/src/views/form/form_controller.js @@ -9,7 +9,6 @@ import { SIZES } from "@web/core/ui/ui_service"; import { useBus, useService } from "@web/core/utils/hooks"; import { omit } from "@web/core/utils/objects"; import { createElement } from "@web/core/utils/xml"; -import { CombinedActionMenus } from "@web/search/combined_action_menus/combined_action_menus"; import { Layout } from "@web/search/layout"; import { usePager } from "@web/search/pager_hook"; import { useModel } from "@web/views/model"; @@ -21,6 +20,8 @@ import { FormStatusIndicator } from "./form_status_indicator/form_status_indicat import { ButtonBox } from "./button_box/button_box"; import { ViewButton } from "@web/views/view_button/view_button"; import { Field } from "@web/views/fields/field"; +import { CogMenu } from "@web/search/cog_menu/cog_menu"; +import { ActionMenusItems } from "@web/search/cog_menu/action_menus_items"; import { Component, onRendered, useEffect, useRef, useState } from "@odoo/owl"; import { useViewCompiler } from "../view_compiler"; @@ -496,12 +497,13 @@ export class FormController extends Component { FormController.template = `web.FormView`; FormController.components = { - CombinedActionMenus, FormStatusIndicator, Layout, ButtonBox, ViewButton, Field, + CogMenu, + ActionMenusItems, }; FormController.props = { ...standardViewProps, diff --git a/addons/web/static/src/views/form/form_controller.xml b/addons/web/static/src/views/form/form_controller.xml index a96de55f851..1207d7cef31 100644 --- a/addons/web/static/src/views/form/form_controller.xml +++ b/addons/web/static/src/views/form/form_controller.xml @@ -30,16 +30,18 @@ - + + + diff --git a/addons/web/static/src/views/graph/graph_controller.js b/addons/web/static/src/views/graph/graph_controller.js index 9621003f943..edc9ad35251 100644 --- a/addons/web/static/src/views/graph/graph_controller.js +++ b/addons/web/static/src/views/graph/graph_controller.js @@ -6,6 +6,7 @@ import { useModel } from "@web/views/model"; import { standardViewProps } from "@web/views/standard_view_props"; import { useSetupView } from "@web/views/view_hook"; import { SearchBar } from "@web/search/search_bar/search_bar"; +import { CogMenu } from "@web/search/cog_menu/cog_menu"; import { Component, useRef } from "@odoo/owl"; @@ -45,7 +46,7 @@ export class GraphController extends Component { } GraphController.template = "web.GraphView"; -GraphController.components = { Layout, GroupByMenu, SearchBar }; +GraphController.components = { Layout, GroupByMenu, SearchBar, CogMenu }; GraphController.props = { ...standardViewProps, diff --git a/addons/web/static/src/views/graph/graph_controller.xml b/addons/web/static/src/views/graph/graph_controller.xml index d5a9bcd9eef..41f415f131c 100644 --- a/addons/web/static/src/views/graph/graph_controller.xml +++ b/addons/web/static/src/views/graph/graph_controller.xml @@ -53,6 +53,9 @@
+ + + diff --git a/addons/web/static/src/views/kanban/kanban_controller.js b/addons/web/static/src/views/kanban/kanban_controller.js index 95567e7838d..5debaf631b1 100644 --- a/addons/web/static/src/views/kanban/kanban_controller.js +++ b/addons/web/static/src/views/kanban/kanban_controller.js @@ -10,6 +10,7 @@ import { useViewButtons } from "@web/views/view_button/view_button_hook"; import { useSetupView } from "@web/views/view_hook"; import { KanbanRenderer } from "./kanban_renderer"; import { SearchBar } from "@web/search/search_bar/search_bar"; +import { CogMenu } from "@web/search/cog_menu/cog_menu"; import { Component, reactive, useRef } from "@odoo/owl"; @@ -175,7 +176,7 @@ export class KanbanController extends Component { } KanbanController.template = `web.KanbanView`; -KanbanController.components = { Layout, KanbanRenderer, MultiRecordViewButton, SearchBar }; +KanbanController.components = { Layout, KanbanRenderer, MultiRecordViewButton, SearchBar, CogMenu }; KanbanController.props = { ...standardViewProps, defaultGroupBy: { validate: (dgb) => !dgb || typeof dgb === "string", optional: true }, diff --git a/addons/web/static/src/views/kanban/kanban_controller.xml b/addons/web/static/src/views/kanban/kanban_controller.xml index 7edac28271d..966147bbc9c 100644 --- a/addons/web/static/src/views/kanban/kanban_controller.xml +++ b/addons/web/static/src/views/kanban/kanban_controller.xml @@ -29,6 +29,9 @@ /> + + + diff --git a/addons/web/static/src/views/list/list_controller.js b/addons/web/static/src/views/list/list_controller.js index 8fc699e149f..ae9e226dcc8 100644 --- a/addons/web/static/src/views/list/list_controller.js +++ b/addons/web/static/src/views/list/list_controller.js @@ -23,6 +23,8 @@ import { ListConfirmationDialog } from "./list_confirmation_dialog"; import { SearchBar } from "@web/search/search_bar/search_bar"; import { Dropdown } from "@web/core/dropdown/dropdown"; import { DropdownItem } from "@web/core/dropdown/dropdown_item"; +import { CogMenu } from "@web/search/cog_menu/cog_menu"; +import { ActionMenusItems } from "@web/search/cog_menu/action_menus_items"; import { Component, onMounted, onWillStart, useEffect, useRef, useSubEnv } from "@odoo/owl"; @@ -589,7 +591,7 @@ export class ListController extends Component { } ListController.template = `web.ListView`; -ListController.components = { ActionMenus, Layout, ViewButton, MultiRecordViewButton, SearchBar, Dropdown, DropdownItem }; +ListController.components = { ActionMenus, Layout, ViewButton, MultiRecordViewButton, SearchBar, Dropdown, DropdownItem, CogMenu, ActionMenusItems }; ListController.props = { ...standardViewProps, allowSelectors: { type: Boolean, optional: true }, diff --git a/addons/web/static/src/views/list/list_controller.xml b/addons/web/static/src/views/list/list_controller.xml index 4cd336c90ea..e8397675af6 100644 --- a/addons/web/static/src/views/list/list_controller.xml +++ b/addons/web/static/src/views/list/list_controller.xml @@ -63,14 +63,21 @@
- - - - + Export All - + + + +
diff --git a/addons/web/static/src/views/pivot/pivot_controller.js b/addons/web/static/src/views/pivot/pivot_controller.js index ed194cab709..2c545268eed 100644 --- a/addons/web/static/src/views/pivot/pivot_controller.js +++ b/addons/web/static/src/views/pivot/pivot_controller.js @@ -5,6 +5,7 @@ import { useModel } from "@web/views/model"; import { standardViewProps } from "@web/views/standard_view_props"; import { useSetupView } from "@web/views/view_hook"; import { SearchBar } from "@web/search/search_bar/search_bar"; +import { CogMenu } from "@web/search/cog_menu/cog_menu"; import { Component, useRef } from "@odoo/owl"; @@ -34,7 +35,7 @@ export class PivotController extends Component { } PivotController.template = "web.PivotView"; -PivotController.components = { Layout, SearchBar }; +PivotController.components = { Layout, SearchBar, CogMenu }; PivotController.props = { ...standardViewProps, diff --git a/addons/web/static/src/views/pivot/pivot_controller.xml b/addons/web/static/src/views/pivot/pivot_controller.xml index 513bca8227d..c75f76b260f 100644 --- a/addons/web/static/src/views/pivot/pivot_controller.xml +++ b/addons/web/static/src/views/pivot/pivot_controller.xml @@ -21,6 +21,9 @@
+ + +