diff --git a/src/screens/Biometric/OcrNpwp/Verify.jsx b/src/screens/Biometric/OcrNpwp/Verify.jsx index 7ad67f7..9191879 100644 --- a/src/screens/Biometric/OcrNpwp/Verify.jsx +++ b/src/screens/Biometric/OcrNpwp/Verify.jsx @@ -568,7 +568,7 @@ const Verify = () => {
Or
fileInputRef.current.click()} style={styles.browseLink}>BrowseRecommended size: 320x200 (Max File Size: 2MB)
-Supported file types: JPG, JPEG, PNG
+Supported file types: JPG, JPEG
{/* File Input */} diff --git a/src/screens/Biometric/OcrSim/Verify.jsx b/src/screens/Biometric/OcrSim/Verify.jsx index 080be01..537e7bf 100644 --- a/src/screens/Biometric/OcrSim/Verify.jsx +++ b/src/screens/Biometric/OcrSim/Verify.jsx @@ -12,7 +12,7 @@ const CustomLabel = ({ overRide, children, ...props }) => { const Verify = () => { const BASE_URL = process.env.REACT_APP_BASE_URL; const API_KEY = process.env.REACT_APP_API_KEY; - const fileTypes = ["image/jpeg", "image/png"]; + const fileTypes = ["image/jpeg", "image/jpg"]; const fileInputRef = useRef(null); const [isMobile, setIsMobile] = useState(false); @@ -112,27 +112,18 @@ const Verify = () => { // Handle file upload const handleFileDrop = (files) => { - if (files && files[0]) { + if (files?.[0]) { handleImageUpload(files[0]); } else { - console.error('No valid files dropped'); + setImageError('No valid files dropped'); } - }; + }; const checkImageDimensions = (file) => { return new Promise((resolve, reject) => { const img = new Image(); img.src = URL.createObjectURL(file); - // img.onload = () => { - // URL.revokeObjectURL(img.src); - // if (img.width > 320 || img.height > 200) { - // reject('Image dimensions must not exceed 320x200 pixels'); - // } else { - // resolve(true); - // } - // }; - img.onerror = () => { URL.revokeObjectURL(img.src); reject('Failed to load image'); @@ -141,41 +132,54 @@ const Verify = () => { }; const handleImageUpload = async (file) => { + // Clear previous states setErrorMessage(''); - setFile(file); - setSelectedImageName(file.name); + setImageError(''); + + // Check if file exists + if (!file) { + setImageError(Please select a file); + return; + } try { + // Set file states only after confirming file exists + setFile(file); + setSelectedImageName(file.name); + // Check if file is PNG if (file.type === 'image/png') { - setImageError('The image format is not suitable. Only JPG and JPEG files are allowed.'); - setFile(null); - setSelectedImageName(''); - return; + throw new Error('The image format is not suitable. Only JPG and JPEG files are allowed.'); } // Validate file type if (!fileTypes.includes(file.type)) { - setImageError('Invalid file type. Only JPG and JPEG are allowed.'); - return; + throw new Error('Invalid file type. Only JPG and JPEG are allowed.'); } // Validate file size if (file.size > 2 * 1024 * 1024) { - setImageError('File size exceeds 2MB.'); - return; + throw new Error('File size exceeds 2MB.'); } // Validate image dimensions await checkImageDimensions(file); setImageError(''); - + } catch (error) { - setImageError(error); + // Clear states on error setFile(null); setSelectedImageName(''); + setImageError({error.message || error}); + + // Reset file input + if (fileInputRef.current) { + fileInputRef.current.value = ''; + } } - }; + }; + + const handleImageCancel = () => { setFile(null); @@ -573,7 +577,7 @@ const Verify = () => {Or
fileInputRef.current.click()} style={styles.browseLink}>BrowseRecommended size: 320x200 (Max File Size: 2MB)
-Supported file types: JPG, JPEG, PNG
+Supported file types: JPG, JPEG
{/* File Input */} @@ -584,9 +588,17 @@ const Verify = () => { className="form-control" style={{ display: 'none' }} accept="image/jpeg, image/jpg" - onChange={(e) => handleImageUpload(e.target.files[0])} + onChange={(e) => { + const selectedFile = e.target.files?.[0]; + if (selectedFile) { + handleImageUpload(selectedFile); + } + // Reset input value + e.target.value = ''; + }} /> + {selectedImageName && (File: {selectedImageName}