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' && }
);
}