import { useEffect, useState } from "react"; import { useNavigate, useParams } from "react-router-dom"; import SidebarAdmin from "../Layout/SidebarAdmin"; import NavbarAdmin from "../Layout/NavbarAdmin"; import "froala-editor/js/plugins.pkgd.min.js"; import "froala-editor/css/froala_editor.pkgd.min.css"; import "froala-editor/css/froala_style.min.css"; import FroalaEditor from "react-froala-wysiwyg"; import axios from "axios"; type LowonganDetail = { id: number; posisi: string; kelompok_peminatan: string; lokasi: string; paid: "paid" | "unpaid" | string; durasi_awal: string; durasi_akhir: string; jobdesk: string; image?: string; }; const EditLowongan = () => { const { id } = useParams(); const navigate = useNavigate(); const [posisi, setPosisi] = useState(""); const [kelompok, setKelompok] = useState(""); const [kelompokOptions, setKelompokOptions] = useState([]); const [lokasi, setLokasi] = useState(""); const [paid, setPaid] = useState("paid"); const [durasiAwal, setDurasiAwal] = useState(""); const [durasiAkhir, setDurasiAkhir] = useState(""); const [jobdesk, setJobdesk] = useState(""); const [image, setImage] = useState(null); const [isCustomKelompok, setIsCustomKelompok] = useState(false); const [customKelompok, setCustomKelompok] = useState(""); const [isLoading, setIsLoading] = useState(true); const [froalaReady, setFroalaReady] = useState(false); const token = document.cookie .split("; ") .find((row) => row.startsWith("token=")) ?.split("=")[1]; useEffect(() => { axios .get( `${ import.meta.env.VITE_API_BASE_URL }/lowongan-magang-api/get/kelompok-all` ) .then((res) => { const data = res.data.data || []; setKelompokOptions(data); }) .catch((err) => { console.error("Gagal memuat kelompok peminatan:", err); setKelompokOptions([]); }); }, []); useEffect(() => { const fetchDetail = async () => { if (!id) { alert("ID lowongan tidak ditemukan."); navigate("/lowongan-list"); return; } if (!token) { alert("Token tidak ditemukan."); navigate("/humic-20242025-2"); return; } try { setIsLoading(true); setFroalaReady(false); const res = await axios.get( `${import.meta.env.VITE_API_BASE_URL}/lowongan-magang-api/get/id/${id}`, { headers: { Authorization: `Bearer ${token}`, }, } ); const data: LowonganDetail = res.data.data; setPosisi(data.posisi ?? ""); setLokasi(data.lokasi ?? ""); setPaid((data.paid ?? "paid") as string); setDurasiAwal((data.durasi_awal ?? "").slice(0, 10)); setDurasiAkhir((data.durasi_akhir ?? "").slice(0, 10)); setJobdesk(String(data.jobdesk ?? "")); const kp = data.kelompok_peminatan ?? ""; setKelompok(kp); setCustomKelompok(kp); } catch (err) { console.error("Gagal memuat detail lowongan:", err); alert("Gagal memuat detail lowongan."); navigate("/lowongan-list"); } finally { setIsLoading(false); } }; fetchDetail(); }, [id]); useEffect(() => { if (!isLoading) { const t = setTimeout(() => setFroalaReady(true), 0); return () => clearTimeout(t); } }, [isLoading]); useEffect(() => { if (!kelompok) return; if (kelompokOptions.length === 0) { setIsCustomKelompok(true); setCustomKelompok(kelompok); return; } const exists = kelompokOptions.includes(kelompok); if (exists) { setIsCustomKelompok(false); setCustomKelompok(""); } else { setIsCustomKelompok(true); setCustomKelompok(kelompok); } }, [kelompokOptions, kelompok]); const handleSubmit = async () => { if (!id) { alert("ID lowongan tidak ditemukan."); return; } if (!token) { alert("Token tidak ditemukan."); return; } const finalKelompok = isCustomKelompok || kelompokOptions.length === 0 ? customKelompok : kelompok; if (!finalKelompok.trim()) { alert("Kategori internship wajib diisi."); return; } const formData = new FormData(); formData.append("posisi", posisi); formData.append("kelompok_peminatan", finalKelompok); formData.append("lokasi", lokasi); formData.append("jobdesk", jobdesk); formData.append("durasi_awal", durasiAwal); formData.append("durasi_akhir", durasiAkhir); formData.append("paid", paid); if (image) formData.append("image", image); try { await axios.patch( `${import.meta.env.VITE_API_BASE_URL}/lowongan-magang-api/update/${id}`, formData, { headers: { Authorization: `Bearer ${token}`, "Content-Type": "multipart/form-data", }, } ); alert("Lowongan berhasil diperbarui!"); navigate("/lowongan-list"); } catch (error) { console.error("Error updating internship:", error); alert("Gagal memperbarui lowongan."); } }; return (

Edit Lowongan

{/* Internship Fields Only */}
{kelompokOptions.length > 0 && ( )} {(isCustomKelompok || kelompokOptions.length === 0) && ( setCustomKelompok(e.target.value)} /> )}
setLokasi(e.target.value)} placeholder="Onsite,Jakarta" />
setPosisi(e.target.value)} placeholder="UI/UX Designer" />
setDurasiAwal(e.target.value)} />
setDurasiAkhir(e.target.value)} />
setImage(e.target.files ? e.target.files[0] : null) } className="border border-gray-300 rounded-lg p-3" />
{/* Isi Konten */}
{froalaReady ? ( setJobdesk(model || "")} config={{ placeholderText: "Tulis deskripsi lowongan...", charCounterCount: true, toolbarSticky: true, heightMin: 200, }} /> ) : (
)}
); }; export default EditLowongan;