/* 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, Tooltip, } from '@mantine/core'; import { Dropzone } from '@mantine/dropzone'; import { IconArrowBack, IconFile, 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 apbdes from '../../../_state/landing-page/apbdes'; function CreateAPBDes() { const router = useRouter(); const stateAPBDes = useProxy(apbdes) const [previewImage, setPreviewImage] = useState(null); const [previewDoc, setPreviewDoc] = useState(null); const [imageFile, setImageFile] = useState(null); const [docFile, setDocFile] = useState(null); useEffect(() => { stateAPBDes.findMany.load(); }, []); const resetForm = () => { stateAPBDes.create.form = { name: "", jumlah: "", imageId: "", fileId: "", }; setImageFile(null); setDocFile(null); setPreviewImage(null); }; const handleSubmit = async () => { if (!imageFile || !docFile) { return toast.warn("Pilih gambar dan dokumen terlebih dahulu"); } try { const [uploadImageRes, uploadDocRes] = await Promise.all([ ApiFetch.api.fileStorage.create.post({ file: imageFile, name: imageFile.name }), ApiFetch.api.fileStorage.create.post({ file: docFile, name: docFile.name }), ]); const imageId = uploadImageRes?.data?.data?.id; const fileId = uploadDocRes?.data?.data?.id; if (!imageId || !fileId) { return toast.error("Gagal mengupload file"); } stateAPBDes.create.form.imageId = imageId; stateAPBDes.create.form.fileId = fileId; await stateAPBDes.create.create(); toast.success("Berhasil menambahkan APBDes"); resetForm(); router.push("/admin/landing-page/apbdes"); } catch (error) { console.error("Gagal submit:", error); toast.error("Gagal menyimpan data"); } }; return ( Tambah APBDes {/* Gambar APBDes */} Gambar APBDes { const selectedFile = files[0]; if (selectedFile) { setImageFile(selectedFile); setPreviewImage(URL.createObjectURL(selectedFile)); } }} onReject={() => toast.error('File tidak valid, gunakan format gambar')} maxSize={5 * 1024 ** 2} accept={{ 'image/*': [] }} radius="md" p="xl" > Seret gambar atau klik untuk memilih file Maksimal 5MB (format: JPEG, JPG, PNG, GIF, WEBP, SVG) {previewImage && ( Preview Gambar )} {/* Dokumen APBDes */} Dokumen APBDes { const selectedFile = files[0]; if (selectedFile) { setDocFile(selectedFile); setPreviewDoc(URL.createObjectURL(selectedFile)); } }} onReject={() => toast.error('File tidak valid, gunakan format PDF, DOC, atau DOCX')} maxSize={5 * 1024 ** 2} accept={{ 'application/pdf': ['.pdf'], 'application/msword': ['.doc'], 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': ['.docx'], }} radius="md" p="xl" > Seret dokumen atau klik untuk memilih file Maksimal 5MB (format: PDF, DOC, DOCX) {previewDoc && ( Pratinjau Dokumen