'use client' import stateKonservasiAdatBali from '@/app/admin/(dashboard)/_state/lingkungan/konservasi-adat-bali'; import colors from '@/con/colors'; import { Box, Button, Group, Loader, Paper, Stack, Text, Title } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { IconArrowBack } from '@tabler/icons-react'; import dynamic from 'next/dynamic'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; import { toast } from 'react-toastify'; import { useProxy } from 'valtio/utils'; const KonservasiAdatBaliTextEditor = dynamic( () => import('../../_lib/konservasiAdatBaliTextEditor').then(mod => mod.KonservasiAdatBaliTextEditor), { ssr: false } ); function EditNilaiKonservasiAdat() { const router = useRouter(); const nilaiKonservasiState = useProxy(stateKonservasiAdatBali.stateNilaiKonservasiAdat); const [isSubmitting, setIsSubmitting] = useState(false); // state lokal untuk form const [formData, setFormData] = useState({ judul: '', deskripsi: '' }); const [originalData, setOriginalData] = useState({ judul: '', deskripsi: '' }); // load data awal useShallowEffect(() => { if (!nilaiKonservasiState.findById.data) { nilaiKonservasiState.findById.initialize(); } }, []); // sync state lokal saat data backend siap useEffect(() => { if (nilaiKonservasiState.findById.data) { setFormData({ judul: nilaiKonservasiState.findById.data.judul ?? '', deskripsi: nilaiKonservasiState.findById.data.deskripsi ?? '', }); setOriginalData({ judul: nilaiKonservasiState.findById.data.judul ?? '', deskripsi: nilaiKonservasiState.findById.data.deskripsi ?? '', }); } }, [nilaiKonservasiState.findById.data]); const handleChange = (field: 'judul' | 'deskripsi', value: string) => { setFormData(prev => ({ ...prev, [field]: value })); }; const handleResetForm = () => { setFormData({ judul: originalData.judul, deskripsi: originalData.deskripsi, }); toast.info("Form dikembalikan ke data awal"); }; const handleSubmit = () => { try { setIsSubmitting(true); if (nilaiKonservasiState.findById.data) { // update global state saat submit nilaiKonservasiState.findById.data.judul = formData.judul; nilaiKonservasiState.findById.data.deskripsi = formData.deskripsi; nilaiKonservasiState.update.save(nilaiKonservasiState.findById.data); } router.push('/admin/lingkungan/konservasi-adat-bali/nilai-konservasi-adat'); } catch (error) { console.error("Error updating nilai konservasi adat:", error); toast.error("Terjadi kesalahan saat memperbarui nilai konservasi adat"); } finally { setIsSubmitting(false); } }; return ( {/* Header */} Edit Nilai Konservasi Adat {/* Form Paper */} Judul handleChange('judul', val)} initialContent={formData.judul} /> Deskripsi handleChange('deskripsi', val)} initialContent={formData.deskripsi} /> {/* Tombol Batal */} {/* Tombol Simpan */} ); } export default EditNilaiKonservasiAdat;