'use client' import stateEdukasiLingkungan from '@/app/admin/(dashboard)/_state/lingkungan/edukasi-lingkungan'; 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 EdukasiLingkunganTextEditor = dynamic( () => import('../../_lib/edukasiLingkunganTextEditor').then(mod => mod.EdukasiLingkunganTextEditor), { ssr: false } ); export default function EditTujuanEdukasiLingkungan() { const router = useRouter(); const tujuanEdukasiState = useProxy(stateEdukasiLingkungan.stateTujuanEdukasi); const [isSubmitting, setIsSubmitting] = useState(false); // State lokal untuk form, gak tergantung global state const [formData, setFormData] = useState({ judul: '', deskripsi: '' }); const [originalData, setOriginalData] = useState({ judul: '', deskripsi: '', }); // Helper function to check if HTML content is empty const isHtmlEmpty = (html: string) => { // Remove all HTML tags and check if there's any text content const textContent = html.replace(/<[^>]*>/g, '').trim(); return textContent === ''; }; // Check if form is valid const isFormValid = () => { return ( !isHtmlEmpty(formData.judul) && !isHtmlEmpty(formData.deskripsi) ); }; // Initialize global state useShallowEffect(() => { if (!tujuanEdukasiState.findById.data) { tujuanEdukasiState.findById.initialize(); } }, []); // Sync initial values dari global state ke form lokal useEffect(() => { if (tujuanEdukasiState.findById.data) { setFormData({ judul: tujuanEdukasiState.findById.data.judul ?? '', deskripsi: tujuanEdukasiState.findById.data.deskripsi ?? '', }); setOriginalData({ judul: tujuanEdukasiState.findById.data.judul ?? '', deskripsi: tujuanEdukasiState.findById.data.deskripsi ?? '', }); } }, [tujuanEdukasiState.findById.data]); const handleResetForm = () => { setFormData({ judul: originalData.judul, deskripsi: originalData.deskripsi, }); toast.info("Form dikembalikan ke data awal"); }; // Handler input const handleChange = (field: 'judul' | 'deskripsi', value: string) => { setFormData(prev => ({ ...prev, [field]: value })); }; const submit = () => { try { setIsSubmitting(true); if (tujuanEdukasiState.findById.data) { // Update global state hanya saat submit const updatedData = { ...tujuanEdukasiState.findById.data, judul: formData.judul, deskripsi: formData.deskripsi, }; tujuanEdukasiState.update.save(updatedData); } router.push('/admin/lingkungan/edukasi-lingkungan/tujuan-edukasi-lingkungan'); } catch (error) { console.error(error); toast.error('Gagal memuat data tujuan edukasi lingkungan'); } finally { setIsSubmitting(false); } }; return ( Edit Tujuan Edukasi Lingkungan Judul handleChange('judul', value)} initialContent={formData.judul} /> Konten handleChange('deskripsi', value)} initialContent={formData.deskripsi} /> {/* Tombol Batal */} {/* Tombol Simpan */} ); }