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 NavbarAdmin from "../Layout/NavbarAdmin";
|
||||||
import SidebarAdmin from "../Layout/SidebarAdmin";
|
import SidebarAdmin from "../Layout/SidebarAdmin";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
|
|
||||||
type Applicant = {
|
type Applicant = {
|
||||||
id: number;
|
id: number;
|
||||||
@@ -24,6 +25,7 @@ const InternshipDetailsAdmin = () => {
|
|||||||
const { id } = useParams(); // id lamaran magang
|
const { id } = useParams(); // id lamaran magang
|
||||||
const [applicant, setApplicant] = useState<Applicant | null>(null);
|
const [applicant, setApplicant] = useState<Applicant | null>(null);
|
||||||
const [error, setError] = useState<string | null>(null);
|
const [error, setError] = useState<string | null>(null);
|
||||||
|
const navigate = useNavigate();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!id) return;
|
if (!id) return;
|
||||||
@@ -43,8 +45,6 @@ const InternshipDetailsAdmin = () => {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
console.log("Detail lamaran:", res.data);
|
|
||||||
|
|
||||||
const raw =
|
const raw =
|
||||||
Array.isArray(res.data?.data) && res.data.data.length > 0
|
Array.isArray(res.data?.data) && res.data.data.length > 0
|
||||||
? res.data.data[0]
|
? res.data.data[0]
|
||||||
@@ -57,26 +57,21 @@ const InternshipDetailsAdmin = () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("Raw detail:", raw); // cek struktur asli
|
|
||||||
|
|
||||||
const mapped: Applicant = {
|
const mapped: Applicant = {
|
||||||
id: raw.id,
|
id: raw.id,
|
||||||
|
|
||||||
// dari relasi mahasiswa
|
|
||||||
nama_depan: raw.mahasiswa?.nama_depan ?? "",
|
nama_depan: raw.mahasiswa?.nama_depan ?? "",
|
||||||
nama_belakang: raw.mahasiswa?.nama_belakang ?? "",
|
nama_belakang: raw.mahasiswa?.nama_belakang ?? "",
|
||||||
email: raw.mahasiswa?.email ?? raw.email ?? "",
|
email: raw.mahasiswa?.email ?? raw.email ?? "",
|
||||||
kontak: raw.mahasiswa?.kontak ?? raw.kontak ?? "",
|
kontak: raw.mahasiswa?.kontak ?? raw.kontak ?? "",
|
||||||
jurusan: raw.mahasiswa?.jurusan ?? raw.jurusan ?? "",
|
jurusan: raw.mahasiswa?.jurusan ?? raw.jurusan ?? "",
|
||||||
|
|
||||||
// dari relasi lowongan_magang
|
|
||||||
posisi: raw.lowongan_magang?.posisi ?? raw.posisi ?? "",
|
posisi: raw.lowongan_magang?.posisi ?? raw.posisi ?? "",
|
||||||
kelompok_peminatan:
|
kelompok_peminatan:
|
||||||
raw.lowongan_magang?.kelompok_peminatan ??
|
raw.lowongan_magang?.kelompok_peminatan ??
|
||||||
raw.kelompok_peminatan ??
|
raw.kelompok_peminatan ??
|
||||||
"",
|
"",
|
||||||
|
|
||||||
// 🔥 ini dia: ambil dari mahasiswa
|
|
||||||
motivasi: raw.mahasiswa?.motivasi ?? raw.motivasi ?? "",
|
motivasi: raw.mahasiswa?.motivasi ?? raw.motivasi ?? "",
|
||||||
|
|
||||||
relevant_skills:
|
relevant_skills:
|
||||||
@@ -85,7 +80,6 @@ const InternshipDetailsAdmin = () => {
|
|||||||
raw.relevant_skill ??
|
raw.relevant_skill ??
|
||||||
"",
|
"",
|
||||||
|
|
||||||
// sekalian amankan CV & portofolio kalau memang ikut di object mahasiswa
|
|
||||||
cv_path: raw.cv_path ?? raw.mahasiswa?.cv_path ?? "",
|
cv_path: raw.cv_path ?? raw.mahasiswa?.cv_path ?? "",
|
||||||
portofolio_path:
|
portofolio_path:
|
||||||
raw.portofolio_path ?? raw.mahasiswa?.portofolio_path ?? "",
|
raw.portofolio_path ?? raw.mahasiswa?.portofolio_path ?? "",
|
||||||
@@ -124,6 +118,7 @@ const InternshipDetailsAdmin = () => {
|
|||||||
.then(() => {
|
.then(() => {
|
||||||
alert(`Status berhasil diubah menjadi ${status}`);
|
alert(`Status berhasil diubah menjadi ${status}`);
|
||||||
setApplicant((prev) => (prev ? { ...prev, status } : prev));
|
setApplicant((prev) => (prev ? { ...prev, status } : prev));
|
||||||
|
navigate("/internships-list")
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
console.error("Gagal update status", err);
|
console.error("Gagal update status", err);
|
||||||
@@ -190,6 +185,14 @@ const InternshipDetailsAdmin = () => {
|
|||||||
{/* Detail */}
|
{/* Detail */}
|
||||||
<div className="flex gap-[200px] mb-12">
|
<div className="flex gap-[200px] mb-12">
|
||||||
<div className="flex flex-col gap-4">
|
<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>
|
<p>
|
||||||
<span className="font-semibold">Jurusan:</span>{" "}
|
<span className="font-semibold">Jurusan:</span>{" "}
|
||||||
{applicant.jurusan}
|
{applicant.jurusan}
|
||||||
|
|||||||
@@ -231,13 +231,45 @@ const InternshipList = () => {
|
|||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td className="px-6 py-3">
|
<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
|
<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={() =>
|
onClick={() =>
|
||||||
navigate(`/internships-details-admin/${app.id}`)
|
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>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
Reference in New Issue
Block a user