mirror of
https://github.com/OCA/web.git
synced 2025-02-22 13:21:25 +02:00
85 lines
3.2 KiB
JavaScript
85 lines
3.2 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import {patch} from "@web/core/utils/patch";
|
|
import {rankInterval} from "@web/search/utils/dates";
|
|
import {SearchModel} from "@web/search/search_model";
|
|
|
|
patch(SearchModel.prototype, "web_search_with_and/static/src/js/search_model.js", {
|
|
_getGroups() {
|
|
const preGroups = [];
|
|
for (const queryElem of this.query) {
|
|
const {searchItemId} = queryElem;
|
|
let {groupId} = this.searchItems[searchItemId];
|
|
if ("autocompleteValue" in queryElem) {
|
|
if (queryElem.autocompleteValue.isShiftKey) {
|
|
groupId = Math.random();
|
|
}
|
|
}
|
|
let preGroup = preGroups.find((group) => group.id === groupId);
|
|
if (!preGroup) {
|
|
preGroup = {id: groupId, queryElements: []};
|
|
preGroups.push(preGroup);
|
|
}
|
|
queryElem.groupId = groupId;
|
|
preGroup.queryElements.push(queryElem);
|
|
}
|
|
const groups = [];
|
|
for (const preGroup of preGroups) {
|
|
const {queryElements, id} = preGroup;
|
|
const activeItems = [];
|
|
for (const queryElem of queryElements) {
|
|
const {searchItemId} = queryElem;
|
|
let activeItem = activeItems.find(
|
|
({searchItemId: id}) => id === searchItemId
|
|
);
|
|
if ("generatorId" in queryElem) {
|
|
if (!activeItem) {
|
|
activeItem = {searchItemId, generatorIds: []};
|
|
activeItems.push(activeItem);
|
|
}
|
|
activeItem.generatorIds.push(queryElem.generatorId);
|
|
} else if ("intervalId" in queryElem) {
|
|
if (!activeItem) {
|
|
activeItem = {searchItemId, intervalIds: []};
|
|
activeItems.push(activeItem);
|
|
}
|
|
activeItem.intervalIds.push(queryElem.intervalId);
|
|
} else if ("autocompleteValue" in queryElem) {
|
|
if (!activeItem) {
|
|
activeItem = {searchItemId, autocompletValues: []};
|
|
activeItems.push(activeItem);
|
|
}
|
|
activeItem.autocompletValues.push(queryElem.autocompleteValue);
|
|
} else if (!activeItem) {
|
|
activeItem = {searchItemId};
|
|
activeItems.push(activeItem);
|
|
}
|
|
}
|
|
for (const activeItem of activeItems) {
|
|
if ("intervalIds" in activeItem) {
|
|
activeItem.intervalIds.sort(
|
|
(g1, g2) => rankInterval(g1) - rankInterval(g2)
|
|
);
|
|
}
|
|
}
|
|
groups.push({id, activeItems});
|
|
}
|
|
|
|
return groups;
|
|
},
|
|
deactivateGroup(groupId) {
|
|
this.query = this.query.filter((queryElem) => {
|
|
return queryElem.groupId !== groupId;
|
|
});
|
|
|
|
for (const partName in this.domainParts) {
|
|
const part = this.domainParts[partName];
|
|
if (part.groupId === groupId) {
|
|
this.setDomainParts({[partName]: null});
|
|
}
|
|
}
|
|
this._checkComparisonStatus();
|
|
this._notify();
|
|
},
|
|
});
|