feat: Add uncollapsed sidebar overlay setting and update sidebar menu behavior
This commit is contained in:
parent
022d15bfd3
commit
348d26d638
|
|
@ -22,6 +22,12 @@ class ResConfigSettings(models.TransientModel):
|
||||||
string="Sidebar Icon",
|
string="Sidebar Icon",
|
||||||
help="Upload an icon for the sidebar menu.",
|
help="Upload an icon for the sidebar menu.",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
uncollapsed_sidebar_overlay = fields.Boolean(
|
||||||
|
config_parameter='odex_sidebar_backend_theme2.uncollapsed_sidebar_overlay',
|
||||||
|
string='Uncollapsed Sidebar Overlay',
|
||||||
|
help='Enable overlay effect when sidebar is uncollapsed'
|
||||||
|
)
|
||||||
|
|
||||||
# set default value for the setting
|
# set default value for the setting
|
||||||
def get_values(self):
|
def get_values(self):
|
||||||
|
|
@ -29,10 +35,12 @@ class ResConfigSettings(models.TransientModel):
|
||||||
IrConfigParam = self.env['ir.config_parameter'].sudo()
|
IrConfigParam = self.env['ir.config_parameter'].sudo()
|
||||||
sidebar_menu_enable = IrConfigParam.get_param('odex_sidebar_backend_theme2.sidebar_menu_enable')
|
sidebar_menu_enable = IrConfigParam.get_param('odex_sidebar_backend_theme2.sidebar_menu_enable')
|
||||||
disable_nav_menu_section = IrConfigParam.get_param('odex_sidebar_backend_theme2.disable_nav_menu_section')
|
disable_nav_menu_section = IrConfigParam.get_param('odex_sidebar_backend_theme2.disable_nav_menu_section')
|
||||||
|
uncollapsed_sidebar_overlay = IrConfigParam.get_param('odex_sidebar_backend_theme2.uncollapsed_sidebar_overlay')
|
||||||
res.update(
|
res.update(
|
||||||
sidebar_menu_enable=sidebar_menu_enable == 'True',
|
sidebar_menu_enable=sidebar_menu_enable == 'True',
|
||||||
disable_nav_menu_section=disable_nav_menu_section == 'True',
|
disable_nav_menu_section=disable_nav_menu_section == 'True',
|
||||||
sidebar_menu_icon=IrConfigParam.get_param('odex_sidebar_backend_theme2.sidebar_menu_icon')
|
sidebar_menu_icon=IrConfigParam.get_param('odex_sidebar_backend_theme2.sidebar_menu_icon'),
|
||||||
|
uncollapsed_sidebar_overlay=uncollapsed_sidebar_overlay == 'True',
|
||||||
)
|
)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
@ -63,6 +71,10 @@ class ResConfigSettings(models.TransientModel):
|
||||||
'odex_sidebar_backend_theme2.sidebar_menu_icon',
|
'odex_sidebar_backend_theme2.sidebar_menu_icon',
|
||||||
self.sidebar_menu_icon or ''
|
self.sidebar_menu_icon or ''
|
||||||
)
|
)
|
||||||
|
IrConfigParam.set_param(
|
||||||
|
'odex_sidebar_backend_theme2.uncollapsed_sidebar_overlay',
|
||||||
|
str(self.uncollapsed_sidebar_overlay)
|
||||||
|
)
|
||||||
|
|
||||||
if self.sidebar_menu_icon:
|
if self.sidebar_menu_icon:
|
||||||
# Store the image URL in config parameter
|
# Store the image URL in config parameter
|
||||||
|
|
@ -85,4 +97,6 @@ class ResConfigSettings(models.TransientModel):
|
||||||
IrConfigParam = self.env['ir.config_parameter'].sudo()
|
IrConfigParam = self.env['ir.config_parameter'].sudo()
|
||||||
sidebar_enabled = IrConfigParam.get_param('odex_sidebar_backend_theme2.sidebar_menu_enable') == 'True'
|
sidebar_enabled = IrConfigParam.get_param('odex_sidebar_backend_theme2.sidebar_menu_enable') == 'True'
|
||||||
sidebar_icon_url = IrConfigParam.get_param('odex_sidebar_backend_theme2.sidebar_menu_icon_url')
|
sidebar_icon_url = IrConfigParam.get_param('odex_sidebar_backend_theme2.sidebar_menu_icon_url')
|
||||||
return {'sidebar_enabled': sidebar_enabled, 'sidebar_icon_url': sidebar_icon_url}
|
uncollapsed_sidebar_overlay = IrConfigParam.get_param('odex_sidebar_backend_theme2.uncollapsed_sidebar_overlay') == 'True'
|
||||||
|
|
||||||
|
return {'sidebar_enabled': sidebar_enabled, 'sidebar_icon_url': sidebar_icon_url, 'uncollapsed_sidebar_overlay': uncollapsed_sidebar_overlay}
|
||||||
|
|
@ -23,26 +23,30 @@ export class SidebarMenu extends Component {
|
||||||
isCollapsed: false,
|
isCollapsed: false,
|
||||||
sidebarEnabled: false,
|
sidebarEnabled: false,
|
||||||
sidebarMenuIconUrl: null,
|
sidebarMenuIconUrl: null,
|
||||||
|
overlayEnabled: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
this.loadSidebarSetting()
|
this.loadSidebarSetting()
|
||||||
|
|
||||||
// =================== JavaScript Control Starts Here ===================
|
// =================== JavaScript Control Starts Here ===================
|
||||||
|
|
||||||
const applyLayoutChanges = (isOpen) => {
|
const applyLayoutChanges = (isOpen,isCollapsed) => {
|
||||||
const actionManager = document.querySelector('.o_action_manager');
|
const actionManager = document.querySelector('.o_action_manager');
|
||||||
const mainNavbar = document.querySelector('.o_navbar');
|
const mainNavbar = document.querySelector('.o_navbar');
|
||||||
|
|
||||||
// Determine sidebar width based on collapse state
|
// Determine sidebar width based on collapse state
|
||||||
const collapsedWidth = "90px";
|
let collapsedWidth = "270px";
|
||||||
|
if (this.state.overlayEnabled) {
|
||||||
if (isOpen) {
|
collapsedWidth = '90px';
|
||||||
|
}
|
||||||
|
console.log('Applying layout changes. Sidebar open:', isOpen, 'Sidebar collapsed:', isCollapsed);
|
||||||
|
if (!isCollapsed) {
|
||||||
if (actionManager) actionManager.style.marginInlineStart = collapsedWidth;
|
if (actionManager) actionManager.style.marginInlineStart = collapsedWidth;
|
||||||
if (mainNavbar) mainNavbar.style.marginInlineStart = collapsedWidth;
|
if (mainNavbar) mainNavbar.style.marginInlineStart = collapsedWidth;
|
||||||
} else {
|
} else {
|
||||||
// If sidebar is hidden, remove margin
|
// If sidebar is hidden, remove margin
|
||||||
if (actionManager) actionManager.style.marginInlineStart = '0';
|
if (actionManager) actionManager.style.marginInlineStart = '90px';
|
||||||
if (mainNavbar) mainNavbar.style.marginInlineStart = '0';
|
if (mainNavbar) mainNavbar.style.marginInlineStart = '90px';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -118,10 +122,14 @@ export class SidebarMenu extends Component {
|
||||||
// Load sidebar menu icon URL
|
// Load sidebar menu icon URL
|
||||||
this.state.sidebarMenuIconUrl = result.sidebar_icon_url || '/odex_sidebar_backend_theme2/static/src/img/logo.webp';
|
this.state.sidebarMenuIconUrl = result.sidebar_icon_url || '/odex_sidebar_backend_theme2/static/src/img/logo.webp';
|
||||||
|
|
||||||
|
// Load overlay setting
|
||||||
|
this.state.overlayEnabled = result.uncollapsed_sidebar_overlay === true || result.uncollapsed_sidebar_overlay === 'True';
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error loading sidebar setting:', error);
|
console.error('Error loading sidebar setting:', error);
|
||||||
// Default to enabled if setting cannot be loaded
|
// Default to enabled if setting cannot be loaded
|
||||||
this.state.sidebarEnabled = true;
|
this.state.sidebarEnabled = true;
|
||||||
|
this.state.overlayEnabled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,9 @@
|
||||||
options="{'size': [128, 128]}"/>
|
options="{'size': [128, 128]}"/>
|
||||||
</group>
|
</group>
|
||||||
</setting>
|
</setting>
|
||||||
|
<setting help="Enable overlay effect when sidebar is uncollapsed">
|
||||||
|
<field name="uncollapsed_sidebar_overlay" />
|
||||||
|
</setting>
|
||||||
</block>
|
</block>
|
||||||
</app>
|
</app>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue