diff --git a/addons/web/static/src/views/form/form_renderer.js b/addons/web/static/src/views/form/form_renderer.js
index b1f58ce66f3..bcb68d6564a 100644
--- a/addons/web/static/src/views/form/form_renderer.js
+++ b/addons/web/static/src/views/form/form_renderer.js
@@ -34,12 +34,7 @@ export class FormRenderer extends Component {
const { arch, xmlDoc } = archInfo;
const templates = { FormRenderer: xmlDoc };
this.state = useState({}); // Used by Form Compiler
- this.templates = useViewCompiler(
- Compiler || FormCompiler,
- arch,
- templates,
- this.compileParams
- );
+ this.templates = useViewCompiler(Compiler || FormCompiler, arch, templates);
useSubEnv({ model: record.model });
useBounceButton(useRef("compiled_view_root"), (target) => {
return !record.isInEdition && !!target.closest(".oe_title, .o_inner_group");
@@ -88,10 +83,6 @@ export class FormRenderer extends Component {
evalDomainFromRecord(record, expr) {
return evalDomain(expr, record.evalContext);
}
-
- get compileParams() {
- return {};
- }
}
FormRenderer.template = xml``;
diff --git a/addons/web/static/src/webclient/settings_form_view/highlight_text/highlight_text.xml b/addons/web/static/src/webclient/settings_form_view/highlight_text/highlight_text.xml
index cd2e16ad107..c609e6a9f6a 100644
--- a/addons/web/static/src/webclient/settings_form_view/highlight_text/highlight_text.xml
+++ b/addons/web/static/src/webclient/settings_form_view/highlight_text/highlight_text.xml
@@ -1,9 +1,11 @@
-
-
-
-
+
+
+
+
+
+
diff --git a/addons/web/static/src/webclient/settings_form_view/highlight_text/settings_radio_field.js b/addons/web/static/src/webclient/settings_form_view/highlight_text/settings_radio_field.js
index 17aaf665d52..e59f9ee4fc4 100644
--- a/addons/web/static/src/webclient/settings_form_view/highlight_text/settings_radio_field.js
+++ b/addons/web/static/src/webclient/settings_form_view/highlight_text/settings_radio_field.js
@@ -12,10 +12,6 @@ export class SettingsRadioField extends RadioField {
export const settingsRadioField = {
...radioField,
component: SettingsRadioField,
- extractStringExpr(fieldName, record) {
- const radioItems = SettingsRadioField.getItems(fieldName, record);
- return radioItems.map((r) => r[1]);
- },
};
registry.category("fields").add("base_settings.radio", settingsRadioField);
diff --git a/addons/web/static/src/webclient/settings_form_view/settings/searchable_setting.js b/addons/web/static/src/webclient/settings_form_view/settings/searchable_setting.js
index 5cfc48589ae..1db2c809f71 100644
--- a/addons/web/static/src/webclient/settings_form_view/settings/searchable_setting.js
+++ b/addons/web/static/src/webclient/settings_form_view/settings/searchable_setting.js
@@ -2,19 +2,28 @@
import { escapeRegExp } from "@web/core/utils/strings";
import { Setting } from "@web/views/form/setting/setting";
-import { useState } from "@odoo/owl";
+import { onMounted, useRef, useState } from "@odoo/owl";
import { FormLabelHighlightText } from "../highlight_text/form_label_highlight_text";
import { HighlightText } from "../highlight_text/highlight_text";
export class SearchableSetting extends Setting {
setup() {
+ this.settingRef = useRef("setting");
this.state = useState({
search: this.env.searchState,
showAllContainer: this.env.showAllContainer,
});
- this.labels = this.props.labels || [];
+ this.labels = [];
this.labels.push(this.labelString, this.props.help);
super.setup();
+ onMounted(() => {
+ if (this.settingRef.el) {
+ const searchableTexts = this.settingRef.el.querySelectorAll("span[searchableText]");
+ searchableTexts.forEach((st) => {
+ this.labels.push(st.getAttribute("searchableText"));
+ });
+ }
+ });
}
get classNames() {
@@ -43,7 +52,3 @@ SearchableSetting.components = {
FormLabel: FormLabelHighlightText,
HighlightText,
};
-SearchableSetting.props = {
- ...Setting.props,
- labels: { type: Array, optional: 1 },
-};
diff --git a/addons/web/static/src/webclient/settings_form_view/settings/searchable_setting.xml b/addons/web/static/src/webclient/settings_form_view/settings/searchable_setting.xml
index 741079baa2e..611b48449c8 100644
--- a/addons/web/static/src/webclient/settings_form_view/settings/searchable_setting.xml
+++ b/addons/web/static/src/webclient/settings_form_view/settings/searchable_setting.xml
@@ -2,6 +2,7 @@
diff --git a/addons/web/static/src/webclient/settings_form_view/settings_form_compiler.js b/addons/web/static/src/webclient/settings_form_view/settings_form_compiler.js
index f1bda03a608..1ac1a1acb9c 100644
--- a/addons/web/static/src/webclient/settings_form_view/settings_form_compiler.js
+++ b/addons/web/static/src/webclient/settings_form_view/settings_form_compiler.js
@@ -89,30 +89,13 @@ export class SettingsFormCompiler extends FormCompiler {
compileSetting(el, params) {
params.componentName =
el.getAttribute("type") === "header" ? "SettingHeader" : "SearchableSetting";
- params.labels = [];
const res = super.compileSetting(el, params);
- if (params.componentName === "SearchableSetting") {
- res.setAttribute("labels", JSON.stringify(params.labels));
- }
- delete params.labels;
- return res;
- }
-
- compileField(el, params) {
- const res = super.compileField(el, params);
- if (params.labels && el.hasAttribute("widget")) {
- const label = params.getFieldExpr(el.getAttribute("name"), el.getAttribute("widget"));
- if (label) {
- params.labels.push(label);
- }
- }
return res;
}
compileNode(node, params, evalInvisible) {
if (isTextNode(node)) {
- if (params.labels && node.textContent.trim()) {
- params.labels.push(node.textContent.trim());
+ if (node.textContent.trim()) {
return createElement("HighlightText", {
originalText: toStringExpression(node.textContent),
});
@@ -121,18 +104,9 @@ export class SettingsFormCompiler extends FormCompiler {
return super.compileNode(node, params, evalInvisible);
}
- createLabelFromField(fieldId, fieldName, fieldString, label, params) {
- const res = super.createLabelFromField(fieldId, fieldName, fieldString, label, params);
- if (res.hasAttribute("string") && params.labels) {
- params.labels.push(res.getAttribute("string"));
- }
- return res;
- }
-
compileButton(el, params) {
const res = super.compileButton(el, params);
- if (res.hasAttribute("string") && params.labels && res.children.length === 0) {
- params.labels.push(res.getAttribute("string"));
+ if (res.hasAttribute("string") && res.children.length === 0) {
const contentSlot = createElement("t");
contentSlot.setAttribute("t-set-slot", "contents");
const content = createElement("HighlightText", {
diff --git a/addons/web/static/src/webclient/settings_form_view/settings_form_renderer.js b/addons/web/static/src/webclient/settings_form_view/settings_form_renderer.js
index 267c57d8a81..bc3fb8a3afb 100644
--- a/addons/web/static/src/webclient/settings_form_view/settings_form_renderer.js
+++ b/addons/web/static/src/webclient/settings_form_view/settings_form_renderer.js
@@ -1,6 +1,5 @@
/** @odoo-module **/
-import { registry } from "@web/core/registry";
import { FormRenderer } from "@web/views/form/form_renderer";
import { FormLabelHighlightText } from "./highlight_text/form_label_highlight_text";
import { HighlightText } from "./highlight_text/highlight_text";
@@ -12,15 +11,8 @@ import { SettingsPage } from "./settings/settings_page";
import { useState } from "@odoo/owl";
-const fieldRegistry = registry.category("fields");
-
-const labels = Object.create(null);
-
export class SettingsFormRenderer extends FormRenderer {
setup() {
- if (!labels[this.props.archInfo.arch]) {
- labels[this.props.archInfo.arch] = [];
- }
super.setup();
this.searchState = useState(this.env.searchState);
}
@@ -28,28 +20,6 @@ export class SettingsFormRenderer extends FormRenderer {
get shouldAutoFocus() {
return false;
}
-
- get compileParams() {
- return {
- ...super.compileParams,
- labels: labels[this.props.archInfo.arch],
- getFieldExpr: this.getFieldExpr,
- record: this.props.record,
- };
- }
-
- getFieldExpr(fieldName, fieldWidget) {
- const name = `base_settings.${fieldWidget}`;
- let fieldClass;
- if (fieldRegistry.contains(name)) {
- fieldClass = fieldRegistry.get(name);
- }
- if (fieldClass && fieldClass.extractStringExpr) {
- return fieldClass.extractStringExpr(fieldName, this.record);
- } else {
- return "";
- }
- }
}
SettingsFormRenderer.components = {
...FormRenderer.components,
diff --git a/addons/web/static/tests/webclient/settings_form_view/settings_form_view_tests.js b/addons/web/static/tests/webclient/settings_form_view/settings_form_view_tests.js
index 2b968b2951a..d450afb4faa 100644
--- a/addons/web/static/tests/webclient/settings_form_view/settings_form_view_tests.js
+++ b/addons/web/static/tests/webclient/settings_form_view/settings_form_view_tests.js
@@ -1528,7 +1528,7 @@ QUnit.module("SettingsFormView", (hooks) => {
const expectedCompiled = `
-
+