[FIX] website: enable to add a description on form field

Steps to reproduce:
- Add a "Form" snippet on the website.
- Select the first field.
- Try to toggle the "description" option of the field.

-> Problem: there is no description added on the field.

The problems appeared since [this PR] and comes more precisely from
[this commit]. The problem is that one condition required to fill the
`default_description` parameter is that `field.type === "description"`.
This should not be the case. Indeed, here was the flow before
[this commit]; When the user toggled the description option,
`toggleDescription` assigned `field.description` to `true`. The field
was then rendered trough `renderField()`. During this rendering, the
system called the `website.form_field_description` template through
`website.form_field` independently of the field type. Because
`field.description` was set to `true`, a `div` with the description
"Describe your field here." was added on the rendered field. To solve
the problem, the `field.type === "description"` condition has been
removed as a condition to set the `default_description` parameter. Now,
as it was the case before [this commit], this parameter is filled either
if `field.description` is set, either if the field name is `email_cc` or
`email_to`.
The error probably comes from the fact that the name of the template
used to render the field is `"website.form_field_" + field.type`. As the
name of the template in charge of rendering the description is
`website.form_field_description`, the author probably thought that this
template should only be called when `field.type === "description"`. This
is not the case; the template `website.form_field_description` is always
called when rendering a field (independently of the field type through
the template `website.form_field`) but is only relevant if
`default_description` is set.

Note that this fix fixes also another bug:
- Add a "Form" snippet on the website.
- Add a field which is of type "Cc".

-> Problem: there should be a description of type "Separate email
addresses with a comma." on the field.

This commit also adapts the `website_form_editor_tour` tour to verify
that the description option works as wanted.

[this PR]: https://github.com/odoo/odoo/pull/130467
[this commit]: https://github.com/odoo/odoo/commit/363251986dcd753796b4b037a2da2e118b3e8e35

opw-3630348
opw-3604548

closes odoo/odoo#146115

Signed-off-by: Romain Derie (rde) <rde@odoo.com>
This commit is contained in:
Louis (loco)
2023-12-28 11:45:49 +00:00
committed by Romain Derie
parent 60a3e7f926
commit e70a2eb0f6
2 changed files with 25 additions and 12 deletions
@@ -175,12 +175,10 @@ const FormEditor = options.Class.extend({
if (field.custom && !field.string) {
params.field.string = field.name;
}
if (field.type === "description") {
if (field.description) {
params.default_description = _t("Describe your field here.");
} else if (["email_cc", "email_to"].includes(field.name)) {
params.default_description = _t("Separate email addresses with a comma.");
}
if (field.description) {
params.default_description = _t("Describe your field here.");
} else if (["email_cc", "email_to"].includes(field.name)) {
params.default_description = _t("Separate email addresses with a comma.");
}
const template = document.createElement('template');
template.content.append(renderToElement("website.form_field_" + field.type, params));
@@ -222,6 +222,11 @@
run: () => null,
},
...addExistingField('email_cc', 'text', 'Test conditional visibility', false, {visibility: CONDITIONALVISIBILITY, condition: 'odoo'}),
{
content: "Ensure that the description has correctly been added on the field",
trigger: "iframe .s_website_form_field:contains('Test conditional visibility') .s_website_form_field_description",
isCheck: true,
},
...addExistingField('date', 'text', 'Test Date', true),
@@ -434,11 +439,11 @@
{
content: "Check that field B prefill text is set",
trigger: `iframe ${triggerFieldByLabel("field B")}:has(input[value="prefilled"])`,
run: () => null, // it's a check
isCheck: true,
}, {
content: "Check that field A is visible",
trigger: `iframe .s_website_form:has(${triggerFieldByLabel("field A")}:visible)`,
run: () => null, // it's a check
isCheck: true,
},
// A) Check that if we edit again and save again the default value is
// not deleted.
@@ -468,7 +473,7 @@
`:has(${triggerFieldByLabel("field A")}:not(:visible))` +
`:has(${triggerFieldByLabel("field B")}` +
`:has(input[value="prefilled"]):not(:visible))`,
run: () => null, // it's a check
isCheck: true,
}, {
content: "Type something in field C",
trigger: `iframe ${triggerFieldByLabel("field C")} input`,
@@ -477,7 +482,7 @@
content: "Check that fields A and B are visible",
trigger: `iframe .s_website_form:has(${triggerFieldByLabel("field B")}:visible)` +
`:has(${triggerFieldByLabel("field A")}:visible)`,
run: () => null, // it's a check
isCheck: true,
},
// Have field A's visibility tied to field B containing something,
@@ -506,7 +511,7 @@
content: "Check that field B is visible, but field A is not",
trigger: `iframe .s_website_form:has(${triggerFieldByLabel("field B")}:visible)` +
`:has(${triggerFieldByLabel("field A")}:not(:visible))`,
run: () => null, // it's a check
isCheck: true,
}, {
content: "Insert 'peek-a-boo' in field B",
trigger: `iframe ${triggerFieldByLabel("field B")} input`,
@@ -514,7 +519,7 @@
}, {
content: "Check that field A is visible",
trigger: `iframe .s_website_form:has(${triggerFieldByLabel("field A")}:visible)`,
run: () => null, // it's a check
isCheck: true,
},
...wTourUtils.clickOnEditAndWaitEditMode(),
{
@@ -533,6 +538,16 @@
...addCustomField("char", "text", '""', false),
...addCustomField("char", "text", "``", false),
...addCustomField("char", "text", "\\", false),
// Ensure that the description option is working as wanted.
...addCustomField("char", "text", "Check description option", false),
wTourUtils.changeOption("WebsiteFieldEditor", "we-button[data-toggle-description] we-checkbox"),
{
content: "Ensure that the description has correctly been added on the field",
trigger: "iframe .s_website_form_field:contains('Check description option') .s_website_form_field_description",
isCheck: true,
},
...wTourUtils.clickOnSave(),
{
content: 'Verify that the recipient email has been saved',