Skip to content

Commit f677f5a

Browse files
committed
fix: CSidebar, CSidebarNavDropdown: add default dropdown mode
- Add default dropdown behavior to CSidebarNavDropdown component - Set default value of dropdownMode to undefined in CSidebar
1 parent fa66112 commit f677f5a

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

src/template/CSidebar.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ const CSidebar = props=>{
3232
const key = useState(Math.random().toString(36).substr(2))[0]
3333

3434
const [isOpen, setIsOpen] = useState(show)
35+
const [openDropdown, setOpenDropdown] = useState()
3536

3637
const node = useRef({}).current
3738
const reference = (r) => {
@@ -133,7 +134,9 @@ const CSidebar = props=>{
133134
<Context.Provider value={{
134135
dropdownMode,
135136
scrollbarExist: !minimized || unfoldable,
136-
toggleMinimize
137+
toggleMinimize,
138+
openDropdown,
139+
setOpenDropdown
137140
}}>
138141
<div
139142
{...attributes}
@@ -176,7 +179,6 @@ CSidebar.defaultProps = {
176179
show: 'responsive',
177180
hideOnMobileClick: true,
178181
colorScheme: 'dark',
179-
dropdownMode: 'openActive',
180182
}
181183

182184
export default CSidebar

src/template/CSidebarNavDropdown.js

+14-3
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,23 @@ const CSidebarNavDropdown = props => {
3838
...attributes
3939
} = props
4040

41+
const key = useState(Math.random().toString(36).substr(2))[0]
42+
43+
const { dropdownMode, openDropdown, setOpenDropdown } = useContext(Context)
44+
4145
const [isOpen, setIsOpen] = useState(show)
4246
useMemo(() => {
4347
setIsOpen(show)
4448
}, [show])
4549

46-
const { dropdownMode } = useContext(Context)
50+
useMemo(() => {
51+
!dropdownMode && openDropdown !== key && setIsOpen(false)
52+
}, [openDropdown])
53+
54+
const toggle = () => {
55+
!dropdownMode && setOpenDropdown(isOpen ? null : key)
56+
setIsOpen(!isOpen)
57+
}
4758

4859
let path = ''
4960
try {
@@ -55,7 +66,7 @@ const CSidebarNavDropdown = props => {
5566
setIsOpen(false)
5667
} else if (dropdownMode === 'closeInactive' && route) {
5768
setIsOpen(path.includes(route))
58-
} else if (dropdownMode !== 'noAction' && !isOpen && route) {
69+
} else if ((!dropdownMode || dropdownMode !== 'noAction') && !isOpen && route) {
5970
setIsOpen(path.includes(route))
6071
}
6172
}, [path])
@@ -76,7 +87,7 @@ const CSidebarNavDropdown = props => {
7687

7788
return (
7889
<li className={classes} {...attributes} ref={innerRef}>
79-
<a className="c-sidebar-nav-dropdown-toggle" onClick={() => setIsOpen(!isOpen)} >
90+
<a className="c-sidebar-nav-dropdown-toggle" onClick={toggle} >
8091
{ icon && <CIconRaw {...iconProps(icon)} /> }
8192
{ fontIcon && <i className={iconClasses}/> }
8293
{ name }

0 commit comments

Comments
 (0)