'use client'; import React, { useState } from 'react'; import { CellContext } from '@tanstack/table-core'; import { Button } from '@/components/ui/button'; import { Edit, Trash } from 'lucide-react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { DataTable } from '@/components/ui/data-table'; import { z } from 'zod'; import { ActionResponse } from '@/lib/types/ActionResponse'; import { useRouter } from 'next/navigation'; import { toast } from 'sonner'; import { sonnerContent } from '@/components/ui/sonner'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogFooter, AlertDialogHeader, } from '@/components/ui/alert-dialog'; import { paymentFormSchema } from '@/lib/form-schemas/paymentFormSchema'; import { Category, Entity, Payment } from '@prisma/client'; import PaymentForm from '@/components/form/paymentForm'; import { columns } from '@/app/payments/columns'; export default function PaymentPageClientContent({ payments, entities, categories, onSubmit, onDelete, className, }: { payments: Payment[], entities: Entity[], categories: Category[], onSubmit: (data: z.infer) => Promise, onDelete: (id: number) => Promise, className: string, }) { const router = useRouter(); const [isEditDialogOpen, setIsEditDialogOpen] = useState(false); const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const [selectedPayment, setSelectedPayment] = useState(undefined); async function handleSubmit(data: z.infer) { const response = await onSubmit(data); router.refresh(); setIsEditDialogOpen(false); return response; } async function handleDelete(id: number | undefined) { if (!id) { return; } const response = await onDelete(id); toast(sonnerContent(response)); if (response.redirect) { router.push(response.redirect); } router.refresh(); setIsDeleteDialogOpen(false); return response; } const actionCell = ({row}: CellContext) => { const payment = row.original as Payment; return (
); }; const entitiesMapped = entities?.map((entity) => { return { label: entity.name, value: entity.id, }; }) ?? []; const categoriesMapped = categories?.map((category) => { return { label: category.name, value: category.id, }; }) ?? []; return (

Payments

{/* Edit dialog */} {selectedPayment?.id ? 'Update Payment' : 'Create Payment'}
{/* Data Table */} {/* Delete confirmation dialog */} Delete Payment?

Are your sure you want to delete the payment?

Cancel handleDelete(selectedPayment?.id)}> Delete
); }