On Open Change
The onOpenChange
prop is used to handle the changes when a submenu is opened or closed.
Props
onOpenChange?: (open: boolean) => void
With Parameter
This example demonstrates the onOpenChange
prop with a boolean parameter. When the submenu is opened or closed, the onOpenChange
function is called with a boolean parameter indicating the new state of the submenu.
Example
/horizontal-menu/submenu/on-open-change/with-params
Toggle Dashbord Submenu to see the change
Submenu is closed
Source Code
- TSX
- JS
'use client'
// React imports
import { useState } from 'react'
// Third-party Imports
import classnames from 'classnames'
// Component Imports
import HorizontalNav, { Menu, MenuItem, SubMenu } from '@menu/horizontal-menu'
// Style Imports
import styles from '../../styles.module.css'
const OpenChangeWithParams = () => {
// States
const [text, setText] = useState('closed')
return (
<div className='flex flex-col h-full w-full'>
<div className={classnames('flex items-center plb-2.5 pli-6 w-full', styles.customStyles)}>
<HorizontalNav>
<Menu>
<SubMenu
label='Dashboards'
onOpenChange={(open: boolean) => {
setText(open ? 'opened' : 'closed')
}}
>
<MenuItem>Analytics</MenuItem>
<MenuItem>eCommerce</MenuItem>
</SubMenu>
<SubMenu label='User'>
<MenuItem>List</MenuItem>
<SubMenu label='View'>
<MenuItem>Overview</MenuItem>
<MenuItem>Security</MenuItem>
<MenuItem>Notifications</MenuItem>
</SubMenu>
</SubMenu>
<SubMenu label='Menu Level'>
<MenuItem>Menu Level 2.1</MenuItem>
<SubMenu label='Menu Level 2.2'>
<MenuItem>Menu Level 3.1</MenuItem>
<MenuItem>Menu Level 3.2</MenuItem>
</SubMenu>
</SubMenu>
</Menu>
</HorizontalNav>
</div>
<main className='p-4 flex-grow'>
<p>Toggle Dashbord Submenu to see the change</p>
<br />
<i>{`Submenu is ${text}`}</i>
</main>
</div>
)
}
export default OpenChangeWithParams
'use client'
// React imports
import { useState } from 'react'
// Third-party Imports
import classnames from 'classnames'
// Component Imports
import HorizontalNav, { Menu, MenuItem, SubMenu } from '@menu/horizontal-menu'
// Style Imports
import styles from '../../styles.module.css'
const OpenChangeWithParams = () => {
// States
const [text, setText] = useState('closed')
return (
<div className='flex flex-col h-full w-full'>
<div className={classnames('flex items-center plb-2.5 pli-6 w-full', styles.customStyles)}>
<HorizontalNav>
<Menu>
<SubMenu
label='Dashboards'
onOpenChange={open => {
setText(open ? 'opened' : 'closed')
}}
>
<MenuItem>Analytics</MenuItem>
<MenuItem>eCommerce</MenuItem>
</SubMenu>
<SubMenu label='User'>
<MenuItem>List</MenuItem>
<SubMenu label='View'>
<MenuItem>Overview</MenuItem>
<MenuItem>Security</MenuItem>
<MenuItem>Notifications</MenuItem>
</SubMenu>
</SubMenu>
<SubMenu label='Menu Level'>
<MenuItem>Menu Level 2.1</MenuItem>
<SubMenu label='Menu Level 2.2'>
<MenuItem>Menu Level 3.1</MenuItem>
<MenuItem>Menu Level 3.2</MenuItem>
</SubMenu>
</SubMenu>
</Menu>
</HorizontalNav>
</div>
<main className='p-4 flex-grow'>
<p>Toggle Dashbord Submenu to see the change</p>
<br />
<i>{`Submenu is ${text}`}</i>
</main>
</div>
)
}
export default OpenChangeWithParams
Without Parameter
This example illustrates the onOpenChange
prop without any parameters.
Example
/horizontal-menu/submenu/on-open-change/without-params
Toggle Dashbord Submenu and Check your console
Source Code
'use client'
// Third-party Imports
import classnames from 'classnames'
// Component Imports
import HorizontalNav, { Menu, MenuItem, SubMenu } from '@menu/horizontal-menu'
// Style Imports
import styles from '../../styles.module.css'
const OpenChangeWithOutParams = () => {
return (
<div className='flex flex-col h-full w-full'>
<div className={classnames('flex items-center plb-2.5 pli-6 w-full', styles.customStyles)}>
<HorizontalNav>
<Menu>
<SubMenu label='Dashboards' onOpenChange={() => console.log('onOpenChange called')}>
<MenuItem>Analytics</MenuItem>
<MenuItem>eCommerce</MenuItem>
</SubMenu>
<SubMenu label='User'>
<MenuItem>List</MenuItem>
<SubMenu label='View'>
<MenuItem>Overview</MenuItem>
<MenuItem>Security</MenuItem>
<MenuItem>Notifications</MenuItem>
</SubMenu>
</SubMenu>
<SubMenu label='Menu Level'>
<MenuItem>Menu Level 2.1</MenuItem>
<SubMenu label='Menu Level 2.2'>
<MenuItem>Menu Level 3.1</MenuItem>
<MenuItem>Menu Level 3.2</MenuItem>
</SubMenu>
</SubMenu>
</Menu>
</HorizontalNav>
</div>
<main className='p-4 flex-grow'>
<p>Toggle Dashbord Submenu and Check your console</p>
</main>
</div>
)
}
export default OpenChangeWithOutParams