Skip to content

Commit fc574e0

Browse files
committed
Fix bug for lower widths
1 parent 30fc982 commit fc574e0

File tree

2 files changed

+36
-56
lines changed

2 files changed

+36
-56
lines changed

src/components/MobileSideBarMenu/CustomSidebarItems.jsx

Lines changed: 30 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -26,55 +26,36 @@ const CustomSidebarItems = ({ items, activePath, level = 1, onItemClick, isMenuV
2626
});
2727
};
2828

29-
// Initialize collapsed state - only expand items that are part of the active path
29+
// Initialize collapsed state - main menu always collapsed, sidebar expands active path
3030
const getInitialCollapsedState = () => {
3131
const collapsed = new Set();
3232

33-
const collapseAllCollapsibleItems = (itemsList, currentLevel) => {
33+
const processItems = (itemsList, currentLevel) => {
3434
itemsList.forEach((item, index) => {
3535
const itemId = `${item.label}-${currentLevel}-${index}`;
36-
37-
// Force collapsible when specified (for top-level menu),
38-
// or for level 1 in regular sidebar,
39-
// or respect the collapsible property for deeper levels
40-
const isCollapsibleItem = forceCollapsible
41-
? (item.items && item.items.length > 0)
42-
: (currentLevel === 1
43-
? (item.items && item.items.length > 0)
44-
: (item.items && item.items.length > 0 && item.collapsible !== false));
45-
46-
if (isCollapsibleItem) {
47-
collapsed.add(itemId);
48-
// Recursively collapse children too
49-
collapseAllCollapsibleItems(item.items, currentLevel + 1);
50-
}
51-
});
52-
};
53-
54-
const expandActivePathItems = (itemsList, currentLevel) => {
55-
itemsList.forEach((item, index) => {
56-
const itemId = `${item.label}-${currentLevel}-${index}`;
57-
58-
// Check if this item or any of its children are in the active path
59-
if (item.items && item.items.length > 0) {
60-
const isActiveCategory = hasActiveChild(item) || isActiveItem(item);
61-
62-
if (isActiveCategory) {
63-
// Remove from collapsed set (expand it)
64-
collapsed.delete(itemId);
65-
// Recursively check children
66-
expandActivePathItems(item.items, currentLevel + 1);
36+
const hasChildren = item.items && item.items.length > 0;
37+
38+
if (hasChildren) {
39+
if (forceCollapsible) {
40+
// Main menu: ALWAYS collapse everything
41+
collapsed.add(itemId);
42+
} else {
43+
// Sidebar: only expand if this item or its children are in the active path
44+
const shouldExpand = isActiveItem(item) || hasActiveChild(item);
45+
if (!shouldExpand) {
46+
collapsed.add(itemId);
47+
}
6748
}
49+
50+
// Recursively process children
51+
processItems(item.items, currentLevel + 1);
6852
}
6953
});
7054
};
7155

56+
console.log(`Getting initial state for ${forceCollapsible ? 'MAIN MENU' : 'SIDEBAR'}`);
7257
if (items && items.length > 0) {
73-
// First: Collapse everything that is collapsible
74-
collapseAllCollapsibleItems(items, level);
75-
76-
// Second: Expand only items in the active path
77-
expandActivePathItems(items, level);
58+
processItems(items, level);
7859
}
7960

8061
return collapsed;
@@ -84,10 +65,8 @@ const CustomSidebarItems = ({ items, activePath, level = 1, onItemClick, isMenuV
8465

8566
// Reset collapsed state when menu becomes visible (reopened)
8667
React.useEffect(() => {
87-
if (isMenuVisible) {
88-
setCollapsedItems(getInitialCollapsedState());
89-
}
90-
}, [isMenuVisible]);
68+
setCollapsedItems(getInitialCollapsedState());
69+
}, [isMenuVisible, forceCollapsible, items, activePath, location.pathname]);
9170

9271
const toggleCollapse = (itemId) => {
9372
const newCollapsed = new Set(collapsedItems);
@@ -103,14 +82,8 @@ const CustomSidebarItems = ({ items, activePath, level = 1, onItemClick, isMenuV
10382
const itemId = `${item.label}-${level}-${index}`;
10483
const isActive = isActiveItem(item);
10584
const hasChildren = item.items && item.items.length > 0;
106-
// Force collapsible when specified (for top-level menu),
107-
// or for level 1 in regular sidebar,
108-
// or respect the collapsible property for deeper levels
109-
const isCollapsible = forceCollapsible
110-
? hasChildren
111-
: (level === 1
112-
? hasChildren
113-
: (hasChildren && item.collapsible !== false));
85+
// All items with children are collapsible - ignore the collapsible property completely
86+
const isCollapsible = hasChildren;
11487
const isCollapsed = collapsedItems.has(itemId);
11588
const hasActiveDescendant = hasActiveChild(item);
11689

@@ -125,13 +98,13 @@ const CustomSidebarItems = ({ items, activePath, level = 1, onItemClick, isMenuV
12598
{
12699
[styles.active]: isActive,
127100
[styles.hasActiveChild]: hasActiveDescendant && !isActive,
128-
[styles.collapsible]: hasChildren && isCollapsible,
101+
[styles.collapsible]: hasChildren,
129102
[styles.collapsed]: isCollapsed,
130103
}
131104
)}
132105
onClick={(e) => {
133-
// Only expand/collapse if not clicking on the text and item is collapsible
134-
if (hasChildren && isCollapsible && !e.target.closest(`.${styles.categoryLabel}`)) {
106+
// Only expand/collapse if not clicking on the text and item has children
107+
if (hasChildren && !e.target.closest(`.${styles.categoryLabel}`)) {
135108
toggleCollapse(itemId);
136109
}
137110
}}
@@ -140,7 +113,7 @@ const CustomSidebarItems = ({ items, activePath, level = 1, onItemClick, isMenuV
140113
onKeyDown={(e) => {
141114
if (e.key === 'Enter' || e.key === ' ') {
142115
e.preventDefault();
143-
if (hasChildren && isCollapsible) {
116+
if (hasChildren) {
144117
toggleCollapse(itemId);
145118
}
146119
}
@@ -169,7 +142,7 @@ const CustomSidebarItems = ({ items, activePath, level = 1, onItemClick, isMenuV
169142
>
170143
{item.label}
171144
</span>
172-
{hasChildren && isCollapsible && (
145+
{hasChildren && (
173146
<span
174147
className={clsx(styles.collapseIcon, {
175148
[styles.collapsed]: isCollapsed
@@ -199,6 +172,7 @@ const CustomSidebarItems = ({ items, activePath, level = 1, onItemClick, isMenuV
199172
activePath={activePath}
200173
level={level + 1}
201174
onItemClick={onItemClick}
175+
forceCollapsible={forceCollapsible}
202176
/>
203177
</ul>
204178
)}
@@ -254,4 +228,4 @@ const CustomSidebarItems = ({ items, activePath, level = 1, onItemClick, isMenuV
254228
);
255229
};
256230

257-
export default CustomSidebarItems;
231+
export default CustomSidebarItems;

src/components/MobileSideBarMenu/customSidebarItems.module.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,12 @@
160160
font-size: 0.9rem;
161161
}
162162
}
163+
164+
// Fix for the overly broad CSS rule hiding links below 996px
165+
.sidebarItem a,
166+
.sidebarItemLink {
167+
display: flex !important;
168+
}
163169
}
164170

165171
// Tablet and desktop styles

0 commit comments

Comments
 (0)