"use client"; import Link from "next/link"; import { useMemo, useState } from "react"; import { api } from "~/trpc/react"; import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card"; import { Button } from "~/components/ui/button"; import { EmptyState } from "~/components/layout/page-layout"; import { Clock, Play } from "lucide-react"; import { groupEntriesByDate } from "~/lib/time-entry-display"; import { TimeEntryRow } from "~/components/time-clock/time-entry-list"; import { TimeEntryEditDialog } from "~/components/time-clock/time-entry-edit-dialog"; import type { TimeEntryListItem } from "~/lib/time-entry-display"; export function TimeEntriesHistory() { const { data: entries, isLoading } = api.timeEntries.getAll.useQuery(); const [editEntryId, setEditEntryId] = useState(null); const completedEntries = useMemo( () => (entries ?? []).filter((e) => e.endedAt), [entries], ); const grouped = useMemo( () => groupEntriesByDate(completedEntries), [completedEntries], ); if (isLoading) { return ( Loading entries… ); } if (completedEntries.length === 0) { return ( } title="No time entries yet" description="Start the timer to track billable hours. Completed entries will show up here." action={ } className="py-16" /> ); } return ( <>
{grouped.map((group) => ( {group.label} {group.entries.map((entry, index) => ( setEditEntryId(item.id)} /> ))} ))}
{ if (!open) setEditEntryId(null); }} /> ); }