# elementor/3.8.0-beta1/app/assets/js/ui/menu/menu.js

Elementor Website Builder – more than just a page builder, version 3.8.0-beta1. 62 lines.

- Page: https://pluginprobe.com/plugins/elementor/3.8.0-beta1/code/app/assets/js/ui/menu/menu.js
- Raw: https://pluginprobe.com/plugins/elementor/3.8.0-beta1/raw/app/assets/js/ui/menu/menu.js
- Modified: 2022-09-19T16:26:20+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/elementor/3.8.0-beta1/code/app/assets/js/ui/menu/menu.js#L10-L20`.

```javascript
import './menu.scss';
import Button from '../molecules/button';
import router from '@elementor/router';
import { Match, LocationProvider } from '@reach/router';

export default function Menu( props ) {
	const ActionButton = ( itemProps ) => {
		if ( ! props.actionButton ) {
			return '';
		}

		return props.actionButton( itemProps );
	};

	if ( props.promotion ) {
		return (
			<nav className="eps-menu">
				{ props.children }
				<ul>
					{ props.menuItems.map( ( item ) => (
						<li key={ item.type } className="eps-menu-item">
							<Button text={ item.title } className="eps-menu-item__link" { ...item } />
							<ActionButton { ...item } />
						</li>
					) ) }
				</ul>
			</nav>
		);
	}

	return (
		<LocationProvider history={ router.appHistory }>
			<nav className="eps-menu">
				{ props.children }
				<ul>
					{ (
					props.menuItems.map( ( item ) => (
						<Match key={ item.type } path={ item.url }>
							{ ( { match } ) => {
								return (
									<li key={ item.type } className={ `eps-menu-item${ match ? ' eps-menu-item--active' : '' }` }>
										<Button text={ item.title } className="eps-menu-item__link" { ...item } />
										<ActionButton { ...item } />
									</li>
								);
							} }
						</Match>
					) )
				) }
				</ul>
			</nav>
		</LocationProvider>
	);
}

Menu.propTypes = {
	menuItems: PropTypes.arrayOf( PropTypes.object ),
	children: PropTypes.any,
	actionButton: PropTypes.func,
	promotion: PropTypes.bool,
};

```
