"use client" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Separator } from "@/components/ui/separator" import { TransactionFilters } from "@/data/transactions" import { Category, Field, Project } from "@prisma/client" import { formatDate } from "date-fns" import { useRouter } from "next/navigation" import { useState } from "react" import { DateRangePicker } from "../forms/date-range-picker" import { FormSelectCategory } from "../forms/select-category" import { FormSelectProject } from "../forms/select-project" const deselectedFields = ["files", "text"] export function ExportTransactionsDialog({ filters, fields, categories, projects, children, }: { filters: TransactionFilters fields: Field[] categories: Category[] projects: Project[] children: React.ReactNode }) { const router = useRouter() const [exportFilters, setExportFilters] = useState(filters) const [exportFields, setExportFields] = useState( fields.map((field) => (deselectedFields.includes(field.code) ? "" : field.code)) ) const [includeAttachments, setIncludeAttachments] = useState(true) const handleSubmit = () => { router.push( `/export/transactions?${new URLSearchParams({ ...exportFilters, fields: exportFields.join(","), includeAttachments: includeAttachments.toString(), }).toString()}` ) } return ( {children} Export Transactions Export selected transactions and files as a CSV file or a ZIP archive
{filters.search && (
Search query: {filters.search}
)}
Time range: { setExportFilters({ ...exportFilters, dateFrom: date?.from ? formatDate(date.from, "yyyy-MM-dd") : undefined, dateTo: date?.to ? formatDate(date.to, "yyyy-MM-dd") : undefined, }) }} />
setExportFilters({ ...exportFilters, categoryCode: value })} placeholder="All Categories" emptyValue="All Categories" /> setExportFilters({ ...exportFilters, projectCode: value })} placeholder="All Projects" emptyValue="All Projects" />
Fields to be included in CSV
{fields.map((field) => (
))}
) }