import React from 'react'; import LetterTile from './letter-tile.jsx'; import { AVATAR_SIZE } from '../config.js'; import { imageFileScaledToBase64, makeImageUrl } from '../lib/blob-helpers.js'; export default class AvatarUpload extends React.Component { constructor(props) { super(props); this.state = { dataUrl: props.avatar }; this.handleFileUpload = this.handleFileUpload.bind(this); this.handleClear = this.handleClear.bind(this); } static getDerivedStateFromProps(nextProps, prevState) { if (prevState.dataUrl != nextProps.avatar) { return { dataUrl: nextProps.avatar }; } return null; } handleFileUpload(e) { imageFileScaledToBase64(e.target.files[0], AVATAR_SIZE, AVATAR_SIZE, true, // Success (base64bits, mime) => { var du = makeImageUrl({data: base64bits, type: mime}); this.setState({dataUrl: du}); this.props.onImageChanged(du); }, // Failure (err) => { this.props.onError(err, 'err'); }); // Clear the value so the same file can be uploaded again. e.target.value = ''; } handleClear() { this.props.onImageChanged(null); } render() { // Randomize id value in case more than one AvatarUpload is shown // at the same time. var randId = "file-input-avatar-" + (Math.random() + '').substr(2); return (