From 6e8bf319007c9f48b4fb3af7c3fe5156b93e85a2 Mon Sep 17 00:00:00 2001 From: WeeXnes Date: Thu, 12 Jun 2025 15:46:09 +0200 Subject: [PATCH] changed upload limit --- next.config.ts | 4 +- .../upload/components/file-upload-form.tsx | 126 +++++++++--------- src/lib/actions/file.actions.ts | 19 +-- src/lib/config.ts | 1 + 4 files changed, 74 insertions(+), 76 deletions(-) create mode 100644 src/lib/config.ts diff --git a/next.config.ts b/next.config.ts index 607a563..6f046e8 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,4 +1,6 @@ + import type {NextConfig} from 'next'; +import { UPLOAD_LIMIT_MB } from '@/lib/config'; const nextConfig: NextConfig = { /* config options here */ @@ -20,7 +22,7 @@ const nextConfig: NextConfig = { }, experimental: { serverActions: { - bodySizeLimit: '50mb', + bodySizeLimit: `${UPLOAD_LIMIT_MB}mb`, allowedOrigins: [ "https://weexnes.dev", "https://weexnes.dev:6837", diff --git a/src/app/upload/components/file-upload-form.tsx b/src/app/upload/components/file-upload-form.tsx index 2436a4e..51b4bb3 100644 --- a/src/app/upload/components/file-upload-form.tsx +++ b/src/app/upload/components/file-upload-form.tsx @@ -1,7 +1,7 @@ "use client"; -import { useRef, useState, useEffect, useActionState } from 'react'; // Updated import +import { useRef, useState, useEffect, useActionState } from 'react'; import { useFormStatus } from 'react-dom'; import { uploadFileAction } from '@/lib/actions/file.actions'; import { Button } from '@/components/ui/button'; @@ -11,59 +11,54 @@ import { Progress } from '@/components/ui/progress'; import { useToast } from '@/hooks/use-toast'; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; import { UploadCloud, CheckCircle, XCircle, Loader2, File as FileIconLucide } from "lucide-react"; +import { UPLOAD_LIMIT_MB } from '@/lib/config'; function SubmitButton() { const { pending } = useFormStatus(); return ( - + ); } export default function FileUploadForm() { const initialState = { message: null, error: false, file: null }; - // Updated to useActionState - const [state, dispatch, isPending] = useActionState(uploadFileAction, initialState); + const [state, dispatch, isPending] = useActionState(uploadFileAction, initialState); const { toast } = useToast(); const [selectedFile, setSelectedFile] = useState(null); - const [uploadProgress, setUploadProgress] = useState(0); // Mock progress + const [uploadProgress, setUploadProgress] = useState(0); const formRef = useRef(null); const handleFileChange = (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (file) { setSelectedFile(file); - setUploadProgress(0); // Reset progress + setUploadProgress(0); } else { setSelectedFile(null); } }; - - // Simulate upload progress for UX + useEffect(() => { let interval: NodeJS.Timeout; - // Check if isPending (from useActionState) is true and selectedFile exists - if (isPending && selectedFile && !state?.message) { + if (isPending && selectedFile && !state?.message) { let progress = 0; - // Simulate progress quickly at first, then slower interval = setInterval(() => { - progress += Math.random() * 15 + 5; // Random progress increment - if (progress >= 95 && !state?.message) { // Stall at 95% if no response yet - setUploadProgress(95); + progress += Math.random() * 15 + 5; + if (progress >= 95 && !state?.message) { + setUploadProgress(95); } else if (progress <= 100) { setUploadProgress(Math.min(progress, 100)); } if (progress >= 100 || state?.message) { - clearInterval(interval); + clearInterval(interval); } }, 150); } else if (state?.message && !state.error) { - // If successful, jump to 100% setUploadProgress(100); } else if (state?.message && state.error) { - // If error, reset progress or show error state (e.g., 0 or specific error indicator) setUploadProgress(0); } return () => clearInterval(interval); @@ -85,63 +80,62 @@ export default function FileUploadForm() { description: state.message, icon: , }); - formRef.current?.reset(); - setSelectedFile(null); - setUploadProgress(100); - // Optionally reset progress to 0 after a short delay if user stays on page + formRef.current?.reset(); + setSelectedFile(null); + setUploadProgress(100); setTimeout(() => setUploadProgress(0), 2000); } } }, [state, toast]); return ( -
-
- -
-
- {selectedFile ? ( -