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
|
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) => {
|
const toggleDropdown = (dropdown) => {
|
||||||
setDropdownStates(prev => ({
|
setDropdownStates(prev => {
|
||||||
...prev,
|
// Закрываем все выпадающие меню
|
||||||
[dropdown]: !prev[dropdown]
|
const newState = {
|
||||||
}));
|
data: false,
|
||||||
|
management: false,
|
||||||
|
tools: false,
|
||||||
|
settings: false
|
||||||
|
};
|
||||||
|
// Открываем только выбранное меню, если оно было закрыто
|
||||||
|
if (!prev[dropdown]) {
|
||||||
|
newState[dropdown] = true;
|
||||||
|
}
|
||||||
|
return newState;
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const navCategories = [
|
const navCategories = [
|
||||||
@@ -176,6 +205,7 @@ function MainLayout() {
|
|||||||
href="#"
|
href="#"
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
toggleDropdown(category.id);
|
toggleDropdown(category.id);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@@ -183,7 +213,7 @@ function MainLayout() {
|
|||||||
<span className="nav-link-title">{category.title}</span>
|
<span className="nav-link-title">{category.title}</span>
|
||||||
</a>
|
</a>
|
||||||
{dropdownStates[category.id] && (
|
{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-columns">
|
||||||
<div className="dropdown-menu-column">
|
<div className="dropdown-menu-column">
|
||||||
{category.items.map(item => (
|
{category.items.map(item => (
|
||||||
|
|||||||
Reference in New Issue
Block a user