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