index.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import React from 'react';
  2. import BaseButton, { ButtonProps as BaseButtonProps } from './Button';
  3. import IconButton, { IconButtonProps } from '../iconButton';
  4. export { ButtonProps as BaseButtonProps, HtmlType, Size, Theme, Type } from './Button';
  5. export { HorizontalPaddingType } from '../iconButton';
  6. export { ButtonGroupProps } from './buttonGroup';
  7. export { SplitButtonGroupProps } from './splitButtonGroup';
  8. // eslint-disable-next-line
  9. export interface ButtonProps extends IconButtonProps {} // TODO check
  10. class Button extends React.PureComponent<ButtonProps> {
  11. static propTypes = {
  12. ...BaseButton.propTypes,
  13. ...IconButton.propTypes,
  14. };
  15. buttonRef: React.RefObject<IconButton | BaseButton>;
  16. constructor(props = {}) {
  17. super(props);
  18. this.buttonRef = React.createRef();
  19. }
  20. focus() {
  21. this.buttonRef.current.focus();
  22. }
  23. blur() {
  24. this.buttonRef.current.blur();
  25. }
  26. render() {
  27. const props = { ...this.props };
  28. const hasIcon = Boolean(props.icon);
  29. const isLoading = Boolean(props.loading);
  30. const isDisabled = Boolean(props.disabled);
  31. if (hasIcon || (isLoading && !isDisabled)) {
  32. return <IconButton {...this.props} ref={this.buttonRef as React.RefObject<IconButton>} />;
  33. } else {
  34. return <BaseButton {...this.props} ref={this.buttonRef as React.RefObject<BaseButton>} />;
  35. }
  36. }
  37. }
  38. export default Button;