ad26a53f21
fix: update project card to reflect actual tasks done from project data feat: enhance task form components to accept project ID for submissions refactor: clean up certificate detail page by removing unused elements chore: streamline certificate generation page by removing unnecessary navigation refactor: update certificate list page to use dynamic project data feat: improve interns management page with API integration and better state handling feat: add modal for assigning interns to projects with project selection feat: create a new component for displaying project cards in certificate list fix: correct import paths in create project dialog component refactor: enhance project hooks to include task filtering and refetch capabilities fix: update mock certificate data to reflect correct status feat: extend certificate types to include new fields for better tracking feat: add task_done field to project types for improved task management
42 lines
1.5 KiB
TypeScript
42 lines
1.5 KiB
TypeScript
import ProjectTimeline from './components/ProjectTimeline';
|
|
import TaskCard from './components/ProjectTaskCard';
|
|
import HeroProject from './components/Hero-project';
|
|
import { useProjectMyTasks } from '../../../hooks/useProjects';
|
|
import type { Project } from '../../../types/project.types';
|
|
|
|
export default function ForumTab({ project }: { project: Project }) {
|
|
const { tasks, loading, error } = useProjectMyTasks(project.id);
|
|
return (
|
|
<div>
|
|
<HeroProject title={project.project_name} description={project.description} />
|
|
|
|
{/* Loading */}
|
|
{loading && (
|
|
<div className="flex flex-col gap-3 mt-5">
|
|
{[...Array(3)].map((_, i) => (
|
|
<div key={i} className="h-24 bg-gray-100 rounded-xl animate-pulse" />
|
|
))}
|
|
</div>
|
|
)}
|
|
|
|
{/* Error */}
|
|
{error && <p className="text-red-500 text-sm mt-5">{error}</p>}
|
|
|
|
{/* Timeline + Task list */}
|
|
<div className="flex flex-col gap-7 md:flex-row md:items-start">
|
|
<div className="w-full md:w-1/5 bg-white rounded-xl p-5 border border-box-border shrink-0">
|
|
<ProjectTimeline tasks={tasks} />
|
|
</div>
|
|
<div className="w-full border-t border-box-border md:border-t-0 pt-4 md:pt-0 md:w-4/5">
|
|
{tasks.length === 0 ? (
|
|
<p className="text-sm text-gray-400">Belum ada task.</p>
|
|
) : (
|
|
tasks.map((task) => (
|
|
<TaskCard key={task.id} task={task} />
|
|
))
|
|
)}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
} |