diff --git a/addons/web/static/src/views/list/list_renderer.js b/addons/web/static/src/views/list/list_renderer.js
index b450d7d2fe3..98c270a16c7 100644
--- a/addons/web/static/src/views/list/list_renderer.js
+++ b/addons/web/static/src/views/list/list_renderer.js
@@ -1514,7 +1514,6 @@ export class ListRenderer extends Component {
}
async toggleOptionalField(fieldName) {
- await this.props.list.unselectRecord(true);
this.optionalActiveFields[fieldName] = !this.optionalActiveFields[fieldName];
this.state.columns = this.getActiveColumns(this.props.list);
this.saveOptionalActiveFields(
diff --git a/addons/web/static/tests/views/fields/one2many_field_tests.js b/addons/web/static/tests/views/fields/one2many_field_tests.js
index 7f49dd07950..437e2c8d767 100644
--- a/addons/web/static/tests/views/fields/one2many_field_tests.js
+++ b/addons/web/static/tests/views/fields/one2many_field_tests.js
@@ -11470,10 +11470,10 @@ QUnit.module("Fields", (hooks) => {
await click(target.querySelector(".o_optional_columns_dropdown .dropdown-toggle"));
await click(target.querySelector(".o_optional_columns_dropdown .dropdown-item"));
- assert.containsNone(
+ assert.containsOnce(
target.querySelector(".o_field_one2many"),
"tr.o_selected_row",
- "current edition mode discarded when selecting advanced field"
+ "current edition mode kept when selecting advanced field"
);
assert.containsN(
target.querySelector(".o_field_one2many"),
diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js
index 407c647168b..3198da57c75 100644
--- a/addons/web/static/tests/views/list_view_tests.js
+++ b/addons/web/static/tests/views/list_view_tests.js
@@ -101,7 +101,11 @@ QUnit.module("Views", (hooks) => {
o2m: { string: "O2M field", type: "one2many", relation: "bar" },
m2m: { string: "M2M field", type: "many2many", relation: "bar" },
amount: { string: "Monetary field", type: "monetary" },
- amount_currency: { string: "Monetary field (currency)", type: "monetary", currency_field: "company_currency_id" },
+ amount_currency: {
+ string: "Monetary field (currency)",
+ type: "monetary",
+ currency_field: "company_currency_id",
+ },
currency_id: {
string: "Currency",
type: "many2one",
@@ -2983,31 +2987,34 @@ QUnit.module("Views", (hooks) => {
);
});
- QUnit.test("currency_field is taken into account when formatting monetary values", async (assert) => {
- await makeView({
- type: "list",
- resModel: "foo",
- serverData,
- arch: `
+ QUnit.test(
+ "currency_field is taken into account when formatting monetary values",
+ async (assert) => {
+ await makeView({
+ type: "list",
+ resModel: "foo",
+ serverData,
+ arch: `
`,
- });
+ });
- assert.strictEqual(
- target.querySelectorAll('.o_data_row td[name="amount"]')[0].textContent,
- "1200.00\u00a0€",
- "field should be formatted based on currency_id"
- );
- assert.strictEqual(
- target.querySelectorAll('.o_data_row td[name="amount_currency"]')[0].textContent,
- "$\u00a01100.00",
- "field should be formatted based on company_currency_id"
- );
- });
+ assert.strictEqual(
+ target.querySelectorAll('.o_data_row td[name="amount"]')[0].textContent,
+ "1200.00\u00a0€",
+ "field should be formatted based on currency_id"
+ );
+ assert.strictEqual(
+ target.querySelectorAll('.o_data_row td[name="amount_currency"]')[0].textContent,
+ "$\u00a01100.00",
+ "field should be formatted based on company_currency_id"
+ );
+ }
+ );
QUnit.test(
"groups can not be sorted on a different field than the first field of the groupBy - 1",
@@ -15337,4 +15344,40 @@ QUnit.module("Views", (hooks) => {
);
}
);
+
+ QUnit.test("optional field selection do not unselect current row", async function (assert) {
+ await makeView({
+ type: "list",
+ resModel: "foo",
+ serverData,
+ arch: `
+
+
+
+ `,
+ });
+
+ await click(target.querySelector(".o_list_button_add"));
+
+ assert.containsOnce(target, ".o_selected_row");
+ assert.containsOnce(target, "div[name=foo] input:focus");
+
+ await click(target, "table .o_optional_columns_dropdown .dropdown-toggle");
+
+ assert.containsOnce(target, ".o_selected_row");
+ assert.containsOnce(target, "div[name=foo] input:focus");
+
+ await click(target, ".o_optional_columns_dropdown span.dropdown-item:nth-child(3) label");
+
+ assert.containsOnce(target, ".o_selected_row");
+ assert.containsOnce(target, "div[name=foo] input:focus");
+ assert.containsOnce(target, ".o_selected_row div[name=bar]");
+
+ await click(target, ".o_optional_columns_dropdown span.dropdown-item:nth-child(1) label");
+
+ assert.containsOnce(target, ".o_selected_row");
+ // This below would be better if it still focused foo, but it is an acceptable tradeoff.
+ assert.containsOnce(target, "div[name=text] textarea:focus");
+ assert.containsOnce(target, ".o_selected_row div[name=text]");
+ });
});