mirror of
				https://github.com/scm-manager/scm-manager.git
				synced 2025-11-03 20:15:52 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			107 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
//@flow
 | 
						|
import * as React from "react";
 | 
						|
import classNames from "classnames";
 | 
						|
import { withRouter } from "react-router-dom";
 | 
						|
import Icon from "../Icon";
 | 
						|
 | 
						|
export type ButtonProps = {
 | 
						|
  label?: string,
 | 
						|
  loading?: boolean,
 | 
						|
  disabled?: boolean,
 | 
						|
  action?: (event: Event) => void,
 | 
						|
  link?: string,
 | 
						|
  className?: string,
 | 
						|
  icon?: string,
 | 
						|
  fullWidth?: boolean,
 | 
						|
  reducedMobile?: boolean,
 | 
						|
  children?: React.Node,
 | 
						|
 | 
						|
  // context props
 | 
						|
  classes: any
 | 
						|
};
 | 
						|
 | 
						|
type Props = ButtonProps & {
 | 
						|
  type: string,
 | 
						|
  color: string,
 | 
						|
 | 
						|
  // context prop
 | 
						|
  history: any
 | 
						|
};
 | 
						|
 | 
						|
class Button extends React.Component<Props> {
 | 
						|
  static defaultProps = {
 | 
						|
    type: "button",
 | 
						|
    color: "default"
 | 
						|
  };
 | 
						|
 | 
						|
  onClick = (event: Event) => {
 | 
						|
    const { action, link, history } = this.props;
 | 
						|
    if (action) {
 | 
						|
      action(event);
 | 
						|
    } else if (link) {
 | 
						|
      history.push(link);
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  render() {
 | 
						|
    const {
 | 
						|
      label,
 | 
						|
      loading,
 | 
						|
      disabled,
 | 
						|
      type,
 | 
						|
      color,
 | 
						|
      className,
 | 
						|
      icon,
 | 
						|
      fullWidth,
 | 
						|
      reducedMobile,
 | 
						|
      children
 | 
						|
    } = this.props;
 | 
						|
    const loadingClass = loading ? "is-loading" : "";
 | 
						|
    const fullWidthClass = fullWidth ? "is-fullwidth" : "";
 | 
						|
    const reducedMobileClass = reducedMobile ? "is-reduced-mobile" : "";
 | 
						|
    if (icon) {
 | 
						|
      return (
 | 
						|
        <button
 | 
						|
          type={type}
 | 
						|
          disabled={disabled}
 | 
						|
          onClick={this.onClick}
 | 
						|
          className={classNames(
 | 
						|
            "button",
 | 
						|
            "is-" + color,
 | 
						|
            loadingClass,
 | 
						|
            fullWidthClass,
 | 
						|
            reducedMobileClass,
 | 
						|
            className
 | 
						|
          )}
 | 
						|
        >
 | 
						|
          <span className="icon is-medium">
 | 
						|
            <Icon name={icon} color="inherit" />
 | 
						|
          </span>
 | 
						|
          <span>
 | 
						|
            {label} {children}
 | 
						|
          </span>
 | 
						|
        </button>
 | 
						|
      );
 | 
						|
    }
 | 
						|
 | 
						|
    return (
 | 
						|
      <button
 | 
						|
        type={type}
 | 
						|
        disabled={disabled}
 | 
						|
        onClick={this.onClick}
 | 
						|
        className={classNames(
 | 
						|
          "button",
 | 
						|
          "is-" + color,
 | 
						|
          loadingClass,
 | 
						|
          fullWidthClass,
 | 
						|
          className
 | 
						|
        )}
 | 
						|
      >
 | 
						|
        {label} {children}
 | 
						|
      </button>
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export default withRouter(Button);
 |