// oxlint-disable next/no-img-element "use client"; import { Upload } from "lucide-react"; import { useEffect, useEffectEvent, useRef, useState } from "react"; import { CircularProgress } from "@/components/customized/progress/circular-progress"; export function PageFileInput({ onValueChange, }: { onValueChange?: (value: File) => void; }) { const fileInput = useRef(null); const submitButton = useRef(null); const [value, setValue] = useState(); const [progress, setProgress] = useState(0); const updateFormValue = useEffectEvent((file: File) => { onValueChange?.(file); }); useEffect(() => { if (!value) return; updateFormValue(value); setTimeout(() => submitButton.current?.click(), 100); setProgress(0); const start = Date.now(); const interval = setInterval(() => { const t = Math.min((Date.now() - start) / 10000, 1); const eased = 1 - Math.pow(1 - t, 2); setProgress(eased * 100); if (t >= 1) clearInterval(interval); }, 16); return () => clearInterval(interval); }, [value]); return (
fileInput.current?.click()} >
{value ? ( <> `${progress}%`} showLabel size={120} value={Math.round(progress)} />
กำลังอัพโหลด กรุณาอย่าปิดหน้านี้
) : ( <>
แตะเพื่อเลือกไฟล์สลิป
)}
setValue(fileInput.current?.files?.[0])} />
); }