AdminDropdownOption.jsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. class AdminDropdownOption extends React.PureComponent {
  5. render() {
  6. const menuItem = this.props.options.map((option) => {
  7. return (
  8. <li key={option} role="presentation" type="button" onClick={() => this.props.onChangeValue(option)}>
  9. <a role="menuitem" tabIndex="-1">{option}</a>
  10. </li>
  11. );
  12. });
  13. return (
  14. <div className="my-0 btn-group">
  15. <label>{this.props.label}</label>
  16. <div className="dropdown">
  17. <button className="btn btn-default dropdown-toggle w-100" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  18. <span className="pull-left">{this.props.selectedValue}</span>
  19. <span className="bs-caret pull-right">
  20. <span className="caret" />
  21. </span>
  22. </button>
  23. {/* TODO adjust dropdown after BS4 */}
  24. <ul className="dropdown-menu" role="menu">
  25. {menuItem}
  26. </ul>
  27. </div>
  28. {this.props.children}
  29. </div>
  30. );
  31. }
  32. }
  33. AdminDropdownOption.propTypes = {
  34. t: PropTypes.func.isRequired, // i18next
  35. selectedValue: PropTypes.oneOfType(PropTypes.string, PropTypes.number).isRequired,
  36. label: PropTypes.string.isRequired,
  37. onChangeValue: PropTypes.func.isRequired,
  38. options: PropTypes.array.isRequired,
  39. children: PropTypes.object.isRequired,
  40. };
  41. export default withTranslation()(AdminDropdownOption);