'use client' /* eslint-disable react-hooks/exhaustive-deps */ import EditEditor from '@/app/admin/(dashboard)/_com/editEditor'; import stateProfileDesa from '@/app/admin/(dashboard)/_state/desa/profile'; import colors from '@/con/colors'; import ApiFetch from '@/lib/api-fetch'; import { Box, Button, Center, Group, Image, Paper, Stack, Text, Title } from '@mantine/core'; import { Dropzone } from '@mantine/dropzone'; import { IconArrowBack, IconImageInPicture, 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 ProfilePerbekel() { const perbekelState = useProxy(stateProfileDesa.profilPerbekel) const router = useRouter() const params = useParams() const [isSubmitting, setIsSubmitting] = useState(false); const [previewImage, setPreviewImage] = useState(null); const [file, setFile] = useState(null); useEffect(() => { const loadData = async () => { const id = params?.id as string; if (!id) { toast.error("ID tidak valid"); router.push("/admin/desa/profile/profile-perbekel"); return; } const data = await perbekelState.findUnique.load(id); if (data) perbekelState.edit.initialize(data); if (data?.image?.link) setPreviewImage(data.image.link); }; loadData(); return () => { perbekelState.edit.reset(); perbekelState.findUnique.reset(); }; }, [params?.id, router]); const handleFileChange = (newFile: File | null) => { if (!newFile) { setFile(null); setPreviewImage(null); return; } setFile(newFile); const reader = new FileReader(); reader.onload = (event) => setPreviewImage(event.target?.result as string); reader.readAsDataURL(newFile); } const handleSubmit = async () => { if (isSubmitting || !perbekelState.edit.form.biodata.trim()) { toast.error("Biodata wajib diisi"); return; } setIsSubmitting(true) try { if (file) { const uploadResponse = await ApiFetch.api.fileStorage.create.post({ file, name: file.name }); const uploaded = uploadResponse.data?.data; if (!uploaded?.id) { toast.error("Gagal upload gambar"); return; } perbekelState.edit.form.imageId = uploaded.id; } const success = await perbekelState.edit.submit() if (success) { toast.success("Data berhasil disimpan"); router.push("/admin/desa/profile/profile-perbekel"); } } catch (error) { console.error("Error update sejarah desa:", error); toast.error("Terjadi kesalahan saat update sejarah desa"); } finally { setIsSubmitting(false); } } const handleBack = () => router.back(); if (perbekelState.findUnique.loading || perbekelState.edit.loading) { return (
Memuat data...
); } return ( {/* Header */} Edit Profil Perbekel {/* Biodata */} Biodata perbekelState.edit.form.biodata = val} /> {/* Gambar */} Gambar handleFileChange(files[0])} 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
{/* Preview */} {previewImage ? ( Preview ) : (
Tidak ada gambar
)}
{/* Pengalaman */} Pengalaman perbekelState.edit.form.pengalaman = val} /> {/* Pengalaman Organisasi */} Pengalaman Organisasi perbekelState.edit.form.pengalamanOrganisasi = val} /> {/* Program Unggulan */} Program Unggulan perbekelState.edit.form.programUnggulan = val} /> {/* Submit */}
) } export default ProfilePerbekel;