UNPKG

@yncoder/element-react

Version:
70 lines (56 loc) 1.44 kB
/* @flow */ import * as React from 'react'; import ReactDOM from 'react-dom'; import Popper from 'popper.js'; import { Component, PropTypes, Transition, View } from '../../libs'; type State = { showPopper: boolean }; export default class DropdownMenu extends Component { state: State; constructor(props: Object) { super(props); this.state = { showPopper: false } } onVisibleChange(visible: boolean): void { this.setState({ showPopper: visible }) } onEnter(): void { const parent = ReactDOM.findDOMNode(this.parent()); this.popperJS = new Popper(parent, this.refs.popper, { placement: this.placement(), modifiers: { computeStyle: { gpuAcceleration: false } } }); } onAfterLeave(): void { this.popperJS.destroy(); } parent(): Component { return this.context.component; } placement(): string { return `bottom-${this.parent().props.menuAlign}`; } render(): React.DOM { return ( <Transition name="el-zoom-in-top" onEnter={this.onEnter.bind(this)} onAfterLeave={this.onAfterLeave.bind(this)}> <View show={this.state.showPopper}> <ul ref="popper" style={this.style()} className={this.className('el-dropdown-menu')}> {this.props.children} </ul> </View> </Transition> ) } } DropdownMenu.contextTypes = { component: PropTypes.any };