diff --git a/addons/mail/static/src/js/views/activity/activity_controller.js b/addons/mail/static/src/js/views/activity/activity_controller.js
index 715f4fdb84b..26e2a8772c5 100644
--- a/addons/mail/static/src/js/views/activity/activity_controller.js
+++ b/addons/mail/static/src/js/views/activity/activity_controller.js
@@ -32,6 +32,7 @@ var ActivityController = BasicController.extend({
init: function (parent, model, renderer, params) {
this._super.apply(this, arguments);
this.title = params.title;
+ this.searchViewId = params.searchViewId;
},
//--------------------------------------------------------------------------
@@ -59,6 +60,7 @@ var ActivityController = BasicController.extend({
var state = this.model.get(this.handle);
new ViewDialogs.SelectCreateDialog(this, {
res_model: state.model,
+ searchViewId: this.searchViewId,
domain: this.model.originalDomain,
title: _.str.sprintf(_t("Search: %s"), this.title),
no_create: !this.activeActions.create,
diff --git a/addons/mail/static/src/js/views/activity/activity_view.js b/addons/mail/static/src/js/views/activity/activity_view.js
index 9a9df857166..44cab433c78 100644
--- a/addons/mail/static/src/js/views/activity/activity_view.js
+++ b/addons/mail/static/src/js/views/activity/activity_view.js
@@ -26,9 +26,11 @@ const ActivityView = BasicView.extend({
/**
* @override
*/
- init: function () {
+ init: function (viewInfo, params) {
this._super.apply(this, arguments);
+ const { search_view_id } = params.action || {};
+ this.controllerParams.searchViewId = search_view_id ? search_view_id[0] : false;
this.loadParams.type = 'list';
// limit makes no sense in this view as we display all records having activities
this.loadParams.limit = false;
diff --git a/addons/mail/static/tests/activity_tests.js b/addons/mail/static/tests/activity_tests.js
index 57990a3c7b9..8ad4b152b08 100644
--- a/addons/mail/static/tests/activity_tests.js
+++ b/addons/mail/static/tests/activity_tests.js
@@ -7,9 +7,8 @@ import domUtils from 'web.dom';
import { legacyExtraNextTick, patchWithCleanup } from "@web/../tests/helpers/utils";
import { createWebClient, doAction } from "@web/../tests/webclient/helpers";
-import { patch, unpatch } from 'web.utils';
-import { registry } from "@web/core/registry";
import { session } from '@web/session';
+import { click } from "@web/../tests/helpers/utils";
let serverData;
@@ -621,4 +620,70 @@ QUnit.test("Activity view: on_destroy_callback doesn't crash", async function (a
activity.destroy();
});
+QUnit.test("Schedule activity dialog uses the same search view as activity view", async function (assert) {
+ assert.expect(8);
+ serverData.models.task.records = [];
+ serverData.views = {
+ "task,false,activity": `
+
+
+
+
+
+
+
+ `,
+ "task,false,list": `
`,
+ "task,false,search": ``,
+ 'task,1,search': ``,
+ };
+
+ function mockRPC(route, args) {
+ if (args.method === "load_views") {
+ assert.step(JSON.stringify(args.kwargs.views));
+ }
+ }
+
+ const webClient = await createWebClient({ serverData, mockRPC, legacyParams: {withLegacyMockServer: true} });
+
+ // open an activity view (with default search arch)
+ await doAction(webClient, {
+ name: 'Dashboard',
+ res_model: 'task',
+ type: 'ir.actions.act_window',
+ views: [[false, 'activity']],
+ });
+
+ assert.verifySteps([
+ '[[false,"activity"],[false,"search"]]',
+ ])
+
+ // click on "Schedule activity"
+ await click(webClient.el.querySelector(".o_activity_view .o_record_selector"));
+
+ assert.verifySteps([
+ '[[false,"list"],[false,"search"]]',
+ ])
+
+ // open an activity view (with search arch 1)
+ await doAction(webClient, {
+ name: 'Dashboard',
+ res_model: 'task',
+ type: 'ir.actions.act_window',
+ views: [[false, 'activity']],
+ search_view_id: [1,"search"],
+ });
+
+ assert.verifySteps([
+ '[[false,"activity"],[1,"search"]]',
+ ])
+
+ // click on "Schedule activity"
+ await click(webClient.el.querySelector(".o_activity_view .o_record_selector"));
+
+ assert.verifySteps([
+ '[[false,"list"],[1,"search"]]',
+ ])
+});
+
});
diff --git a/addons/web/static/src/legacy/js/views/view_dialogs.js b/addons/web/static/src/legacy/js/views/view_dialogs.js
index 8b9c62b337b..41dcc85c14f 100644
--- a/addons/web/static/src/legacy/js/views/view_dialogs.js
+++ b/addons/web/static/src/legacy/js/views/view_dialogs.js
@@ -335,7 +335,8 @@ var SelectCreateDialog = ViewDialog.extend({
var _super = this._super.bind(this);
var viewRefID = this.viewType === 'kanban' ?
(this.options.kanban_view_ref && JSON.parse(this.options.kanban_view_ref) || false) : false;
- return this.loadViews(this.res_model, this.context, [[viewRefID, this.viewType], [false, 'search']], {load_filters: true})
+ const searchviewId = this.options.searchViewId || false;
+ return this.loadViews(this.res_model, this.context, [[viewRefID, this.viewType], [searchviewId, 'search']], {load_filters: true})
.then(this.setup.bind(this))
.then(function (fragment) {
self.opened().then(function () {