Skip to main content

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

'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

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