import React, { useState, useEffect, useMemo, useRef } from 'react'; import { Controller, set, useForm } from 'react-hook-form'; import { usePengajuanTempoStoreDokumen } from '../../../../src-migrate/modules/register/stores/usePengajuanTempoStore'; import ProgressBar from '@ramonak/react-progress-bar'; import { UseToastOptions } from '@chakra-ui/react'; import { toast } from 'react-hot-toast'; import getFileBase64 from '@/core/utils/getFileBase64'; import useDevice from '@/core/hooks/useDevice'; import imageCompression from 'browser-image-compression'; const Dokumen = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => { const { control, watch } = useForm(); const { formDokumen, errorsDokumen, validateDokumen, updateFormDokumen, getJumlahDokumenDiisi, } = usePengajuanTempoStoreDokumen(); const { isDesktop, isMobile } = useDevice(); // const handleInputChange = (event) => { // const { name, value } = event.target; // updateFormDokumen(name, value); // validateDokumen(); // }; const handleInputChange = async (event) => { let fileBase64 = ''; const { name } = event.target; const file = event.target.files?.[0]; // Allowed file extensions const allowedExtensions = ['pdf', 'png', 'jpg', 'jpeg']; let fileExtension = ''; if (file) { fileExtension = file.name.split('.').pop()?.toLowerCase(); // Extract file extension // Check if the file extension is allowed if (!fileExtension || !allowedExtensions.includes(fileExtension)) { toast.error( 'Format file yang diijinkan adalah .pdf, .png, .jpg, atau .jpeg', { duration: 4000 } ); event.target.value = ''; return; } // Check for file size if (file.size > 2000000) { // try { // const toastId = toast.loading('mencoba mengompresi file...'); // // Compress image file // const options = { // maxSizeMB: 0.5, // Target size in MB // maxWidthOrHeight: 1920, // Adjust as needed // useWebWorker: true, // }; // const compressedFile = await imageCompression(file, options); // toast.success('berhasil mengompresi file', { duration: 4000 }); // // Convert compressed file to Base64 // fileBase64 = await getFileBase64(compressedFile); // updateFormDokumen( // name, // compressedFile.name, // fileExtension, // fileBase64 // ); // } catch (error) { // toast.error('Gagal mengompresi file', { duration: 4000 }); // } toast.error('Max File Upload 2MB', { duration: 4000 }); } else { // Convert file to Base64 fileBase64 = await getFileBase64(file); updateFormDokumen(name, file.name, fileExtension, fileBase64); } validateDokumen(); } }; const isFormValid = useMemo( () => Object.keys(errorsDokumen).length === 0, [errorsDokumen] ); const dokumenNibRef = useRef(null); const dokumenNpwpRef = useRef(null); const dokumenSppkpRef = useRef(null); const dokumenAktaPerubahanRef = useRef(null); const dokumenKtpDirutRef = useRef(null); const dokumenAktaPendirianRef = useRef(null); const dokumenLaporanKeuanganRef = useRef(null); const dokumenFotoKantorRef = useRef(null); const dokumenTempatBekerjaRef = useRef(null); useEffect(() => { validateDokumen(); // window.scrollTo({ // top: 0, // behavior: 'smooth', // }); const loadIndustries = async () => { if (!isFormValid) { const options = { behavior: 'smooth', block: 'center', }; if (errorsDokumen.dokumenNib && dokumenNibRef.current) { dokumenNibRef.current.scrollIntoView(options); return; } if (errorsDokumen.dokumenNpwp && dokumenNpwpRef.current) { dokumenNpwpRef.current.scrollIntoView(options); return; } if (errorsDokumen.dokumenSppkp && dokumenSppkpRef.current) { dokumenSppkpRef.current.scrollIntoView(options); return; } if ( errorsDokumen.dokumenAktaPerubahan && dokumenAktaPerubahanRef.current ) { dokumenAktaPerubahanRef.current.scrollIntoView(options); return; } if (errorsDokumen.dokumenKtpDirut && dokumenKtpDirutRef.current) { dokumenKtpDirutRef.current.scrollIntoView(options); return; } if ( errorsDokumen.dokumenAktaPendirian && dokumenAktaPendirianRef.current ) { dokumenAktaPendirianRef.current.scrollIntoView(options); return; } if ( errorsDokumen.dokumenLaporanKeuangan && dokumenLaporanKeuanganRef.current ) { dokumenLaporanKeuanganRef.current.scrollIntoView(options); return; } if (errorsDokumen.dokumenFotoKantor && dokumenFotoKantorRef.current) { dokumenFotoKantorRef.current.scrollIntoView(options); return; } if ( errorsDokumen.dokumenTempatBekerja && dokumenTempatBekerjaRef.current ) { dokumenTempatBekerjaRef.current.scrollIntoView(options); return; } } }; loadIndustries(); }, [buttonSubmitClick, chekValid]); useEffect(() => { validateDokumen(); }, [buttonSubmitClick]); return ( <> {isDesktop && (
Upload Progress
{parseInt((getJumlahDokumenDiisi() / 13) * 100)} % {getJumlahDokumenDiisi() >= 5 ? getJumlahDokumenDiisi() == 13 ? 'Selesai' : 'Sedikit Lagi' : ''}
Upload Progress
{parseInt((getJumlahDokumenDiisi() / 13) * 100)} % {getJumlahDokumenDiisi() >= 5 ? getJumlahDokumenDiisi() == 13 ? 'Selesai' : 'Sedikit Lagi' : ''}