'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 puskesmasState from '../../../_state/kesehatan/puskesmas/puskesmas'; function CreatePuskesmas() { const statePuskesmas = useProxy(puskesmasState); const router = useRouter(); const [file, setFile] = useState(null); const [previewImage, setPreviewImage] = useState(null); const resetForm = () => { statePuskesmas.create.form = { name: '', alamat: '', jam: { workDays: '', weekDays: '', holiday: '', }, kontak: { kontakPuskesmas: '', email: '', facebook: '', kontakUGD: '', }, imageId: '', image: undefined, }; setFile(null); setPreviewImage(null); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); 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 upload gambar'); } statePuskesmas.create.form.imageId = uploaded.id; await statePuskesmas.create.submit(); toast.success('Data berhasil disimpan'); resetForm(); router.push('/admin/kesehatan/puskesmas'); }; return ( {/* Header */} Tambah Data Puskesmas {/* Form Card */} (statePuskesmas.create.form.name = e.target.value)} required /> (statePuskesmas.create.form.alamat = e.target.value)} required /> (statePuskesmas.create.form.jam.workDays = e.target.value)} /> (statePuskesmas.create.form.jam.weekDays = e.target.value)} /> (statePuskesmas.create.form.jam.holiday = e.target.value)} /> (statePuskesmas.create.form.kontak.kontakPuskesmas = e.target.value) } /> (statePuskesmas.create.form.kontak.email = e.target.value)} /> (statePuskesmas.create.form.kontak.facebook = e.target.value)} /> (statePuskesmas.create.form.kontak.kontakUGD = e.target.value)} /> 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/*': [] }} >
Drag gambar ke sini atau klik untuk pilih file Maksimal 5MB dan harus format gambar
{previewImage && ( Preview )}
{/* Action Button */}
); } export default CreatePuskesmas;