import { ChangeEvent } from 'react'; import React, { FC, useState, useEffect, memo, } from '../../lib/teact/teact'; import buildClassName from '../../util/buildClassName'; import CropModal from './CropModal'; import './AvatarEditable.scss'; interface OwnProps { title?: string; disabled?: boolean; currentAvatarBlobUrl?: string; onChange: (file: File) => void; } const AvatarEditable: FC = ({ title = 'Change your profile picture', disabled, currentAvatarBlobUrl, onChange, }) => { const [selectedFile, setSelectedFile] = useState(); const [croppedBlobUrl, setCroppedBlobUrl] = useState(currentAvatarBlobUrl); useEffect(() => { setCroppedBlobUrl(currentAvatarBlobUrl); }, [currentAvatarBlobUrl]); function handleSelectFile(event: ChangeEvent) { const target = event.target as HTMLInputElement; if (!target || !target.files || !target.files[0]) { return; } setSelectedFile(target.files[0]); target.value = ''; } function handleAvatarCrop(croppedImg: File) { setSelectedFile(undefined); onChange(croppedImg); if (croppedBlobUrl) { URL.revokeObjectURL(croppedBlobUrl); } setCroppedBlobUrl(URL.createObjectURL(croppedImg)); } function handleModalClose() { setSelectedFile(undefined); } const labelClassName = buildClassName( croppedBlobUrl && 'filled', disabled && 'disabled', ); return (
); }; export default memo(AvatarEditable);