Событие onMouseLeave в пользовательском интерфейсе компонента Popover. - PullRequest
0 голосов
/ 02 марта 2019
import React from 'react'
import PropTypes from 'prop-types'
import config from 'react-global-configuration'
import classNames from 'classnames'

import styles from './styles'

import Popover from '@material-ui/core/Popover'
import Typography from '@material-ui/core/Typography'

import HomeIcon from 'icons/Home'
import Circle from 'icons/Circle'

import withStyles from 'hoc/withStyles'

import AnimatedEntrance from 'components/AnimatedEntrance'
import Divider from 'components/Divider'
import ButtonBase from 'components/Button/Base'
import GameBox from 'components/Games/Box'
import Count from 'components/Games/Count'

class NavigationBar extends React.Component {
  myRef = React.createRef()
  name = ''

  state = {
    item: null
  }

  handlePopoverOpen = (event, name) => {
    this.setState({ item: name })
    this.name = name
  }
  handlePopoverClose = () => {
    this.setState({ item: null })
  }

  render () {
    const menu = config.get('navigation.bar')
    const slots = config.get('navigationBar.slots')
    const { classes, location } = this.props
    const { item } = this.state
    const open = Boolean(item)
    return (
      <AnimatedEntrance>
        <div className={classes.container}>
          <div
            ref={this.myRef}
            className={classes.buttons}
            onMouseLeave={(e) => this.handlePopoverOpen(e, this.name)}
          >

            <ButtonBase
              className={location.pathname === '/' ? classes.active : classes.buttonHomeContainer}
              variant='text'
              to='/'

            >
              <HomeIcon />
            </ButtonBase>

            <Divider className={classes.divider} />

            {menu.map((element) => (
              <React.Fragment
                key={element.name}
              >
                <div
                  onMouseEnter={(e) => this.handlePopoverOpen(e, element.name)}
                  onMouseLeave={this.handlePopoverClose}
                >
                  <ButtonBase
                    className={
                      element.url === location.pathname
                        ? classNames(classes.active, classes.buttonHomeContainer)
                        : classes.buttonHomeContainer
                    }
                    value={element.name}
                    variant='text'
                    to={element.url}
                  >
                    <Typography variant={'body2'} className={classes.flex}>
                      {element.name}
                      {element.name === 'Promo Page' ? <Circle /> : null}
                    </Typography>
                  </ButtonBase>
                </div>
                <Divider className={classes.divider}/>
              </React.Fragment>
            ))}
          </div>
          <div>
            {
              menu.map((element) => {
                if (element.name === item) {
                  return (
                    <Popover
                      key={element.name}
                      className={classes.popover}
                      classes={{
                        paper: classes.paper
                      }}
                      open={open}
                      anchorEl={this.myRef.current}
                      anchorOrigin={{
                        vertical: 'bottom',
                        horizontal: 'left'
                      }}
                      transformOrigin={{
                        vertical: 'top',
                        horizontal: 'left'
                      }}
                      disableRestoreFocus
                      hideBackdrop
                      onMouseLeave={this.handlePopoverClose}
                    >
                      {slots.map((entity, index) => {
                        return (<GameBox
                          element={entity}
                          isDivider={index % 3 === 0 && index !== 0}
                        />)
                      })}
                      <Count
                        count={slots.length}
                        to={'/slots'}
                        sectionName={element.name}
                      />
                    </Popover>
                  )
                }
              })
            }
          </div>
        </div>
      </AnimatedEntrance>
    )
  }
}

NavigationBar.propTypes = {
  classes: PropTypes.object.isRequired,
  location: PropTypes.object.isRequired
}

export default withStyles(styles)(NavigationBar)

Этот фрагмент кода описывает некоторое меню.У каждой кнопки этого меню есть событие onMouseEnter, которое открывается Popover (компонент пользовательского интерфейса материала).Когда я перехожу к этому поповеру (1 он не активен), я не могу ничего там щелкнуть, а второй, когда я пытаюсь вызвать onMouseLeave на этом элементе Popover, он также не дает никакой реакции.Почему это происходит?А кто-нибудь знает, как это исправить?Я провел 2 дня в поисках, но я не нашел ничего, чтобы решить эту проблему.Пожалуйста, где-то существует ответ, дайте мне знать.Если мое объяснение недостаточно ясное, пожалуйста, не стесняйтесь спросить меня дополнительную информацию

...