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
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 6m23s
This commit is contained in:
+35
-5
@@ -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 => (
|
||||
|
||||
Reference in New Issue
Block a user