diff --git a/addons/web/static/src/webclient/settings_form_view/settings/settings_page.js b/addons/web/static/src/webclient/settings_form_view/settings/settings_page.js index b69069473b0..eb1cf876bf0 100644 --- a/addons/web/static/src/webclient/settings_form_view/settings/settings_page.js +++ b/addons/web/static/src/webclient/settings_form_view/settings/settings_page.js @@ -1,7 +1,7 @@ /** @odoo-module **/ import { ActionSwiper } from "@web/core/action_swiper/action_swiper"; -const { Component, useState } = owl; +const { Component, useState, useRef, useEffect } = owl; export class SettingsPage extends Component { setup() { @@ -13,6 +13,20 @@ export class SettingsPage extends Component { if (this.props.modules) { this.state.selectedTab = this.props.initialTab || this.props.modules[0].key; } + + this.settingsRef = useRef("settings"); + this.scrollMap = Object.create(null); + useEffect( + (settingsEl, currentTab) => { + if (!settingsEl) { + return; + } + + const { scrollTop } = this.scrollMap[currentTab] || 0; + settingsEl.scrollTop = scrollTop; + }, + () => [this.settingsRef.el, this.state.selectedTab] + ); } getCurrentIndex() { @@ -41,6 +55,10 @@ export class SettingsPage extends Component { } onSettingTabClick(key) { + if (this.settingsRef.el) { + const { scrollTop } = this.settingsRef.el; + this.scrollMap[this.state.selectedTab] = { scrollTop }; + } this.state.selectedTab = key; this.env.searchState.value = ""; } diff --git a/addons/web/static/src/webclient/settings_form_view/settings/settings_page.xml b/addons/web/static/src/webclient/settings_form_view/settings/settings_page.xml index 26584c4ef0c..9336eb218d0 100644 --- a/addons/web/static/src/webclient/settings_form_view/settings/settings_page.xml +++ b/addons/web/static/src/webclient/settings_form_view/settings/settings_page.xml @@ -18,7 +18,7 @@ animationOnMove="false" animationType="'forwards'" swipeDistanceRatio="6"> -