PickerOption.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import React, { Component } from 'react';
  2. export interface Props {
  3. onSelect: any;
  4. onFocus: any;
  5. option: any;
  6. isFocused: any;
  7. className: any;
  8. }
  9. class UserPickerOption extends Component<Props, any> {
  10. constructor(props) {
  11. super(props);
  12. this.handleMouseDown = this.handleMouseDown.bind(this);
  13. this.handleMouseEnter = this.handleMouseEnter.bind(this);
  14. this.handleMouseMove = this.handleMouseMove.bind(this);
  15. }
  16. handleMouseDown(event) {
  17. event.preventDefault();
  18. event.stopPropagation();
  19. this.props.onSelect(this.props.option, event);
  20. }
  21. handleMouseEnter(event) {
  22. this.props.onFocus(this.props.option, event);
  23. }
  24. handleMouseMove(event) {
  25. if (this.props.isFocused) {
  26. return;
  27. }
  28. this.props.onFocus(this.props.option, event);
  29. }
  30. render() {
  31. const { option, children, className } = this.props;
  32. return (
  33. <button
  34. onMouseDown={this.handleMouseDown}
  35. onMouseEnter={this.handleMouseEnter}
  36. onMouseMove={this.handleMouseMove}
  37. title={option.title}
  38. className={`user-picker-option__button btn btn-link ${className}`}
  39. >
  40. <img src={option.avatarUrl} alt={option.label} className="user-picker-option__avatar" />
  41. {children}
  42. </button>
  43. );
  44. }
  45. }
  46. export default UserPickerOption;