import React, { memo } from 'react' import styled, { css } from 'styled-components' import PropTypes from 'prop-types' import ModalDialog from '../modal-dialog' import Button from '../button' import { Text } from '../text' import Avatar from 'react-avatar-edit' import { default as ASCAvatar } from '../avatar/index' const StyledASCAvatar = styled(ASCAvatar)` display: inline-block; vertical-align: bottom; `; const StyledAvatarContainer = styled.div` text-align: center; div:first-child { margin: 0 auto; } `; class AvatarEditorBody extends React.Component { constructor(props) { super(props); this.state = { croppedImage: null, src: this.props.image, hasMaxSizeError: false } this.onCrop = this.onCrop.bind(this) this.onClose = this.onClose.bind(this) this.onBeforeFileLoad = this.onBeforeFileLoad.bind(this) this.onFileLoad = this.onFileLoad.bind(this) } onClose() { this.props.onCloseEditor(); this.setState({ croppedImage: null }) } onCrop(croppedImage) { this.props.onCropImage(croppedImage); this.setState({ croppedImage }) } onBeforeFileLoad(elem) { if (elem.target.files[0].size > this.props.maxSize * 1000000) { this.setState({ hasMaxSizeError: true }); elem.target.value = ""; }else if(this.state.hasMaxSizeError){ this.setState({ hasMaxSizeError: false }); } } onFileLoad(file){ let reader = new FileReader(); let _this = this; reader.onloadend = () => { _this.props.onFileLoad(reader.result); }; reader.readAsDataURL(file) } render() { return ( {this.state.croppedImage && (
) } { this.state.hasMaxSizeError && {this.props.maxSizeErrorLabel} }
); } } class AvatarEditor extends React.Component { constructor(props) { super(props); this.state = { defaultImage: null, croppedImage: null, visible: props.value }; this.onClose = this.onClose.bind(this); this.onCropImage = this.onCropImage.bind(this); this.onCloseEditor = this.onCloseEditor.bind(this); this.onFileLoad = this.onFileLoad.bind(this); this.onSaveButtonClick = this.onSaveButtonClick.bind(this); } onFileLoad(file){ this.setState({ defaultImage: file }); } onSaveButtonClick() { this.props.onSave({ defaultImage: this.state.defaultImage ? this.state.defaultImage : this.props.image, croppedImage: this.state.croppedImage }); this.setState({ visible: false }); } onCloseEditor() { this.setState({ croppedImage: null }); } onCropImage(result) { this.setState({ croppedImage: result }); } onClose() { this.setState({ visible: false }); this.props.onClose(); } componentDidUpdate(prevProps) { if (this.props.visible !== prevProps.visible) { this.setState({ visible: this.props.visible }); } } render() { return ( } footerContent={[