Skip to content
Extraits de code Groupes Projets
icon_button.js 2,4 ko
Newer Older
  • Learn to ignore specific revisions
  • import React from 'react';
    
    import Motion from 'react-motion/lib/Motion';
    import spring from 'react-motion/lib/spring';
    
    import PropTypes from 'prop-types';
    
    export default class IconButton extends React.PureComponent {
    
      static propTypes = {
        className: PropTypes.string,
        title: PropTypes.string.isRequired,
        icon: PropTypes.string.isRequired,
        onClick: PropTypes.func,
        size: PropTypes.number,
        active: PropTypes.bool,
    
        pressed: 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.string,
    
      };
    
      static defaultProps = {
        size: 18,
        active: false,
        disabled: false,
        animate: false,
    
        overlay: false,
    
        tabIndex: '0',
    
        e.preventDefault();
    
          this.props.onClick(e);
    
    
      render () {
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
          fontSize: `${this.props.size}px`,
    
          width: `${this.props.size * 1.28571429}px`,
    
          height: `${this.props.size * 1.28571429}px`,
    
          lineHeight: `${this.props.size}px`,
    
          ...(this.props.active ? this.props.activeStyle : {}),
    
        const classes = ['icon-button'];
    
        if (this.props.active) {
          classes.push('active');
        }
    
        if (this.props.disabled) {
          classes.push('disabled');
        }
    
        if (this.props.inverted) {
          classes.push('inverted');
        }
    
        if (this.props.overlay) {
          classes.push('overlayed');
        }
    
    
        if (this.props.className) {
    
          classes.push(this.props.className);
    
        return (
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
          <Motion defaultStyle={{ rotate: this.props.active ? -360 : 0 }} style={{ rotate: this.props.animate ? spring(this.props.active ? -360 : 0, { stiffness: 120, damping: 7 }) : 0 }}>
            {({ rotate }) =>
              <button
                aria-label={this.props.title}
    
                aria-pressed={this.props.pressed}
    
                aria-expanded={this.props.expanded}
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
                title={this.props.title}
    
                className={classes.join(' ')}
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
                onClick={this.handleClick}
    
                tabIndex={this.props.tabIndex}
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
                <i style={{ transform: `rotate(${rotate}deg)` }} className={`fa fa-fw fa-${this.props.icon}`} aria-hidden='true' />
              </button>
            }
          </Motion>