'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, IconPhoto, IconUpload, IconX } from '@tabler/icons-react'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import { toast } from 'react-toastify'; import { useProxy } from 'valtio/utils'; import CreateEditor from '../../../_com/createEditor'; import penghargaanState from '../../../_state/desa/penghargaan'; function CreatePenghargaan() { const statePenghargaan = useProxy(penghargaanState); const [previewImage, setPreviewImage] = useState(null); const [file, setFile] = useState(null); const router = useRouter(); const resetForm = () => { statePenghargaan.create.form = { name: '', juara: '', deskripsi: '', imageId: '', }; setPreviewImage(null); setFile(null); }; const handleSubmit = async () => { if (!file) { return toast.warn('Silakan pilih file gambar 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 mengunggah gambar, silakan coba lagi'); } statePenghargaan.create.form.imageId = uploaded.id; await statePenghargaan.create.create(); resetForm(); router.push('/admin/desa/penghargaan'); }; return ( {/* Header */} Tambah Penghargaan {/* Form */} (statePenghargaan.create.form.name = val.target.value)} label="Nama Penghargaan" placeholder="Masukkan nama penghargaan" required /> (statePenghargaan.create.form.juara = val.target.value)} label="Juara" placeholder="Masukkan juara" required /> Deskripsi { statePenghargaan.create.form.deskripsi = htmlContent; }} /> {/* Dropzone Upload */} Gambar { 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/*': [] }} radius="md" p="xl" > Seret gambar atau klik untuk memilih file (maks 5MB) {previewImage && ( Preview Gambar )} {/* Button Submit */} ); } export default CreatePenghargaan;