'use client'; import EditEditor from '@/app/admin/(dashboard)/_com/editEditor'; import kontakDarurat from '@/app/admin/(dashboard)/_state/kesehatan/kontak-darurat/kontakDarurat'; 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 } from 'react'; import { toast } from 'react-toastify'; import { useProxy } from 'valtio/utils'; function EditKontakDarurat() { const kontakDaruratState = useProxy(kontakDarurat); const router = useRouter(); const params = useParams(); const [previewImage, setPreviewImage] = useState(null); const [file, setFile] = useState(null); const [formData, setFormData] = useState({ name: '', deskripsi: '', imageId: '', whatsapp: '', }); const [loading, setLoading] = useState(true); // Load data sekali saat mount useEffect(() => { const loadKontakDarurat = async () => { const id = params?.id as string; if (!id) return; try { const data = await kontakDaruratState.edit.load(id); if (data) { setFormData({ name: data.name || '', deskripsi: data.deskripsi || '', imageId: data.imageId || '', whatsapp: data.whatsapp || '', }); if (data?.image?.link) setPreviewImage(data.image.link); } } catch (error) { console.error("Error loading kontak darurat:", error); toast.error("Gagal memuat data kontak darurat"); } finally { setLoading(false); } }; loadKontakDarurat(); }, [params?.id, kontakDaruratState.edit]); const handleSubmit = async () => { try { let imageId = formData.imageId; // Upload file baru jika 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"); imageId = uploaded.id; } // Update global state sekaligus submit kontakDaruratState.edit.form = { ...kontakDaruratState.edit.form, ...formData, imageId, }; await kontakDaruratState.edit.update(); toast.success("Kontak darurat berhasil diperbarui!"); router.push("/admin/kesehatan/kontak-darurat"); } catch (error) { console.error("Error updating kontak darurat:", error); toast.error("Terjadi kesalahan saat memperbarui kontak darurat"); } }; if (loading) return Loading...; return ( Edit Kontak Darurat {/* Controlled Input */} setFormData(prev => ({ ...prev, name: e.target.value }))} label="Judul" placeholder="Masukkan judul" required /> setFormData(prev => ({ ...prev, whatsapp: e.target.value }))} label="Whatsapp" placeholder="Masukkan whatsapp" required /> Deskripsi setFormData(prev => ({ ...prev, deskripsi: val }))} /> 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 format gambar
{previewImage && ( Preview )}
); } export default EditKontakDarurat;