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,6 +1,8 @@
import { useState, useEffect } from 'react'
import { ChevronLeft, ChevronRight } from 'lucide-react'
import { useMyTasks } from '../../../../hooks/useProjects';
//SEMENTARA USERSERVICES BELUM KUBUAT
import api from '../../../../lib/api';
const DAY_LABELS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']
const MONTH_NAMES = [
@@ -16,19 +18,29 @@ function getFirstDayOfMonth(year: number, month: number) {
return new Date(year, month, 1).getDay()
}
const HomeCalendar = () => {
interface roleUser {
role: "mentor" | "intern" | "admin";
}
export default function HomeCalendar() {
const [today, setToday] = useState(new Date());
const [role, setRole] = useState<"mentor" | "intern" | "admin" | null>(null);
const { tasks } = useMyTasks();
const DEADLINES = tasks.map(task => ({
date: new Date(task.deadline_at),
label: task.title,
}));
useEffect(() => {
api.get("/auth-api/me")
.then((res) => setRole(res.data.data.role))
.catch((err) => console.error("Failed to fetch user:", err));
}, []);
const DEADLINES = role === "intern"
? tasks.map(task => ({ date: new Date(task.deadline_at), label: task.title, }))
: [];
useEffect(() => {
const interval = setInterval(() => {
setToday(new Date())
}, 60 * 1000) // update tiap 1 menit
}, 60 * 1000)
return () => clearInterval(interval)
}, [])
@@ -187,6 +199,4 @@ const HomeCalendar = () => {
</div>
</div>
)
}
export default HomeCalendar
}
@@ -14,7 +14,7 @@ const ProjectCard = (project: Project) => {
const Icon = getDynamicIcon(project.project_icon);
const tasksDone = -1;
const tasksDone = 1;
const tasksTotal = project.total_tasks;
return (
@@ -48,7 +48,7 @@ export default function SidebarIntern({ isOpen, closeSidebar }: SidebarProps) {
{/* Brand & Tombol Close untuk Mobile */}
<div className="flex items-center justify-between px-2 pb-10">
<div className="flex items-center gap-2.5">
<div className="w-9 h-9 rounded-[10px] bg-red-600 flex items-center justify-center flex-shrink-0"></div>
<div className="w-9 h-9 rounded-[10px] bg-red flex items-center justify-center flex-shrink-0"></div>
<div>
<p className="text-sm font-bold text-gray-900 leading-tight">Internify</p>
<p className="text-[11px] text-gray-400">LMS Portal</p>