Update all hooks (Projects, Tasks, Certificates), implement backend for Projects. HomePage on Mentors

This commit is contained in:
Kemas M. Aryadary Rasyad
2026-06-26 10:59:35 +07:00
parent 2e162bfc1e
commit 53b270921d
34 changed files with 895 additions and 625 deletions
@@ -1,28 +1,21 @@
import type { Task } from "../../../../lib/mockProjects";
import { useNavigate } from "react-router-dom";
import { useNavigate, useParams } from "react-router-dom";
import type { ProjectTask } from "../../../../types/task.types";
const formatDate = (date: Date) =>
const formatDate = (date: string) =>
new Date(date).toLocaleDateString('id-ID', { day: 'numeric', month: 'short', year: 'numeric' });
const formatTime = (dateStr: string) =>
new Date(dateStr).toLocaleTimeString('id-ID', { hour: '2-digit', minute: '2-digit' });
const toSlug = (name: string) => name.toLowerCase().replace(/\s+/g, '-');
interface MentorTaskCardProps {
task: Task;
projectName: string;
}
export default function MentorTaskCard({ task, projectName }: MentorTaskCardProps) {
export default function MentorTaskCard({ task }: {task: ProjectTask}) {
const navigate = useNavigate();
const { slug } = useParams<{ slug: string }>();
const handleCardClick = () => {
// Pastikan jika projectName belum ter-render, proses navigasi tidak bikin crash
if (!projectName || !task?.title) return;
const projectSlug = toSlug(projectName);
const taskSlug = toSlug(task.title);
// Rute mutlak menuju target kamu: /mentor/projects/:slug/:taskSlug
navigate(`/mentor/projects/${projectSlug}/${taskSlug}`);
navigate(`/intern/projects/${slug}/${task.slug}?type=${task.submission_type}`)
};
return (
@@ -32,7 +25,7 @@ export default function MentorTaskCard({ task, projectName }: MentorTaskCardProp
>
<div className="flex-1 min-w-0">
<div className="text-[11px] text-[#888] mb-1">
Deadline : {task.deadline ? `${formatDate(task.deadline.date)} at ${task.deadline.time}` : '-'}
Deadline : {task.deadline_at ? `${formatDate(task.deadline_at)} at ${formatTime(task.deadline_at)}` : '-'}
</div>
<div className="font-bold text-[15px] text-[#1a1a1a] mb-1">
{task.title}