import { useState } from 'react' import { createFileRoute, useNavigate } from '@tanstack/react-router' import { useQuery } from '@tanstack/react-query' import { lessonPlanListOptions } from '@/api/lessons' import { usePagination } from '@/hooks/use-pagination' import { DataTable, type Column } from '@/components/shared/data-table' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Input } from '@/components/ui/input' import { Search } from 'lucide-react' import type { LessonPlan } from '@/types/lesson' export const Route = createFileRoute('/_authenticated/lessons/plans/')({ validateSearch: (search: Record) => ({ page: Number(search.page) || 1, limit: Number(search.limit) || 25, q: (search.q as string) || undefined, sort: (search.sort as string) || undefined, order: (search.order as 'asc' | 'desc') || 'desc', }), component: LessonPlansPage, }) const columns: Column[] = [ { key: 'title', header: 'Title', sortable: true, render: (p) => {p.title} }, { key: 'progress', header: 'Progress', sortable: true, render: (p) => (
{Math.round(p.progress)}%
), }, { key: 'is_active', header: 'Status', render: (p) => {p.isActive ? 'Active' : 'Inactive'}, }, { key: 'created_at', header: 'Created', sortable: true, render: (p) => <>{new Date(p.createdAt).toLocaleDateString()}, }, ] function LessonPlansPage() { const navigate = useNavigate() const { params, setPage, setSearch, setSort } = usePagination() const [searchInput, setSearchInput] = useState(params.q ?? '') const { data, isLoading } = useQuery(lessonPlanListOptions(params)) function handleSearchSubmit(e: React.FormEvent) { e.preventDefault() setSearch(searchInput) } return (

Lesson Plans

setSearchInput(e.target.value)} className="pl-9" />
navigate({ to: '/lessons/plans/$planId', params: { planId: p.id }, search: { page: 1, limit: 25, q: undefined, sort: undefined, order: 'asc' as const } })} />
) }