/* eslint-disable react-hooks/exhaustive-deps */ 'use client' import PendapatanAsliDesa from '@/app/admin/(dashboard)/_state/ekonomi/PADesa'; import colors from '@/con/colors'; import { Box, Button, Group, Loader, Paper, Stack, TextInput, Title } from '@mantine/core'; import { IconArrowBack } 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 EditPendapatan() { const pendapatanState = useProxy(PendapatanAsliDesa.pendapatan); const router = useRouter(); const params = useParams(); const [isSubmitting, setIsSubmitting] = useState(false); const [originalData, setOriginalData] = useState({ name: "", value: "", }); const [formData, setFormData] = useState({ name: '', value: '', }); // helper format const formatRupiah = (value: number | string) => { const number = typeof value === 'number' ? value : Number(value.toString().replace(/\D/g, '')); return new Intl.NumberFormat('id-ID', { style: 'currency', currency: 'IDR', minimumFractionDigits: 0, }).format(number); }; const unformatRupiah = (value: string) => Number(value.replace(/\D/g, '')); // load data once useEffect(() => { const id = params?.id as string; if (!id) return; const loadPendapatan = async () => { try { const data = await pendapatanState.update.load(id); if (data) { setFormData({ name: data.name ?? '', value: data.value?.toString() ?? '', }); setOriginalData({ name: data.name ?? '', value: data.value?.toString() ?? '', }); } } catch (error) { console.error('Error loading pendapatan:', error); toast.error('Gagal memuat data pendapatan'); } }; loadPendapatan(); }, [params?.id]); const handleChange = (field: string, value: string) => { setFormData((prev) => ({ ...prev, [field]: value, })); }; const handleResetForm = () => { setFormData({ name: originalData.name, value: originalData.value, }); toast.info("Form dikembalikan ke data awal"); }; const handleSubmit = async () => { try { setIsSubmitting(true); pendapatanState.update.form = { ...pendapatanState.update.form, name: formData.name, value: Number(formData.value), }; await pendapatanState.update.update(); toast.success('Jenis Pendapatan berhasil diperbarui!'); router.push('/admin/ekonomi/PADesa-pendapatan-asli-desa/pendapatan'); } catch (error) { console.error('Error updating jenis pendapatan:', error); toast.error('Terjadi kesalahan saat memperbarui jenis pendapatan'); } finally { setIsSubmitting(false); } }; return ( {/* Header with Back Button */} Edit Jenis Pendapatan {/* Card Form */} handleChange('name', e.target.value)} required /> { const raw = e.currentTarget.value; const cleanValue = unformatRupiah(raw).toString(); handleChange('value', cleanValue); }} required /> {/* Tombol Simpan */} ); } export default EditPendapatan;