{"version":3,"file":"FileUpload.mjs","names":["React","useRef","useState","useEffect","Fragment","makeStyles","Typography","Card","CardContent","Divider","FileType","FluentButton","useStyles","theme","avatarImage","width","height","borderRadius","border","borderColor","palette","primary","main","marginTop","marginLeft","image","instruction","display","alignContent","justifyContent","icon","avatarIcon","previewCard","maxWidth","action","spacing","marginBottom","flexDirection","divider","initialInstruction","FileUpload","props","$","_c","file","setFile","previewUrl","setPreviewUrl","isValid","setIsValid","fileType","setFileType","fileName","setFileName","fileSize","setFileSize","fileDate","setFileDate","id","onInput","accept","errorText","classes","filePickerRef","t0","t1","fileReader","window","FileReader","onload","result","readAsDataURL","t2","event","pickedFile","target","files","fileIsValid","name","size","lastModifiedDate","toString","str","split","length","pickedFile_0","pickedHandler","formatBytes","pickFileHandler","current","click","reset","_temp","fileReader_0","t3","Symbol","for","t4","t5","t6","imagePreview","t7","imageUpload","t8","t9","formControl","t10","bytes","decimals","undefined","dm","sizes","i","Math","floor","log","parseFloat","pow","toFixed"],"sources":["../../../src/utilities/uploader/FileUpload.jsx"],"sourcesContent":["import React, { useRef, useState, useEffect, Fragment } from 'react'\nimport {\n  makeStyles,\n  Typography,\n  Card,\n  CardContent,\n  Divider\n} from '@material-ui/core'\nimport { FileType } from './FileType'\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton'\n\nconst useStyles = makeStyles((theme) => ({\n  avatarImage: {\n    width: 200,\n    height: 200,\n    borderRadius: 100,\n    border: '3px solid',\n    borderColor: theme.palette.primary.main,\n    marginTop: -3,\n    marginLeft: -3\n  },\n  image: {\n    width: 300,\n    height: '100%',\n    border: '2px solid',\n    borderColor: theme.palette.primary.main,\n    marginTop: -3,\n    marginLeft: -3\n  },\n  instruction: {\n    display: 'flex',\n    alignContent: 'center',\n    justifyContent: 'center'\n  },\n  icon: {\n    display: 'flex',\n    justifyContent: 'center'\n  },\n  avatarIcon: {\n    display: 'flex',\n    justifyContent: 'center',\n    marginTop: '35%'\n  },\n  previewCard: {\n    maxWidth: 500\n  },\n  action: {\n    marginTop: theme.spacing(1),\n    marginBottom: theme.spacing(1),\n    display: 'flex',\n    flexDirection: 'row'\n  },\n  divider: {\n    marginTop: theme.spacing(1)\n  },\n  initialInstruction: {\n    marginLeft: theme.spacing(2),\n    marginTop: theme.spacing(0.5)\n  }\n}))\n\nexport const FileUpload = (props) => {\n  const [file, setFile] = useState()\n  const [previewUrl, setPreviewUrl] = useState()\n  const [isValid, setIsValid] = useState(false)\n  const [fileType, setFileType] = useState()\n  const [fileName, setFileName] = useState()\n  const [fileSize, setFileSize] = useState()\n  const [fileDate, setFileDate] = useState()\n  const { id, onInput, accept, errorText } = props\n  const classes = useStyles()\n\n  const filePickerRef = useRef()\n  useEffect(() => {\n    if (!file) {\n      return\n    }\n    const fileReader = new window.FileReader()\n    fileReader.onload = () => {\n      setPreviewUrl(fileReader.result)\n    }\n    fileReader.readAsDataURL(file)\n  }, [file])\n\n  const pickedHandler = (event) => {\n    const pickedFile = event.target.files[0]\n    let fileIsValid = isValid\n    // console.log('ETF', event.target.files[0].name);\n    setFileName(event.target.files[0].name)\n    setFileSize(event.target.files[0].size)\n    setFileDate(event.target.files[0].lastModifiedDate.toString())\n    const str = event.target.files[0].name.split('.')[1]\n    // console.log('STR', str);\n    setFileType(str)\n    if (event.target.files && event.target.files.length === 1) {\n      const pickedFile = event.target.files[0]\n      setFile(pickedFile)\n      setIsValid(true)\n    } else {\n      setIsValid(false)\n      fileIsValid = false\n    }\n    onInput(id, pickedFile, fileIsValid)\n  }\n\n  const pickFileHandler = () => {\n    filePickerRef.current.click()\n    if (file && file !== previewUrl) {\n      reset()\n    }\n  }\n\n  const formatBytes = (bytes, decimals = 2) => {\n    if (bytes === 0) return '0 Bytes'\n\n    const k = 1024\n    const dm = decimals < 0 ? 0 : decimals\n    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n\n    const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n    return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]\n  }\n\n  const reset = () => {\n    const fileReader = new window.FileReader()\n    fileReader.onload = () => {\n      setPreviewUrl(fileReader.result)\n    }\n    fileReader.readAsDataURL(file)\n  }\n\n  return (\n    <Card className={classes.previewCard} variant='outlined'>\n      <CardContent>\n        <div className={classes.formControl}>\n          <input\n            id={id}\n            ref={filePickerRef}\n            style={{ display: 'none' }}\n            type='file'\n            accept={accept}\n            onChange={pickedHandler}\n          />\n\n          <div className={classes.imageUpload}>\n            {!previewUrl && (\n              <div className={classes.action}>\n                <div className={classes.action}>\n                  <FluentButton\n                    type='button'\n                    variant='contained'\n                    color='secondary'\n                    onClick={pickFileHandler}\n                  >\n                    Select File\n                  </FluentButton>\n\n                  <div className={classes.initialInstruction}>\n                    <Typography variant='caption'>\n                      Click 'Select File' to upload a file from your computer\n                    </Typography>\n                  </div>\n                </div>\n              </div>\n            )}\n\n            {previewUrl && (\n              <Fragment>\n                <div className={classes.imagePreview}>\n                  {/* {console.log('PREVIEW URL:', previewUrl)} */}\n                  <FileType\n                    fileType={fileType}\n                    image={previewUrl}\n                    fileName={fileName}\n                    size={formatBytes(fileSize)}\n                    lastModifiedDate={fileDate}\n                  />\n                </div>\n                <div className={classes.divider}>\n                  <Divider />\n                </div>\n              </Fragment>\n            )}\n          </div>\n          {!isValid && <Typography>{errorText} </Typography>}\n        </div>\n      </CardContent>\n    </Card>\n  )\n}\n"],"mappings":"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"}