diff --git a/addons/web/static/src/core/datepicker/datepicker.js b/addons/web/static/src/core/datepicker/datepicker.js index 39488eb53e9..2693dc224de 100644 --- a/addons/web/static/src/core/datepicker/datepicker.js +++ b/addons/web/static/src/core/datepicker/datepicker.js @@ -217,7 +217,7 @@ export class DatePicker extends Component { onDateChange({ useStatic } = {}) { const { value } = this.inputRef.el; const options = this.getOptions(useStatic); - const parsedDate = value && this.parseValue(value, options)[0]; + const parsedDate = this.parseValue(value, options)[0]; this.state.warning = parsedDate && parsedDate > DateTime.local(); if (value && !parsedDate) { // Reset to default (= given) date. diff --git a/addons/web/static/tests/views/fields/date_field_tests.js b/addons/web/static/tests/views/fields/date_field_tests.js index 710fc3c9dd3..e212538cd78 100644 --- a/addons/web/static/tests/views/fields/date_field_tests.js +++ b/addons/web/static/tests/views/fields/date_field_tests.js @@ -5,6 +5,7 @@ import { click, clickCreate, clickSave, + editInput, getFixture, patchTimeZone, patchWithCleanup, @@ -517,6 +518,43 @@ QUnit.module("Fields", (hooks) => { ); }); + QUnit.test( + "multi edition of DateField in list view: clear date in input", + async function (assert) { + serverData.models.partner.records[1].date = "2017-02-03"; + + await makeView({ + serverData, + type: "list", + resModel: "partner", + arch: '', + }); + + const rows = target.querySelectorAll(".o_data_row"); + + // select two records and edit them + await click(rows[0], ".o_list_record_selector input"); + await click(rows[1], ".o_list_record_selector input"); + + await click(rows[0], ".o_data_cell"); + + assert.containsOnce(target, "input.o_datepicker_input"); + await editInput(target, ".o_datepicker_input", ""); + + assert.containsOnce(document.body, ".modal"); + await click(target, ".modal .modal-footer .btn-primary"); + + assert.strictEqual( + target.querySelector(".o_data_row:first-child .o_data_cell").textContent, + "" + ); + assert.strictEqual( + target.querySelector(".o_data_row:nth-child(2) .o_data_cell").textContent, + "" + ); + } + ); + QUnit.test("DateField remove value", async function (assert) { await makeView({ type: "form", diff --git a/addons/web/static/tests/views/fields/datetime_field_tests.js b/addons/web/static/tests/views/fields/datetime_field_tests.js index e0a6f1d0718..1f6b8ef478b 100644 --- a/addons/web/static/tests/views/fields/datetime_field_tests.js +++ b/addons/web/static/tests/views/fields/datetime_field_tests.js @@ -359,12 +359,49 @@ QUnit.module("Fields", (hooks) => { "10/02/2019 09:00:00" ); assert.strictEqual( - target.querySelector(".o_data_row:nth-child(1) .o_data_cell").textContent, + target.querySelector(".o_data_row:nth-child(2) .o_data_cell").textContent, "10/02/2019 09:00:00" ); } ); + QUnit.test( + "multi edition of DatetimeField in list view: clear date in input", + async function (assert) { + serverData.models.partner.records[1].datetime = "2017-02-08 10:00:00"; + + await makeView({ + serverData, + type: "list", + resModel: "partner", + arch: '', + }); + + const rows = target.querySelectorAll(".o_data_row"); + + // select two records and edit them + await click(rows[0], ".o_list_record_selector input"); + await click(rows[1], ".o_list_record_selector input"); + + await click(rows[0], ".o_data_cell"); + + assert.containsOnce(target, "input.o_datepicker_input"); + await editInput(target, ".o_datepicker_input", ""); + + assert.containsOnce(document.body, ".modal"); + await click(target, ".modal .modal-footer .btn-primary"); + + assert.strictEqual( + target.querySelector(".o_data_row:first-child .o_data_cell").textContent, + "" + ); + assert.strictEqual( + target.querySelector(".o_data_row:nth-child(2) .o_data_cell").textContent, + "" + ); + } + ); + QUnit.test("DatetimeField remove value", async function (assert) { assert.expect(4);