import { useEffect, useState } from 'react'; import { useNavigate, useParams, useSearchParams } from 'react-router-dom'; import { useAdminTask } from '@/contexts/AdminTaskContext'; import { useDateFormat } from '@/hooks/useDateFormat'; import { PageMeta } from '@/contexts/MetadataContext'; import TasksTable from '../../components/task_list/TasksTable'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Skeleton } from '@/components/ui/skeleton'; import { Separator } from '@/components/ui/separator'; import { ArrowLeft, Pencil, Users, ListTodo, Info, NotebookPen, FileText, CalendarClock, } from 'lucide-react'; // ─── Helpers ──────────────────────────────────────────────────────────────── function InfoRow({ label, children }) { return (
{label} {children ?? —}
); } function SectionCard({ icon: Icon, title, children }) { return (
{Icon && }

{title}

{children}
); } function LoadingSkeleton() { return (
); } // ─── Tab: Details ─────────────────────────────────────────────────────────── function DetailsTab({ taskList }) { const { fmtDateTime } = useDateFormat(); if (!taskList) return ; const groups = taskList.groups ?? []; const taskCount = taskList.tasks?.length ?? 0; return (
{taskList.name} {taskList.description && ( {taskList.description} )}
{taskCount}
{taskList.group_count ?? groups.length}
{groups.length > 0 ? (
{groups.map((g) => ( {g.name ?? g.group_id} ))}
) : (

No groups assigned.

)}
{taskList.createdAt ? fmtDateTime(taskList.createdAt) : '—'} {taskList.updatedAt ? fmtDateTime(taskList.updatedAt) : '—'}
); } // ─── Tabs config ──────────────────────────────────────────────────────────── const TABS = [ { key: 'details', label: 'Details', icon: Info }, { key: 'tasks', label: 'Tasks', icon: NotebookPen }, ]; // ─── Page ─────────────────────────────────────────────────────────────────── export default function ViewTaskList() { const navigate = useNavigate(); const { taskListId } = useParams(); const [searchParams] = useSearchParams(); const { fetchTaskList } = useAdminTask(); const [taskList, setTaskList] = useState(null); const [activeTab, setActiveTab] = useState( searchParams.get('tab') === 'tasks' ? 'tasks' : 'details' ); useEffect(() => { fetchTaskList(taskListId).then((data) => { if (!data) return; setTaskList(data); }); }, [taskListId]); return (
{/* ── Sticky header ── */}

View Task List

{taskList && (

{taskList.name}

)}
{activeTab === 'details' && ( )}
{/* Underline tabs */}
{TABS.map(({ key, label, icon: Icon }) => ( ))}
{/* ── Content ── */}
{activeTab === 'details' && } {activeTab === 'tasks' && }
); }