import type { ColumnDef } from "@tanstack/react-table"; import { CircleCheck, ExternalLink } from "lucide-react"; import Link from "next/link"; import { useState } from "react"; import { OrdiniModal } from "~/components/area-riservata/ordini"; import { DataTable } from "~/components/custom_ui/data-table"; import { DataTableColumnHeader } from "~/components/custom_ui/dataTable-header"; import type { PinnedFiltro, SearchFiltro, } from "~/components/custom_ui/dataTable-toolbar"; import { Button } from "~/components/ui/button"; import OrderTypeEnum from "~/schemas/public/OrderTypeEnum"; import type { OrdiniOrdineId } from "~/schemas/public/Ordini"; import PaymentStatusEnum from "~/schemas/public/PaymentStatusEnum"; import type { UsersId } from "~/schemas/public/Users"; import type { OrdiniWPagamenti } from "~/server/controllers/ordini.controller"; type PaymentsTableProps = { data: OrdiniWPagamenti[]; isAdmin: boolean; userId?: UsersId; }; export const OrdiniTable = ({ data, isAdmin, userId }: PaymentsTableProps) => { const tabledata = data.map((row) => { return { actions: "Azioni", created_at: row.created_at, id: row.ordine_id, isActive: row.isActive, isPaid: row.pagamenti.some( (p) => p.paymentstatus === PaymentStatusEnum.success, ), packid: row.packid, tipo: row.type, userId: row.userid, username: row.username, }; }); const columns_titles = { actions: "Azioni", created_at: "Creato il", isPaid: "Pagato", packid: "ID Pacchetto", tipo: "Tipo", username: "Utente", }; const isPaidOptions = [ { label: "Pagato", value: "true" }, { label: "Non pagato", value: "false" }, ]; const type_options = [ { label: "Acconto", value: OrderTypeEnum.Acconto }, { label: "Saldo", value: OrderTypeEnum.Saldo }, { label: "Consulenza", value: OrderTypeEnum.Consulenza }, { label: "Altro", value: OrderTypeEnum.Altro }, ]; const [modalOpen, setModalOpen] = useState(false); const [selectedOrdine, setSelectedOrdine] = useState( null, ); type Column = (typeof tabledata)[number]; const columns: ColumnDef[] = [ { accessorKey: "username", cell: ({ row }) => { if (isAdmin) { return ( ); } return {row.original.username}; }, enableHiding: false, header: ({ column }) => ( ), }, { accessorKey: "created_at", cell: ({ row }) => { const date = row.getValue("created_at"); return new Date(date as Date).toLocaleDateString(); }, enableHiding: false, header: ({ column }) => ( ), sortingFn: "datetime", }, { accessorKey: "tipo", cell: ({ row }) => { return row.original.tipo.toString(); }, filterFn: (row, id, value) => { return value.includes(row.getValue(id)); }, header: ({ column }) => ( ), }, { accessorKey: "packid", header: ({ column }) => ( ), }, { accessorKey: "isPaid", cell: ({ row }) => { const isPaid = row.original.isPaid; const isActive = row.original.isActive; if (isActive) { return ( {isPaid ? "Pagato" : "Attivato da Admin"} ); } if (isPaid) { return ( Pagato ); } else { return ( Non pagato ); } }, filterFn: (row, id, value) => { return value.includes(row.getValue(id)); }, header: ({ column }) => ( ), }, { cell: ({ row }) => { return ( ); }, enableHiding: false, id: "actions", }, ]; const searchFiltro: SearchFiltro = isAdmin && !userId ? { columnName: "username", placeholder: "Cerca utente...", } : { columnName: "packid", placeholder: "Cerca pagamento...", }; const pinnedFiltri: PinnedFiltro[] = [ { columnName: "isPaid", options: isPaidOptions, title: "Stato Pagamento", }, { columnName: "tipo", options: type_options, title: "Tipo Ordine", }, ]; return (
{selectedOrdine && ( )}
); };