'use client' import colors from '@/con/colors'; import ApiFetch from '@/lib/api-fetch'; import { ActionIcon, Box, Button, Group, Image, Loader, Paper, Stack, Text, TextInput, Title } 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 keamananLingkunganState from '../../../_state/keamanan/keamanan-lingkungan'; function CreateKeamananLingkungan() { const keamananState = useProxy(keamananLingkunganState); const [previewImage, setPreviewImage] = useState(null); const [file, setFile] = useState(null); const router = useRouter(); const [isSubmitting, setIsSubmitting] = useState(false) const resetForm = () => { keamananState.create.form = { name: '', deskripsi: '', imageId: '', }; setPreviewImage(null); setFile(null); }; const handleSubmit = async () => { try { setIsSubmitting(true) if (!file) { return toast.warn('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 mengupload file'); } keamananState.create.form.imageId = uploaded.id; await keamananState.create.create(); resetForm(); router.push('/admin/keamanan/keamanan-lingkungan-pecalang-patwal'); } catch (error) { console.error(error); toast.error('Gagal menambahkan data keamanan lingkungan'); } finally { setIsSubmitting(false) } }; return ( {/* Header */} Tambah Data Keamanan Lingkungan {/* Form */} {/* Upload Gambar */} Gambar { const selectedFile = files[0]; if (selectedFile) { setFile(selectedFile); setPreviewImage(URL.createObjectURL(selectedFile)); } }} onReject={() => toast.error('File tidak valid.')} maxSize={5 * 1024 ** 2} accept={{ 'image/*': ['.jpeg', '.jpg', '.png', '.webp'] }} >
Drag gambar ke sini atau klik untuk pilih file Maksimal 5MB dan harus format gambar
{previewImage && ( Preview { setPreviewImage(null); setFile(null); }} style={{ boxShadow: '0 2px 6px rgba(0,0,0,0.15)', }} > )}
{/* Input Nama */} { keamananState.create.form.name = val.target.value; }} label={Nama Keamanan Lingkungan} placeholder="Masukkan nama Keamanan Lingkungan" required /> {/* Input Deskripsi */} Deskripsi Keamanan Lingkungan { keamananState.create.form.deskripsi = val; }} /> {/* Tombol Submit */} {/* Tombol Simpan */}
); } export default CreateKeamananLingkungan;