fixed Internships Detail design
This commit is contained in:
@@ -3,6 +3,7 @@ import { useParams } from "react-router-dom";
|
||||
import NavbarAdmin from "../Layout/NavbarAdmin";
|
||||
import SidebarAdmin from "../Layout/SidebarAdmin";
|
||||
import axios from "axios";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
|
||||
type Applicant = {
|
||||
id: number;
|
||||
@@ -24,6 +25,7 @@ const InternshipDetailsAdmin = () => {
|
||||
const { id } = useParams(); // id lamaran magang
|
||||
const [applicant, setApplicant] = useState<Applicant | null>(null);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
const navigate = useNavigate();
|
||||
|
||||
useEffect(() => {
|
||||
if (!id) return;
|
||||
@@ -43,8 +45,6 @@ const InternshipDetailsAdmin = () => {
|
||||
}
|
||||
)
|
||||
.then((res) => {
|
||||
console.log("Detail lamaran:", res.data);
|
||||
|
||||
const raw =
|
||||
Array.isArray(res.data?.data) && res.data.data.length > 0
|
||||
? res.data.data[0]
|
||||
@@ -57,26 +57,21 @@ const InternshipDetailsAdmin = () => {
|
||||
return;
|
||||
}
|
||||
|
||||
console.log("Raw detail:", raw); // cek struktur asli
|
||||
|
||||
const mapped: Applicant = {
|
||||
id: raw.id,
|
||||
|
||||
// dari relasi mahasiswa
|
||||
nama_depan: raw.mahasiswa?.nama_depan ?? "",
|
||||
nama_belakang: raw.mahasiswa?.nama_belakang ?? "",
|
||||
email: raw.mahasiswa?.email ?? raw.email ?? "",
|
||||
kontak: raw.mahasiswa?.kontak ?? raw.kontak ?? "",
|
||||
jurusan: raw.mahasiswa?.jurusan ?? raw.jurusan ?? "",
|
||||
|
||||
// dari relasi lowongan_magang
|
||||
posisi: raw.lowongan_magang?.posisi ?? raw.posisi ?? "",
|
||||
kelompok_peminatan:
|
||||
raw.lowongan_magang?.kelompok_peminatan ??
|
||||
raw.kelompok_peminatan ??
|
||||
"",
|
||||
|
||||
// 🔥 ini dia: ambil dari mahasiswa
|
||||
motivasi: raw.mahasiswa?.motivasi ?? raw.motivasi ?? "",
|
||||
|
||||
relevant_skills:
|
||||
@@ -85,7 +80,6 @@ const InternshipDetailsAdmin = () => {
|
||||
raw.relevant_skill ??
|
||||
"",
|
||||
|
||||
// sekalian amankan CV & portofolio kalau memang ikut di object mahasiswa
|
||||
cv_path: raw.cv_path ?? raw.mahasiswa?.cv_path ?? "",
|
||||
portofolio_path:
|
||||
raw.portofolio_path ?? raw.mahasiswa?.portofolio_path ?? "",
|
||||
@@ -124,6 +118,7 @@ const InternshipDetailsAdmin = () => {
|
||||
.then(() => {
|
||||
alert(`Status berhasil diubah menjadi ${status}`);
|
||||
setApplicant((prev) => (prev ? { ...prev, status } : prev));
|
||||
navigate("/internships-list")
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error("Gagal update status", err);
|
||||
@@ -190,6 +185,14 @@ const InternshipDetailsAdmin = () => {
|
||||
{/* Detail */}
|
||||
<div className="flex gap-[200px] mb-12">
|
||||
<div className="flex flex-col gap-4">
|
||||
<p>
|
||||
<span className="font-semibold">Negara:</span>{" "}
|
||||
{applicant.jurusan}
|
||||
</p>
|
||||
<p>
|
||||
<span className="font-semibold">Universitas:</span>{" "}
|
||||
{applicant.jurusan}
|
||||
</p>
|
||||
<p>
|
||||
<span className="font-semibold">Jurusan:</span>{" "}
|
||||
{applicant.jurusan}
|
||||
|
||||
@@ -231,13 +231,45 @@ const InternshipList = () => {
|
||||
</span>
|
||||
</td>
|
||||
<td className="px-6 py-3">
|
||||
{/* <button
|
||||
onClick={() => handleStatusUpdate("diterima")}
|
||||
className="bg-[#3BB525] hover:bg-green-600 cursor-pointer text-white p-2 rounded-xl"
|
||||
>
|
||||
Terima
|
||||
</button>
|
||||
|
||||
<button
|
||||
onClick={() => handleStatusUpdate("ditolak")}
|
||||
className="bg-[#C3423F] hover:bg-red-600 cursor-pointer text-white p-2 rounded-xl"
|
||||
>
|
||||
Tolak
|
||||
</button> */}
|
||||
|
||||
<button
|
||||
className="bg-blue-500 hover:bg-blue-600 cursor-pointer text-white p-2 rounded-xl"
|
||||
onClick={() =>
|
||||
navigate(`/internships-details-admin/${app.id}`)
|
||||
}
|
||||
className="bg-blue-500 hover:bg-blue-600 cursor-pointer text-white px-4 py-2 rounded-lg"
|
||||
>
|
||||
Lihat Detail
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
strokeWidth={1.5}
|
||||
stroke="currentColor"
|
||||
className="size-6"
|
||||
>
|
||||
<path
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
d="M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z"
|
||||
/>
|
||||
<path
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
Reference in New Issue
Block a user