[Glitch] Add type annotation for IconButton component
Port 5a5975d7f7 to glitch-soc
Signed-off-by: Claire <claire.github-309c@sitedethib.com>
			
			
This commit is contained in:
		
				
					committed by
					
						
						Claire
					
				
			
			
				
	
			
			
			
						parent
						
							8b31030fe4
						
					
				
				
					commit
					20f1f3aa7d
				
			@@ -1,35 +1,37 @@
 | 
			
		||||
import React from 'react';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
import classNames from 'classnames';
 | 
			
		||||
import Icon from 'flavours/glitch/components/icon';
 | 
			
		||||
import AnimatedNumber from 'flavours/glitch/components/animated_number';
 | 
			
		||||
import { Icon } from './icon';
 | 
			
		||||
import { AnimatedNumber } from './animated_number';
 | 
			
		||||
 | 
			
		||||
export default class IconButton extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
  static propTypes = {
 | 
			
		||||
    className: PropTypes.string,
 | 
			
		||||
    title: PropTypes.string.isRequired,
 | 
			
		||||
    icon: PropTypes.string.isRequired,
 | 
			
		||||
    onClick: PropTypes.func,
 | 
			
		||||
    onMouseDown: PropTypes.func,
 | 
			
		||||
    onKeyDown: PropTypes.func,
 | 
			
		||||
    onKeyPress: PropTypes.func,
 | 
			
		||||
    size: PropTypes.number,
 | 
			
		||||
    active: PropTypes.bool,
 | 
			
		||||
    expanded: PropTypes.bool,
 | 
			
		||||
    style: PropTypes.object,
 | 
			
		||||
    activeStyle: PropTypes.object,
 | 
			
		||||
    disabled: PropTypes.bool,
 | 
			
		||||
    inverted: PropTypes.bool,
 | 
			
		||||
    animate: PropTypes.bool,
 | 
			
		||||
    overlay: PropTypes.bool,
 | 
			
		||||
    tabIndex: PropTypes.number,
 | 
			
		||||
    label: PropTypes.string,
 | 
			
		||||
    counter: PropTypes.number,
 | 
			
		||||
    obfuscateCount: PropTypes.bool,
 | 
			
		||||
    href: PropTypes.string,
 | 
			
		||||
    ariaHidden: PropTypes.bool,
 | 
			
		||||
  };
 | 
			
		||||
type Props = {
 | 
			
		||||
  className?: string;
 | 
			
		||||
  title: string;
 | 
			
		||||
  icon: string;
 | 
			
		||||
  onClick?: React.MouseEventHandler<HTMLButtonElement>;
 | 
			
		||||
  onMouseDown?: React.MouseEventHandler<HTMLButtonElement>;
 | 
			
		||||
  onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>;
 | 
			
		||||
  onKeyPress?: React.KeyboardEventHandler<HTMLButtonElement>;
 | 
			
		||||
  size: number;
 | 
			
		||||
  active: boolean;
 | 
			
		||||
  expanded?: boolean;
 | 
			
		||||
  style?: React.CSSProperties;
 | 
			
		||||
  activeStyle?: React.CSSProperties;
 | 
			
		||||
  disabled: boolean;
 | 
			
		||||
  inverted?: boolean;
 | 
			
		||||
  animate: boolean;
 | 
			
		||||
  overlay: boolean;
 | 
			
		||||
  tabIndex: number;
 | 
			
		||||
  label: string;
 | 
			
		||||
  counter?: number;
 | 
			
		||||
  obfuscateCount?: boolean;
 | 
			
		||||
  href?: string;
 | 
			
		||||
  ariaHidden: boolean;
 | 
			
		||||
}
 | 
			
		||||
type States = {
 | 
			
		||||
  activate: boolean,
 | 
			
		||||
  deactivate: boolean,
 | 
			
		||||
}
 | 
			
		||||
export default class IconButton extends React.PureComponent<Props, States> {
 | 
			
		||||
 | 
			
		||||
  static defaultProps = {
 | 
			
		||||
    size: 18,
 | 
			
		||||
@@ -46,7 +48,7 @@ export default class IconButton extends React.PureComponent {
 | 
			
		||||
    deactivate: false,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  componentWillReceiveProps (nextProps) {
 | 
			
		||||
  UNSAFE_componentWillReceiveProps (nextProps: Props) {
 | 
			
		||||
    if (!nextProps.animate) return;
 | 
			
		||||
 | 
			
		||||
    if (this.props.active && !nextProps.active) {
 | 
			
		||||
@@ -56,27 +58,27 @@ export default class IconButton extends React.PureComponent {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleClick = (e) =>  {
 | 
			
		||||
  handleClick: React.MouseEventHandler<HTMLButtonElement> = (e) =>  {
 | 
			
		||||
    e.preventDefault();
 | 
			
		||||
 | 
			
		||||
    if (!this.props.disabled) {
 | 
			
		||||
    if (!this.props.disabled && this.props.onClick != null) {
 | 
			
		||||
      this.props.onClick(e);
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  handleKeyPress = (e) => {
 | 
			
		||||
  handleKeyPress: React.KeyboardEventHandler<HTMLButtonElement> = (e) => {
 | 
			
		||||
    if (this.props.onKeyPress && !this.props.disabled) {
 | 
			
		||||
      this.props.onKeyPress(e);
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  handleMouseDown = (e) => {
 | 
			
		||||
  handleMouseDown: React.MouseEventHandler<HTMLButtonElement> = (e) => {
 | 
			
		||||
    if (!this.props.disabled && this.props.onMouseDown) {
 | 
			
		||||
      this.props.onMouseDown(e);
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  handleKeyDown = (e) => {
 | 
			
		||||
  handleKeyDown: React.KeyboardEventHandler<HTMLButtonElement> = (e) => {
 | 
			
		||||
    if (!this.props.disabled && this.props.onKeyDown) {
 | 
			
		||||
      this.props.onKeyDown(e);
 | 
			
		||||
    }
 | 
			
		||||
@@ -89,7 +91,7 @@ export default class IconButton extends React.PureComponent {
 | 
			
		||||
      containerSize = `${this.props.size * 1.28571429}px`;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let style = {
 | 
			
		||||
    const style = {
 | 
			
		||||
      fontSize: `${this.props.size}px`,
 | 
			
		||||
      height: containerSize,
 | 
			
		||||
      lineHeight: `${this.props.size}px`,
 | 
			
		||||
@@ -144,7 +146,7 @@ export default class IconButton extends React.PureComponent {
 | 
			
		||||
      </React.Fragment>
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    if (href && !this.prop) {
 | 
			
		||||
    if (href != null) {
 | 
			
		||||
      contents = (
 | 
			
		||||
        <a href={href} target='_blank' rel='noopener noreferrer'>
 | 
			
		||||
          {contents}
 | 
			
		||||
		Reference in New Issue
	
	Block a user