diff --git a/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.xml b/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.xml index e46cbfad624..c45722bb950 100644 --- a/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.xml +++ b/addons/analytic/static/src/components/analytic_distribution/analytic_distribution.xml @@ -6,7 +6,7 @@
- +
diff --git a/addons/web/static/src/core/model_selector/model_selector.xml b/addons/web/static/src/core/model_selector/model_selector.xml index 4ed8b7b09f3..d044fa546f7 100644 --- a/addons/web/static/src/core/model_selector/model_selector.xml +++ b/addons/web/static/src/core/model_selector/model_selector.xml @@ -17,7 +17,7 @@ autoSelect="props.autoSelect" onSelect.bind="onSelect" /> - + diff --git a/addons/web/static/src/views/fields/properties/property_definition.xml b/addons/web/static/src/views/fields/properties/property_definition.xml index f2b5117b6e6..9df0d5079db 100644 --- a/addons/web/static/src/views/fields/properties/property_definition.xml +++ b/addons/web/static/src/views/fields/properties/property_definition.xml @@ -58,7 +58,7 @@ - + diff --git a/addons/web/static/src/views/fields/properties/property_tags.xml b/addons/web/static/src/views/fields/properties/property_tags.xml index a333989336b..8488cd7707d 100644 --- a/addons/web/static/src/views/fields/properties/property_tags.xml +++ b/addons/web/static/src/views/fields/properties/property_tags.xml @@ -16,7 +16,7 @@ sources="autocompleteSources" onSelect.bind="({value}) => this.onOptionSelected(value)" resetOnSelect="true"/> - + diff --git a/addons/web/static/src/views/fields/relational_utils.xml b/addons/web/static/src/views/fields/relational_utils.xml index 230830f0d47..20e70b41870 100644 --- a/addons/web/static/src/views/fields/relational_utils.xml +++ b/addons/web/static/src/views/fields/relational_utils.xml @@ -55,7 +55,7 @@ dropdown="props.dropdown" autofocus="props.autofocus" /> - + diff --git a/addons/web/static/tests/views/list_view_tests.js b/addons/web/static/tests/views/list_view_tests.js index 1c6bbf611b0..cfac9d3fa25 100644 --- a/addons/web/static/tests/views/list_view_tests.js +++ b/addons/web/static/tests/views/list_view_tests.js @@ -14405,6 +14405,99 @@ QUnit.module("Views", (hooks) => { assert.strictEqual(document.activeElement, getDataRow(3).querySelector("[name=foo] input")); }); + QUnit.test("keyboard navigation with date range", async (assert) => { + serverData.models.foo.fields.date_end = { string: "Date End", type: "date" }; + serverData.models.foo.records[0].date_end = "2017-01-26"; + + await makeView({ + type: "list", + resModel: "foo", + serverData, + arch: ` + + + + + + `, + }); + + await click(target, ".o_data_row:first-child [name=foo]"); + + assert.strictEqual( + document.activeElement, + target.querySelector(".o_data_row:first-child [name=foo] input") + ); + + triggerHotkey("Tab"); + await nextTick(); + + const [startDateInput, endDateInput] = target.querySelectorAll( + ".o_data_row:first-child [name=date] input" + ); + + assert.strictEqual(document.activeElement, startDateInput); + + triggerHotkey("Tab"); + await nextTick(); + + assert.strictEqual( + document.activeElement, + startDateInput, + "programmatic tab shouldn't toggle focus" + ); + + await click(endDateInput); + + assert.strictEqual(document.activeElement, endDateInput); + + triggerHotkey("Tab"); + await nextTick(); + + assert.strictEqual( + document.activeElement, + target.querySelector(".o_data_row:first-child [name=int_field] input") + ); + }); + + QUnit.test("keyboard navigation with Many2One field", async (assert) => { + await makeView({ + type: "list", + resModel: "foo", + serverData, + arch: ` + + + + + + `, + }); + + await click(target, ".o_data_row:first-child [name=foo]"); + + assert.strictEqual( + document.activeElement, + target.querySelector(".o_data_row:first-child [name=foo] input") + ); + + triggerHotkey("Tab"); + await nextTick(); + + assert.strictEqual( + document.activeElement, + target.querySelector(".o_data_row:first-child [name=m2o] input") + ); + + triggerHotkey("Tab"); + await nextTick(); + + assert.strictEqual( + document.activeElement, + target.querySelector(".o_data_row:first-child [name=int_field] input") + ); + }); + QUnit.test("multi-edit records with ENTER does not crash", async (assert) => { serviceRegistry.add("error", errorService);