diff --git a/app/form/admin/client.tsx b/app/form/admin/client.tsx index 3313ef7..a959d87 100644 --- a/app/form/admin/client.tsx +++ b/app/form/admin/client.tsx @@ -83,10 +83,9 @@ export default function FormEditorClient({ form, initialQuestions }: FormEditorC displayOrder, options: [], }); - toast.success("Question added!"); router.refresh(); } catch (err: any) { - toast.error(err.message || "Failed to add question."); + console.error("Failed to add question:", err); } }; @@ -111,10 +110,9 @@ export default function FormEditorClient({ form, initialQuestions }: FormEditorC const handleDeleteQuestion = async (id: string) => { try { await deleteQuestion(id, form.id); - toast.success("Question deleted!"); router.refresh(); } catch (err: any) { - toast.error(err.message || "Failed to delete question."); + console.error("Failed to delete question:", err); } }; @@ -146,22 +144,39 @@ export default function FormEditorClient({ form, initialQuestions }: FormEditorC formData.append("file", file); setUploadingId(questionId); - try { - const imageUrl = await uploadImage(formData); - await handleUpdateQuestion(questionId, { imageUrl }); - toast.success("Image uploaded!"); - router.refresh(); - } catch (err: any) { - toast.error(err.message || "Failed to upload image."); - } finally { - setUploadingId(null); - } + + toast.promise( + uploadImage(formData).then(async (imageUrl) => { + await updateQuestion(questionId, form.id, { imageUrl }); + setQuestions((prev) => + prev.map((q) => (q.id === questionId ? { ...q, imageUrl } : q)) + ); + router.refresh(); + }).finally(() => { + setUploadingId(null); + }), + { + loading: "Uploading image...", + success: "Image uploaded!", + error: (err: any) => err.message || "Failed to upload image.", + } + ); }; const handleRemoveImage = async (questionId: string) => { - await handleUpdateQuestion(questionId, { imageUrl: null }); - toast.success("Image removed."); - router.refresh(); + toast.promise( + updateQuestion(questionId, form.id, { imageUrl: null }).then(() => { + setQuestions((prev) => + prev.map((q) => (q.id === questionId ? { ...q, imageUrl: null } : q)) + ); + router.refresh(); + }), + { + loading: "Removing image...", + success: "Image removed.", + error: (err: any) => err.message || "Failed to remove image.", + } + ); }; const handleAddOption = async (question: Question) => { diff --git a/app/form/admin/layout.tsx b/app/form/admin/layout.tsx index 8ff7dd5..98768f4 100644 --- a/app/form/admin/layout.tsx +++ b/app/form/admin/layout.tsx @@ -1,6 +1,5 @@ import { SidebarProvider, SidebarTrigger } from "@/components/ui/sidebar"; import { AdminSidebar } from "@/components/admin-sidebar"; -import { Toaster } from "@/components/ui/sonner"; import { getServerSession } from "next-auth"; import { authOptions } from "@/app/api/auth/[...nextauth]/route"; import { redirect } from "next/navigation"; diff --git a/app/form/admin/result/[id]/page.tsx b/app/form/admin/result/[id]/page.tsx index 5c98dee..b17d609 100644 --- a/app/form/admin/result/[id]/page.tsx +++ b/app/form/admin/result/[id]/page.tsx @@ -2,7 +2,7 @@ import { db } from "@/db"; import { notFound } from "next/navigation"; import Link from "next/link"; import { Button } from "@/components/ui/button"; -import { ArrowLeft } from "lucide-react"; +import { ArrowLeft, ArrowRight } from "lucide-react"; import SubmissionDetailClient from "./client"; import { DeleteSubmissionButton } from "@/components/delete-buttons"; @@ -45,7 +45,7 @@ export default async function SubmissionDetailPage({ params }: SubmissionDetailP const nextId = currentIndex >= 0 && currentIndex < submissionsList.length - 1 ? submissionsList[currentIndex + 1].id : null; return ( -