cncjs
71 строка · 1.8 Кб
1import PropTypes from 'prop-types';2import React, { PureComponent } from 'react';3import { Button } from '../Buttons';4import Dropdown from '../Dropdown';5import styles from './index.styl';6
7class DropdownButton extends PureComponent {8static propTypes = {9...Dropdown.propTypes,10
11// One of: 'lg', 'md', 'sm', 'xs'12btnSize: Button.propTypes.btnSize,13
14// One of: 'default', 'primary', 'emphasis', 'flat', 'link'15btnStyle: Button.propTypes.btnStyle,16
17// toggle18toggle: PropTypes.node.isRequired,19
20// Align the menu to the right side of the dropdown toggle.21pullRight: PropTypes.bool,22
23// Whether to prevent a caret from being rendered next to the title.24noCaret: PropTypes.bool25};26
27static defaultProps = {28pullRight: true,29noCaret: true30};31
32render() {33const { btnSize, toggle, style, children, ...props } = this.props;34
35// Split component props36const dropdownProps = {};37const toggleProps = {};38Object.keys(props).forEach(propName => {39const propValue = props[propName];40if (Dropdown.ControlledComponent.propTypes[propName]) {41dropdownProps[propName] = propValue;42} else {43toggleProps[propName] = propValue;44}45});46
47return (48<Dropdown49{...dropdownProps}50style={{51...style,52float: 'left'53}}54btnSize={btnSize}55>56<Dropdown.Toggle57{...toggleProps}58className={styles.widgetButton}59componentClass="a"60>61{toggle}62</Dropdown.Toggle>63<Dropdown.Menu>64{children}65</Dropdown.Menu>66</Dropdown>67);68}69}
70
71export default DropdownButton;72