Initial commit: Odoo 18.0-20251222 extra-addons
This commit is contained in:
96
date_range/static/src/js/condition_tree.esm.js
Normal file
96
date_range/static/src/js/condition_tree.esm.js
Normal file
@@ -0,0 +1,96 @@
|
||||
/* global document */
|
||||
import {
|
||||
condition,
|
||||
connector,
|
||||
domainFromTree,
|
||||
formatValue,
|
||||
normalizeValue,
|
||||
treeFromDomain,
|
||||
} from "@web/core/tree_editor/condition_tree";
|
||||
|
||||
function addChild(parent, child) {
|
||||
if (child.type === "connector" && !child.negate && child.value === parent.value) {
|
||||
parent.children.push(...child.children);
|
||||
} else {
|
||||
parent.children.push(child);
|
||||
}
|
||||
}
|
||||
|
||||
export function removeDateRangeOperators(tree) {
|
||||
if (tree.type === "complex_condition") {
|
||||
return tree;
|
||||
}
|
||||
if (tree.type === "condition") {
|
||||
if (!tree.operator.includes("daterange")) {
|
||||
return tree;
|
||||
}
|
||||
const {negate, path, value} = tree;
|
||||
return connector(
|
||||
"&",
|
||||
[condition(path, "<=", value[0]), condition(path, ">=", value[1])],
|
||||
negate
|
||||
);
|
||||
}
|
||||
const processedChildren = tree.children.map(removeDateRangeOperators);
|
||||
if (tree.value === "|") {
|
||||
return {...tree, children: processedChildren};
|
||||
}
|
||||
const newTree = {...tree, children: []};
|
||||
// After processing a child might have become a connector "&" --> normalize
|
||||
for (let i = 0; i < processedChildren.length; i++) {
|
||||
addChild(newTree, processedChildren[i]);
|
||||
}
|
||||
return newTree;
|
||||
}
|
||||
|
||||
function createDateRangeOperators(tree) {
|
||||
if (["condition", "complex_condition"].includes(tree.type)) {
|
||||
return tree;
|
||||
}
|
||||
const processedChildren = tree.children.map(createDateRangeOperators);
|
||||
if (tree.value === "|") {
|
||||
return {...tree, children: processedChildren};
|
||||
}
|
||||
const children = [];
|
||||
let operator = "daterange";
|
||||
if (document.getElementsByTagName("select").length) {
|
||||
operator = document
|
||||
.getElementsByTagName("select")[0]
|
||||
.selectedOptions[0].value.replace(/^"|"$/g, "");
|
||||
}
|
||||
for (let i = 0; i < processedChildren.length; i++) {
|
||||
const child1 = processedChildren[i];
|
||||
const child2 = processedChildren[i + 1];
|
||||
if (
|
||||
child1.type === "condition" &&
|
||||
child2 &&
|
||||
child2.type === "condition" &&
|
||||
formatValue(child1.path) === formatValue(child2.path) &&
|
||||
child1.operator === "<=" &&
|
||||
child2.operator === ">="
|
||||
) {
|
||||
children.push(
|
||||
condition(
|
||||
child1.path,
|
||||
operator,
|
||||
normalizeValue([child1.value, child2.value])
|
||||
)
|
||||
);
|
||||
i += 1;
|
||||
} else {
|
||||
children.push(child1);
|
||||
}
|
||||
}
|
||||
if (children.length === 1) {
|
||||
return {...children[0]};
|
||||
}
|
||||
return {...tree, children};
|
||||
}
|
||||
|
||||
export function domainFromTreeDateRange(tree) {
|
||||
return domainFromTree(removeDateRangeOperators(tree));
|
||||
}
|
||||
|
||||
export function treeFromDomainDateRange(domain, options = {}) {
|
||||
return createDateRangeOperators(treeFromDomain(domain, options));
|
||||
}
|
||||
Reference in New Issue
Block a user