/* eslint-disable react-hooks/exhaustive-deps */ 'use client' import EditEditor from '@/app/admin/(dashboard)/_com/editEditor'; import infoWabahPenyakit from '@/app/admin/(dashboard)/_state/kesehatan/info-wabah-penyakit/infoWabahPenyakit'; 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 { useParams, useRouter } from 'next/navigation'; import { useEffect, useState, ChangeEvent } from 'react'; import { toast } from 'react-toastify'; import { useProxy } from 'valtio/utils'; function EditInfoWabahPenyakit() { const infoWabahPenyakitState = useProxy(infoWabahPenyakit); const router = useRouter(); const params = useParams(); const [formData, setFormData] = useState({ name: '', deskripsiSingkat: '', deskripsi: '', imageId: '', }); const [previewImage, setPreviewImage] = useState(null); const [file, setFile] = useState(null); // Helper untuk update field formData const updateField = (field: keyof typeof formData, value: string) => { setFormData((prev) => ({ ...prev, [field]: value })); }; // Load data edit useEffect(() => { const loadInfoWabahPenyakit = async () => { const id = params?.id as string; if (!id) return; try { const data = await infoWabahPenyakitState.edit.load(id); if (data) { setFormData({ name: data.name || '', deskripsiSingkat: data.deskripsiSingkat || '', deskripsi: data.deskripsiLengkap || '', imageId: data.imageId || '', }); if (data.image?.link) setPreviewImage(data.image.link); } } catch (error) { console.error(error); toast.error('Gagal memuat data info wabah penyakit'); } }; loadInfoWabahPenyakit(); }, [params?.id]); const handleSubmit = async () => { try { let uploadedImageId = formData.imageId; // Upload file kalau ada if (file) { 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'); uploadedImageId = uploaded.id; } // Update global state infoWabahPenyakitState.edit.form = { ...infoWabahPenyakitState.edit.form, name: formData.name, deskripsiSingkat: formData.deskripsiSingkat, deskripsiLengkap: formData.deskripsi, imageId: uploadedImageId, }; await infoWabahPenyakitState.edit.update(); toast.success('Info wabah penyakit berhasil diperbarui!'); router.push('/admin/kesehatan/info-wabah-penyakit'); } catch (error) { console.error(error); toast.error('Terjadi kesalahan saat memperbarui info wabah penyakit'); } }; const handleDrop = (files: File[]) => { const selectedFile = files[0]; if (selectedFile) { setFile(selectedFile); setPreviewImage(URL.createObjectURL(selectedFile)); } }; return ( {/* Header */} Edit Info Wabah Penyakit {/* Form */} ) => updateField('name', e.target.value)} label="Judul" placeholder="Masukkan judul" required /> Deskripsi Singkat updateField('deskripsiSingkat', val)} /> Deskripsi updateField('deskripsi', val)} /> Gambar 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 )}
); } export default EditInfoWabahPenyakit;