/* eslint-disable react-hooks/exhaustive-deps */ 'use client' import EditEditor from '@/app/admin/(dashboard)/_com/editEditor'; import lowonganKerjaState from '@/app/admin/(dashboard)/_state/ekonomi/lowongan-kerja'; 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 { useEffect, useState } from 'react'; import { toast } from 'react-toastify'; import { useProxy } from 'valtio/utils'; function EditLowonganKerja() { const lowonganState = useProxy(lowonganKerjaState); const router = useRouter(); const params = useParams(); const [isSubmitting, setIsSubmitting] = useState(false); const [formData, setFormData] = useState({ posisi: '', namaPerusahaan: '', lokasi: '', tipePekerjaan: '', gaji: '', deskripsi: '', kualifikasi: '', notelp: '', }); const [originalData, setOriginalData] = useState({ posisi: '', namaPerusahaan: '', lokasi: '', tipePekerjaan: '', gaji: '', deskripsi: '', kualifikasi: '', notelp: '', }) // 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.posisi?.trim() !== '' && formData.namaPerusahaan?.trim() !== '' && formData.notelp?.trim() !== '' && formData.lokasi?.trim() !== '' && formData.tipePekerjaan?.trim() !== '' && formData.gaji?.trim() !== '' && !isHtmlEmpty(formData.deskripsi) && !isHtmlEmpty(formData.kualifikasi) ); }; // load data sekali aja ketika mount / id berubah useEffect(() => { const loadLowongan = async () => { const id = params?.id as string; if (!id) return; try { const data = await lowonganState.update.load(id); if (data) { setFormData({ posisi: data.posisi || '', namaPerusahaan: data.namaPerusahaan || '', lokasi: data.lokasi || '', tipePekerjaan: data.tipePekerjaan || '', gaji: data.gaji || '', deskripsi: data.deskripsi || '', kualifikasi: data.kualifikasi || '', notelp: data.notelp || '', }); setOriginalData({ posisi: data.posisi || '', namaPerusahaan: data.namaPerusahaan || '', lokasi: data.lokasi || '', tipePekerjaan: data.tipePekerjaan || '', gaji: data.gaji || '', deskripsi: data.deskripsi || '', kualifikasi: data.kualifikasi || '', notelp: data.notelp || '', }); } } catch (error) { console.error("Error loading lowongan kerja:", error); toast.error("Gagal memuat data lowongan kerja"); } }; loadLowongan(); }, [params?.id]); const handleChange = (field: string, value: string) => { setFormData((prev) => ({ ...prev, [field]: value, })); }; const handleResetForm = () => { setFormData({ posisi: originalData.posisi, namaPerusahaan: originalData.namaPerusahaan, lokasi: originalData.lokasi, tipePekerjaan: originalData.tipePekerjaan, gaji: originalData.gaji, deskripsi: originalData.deskripsi, kualifikasi: originalData.kualifikasi, notelp: originalData.notelp, }); toast.info("Form dikembalikan ke data awal"); }; const handleSubmit = async () => { try { setIsSubmitting(true); lowonganState.update.id = params?.id as string; lowonganState.update.form = { ...formData }; await lowonganState.update.update(); toast.success("Lowongan kerja berhasil diperbarui!"); router.push("/admin/ekonomi/lowongan-kerja-lokal"); } catch (error) { console.error("Error updating lowongan kerja:", error); toast.error("Terjadi kesalahan saat memperbarui lowongan kerja"); } finally { setIsSubmitting(false); } }; return ( Edit Lowongan Kerja Lokal {/* Card Form */} handleChange("posisi", e.target.value)} required /> handleChange("namaPerusahaan", e.target.value)} required /> handleChange("lokasi", e.target.value)} required /> handleChange("notelp", e.target.value)} required /> handleChange("tipePekerjaan", e.target.value)} required /> handleChange("gaji", e.target.value)} required /> Deskripsi Lowongan Kerja handleChange("deskripsi", val)} /> Kualifikasi Lowongan Kerja handleChange("kualifikasi", val)} /> {/* Tombol Simpan */} ); } export default EditLowonganKerja;