From 0763d3a4f4e794dfd081a656e857a3b9a9907de3 Mon Sep 17 00:00:00 2001 From: Mohammed Shekha Date: Tue, 18 May 2021 08:48:04 +0000 Subject: [PATCH] [FIX] mail: fix active filter not working in activity view Before this commit: When applying active filter using progressbar in activity view, records are not displayed based on active filter, row was not getting highlighted based on active filter also other records not getting hidden. After this commit: When applying active filter in activity view using progressbar, row will be highlighted and records will be sorted based on active filter value, like if 'green' color is clicked in progressbar then records with green color will be displayed on top also other color records will get hidden. task-2550959 closes odoo/odoo#74405 X-original-commit: 0fbed7291d4d242d663f3b816904525dd5b65c0c Signed-off-by: Simon Genin (ges@odoo) --- .../js/views/activity/activity_renderer.js | 2 +- addons/mail/static/src/xml/activity_view.xml | 11 ++-- addons/mail/static/tests/activity_tests.js | 53 +++++++++++++++++++ 3 files changed, 60 insertions(+), 6 deletions(-) diff --git a/addons/mail/static/src/js/views/activity/activity_renderer.js b/addons/mail/static/src/js/views/activity/activity_renderer.js index 7b29ae707e1..0f9164d6c43 100644 --- a/addons/mail/static/src/js/views/activity/activity_renderer.js +++ b/addons/mail/static/src/js/views/activity/activity_renderer.js @@ -187,7 +187,7 @@ class ActivityRenderer extends AbstractRendererOwl { this.activeFilter.activityTypeId = ev.detail.columnID; this.activeFilter.resIds = Object.entries(this.props.grouped_activities) .filter(([, resIds]) => ev.detail.columnID in resIds && - resIds[ev.detail.columnID].state === ev.detail.values.activeFilter) + resIds[ev.detail.columnID].state === ev.detail.values.activeFilter.value) .map(([key]) => parseInt(key)); } else { this.activeFilter.state = null; diff --git a/addons/mail/static/src/xml/activity_view.xml b/addons/mail/static/src/xml/activity_view.xml index c40d6d73b7d..dc978898163 100644 --- a/addons/mail/static/src/xml/activity_view.xml +++ b/addons/mail/static/src/xml/activity_view.xml @@ -6,7 +6,7 @@
@@ -46,7 +46,7 @@ - + @@ -58,14 +58,15 @@ - + + diff --git a/addons/mail/static/tests/activity_tests.js b/addons/mail/static/tests/activity_tests.js index 8ad4b152b08..7d41db1da5b 100644 --- a/addons/mail/static/tests/activity_tests.js +++ b/addons/mail/static/tests/activity_tests.js @@ -686,4 +686,57 @@ QUnit.test("Schedule activity dialog uses the same search view as activity view" ]) }); +QUnit.test('Activity view: apply progressbar filter', async function (assert) { + assert.expect(9); + + serverData.actions = { + 1: { + id: 1, + name: 'Task Action', + res_model: 'task', + type: 'ir.actions.act_window', + views: [[false, 'activity']], + } + }; + serverData.views = { + 'task,false,activity': + ` + +
+ +
+
+
`, + 'task,false,search': '', + }; + + const webClient = await createWebClient({ serverData, legacyParams: { withLegacyMockServer: true } }); + + await doAction(webClient, 1); + + assert.containsNone(webClient.el.querySelector('.o_activity_view thead'), + '.o_activity_filter_planned,.o_activity_filter_today,.o_activity_filter_overdue,.o_activity_filter___false', + "should not have active filter"); + assert.containsNone(webClient.el.querySelector('.o_activity_view tbody'), + '.o_activity_filter_planned,.o_activity_filter_today,.o_activity_filter_overdue,.o_activity_filter___false', + "should not have active filter"); + assert.strictEqual(webClient.el.querySelector('.o_activity_view tbody .o_activity_record').textContent, + 'Office planning', "'Office planning' should be first record"); + assert.containsOnce(webClient.el.querySelector('.o_activity_view tbody'), '.planned', + "other records should be available"); + + await testUtils.dom.click(webClient.el.querySelector('.o_kanban_counter_progress .progress-bar[data-filter="planned"]')); + assert.containsOnce(webClient.el.querySelector('.o_activity_view thead'), '.o_activity_filter_planned', + "planned should be active filter"); + assert.containsN(webClient.el.querySelector('.o_activity_view tbody'), '.o_activity_filter_planned', 5, + "planned should be active filter"); + assert.strictEqual(webClient.el.querySelector('.o_activity_view tbody .o_activity_record').textContent, + 'Meeting Room Furnitures', "'Office planning' should be first record"); + const tr = webClient.el.querySelectorAll('.o_activity_view tbody tr')[1]; + assert.hasClass(tr.querySelectorAll('td')[1], 'o_activity_empty_cell', + "other records should be hidden"); + assert.containsNone(webClient.el.querySelector('.o_activity_view tbody'), 'planned', + "other records should be hidden"); +}); + });