[IMP] web: domain selector: getDefaultFieldValue should know operator

The computation of the default value used by an editor used to assume
that the (default) operator is equal. We now pass the operator info to
getDefaultFieldValue in order to be able to have a different default
operator ("in" will become the default operator for relational fields).

Part-of: odoo/odoo#126350
This commit is contained in:
Mathieu Duckerts-Antoine
2023-07-03 16:58:54 +02:00
parent 03858851a9
commit 7a13c3f3d0
3 changed files with 18 additions and 9 deletions
@@ -192,7 +192,7 @@ export class DomainSelector extends Component {
const pathInfo = { path, fieldDef };
node.pathInfo = pathInfo;
node.operatorInfo = getOperatorsInfo(pathInfo.fieldDef)[0];
node.value = getDefaultFieldValue(pathInfo.fieldDef);
node.value = getDefaultFieldValue(pathInfo.fieldDef, node.operatorInfo.key);
this.notifyChanges();
}
@@ -213,12 +213,18 @@ export class DomainSelector extends Component {
}
// binary operator with a non array value
case 1: {
node.value = getDefaultFieldValue(node.pathInfo.fieldDef);
node.value = getDefaultFieldValue(
node.pathInfo.fieldDef,
node.operatorInfo.key
);
break;
}
// binary operator with a fixed sized array value
default: {
const defaultValue = getDefaultFieldValue(node.pathInfo.fieldDef);
const defaultValue = getDefaultFieldValue(
node.pathInfo.fieldDef,
node.operatorInfo.key
);
node.value = Array(node.operatorInfo.valueCount).fill(defaultValue);
break;
}
@@ -237,7 +243,10 @@ export class DomainSelector extends Component {
}
removeExprValue(node) {
this.updateLeafValue(node, getDefaultFieldValue(node.pathInfo.fieldDef));
this.updateLeafValue(
node,
getDefaultFieldValue(node.pathInfo.fieldDef, node.operatorInfo.key)
);
}
onDebugValueChange(value) {
@@ -388,12 +388,12 @@ export function getOperatorsInfo(fieldDef) {
return selectOperators(descr.operators);
}
export function getDefaultFieldValue(fieldDef) {
export function getDefaultFieldValue(fieldDef, operatorKey) {
const descr = getFieldInfo(fieldDef);
return descr.defaultValue(fieldDef);
return descr.defaultValue(fieldDef, operatorKey);
}
export function getDefaultOperator(fieldDef) {
const [firstOperator] = getOperatorsInfo(fieldDef);
return firstOperator.symbol;
return firstOperator;
}
@@ -49,8 +49,8 @@ function getDefaultDomain(fieldDefs) {
fieldDef = fieldDefs[name];
if (fieldDef) {
const operator = getDefaultOperator(fieldDef);
const defaultValue = getDefaultFieldValue(fieldDef);
return new Domain([[fieldDef.name, operator, defaultValue]]).toString();
const defaultValue = getDefaultFieldValue(fieldDef, operator.key);
return new Domain([[fieldDef.name, operator.symbol, defaultValue]]).toString();
}
}
return new Domain([["id", "=", 1]]).toString();