Home Reference Source Repository

src/components/admin/AvatarEditor/AvatarEditor.js

/*!
 * Codefolio
 * Copyright(c) 2016 MSMFSD
 * MIT Licensed
 */
import React, { Component, PropTypes } from 'react'
import CssModules from 'react-css-modules'
import styles from './AvatarEditor.css'

/**
 * @class AvatarEditor
 * @extends {Component}
 */
class AvatarEditor extends Component {

  /**
   * Allow live form edits to update profile state on blur
   * Why? So other state updates dont reset their values pre submit
   */
  onBlurUpdate () {
    this.props.updateAvatarFields(this.props.use.value, this.props.gravitarEmail.value, this.props.customAvatarFile.value)
  }

  render () {
    const { use, gravitarEmail, customAvatarFile, defaultInputClasses } = this.props
    return (
      <div styleName="avatar-editor">
        <div className={defaultInputClasses}>
          <div className="row">
            <div className="input-field col s12 l6">
              <h6>Select avatar type:</h6>
              <select className="browser-default" {...use} value={use.value} onBlur={(e) => this.onBlurUpdate(e)}>
                <option value="defaultAvatar">Default</option>
                <option value="gravitarEmail">Gravitar</option>
                <option value="customAvatar">Custom</option>
              </select>
            </div>
            <div className="input-field col s12 l6">
              <div className={use.value === 'gravitarEmail' ? 'show' : 'hide'}>
                <h6>Gravitar email address:</h6>
                <input type="text" placeholder="Enter your gravitar email" {...gravitarEmail} onBlur={(e) => this.onBlurUpdate(e)}/>
                {gravitarEmail.touched && gravitarEmail.error && <div className="input-field-message">{gravitarEmail.error}</div>}
              </div>
              <div className={use.value === 'customAvatar' ? 'show' : 'hide'}>
                <h6>Upload custom avatar:<div className="hint">Jpeg/PNG 200kb max</div></h6>
                <input type="file" {...customAvatarFile} value={null} accept=".png, .jpeg, .jpg" onBlur={(e) => this.onBlurUpdate(e)}/>
                {customAvatarFile.touched && customAvatarFile.error && <div className="input-field-message">{customAvatarFile.error}</div>}
              </div>
            </div>
          </div>
        </div>
      </div>
    )
  }

}

AvatarEditor.propTypes = {
  use: PropTypes.object.isRequired,
  gravitarEmail: PropTypes.object.isRequired,
  customAvatar: PropTypes.object.isRequired,
  customAvatarFile: PropTypes.object.isRequired,
  updateAvatarFields: PropTypes.func.isRequired,
  defaultInputClasses: PropTypes.string
}

AvatarEditor.defaultProps = {
  defaultInputClasses: 'input-field col s12'
}

AvatarEditor = CssModules(AvatarEditor, styles)
export default AvatarEditor