[FIX] Fix focus view with searchpanel

Before this commit, if a view contained a searchPanel the scrollbar went at the top automatically; now the behavior of the scrollbar with or without a searchPanel is the same.

closes odoo/odoo#138341

X-original-commit: b8f881de82ab931ed8bf45e67dd8b28f943e733f
Signed-off-by: Julien Mougenot (jum) <jum@odoo.com>
This commit is contained in:
Mélanie
2023-10-18 12:05:13 +00:00
parent b06da792da
commit de0f97e08e
2 changed files with 32 additions and 2 deletions
@@ -118,7 +118,8 @@ export function useSetupAction(params = {}) {
root: { left: rootRef.el.scrollLeft, top: rootRef.el.scrollTop },
};
} else {
const contentEl = rootRef.el.querySelector(".o_content");
const contentEl = rootRef.el.querySelector(".o_component_with_search_panel > .o_renderer_with_searchpanel,"
+ ".o_component_with_search_panel > .o_renderer") || rootRef.el.querySelector(".o_content");
if (contentEl) {
state[scrollSymbol] = {
content: { left: contentEl.scrollLeft, top: contentEl.scrollTop },
@@ -138,7 +139,8 @@ export function useSetupAction(params = {}) {
rootRef.el.scrollTop = (scrolling.root && scrolling.root.top) || 0;
rootRef.el.scrollLeft = (scrolling.root && scrolling.root.left) || 0;
} else if (scrolling.content) {
const contentEl = rootRef.el.querySelector(".o_content");
const contentEl = rootRef.el.querySelector(".o_component_with_search_panel > .o_renderer_with_searchpanel,"
+ ".o_component_with_search_panel > .o_renderer") || rootRef.el.querySelector(".o_content");
if (contentEl) {
contentEl.scrollTop = scrolling.content.top || 0;
contentEl.scrollLeft = scrolling.content.left || 0;
@@ -2268,6 +2268,34 @@ QUnit.module("Search", (hooks) => {
}
);
QUnit.test("scroll kanban view with searchpanel and kept scroll position", async (assert) => {
for (let i = 10; i < 20; i++) {
serverData.models.category.records.push({ id: i, name: "Cat " + i });
for (let j = 0; j <9; j++)
serverData.models.partner.records.push({ id: 100 + i*10 +j, foo: `Record ${i*10 +j}` });
}
const container = document.createElement("div");
container.classList.add("o_web_client");
container.style = "max-height: 300px";
target.appendChild(container);
const webclient = await createWebClient({ target: container, serverData });
await doAction(webclient, 1);
await switchView(target, "kanban");
// simulate a scroll in the kanban view
target.querySelector(".o_renderer").scrollTop = 100;
await doAction(webclient, 2);
// execute a second action (in which we don't scroll)
assert.strictEqual(target.querySelector(".o_content").scrollTop, 0);
// go back using the breadcrumbs
await click(target.querySelector(".o_control_panel .breadcrumb a"));
assert.strictEqual(target.querySelector(".o_renderer").scrollTop, 100);
});
QUnit.test("scroll position is kept when switching between controllers", async (assert) => {
for (let i = 10; i < 20; i++) {
serverData.models.category.records.push({ id: i, name: "Cat " + i });