diff --git a/web_advanced_search/static/src/js/AdvancedFilterItem.esm.js b/web_advanced_search/static/src/js/legacy/AdvancedFilterItem.esm.js similarity index 97% rename from web_advanced_search/static/src/js/AdvancedFilterItem.esm.js rename to web_advanced_search/static/src/js/legacy/AdvancedFilterItem.esm.js index 73360f387..0a837abda 100644 --- a/web_advanced_search/static/src/js/AdvancedFilterItem.esm.js +++ b/web_advanced_search/static/src/js/legacy/AdvancedFilterItem.esm.js @@ -1,6 +1,6 @@ /** @odoo-module **/ -import {getHumanDomain} from "./utils.esm"; +import {getHumanDomain} from "../utils.esm"; import config from "web.config"; import DomainSelectorDialog from "web.DomainSelectorDialog"; diff --git a/web_advanced_search/static/src/js/legacy/FilterMenu.esm.js b/web_advanced_search/static/src/js/legacy/FilterMenu.esm.js index 8f11ad0f8..578e88e08 100644 --- a/web_advanced_search/static/src/js/legacy/FilterMenu.esm.js +++ b/web_advanced_search/static/src/js/legacy/FilterMenu.esm.js @@ -2,7 +2,7 @@ import {patch} from "@web/core/utils/patch"; import FilterMenu from "web.FilterMenu"; -import AdvancedFilterItem from "../AdvancedFilterItem.esm"; +import AdvancedFilterItem from "./AdvancedFilterItem.esm"; /** * Patches the FilterMenu for legacy widgets. diff --git a/web_advanced_search/static/src/js/owl/AdvancedFilterItem.esm.js b/web_advanced_search/static/src/js/owl/AdvancedFilterItem.esm.js new file mode 100644 index 000000000..71b740bbe --- /dev/null +++ b/web_advanced_search/static/src/js/owl/AdvancedFilterItem.esm.js @@ -0,0 +1,57 @@ +/** @odoo-module **/ + +import {getHumanDomain} from "../utils.esm"; + +import config from "web.config"; +import DomainSelectorDialog from "web.DomainSelectorDialog"; +import Domain from "web.Domain"; +import {ComponentAdapter} from "web.OwlCompatibility"; + +const {Component, hooks} = owl; +const {useRef} = hooks; + +export default class AdvancedFilterItem extends Component { + setup() { + this.itemRef = useRef("dropdown-item"); + } + /** + * Prevent propagation of dropdown-item-selected event, so that it + * doesn't reaches the FilterMenu onFilterSelected event handler. + */ + mounted() { + $(this.itemRef.el).on("dropdown-item-selected", (event) => + event.stopPropagation() + ); + } + /** + * Open advanced search dialog + * + * @returns {DomainSelectorDialog} The opened dialog itself. + */ + onClick() { + const adapterParent = new ComponentAdapter(null, {Component}); + const dialog = new DomainSelectorDialog( + adapterParent, + this.env.searchModel.resModel, + "[]", + { + debugMode: config.isDebug(), + readonly: false, + } + ); + // Add 1st domain node by default + dialog.opened(() => dialog.domainSelector._onAddFirstButtonClick()); + // Configure handler + dialog.on("domain_selected", this, function (e) { + const preFilter = { + description: getHumanDomain(dialog.domainSelector), + domain: Domain.prototype.arrayToString(e.data.domain), + type: "filter", + }; + this.env.searchModel.createNewFilters([preFilter]); + }); + return dialog.open(); + } +} + +AdvancedFilterItem.template = "web_advanced_search.AdvancedFilterItem"; diff --git a/web_advanced_search/static/src/js/owl/FilterMenu.esm.js b/web_advanced_search/static/src/js/owl/FilterMenu.esm.js index 4afecd8c9..1e22fbb70 100644 --- a/web_advanced_search/static/src/js/owl/FilterMenu.esm.js +++ b/web_advanced_search/static/src/js/owl/FilterMenu.esm.js @@ -2,7 +2,7 @@ import {patch} from "@web/core/utils/patch"; import {FilterMenu} from "@web/search/filter_menu/filter_menu"; -import AdvancedFilterItem from "../AdvancedFilterItem.esm"; +import AdvancedFilterItem from "./AdvancedFilterItem.esm"; /** * Patches the FilterMenu for owl widgets. diff --git a/web_advanced_search/static/src/xml/FilterMenu.xml b/web_advanced_search/static/src/xml/FilterMenu.xml index 34dd3d4b8..058a9b17b 100644 --- a/web_advanced_search/static/src/xml/FilterMenu.xml +++ b/web_advanced_search/static/src/xml/FilterMenu.xml @@ -10,4 +10,9 @@ + + + + +