feat: Enhance dropdown menu functionality in MainLayout by adding click outside detection and improved toggle behavior
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 6m23s

This commit is contained in:
2025-08-05 20:47:19 +07:00
parent 89bb76d7cb
commit f5d86d9e1b
+35 -5
View File
@@ -66,11 +66,40 @@ function MainLayout() {
settings: false
});
// Закрытие всех выпадающих меню при клике вне их области
useEffect(() => {
const handleClickOutside = (event) => {
if (!event.target.closest('.nav-item.dropdown')) {
setDropdownStates({
data: false,
management: false,
tools: false,
settings: false
});
}
};
document.addEventListener('click', handleClickOutside);
return () => {
document.removeEventListener('click', handleClickOutside);
};
}, []);
const toggleDropdown = (dropdown) => {
setDropdownStates(prev => ({
...prev,
[dropdown]: !prev[dropdown]
}));
setDropdownStates(prev => {
// Закрываем все выпадающие меню
const newState = {
data: false,
management: false,
tools: false,
settings: false
};
// Открываем только выбранное меню, если оно было закрыто
if (!prev[dropdown]) {
newState[dropdown] = true;
}
return newState;
});
};
const navCategories = [
@@ -176,6 +205,7 @@ function MainLayout() {
href="#"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
toggleDropdown(category.id);
}}
>
@@ -183,7 +213,7 @@ function MainLayout() {
<span className="nav-link-title">{category.title}</span>
</a>
{dropdownStates[category.id] && (
<div className="dropdown-menu show">
<div className="dropdown-menu show" onClick={(e) => e.stopPropagation()}>
<div className="dropdown-menu-columns">
<div className="dropdown-menu-column">
{category.items.map(item => (