'use client' import stateBimbinganBelajarDesa from '@/app/admin/(dashboard)/_state/pendidikan/bimbingan-belajar-desa'; import colors from '@/con/colors'; import { Box, Button, Center, Group, Loader, Paper, Stack, Text, TextInput, 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 BimbinganBelajarDesaTextEditor = dynamic( () => import('../../_lib/bimbinganBelajarDesaTextEditor').then( (mod) => mod.BimbinganBelajarDesaTextEditor ), { ssr: false } ); function EditFasilitasYangDisediakan() { const router = useRouter(); const editState = useProxy(stateBimbinganBelajarDesa.fasilitasYangDisediakanState); // === State lokal form === const [formData, setFormData] = useState({ judul: '', deskripsi: '' }); const [isSubmitting, setIsSubmitting] = useState(false); 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 ( formData.judul?.trim() !== '' && !isHtmlEmpty(formData.deskripsi) ); }; // Load data pertama kali useShallowEffect(() => { if (!editState.findById.data) { editState.findById.initialize(); } }, []); // Sinkronkan formData saat data load useEffect(() => { if (editState.findById.data) { setFormData({ judul: editState.findById.data.judul ?? '', deskripsi: editState.findById.data.deskripsi ?? '' }); setOriginalData({ judul: editState.findById.data.judul ?? '', deskripsi: editState.findById.data.deskripsi ?? '', }); } }, [editState.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 = async () => { setIsSubmitting(true); try { if (editState.findById.data) { // Update global state hanya saat submit const payload = { ...editState.findById.data, judul: formData.judul, deskripsi: formData.deskripsi }; await editState.update.save(payload); toast.success('Berhasil menyimpan perubahan'); router.push('/admin/pendidikan/bimbingan-belajar-desa/fasilitas-yang-disediakan'); } } catch (err) { console.error('Error saving:', err); toast.error('Gagal menyimpan data'); } finally { setIsSubmitting(false); } }; const handleBack = () => router.back(); if (editState.findById.loading) { return (
Memuat data fasilitas yang disediakan...
); } return ( Edit Fasilitas Yang Disediakan Formulir Edit {/* Judul */} Judul} placeholder="Masukkan judul fasilitas" value={formData.judul} onChange={(e) => handleChange('judul', e.currentTarget.value)} error={!formData.judul && 'Judul wajib diisi'} /> {/* Deskripsi */} Deskripsi handleChange('deskripsi', value)} initialContent={formData.deskripsi} /> {/* Tombol Aksi */} {/* Tombol Batal */} {/* Tombol Simpan */} ); } export default EditFasilitasYangDisediakan;