/* eslint-disable react-hooks/exhaustive-deps */ 'use client'; import colors from '@/con/colors'; import { Box, Button, Group, Loader, Paper, Stack, Title, TextInput, Select, Textarea } from '@mantine/core'; import { DatePickerInput } from '@mantine/dates'; import { IconArrowBack } from '@tabler/icons-react'; import { useParams, useRouter } from 'next/navigation'; import { useCallback, useEffect, useState } from 'react'; import { toast } from 'react-toastify'; import { useProxy } from 'valtio/utils'; import migrasiPenduduk from '../../../_state/kependudukan/migrasi-penduduk'; interface FormData { jenis: string; nama: string; tanggal: string; asalTujuan: string; alasan: string; jenisKelamin: string; } export default function EditMigrasiPenduduk() { const router = useRouter(); const { id } = useParams() as { id: string }; const stateMigrasiPenduduk = useProxy(migrasiPenduduk); const [isSubmitting, setIsSubmitting] = useState(false); const [formData, setFormData] = useState({ jenis: '', nama: '', tanggal: '', asalTujuan: '', alasan: '', jenisKelamin: '', }); const [originalData, setOriginalData] = useState({ jenis: '', nama: '', tanggal: '', asalTujuan: '', alasan: '', jenisKelamin: '', }); const jenisOptions = [ { value: 'MASUK', label: 'Masuk' }, { value: 'KELUAR', label: 'Keluar' }, ]; const jenisKelaminOptions = [ { value: 'L', label: 'Laki-laki' }, { value: 'P', label: 'Perempuan' }, ]; const isFormValid = () => { return ( formData.jenis?.trim() !== '' && formData.nama?.trim() !== '' && formData.tanggal?.trim() !== '' && formData.asalTujuan?.trim() !== '' ); }; useEffect(() => { if (!id) return; const loadData = async () => { try { setIsSubmitting(true); stateMigrasiPenduduk.update.id = id; await stateMigrasiPenduduk.findUnique.load(id); const data = stateMigrasiPenduduk.findUnique.data; if (data) { setFormData({ jenis: data.jenis ?? '', nama: data.nama ?? '', tanggal: data.tanggal ?? '', asalTujuan: data.asalTujuan ?? '', alasan: data.alasan ?? '', jenisKelamin: data.jenisKelamin ?? '', }); setOriginalData({ jenis: data.jenis ?? '', nama: data.nama ?? '', tanggal: data.tanggal ?? '', asalTujuan: data.asalTujuan ?? '', alasan: data.alasan ?? '', jenisKelamin: data.jenisKelamin ?? '', }); } } catch (error) { console.error('Error loading data:', error); toast.error('Gagal memuat data'); } finally { setIsSubmitting(false); } }; loadData(); }, [id]); const handleChange = useCallback( (field: keyof FormData) => (value: any) => { const val = value || ''; setFormData((prev) => ({ ...prev, [field]: val })); }, [] ); const handleResetForm = () => { setFormData({ jenis: originalData.jenis, nama: originalData.nama, tanggal: originalData.tanggal, asalTujuan: originalData.asalTujuan, alasan: originalData.alasan, jenisKelamin: originalData.jenisKelamin, }); toast.info("Form dikembalikan ke data awal"); }; const handleSubmit = async () => { try { setIsSubmitting(true); stateMigrasiPenduduk.update.id = id; stateMigrasiPenduduk.update.form = { ...formData }; await stateMigrasiPenduduk.update.submit(); toast.success('Data berhasil diperbarui'); router.push('/admin/kependudukan/migrasi-penduduk'); } catch (error) { console.error('Error updating data:', error); toast.error('Gagal memperbarui data'); } finally { setIsSubmitting(false); } }; return ( {/* Header */} Edit Migrasi Penduduk {/* Form Card */}