[FIX] web_advanced_search: Implement 'Add Advanced Filter' for owl widgets (pivot, graph)

Steps to reproduce:

1. Go to any Pivot or Graph view.
2. Open the filter menu.

Result:

'Add Advanced Filter' option is not there
pull/2357/head
Ivàn Todorovich 2022-07-19 16:00:48 -03:00 committed by Raf Ven
parent e3d1f7c2dc
commit f6997d5759
5 changed files with 65 additions and 3 deletions

View File

@ -1,6 +1,6 @@
/** @odoo-module **/ /** @odoo-module **/
import {getHumanDomain} from "./utils.esm"; import {getHumanDomain} from "../utils.esm";
import config from "web.config"; import config from "web.config";
import DomainSelectorDialog from "web.DomainSelectorDialog"; import DomainSelectorDialog from "web.DomainSelectorDialog";

View File

@ -2,7 +2,7 @@
import {patch} from "@web/core/utils/patch"; import {patch} from "@web/core/utils/patch";
import FilterMenu from "web.FilterMenu"; import FilterMenu from "web.FilterMenu";
import AdvancedFilterItem from "../AdvancedFilterItem.esm"; import AdvancedFilterItem from "./AdvancedFilterItem.esm";
/** /**
* Patches the FilterMenu for legacy widgets. * Patches the FilterMenu for legacy widgets.

View File

@ -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";

View File

@ -2,7 +2,7 @@
import {patch} from "@web/core/utils/patch"; import {patch} from "@web/core/utils/patch";
import {FilterMenu} from "@web/search/filter_menu/filter_menu"; 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. * Patches the FilterMenu for owl widgets.

View File

@ -10,4 +10,9 @@
<AdvancedFilterItem /> <AdvancedFilterItem />
</CustomFilterItem> </CustomFilterItem>
</t> </t>
<t t-inherit="web.FilterMenu" t-inherit-mode="extension" owl="1">
<CustomFilterItem position="after">
<AdvancedFilterItem />
</CustomFilterItem>
</t>
</templates> </templates>