Я работаю над проектом React, используя Материал v0.19.4. Я размещаю вложенное меню, используя компонент popover. Он хорошо работает в режиме отображения на рабочем столе, но в мобильном режиме вложенное меню находится рядом с главным меню. Я думаю, что это связано с zIndex, но я не уверен, как решить эту проблему.
Вот мой фрагмент кода.
<IconMenu
iconButtonElement={
<IconButton>
<FilterListIcon />
</IconButton>
}
anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}
targetOrigin={{ horizontal: 'left', vertical: 'top' }}
open={p.open}
onRequestChange={(open: boolean, reason: string) => {
console.log(reason)
if (reason === 'clickAway') {
p.setOpen(false)
p.setActiveMenuItem('')
}
}}
>
{Object.keys(p.filterTypes).map(filterType => {
const filterTypeObj = getInSafe(
p,
o => o.filterTypes[filterType],
{}
)
if (filterTypeObj.filterTypeType === 'id') {
return (
<MenuItem
key={`filter-dropdown-${filterType}`}
primaryText={formatName(
filterTypeObj.filterTitle || filterType
)}
rightIcon={<ArrowDropRight />}
onClick={(ev: MouseEvent) => {
ev.preventDefault()
p.setActiveMenuItem(filterType)
p.setActiveMenuElement(ev.currentTarget)
}}
>
{p.activeMenuItem === filterType && (
<Popover
open={true}
anchorEl={p.activeMenuElement}
anchorOrigin={{
horizontal: 'right',
vertical: 'top',
}}
targetOrigin={{
horizontal: 'left',
vertical: 'top',
}}
style={{ zIndex: 3000 }}
z
>
<Menu>
{filterTypeObj.availableFilters
.sort((a, b) =>
getInSafe(
a,
o =>
o.title.localeCompare(
b.title
),
0
)
)
.map(filter => (
<MenuItem
key={`type-id-dropdown-${filter.id}`}
primaryText={filter.title}
onClick={() => {
p[
`update${filterType}`
](
filter,
filter.idValue
)
p.setOpen(false)
p.setActiveMenuItem('')
}}
/>
))}
</Menu>
</Popover>
)}
</MenuItem>
)
}
if (filterTypeObj.filterTypeType === 'enum') {
return (
<MenuItem
key={`filter-dropdown-${filterType}`}
primaryText={formatName(
filterTypeObj.filterTitle || filterType
)}
rightIcon={<ArrowDropRight />}
onClick={(ev: MouseEvent) => {
ev.preventDefault()
p.setActiveMenuItem(filterType)
p.setActiveMenuElement(ev.currentTarget)
}}
>
{p.activeMenuItem === filterType && (
<Popover
open={true}
anchorEl={p.activeMenuElement}
anchorOrigin={{
horizontal: 'right',
vertical: 'top',
}}
targetOrigin={{
horizontal: 'left',
vertical: 'top',
}}
style={{ zIndex: 3000 }}
>
<Menu>
{filterTypeObj.availableFilters.map(
filter => (
<MenuItem
key={`type-enum-dropdown-${filter.id}`}
primaryText={formatName(
filter.title
)}
onClick={() => {
p[
`update${filterType}`
](filter.enum)
p.setOpen(false)
p.setActiveMenuItem('')
}}
/>
)
)}
</Menu>
</Popover>
)}
</MenuItem>
)
}
return null
})}
</IconMenu>
введите описание изображения здесь