/* eslint-disable react-hooks/exhaustive-deps */ 'use client' import colors from '@/con/colors'; import { Box, Button, Group, Loader, Paper, Stack, Text, TextInput, Title } from '@mantine/core'; 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 user from '../../../_state/user/user-state'; function EditRole() { const stateRole = useProxy(user.roleState); const router = useRouter(); const params = useParams(); // Controlled local state const [formData, setFormData] = useState({ name: '', }); const [originalData, setOriginalData] = useState({ name: '', }); const [isSubmitting, setIsSubmitting] = useState(false); // Load role data const loadRole = useCallback(async (id: string) => { const data = await stateRole.update.load(id); if (data) { setFormData({ name: data.name ?? '', }); setOriginalData({ name: data.name ?? '', }); } }, []); useEffect(() => { stateRole.findMany.load(); // load permission if (params?.id) loadRole(params.id as string); }, [params?.id]); const handleResetForm = () => { setFormData({ name: originalData.name, }); toast.info("Form dikembalikan ke data awal"); }; // Submit handler const handleSubmit = async () => { if (!formData.name.trim()) { toast.error('Nama role tidak boleh kosong'); return; } try { setIsSubmitting(true); // Update global state only on submit stateRole.update.form = { ...stateRole.update.form, name: formData.name, }; await stateRole.update.update(); toast.success('Role berhasil diperbarui!'); router.push('/admin/user&role/role'); } catch (error) { console.error('Error updating role:', error); toast.error('Terjadi kesalahan saat memperbarui role'); } finally { setIsSubmitting(false); } }; return ( Edit Role setFormData({ ...formData, name: e.target.value })} label={Nama Role} placeholder="Masukkan nama role" /> {/* Tombol Batal */} {/* Tombol Simpan */} ); } export default EditRole;