[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:
@@ -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 });
|
||||
|
||||
Reference in New Issue
Block a user