/* eslint-disable react-hooks/exhaustive-deps */ 'use client' import colors from '@/con/colors'; import ApiFetch from '@/lib/api-fetch'; import { Box, Button, Group, Image, Paper, Stack, Text, TextInput, Title, Loader, ActionIcon } from '@mantine/core'; import { Dropzone } from '@mantine/dropzone'; import { IconArrowBack, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import { toast } from 'react-toastify'; import { useProxy } from 'valtio/utils'; import sdgsDesa from '../../../_state/landing-page/sdgs-desa'; function CreateSDGsDesa() { const router = useRouter(); const stateSDGSDesa = useProxy(sdgsDesa) const [previewImage, setPreviewImage] = useState(null); const [file, setFile] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); useEffect(() => { stateSDGSDesa.findMany.load(); }, []); const resetForm = () => { stateSDGSDesa.create.form = { name: "", jumlah: "", imageId: "", }; setFile(null); setPreviewImage(null); }; const handleSubmit = async () => { try { setIsSubmitting(true); if (!file) { return toast.warn("Pilih file image terlebih dahulu"); } const res = await ApiFetch.api.fileStorage.create.post({ file, name: file.name, }) const uploaded = res.data?.data; if (!uploaded?.id) { return toast.error("Gagal mengupload file"); } stateSDGSDesa.create.form.imageId = uploaded.id; await stateSDGSDesa.create.create(); resetForm(); router.push("/admin/landing-page/SDGs") } catch (error) { console.error(error); toast.error("Gagal menambahkan sdgs desa") } finally { setIsSubmitting(false); } } return ( Tambah Sdgs Desa Gambar Program Inovasi { const selectedFile = files[0]; if (selectedFile) { setFile(selectedFile); setPreviewImage(URL.createObjectURL(selectedFile)); } }} onReject={() => toast.error('File tidak valid, gunakan format gambar')} maxSize={5 * 1024 ** 2} accept={{ 'image/*': ['.jpeg', '.jpg', '.png', '.webp'] }} radius="md" p="xl" > Seret gambar atau klik untuk memilih file Maksimal 5MB, format gambar .png, .jpg, .jpeg, webp {/* ✅ Preview gambar + tombol X */} {previewImage && ( Preview Gambar {/* Tombol hapus (pojok kanan atas) */} { setPreviewImage(null); setFile(null); }} style={{ boxShadow: '0 2px 6px rgba(0,0,0,0.15)', }} > )} { stateSDGSDesa.create.form.name = e.currentTarget.value; }} required /> Jumlah } placeholder="Masukkan jumlah" value={stateSDGSDesa.create.form.jumlah} onChange={(val) => { stateSDGSDesa.create.form.jumlah = val.target.value; }} required min={0} radius="md" /> {/* Tombol Batal */} {/* Tombol Simpan */} ); } export default CreateSDGsDesa;