import DialogTitle from '@mui/material/DialogTitle'; import DialogContent from '@mui/material/DialogContent'; import DialogContentText from '@mui/material/DialogContentText'; import DialogActions from '@mui/material/DialogActions'; import { Button, Grid, TextField, Typography, InputLabel, FormControl } from '@mui/material'; import Dialog from '@mui/material/Dialog'; import * as React from 'react'; import {useEffect, useRef, useState} from 'react'; import axios from 'axios'; import {apiPath, getUserData} from '../../../auth/utils'; import {GENERAL_RED_COLOR, GENERAL_TEXT_COLOR} from '../../../themes/colorConst'; import { MuiFileInput } from 'mui-file-input'; import { POST_TEMPLATE_PATH } from '../../../utils/ApiPathConst'; import { useForm } from 'react-hook-form'; import AttachFileIcon from '@mui/icons-material/AttachFile' import CloudUploadIcon from '@mui/icons-material/CloudUpload'; import { notifySaveSuccess, base64ToBlob } from "../../../utils/CommonFunction"; import { GET_TEMPLATE_PATH } from "../../../utils/ApiPathConst"; export function UploadTemplateWindow({ isWindowOpen, onNormalClose, onConfirmClose, recordId }) { const [errors, setErrors] = useState({}); const [file, setFile] = React.useState(null) const [templateId, setTemplateId] = React.useState(0) const [isFilePreloaded, setIsFilePreloaded] = React.useState(false) const fileInputRef = useRef(null); const { register, getValues, setValue } = useForm(); const handleOnClose = () => { resetForm(); onNormalClose(); }; const handleFieldChange = (newFile) => { setIsFilePreloaded(false); setFile(newFile); }; const handleChange = (event) => { if(event !== null){ const newFile = event.target.files[0]; handleFieldChange(newFile); } else{ setFile(null) } }; const handleOpenFileSelect = () => { fileInputRef.current.click(); }; const resetForm = () => { setFile(null); setTemplateId(0); // setValue('file', record.name); setValue('file', null); setValue('name', null); setValue('remarks', null); setIsFilePreloaded(false); setErrors({}); } useEffect(() => { // Load/Clear Data if (recordId == 0 || recordId == null) { // New Template resetForm(); } else { // Edit Template axios.get(`${apiPath}${GET_TEMPLATE_PATH}/${recordId}`) .then((response) => { if (response.status === 200) { const record = response.data; const fileBlob = base64ToBlob(record.blobValue, 'application/pdf'); const newFile = new File([fileBlob], record.filename, { type:'application/pdf' }); setFile(newFile); setTemplateId(record.id); // setValue('file', record.name); setValue('name', record.name); setValue('remarks', record.remarks); setIsFilePreloaded(true); } }) .catch(error => { console.log(error); return false; }); } }, [recordId]); function validate() { const formErrors = {}; if (!isFilePreloaded) { if (file == null) { formErrors.file = 'File must not be null'; } else if (file.type !== 'application/pdf') { formErrors.file = 'File must be a PDF file'; } } if (getValues().name == null) { formErrors.name = 'Name must not be empty'; } setErrors(formErrors); if (Object.keys(formErrors).length === 0) { uploadData(); } } function uploadData() { const values = getValues(); const records = { 'id': templateId, 'name': values.name, 'remarks': values.remarks, } let formData = new FormData(); if (file !== null) { formData.append('file', file); } if (values.name) { formData.append('record', JSON.stringify(records)); } formData.append('newUpload', !isFilePreloaded); axios.post(`${apiPath}${POST_TEMPLATE_PATH}`, formData, { headers: { 'Content-Type': 'multipart/form-data' } }) .then((response) => { if (response.status === 200) { notifySaveSuccess(); resetForm(); onConfirmClose(); } }) .catch((error) => { console.log(error); return false; }); } const handleDragOver = (e) => { e.preventDefault(); e.stopPropagation(); }; const handleDrop = (e) => { e.preventDefault(); e.stopPropagation(); const droppedFiles = Array.from(e.dataTransfer.files); console.log(droppedFiles); // setFiles((prevFiles) => [...prevFiles, ...droppedFiles]); }; return ( Upload new PDF Template File Name: Name: {/*3 }}>*/} Form Code: ); }