Super Sale Limited Time 50% OFF for All-Access Plans
Save 50% Now

Issue opening a dropdown with - data-kt-menu-trigger='click'


Hi,

I’m using the Metronic 8 Demo4 React version. I’m facing an issue when I tried to add data-kt-menu-trigger=’click’ on a button which upon clicking, opens up a dropdown similar to Quick Actions. The issue is- it sometimes opens up, and sometimes doesn’t. Could I please get a solution to this?

Thanks.


Text formatting options
Submit
Click any option to insert into your comment. Select text first to wrap it.
  • **text** to make things bold
  • *text* to emphasize
  • ### Heading to make headings
  • [link text](url) for links
  • ![alt text](image-url) to paste in an image
  • - item to make a list
  • 1. item to make an ordered list
  • > quote to quote somebody
  • `code` for single line of code
  • ```js ... ``` for JS code block
  • ```html ... ``` for HTML code block
  • ```scss ... ``` for SCSS code block
  • ```php ... ``` for PHP code block
  • --- for a horizontal rule
  • happy  :)
  • shocked  :|
  • sad  :(

Replies (5)


import React, {useRef, useEffect} from 'react'
import {useLocation} from 'react-router'
import clsx from 'clsx'
import {AsideMenuMain} from './AsideMenuMain'
import {
DrawerComponent,
MenuComponent,
ScrollComponent,
ToggleComponent,
} from '../../../assets/ts/components'

type Props = {
asideMenuCSSClasses: string[]
}

const AsideMenu: React.FC<Props> = ({asideMenuCSSClasses}) => {
const scrollRef = useRef<HTMLDivElement | null>(null)
const {pathname} = useLocation()

useEffect(() => {
setTimeout(() => {
MenuComponent.reinitialization()
DrawerComponent.reinitialization()
ToggleComponent.reinitialization()
ScrollComponent.reinitialization()
if (scrollRef.current) {
scrollRef.current.scrollTop = 0
}
}, 100)
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [pathname])

return (
<div
id='kt_aside_menu_wrapper'
ref={scrollRef}
className='hover-scroll-overlay-y my-5 my-lg-5'
data-kt-scroll='true'
data-kt-scroll-activate='{default: false, lg: true}'
data-kt-scroll-height='auto'
data-kt-scroll-dependencies='#kt_aside_logo, #kt_aside_footer'
data-kt-scroll-wrappers='#kt_aside_menu'
data-kt-scroll-offset='0'
>
<div
id='#kt_aside_menu'
data-kt-menu='true'
className={clsx(
'menu menu-column menu-title-gray-800 menu-state-title-primary menu-state-icon-primary menu-state-bullet-primary menu-arrow-gray-500',
asideMenuCSSClasses.join(' ')
)}
>
<AsideMenuMain />
</div>
</div>
)
}

export {AsideMenu}


I used below format still I'm facing issue on this button. drop down not comming.



It doesn't involve changing routes. Also, dropdown not opening is happening randomly.
Here is the code that I'm working on-


<div className="card-toolbar">
{/* begin::Menu */}
<button type="button" className="btn btn-sm btn-light-primary" data-kt-menu-trigger="click" data-kt-menu-placement="bottom-end" data-kt-menu-flip="top-end">
<KTSVG path="/media/icons/duotune/arrows/arr075.svg" className="svg-icon-3"/>View Popup
</button>

{/* begin::Menu 2 */}
<div className="menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-600 menu-state-bg-light-primary fw-bold w-200px" data-kt-menu="true">

<div className="menu-item px-3">
<div className="menu-content fs-6 text-dark fw-bolder px-3 py-4">List of Popup"s</div>
</div>

<div className="separator mb-3 opacity-75"></div>

<div className="menu-item px-3">
<a href="#" className="menu-link px-3" data-bs-toggle="modal" data-bs-target="#kt_modal_popup_one">
Popup 1
</a>
</div>

<div className="menu-item px-3">
<a href="#" className="menu-link px-3" data-bs-toggle="modal" data-bs-target="#kt_modal_popup_two">
Popup 2
</a>
</div>

<div className="separator mt-3 opacity-75"></div>

</div>
{/* end::Menu 2 */}
{/* end::Menu */}
</div>

So basically, a dropdown containing two items(each of them being a popup) should open up while the button is clicked.



Try to debug your comnent and check for which props/states React re-renders your component and put them into useEffect dependencies.

Also you can wrap MenuComponent.reinitialization() with setTimeout (with 100 ms) to be sure that your html is already in the DOM.

Regards,
Keenthemes support



Okay, thankyou for your help.



Hi,

Could you investigate when it starts not opening? If it's after changing routes, then you can implement the next solution:
In your component add
const location = useLocation() // import from react-router
useEffect(() => { // import from react
MenuComponent.reinitialization() // import from assets/ts/components
}, [location])


Regards,
Keenthemes support


Your Support Matters!

We will highly appreciate your Metronic Review on Themeforest.
Please go to Themeforest Downloads page, select Metronic & leave your feedback.
Text formatting options
Submit
Click any option to insert into your comment. Select text first to wrap it.
  • **text** to make things bold
  • *text* to emphasize
  • ### Heading to make headings
  • [link text](url) for links
  • ![alt text](image-url) to paste in an image
  • - item to make a list
  • 1. item to make an ordered list
  • > quote to quote somebody
  • `code` for single line of code
  • ```js ... ``` for JS code block
  • ```html ... ``` for HTML code block
  • ```scss ... ``` for SCSS code block
  • ```php ... ``` for PHP code block
  • --- for a horizontal rule
  • happy  :)
  • shocked  :|
  • sad  :(
Text formatting options
Submit
Click any option to insert into your comment. Select text first to wrap it.
  • **text** to make things bold
  • *text* to emphasize
  • ### Heading to make headings
  • [link text](url) for links
  • ![alt text](image-url) to paste in an image
  • - item to make a list
  • 1. item to make an ordered list
  • > quote to quote somebody
  • `code` for single line of code
  • ```js ... ``` for JS code block
  • ```html ... ``` for HTML code block
  • ```scss ... ``` for SCSS code block
  • ```php ... ``` for PHP code block
  • --- for a horizontal rule
  • happy  :)
  • shocked  :|
  • sad  :(