Skip to content

Commit 8610eed

Browse files
committed
[IMP] web: add current model to model field filter
This commit adds the current model to the model field filter function. This is needed for spreadsheet in the field matching of selection filters, where we have to know the current model to filter the fields correctly. Task: 3619413 Part-of: odoo#215182 Related: odoo/enterprise#88142 Signed-off-by: Rémi Rahir (rar) <[email protected]>
1 parent b02c691 commit 8610eed

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

addons/web/static/src/core/model_field_selector/model_field_selector_popover.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,9 @@ export class ModelFieldSelectorPopover extends Component {
176176
return fieldDef.relation;
177177
}
178178

179-
filter(fieldDefs, path) {
179+
filter(fieldDefs, path, resModel) {
180180
const filteredKeys = Object.keys(fieldDefs).filter((k) =>
181-
this.props.filter(fieldDefs[k], path)
181+
this.props.filter(fieldDefs[k], path, resModel)
182182
);
183183
return Object.fromEntries(filteredKeys.map((k) => [k, fieldDefs[k]]));
184184
}
@@ -193,7 +193,7 @@ export class ModelFieldSelectorPopover extends Component {
193193
this.state.page.selectedName = fieldDef.name;
194194
const { resModel, fieldDefs } = modelsInfo.at(-1);
195195
this.openPage(
196-
new Page(resModel, this.filter(fieldDefs, this.state.page.path), {
196+
new Page(resModel, this.filter(fieldDefs, this.state.page.path, resModel), {
197197
previousPage: this.state.page,
198198
isDebugMode: this.props.isDebugMode,
199199
readProperty: this.props.readProperty,
@@ -215,7 +215,7 @@ export class ModelFieldSelectorPopover extends Component {
215215
async loadPages(resModel, path) {
216216
if (typeof path !== "string" || !path.length) {
217217
const fieldDefs = await this.fieldService.loadFields(resModel);
218-
return new Page(resModel, this.filter(fieldDefs, path), {
218+
return new Page(resModel, this.filter(fieldDefs, path, resModel), {
219219
isDebugMode: this.props.isDebugMode,
220220
readProperty: this.props.readProperty,
221221
sortFn: this.props.sort,
@@ -227,7 +227,7 @@ export class ModelFieldSelectorPopover extends Component {
227227
throw new Error(`Invalid model name: ${resModel}`);
228228
case "path": {
229229
const { resModel, fieldDefs } = modelsInfo[0];
230-
return new Page(resModel, this.filter(fieldDefs, path), {
230+
return new Page(resModel, this.filter(fieldDefs, path, resModel), {
231231
selectedName: path,
232232
isDebugMode: this.props.isDebugMode,
233233
readProperty: this.props.readProperty,
@@ -239,7 +239,7 @@ export class ModelFieldSelectorPopover extends Component {
239239
for (let index = 0; index < names.length; index++) {
240240
const name = names[index];
241241
const { resModel, fieldDefs } = modelsInfo[index];
242-
page = new Page(resModel, this.filter(fieldDefs, path), {
242+
page = new Page(resModel, this.filter(fieldDefs, path, resModel), {
243243
previousPage: page,
244244
selectedName: name,
245245
isDebugMode: this.props.isDebugMode,

addons/web/static/tests/core/model_field_selector.test.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,18 @@ test("use the filter option", async () => {
173173
readonly: false,
174174
path: "",
175175
resModel: "partner",
176-
filter: (field) => field.type === "many2one" && field.searchable,
176+
filter: (field, path, resModel) => {
177+
const result = field.type === "many2one" && field.searchable;
178+
if (result) {
179+
expect.step(resModel);
180+
}
181+
return result;
182+
},
177183
},
178184
});
179185
await openModelFieldSelectorPopover();
180186
expect(getDisplayedFieldNames()).toEqual(["Product"]);
187+
expect.verifySteps(["partner"]);
181188
});
182189

183190
test("use the sort option", async () => {

0 commit comments

Comments
 (0)