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 () {