import { ExportTransactionsDialog } from "@/components/export/transactions" import { UploadButton } from "@/components/files/upload-button" import { TransactionSearchAndFilters } from "@/components/transactions/filters" import { TransactionList } from "@/components/transactions/list" import { NewTransactionDialog } from "@/components/transactions/new" import { Pagination } from "@/components/transactions/pagination" import { Button } from "@/components/ui/button" import { getCurrentUser } from "@/lib/auth" import { getCategories } from "@/models/categories" import { getFields } from "@/models/fields" import { getProjects } from "@/models/projects" import { getTransactions, TransactionFilters } from "@/models/transactions" import { Download, Plus, Upload } from "lucide-react" import { Metadata } from "next" import { redirect } from "next/navigation" export const metadata: Metadata = { title: "Transactions", description: "Manage your transactions", } const TRANSACTIONS_PER_PAGE = 500 export default async function TransactionsPage({ searchParams }: { searchParams: Promise }) { const { page, ...filters } = await searchParams const user = await getCurrentUser() const { transactions, total } = await getTransactions(user.id, filters, { limit: TRANSACTIONS_PER_PAGE, offset: ((page ?? 1) - 1) * TRANSACTIONS_PER_PAGE, }) const categories = await getCategories(user.id) const projects = await getProjects(user.id) const fields = await getFields(user.id) // Reset page if user clicks a filter and no transactions are found if (page && page > 1 && transactions.length === 0) { const params = new URLSearchParams(filters as Record) redirect(`?${params.toString()}`) } return ( <>

Transactions {total}

{total > TRANSACTIONS_PER_PAGE && } {transactions.length === 0 && (

You don't seem to have any transactions yet. Let's start and create the first one!

Analyze New Invoice
)}
) }