import type { ColumnDef } from "@tanstack/react-table"; import { Circle, CircleCheck, ExternalLink } from "lucide-react"; import Link from "next/link"; import { useState } from "react"; import { AdminWrapperOrdiniModal, UserOrdiniModal, } 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 { formatCurrency } from "~/lib/utils"; 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 { Ordini_w_Utente } from "~/server/services/ordini.service"; type PaymentsTableProps = { data: Ordini_w_Utente[]; isAdmin: boolean; userId?: UsersId; filter: OrdiniOrdineId | null; }; const StatusMapping = (status: PaymentStatusEnum | null) => { switch (status) { case PaymentStatusEnum.success: return "Successo"; case PaymentStatusEnum.processing: return "In lavorazione"; case PaymentStatusEnum.failed: return "Errore"; default: return "Non completato"; } }; export const OrdiniTable = ({ data, isAdmin, userId, filter, }: PaymentsTableProps) => { const tabledata = data.map((row) => { return { actions: "Azioni", created_at: row.created_at, id: row.ordine_id, status: row.isActive, payment_status: row.paymentstatus, importo: row.amount_cent, packid: row.packid, tipo: row.type, userId: row.userid, username: row.username, }; }); const columns_titles = { id: "ID Ordine", actions: "Azioni", created_at: "Creato il", importo: "Importo", status: "Status", payment_status: "Pagamento", packid: "ID Pacchetto", tipo: "Tipo", username: "Utente", }; const statusOptions = [ { label: "Attivo", value: "true" }, { label: "Non attivo", 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 [selectedOrdine, setSelectedOrdine] = useState( null, ); type Column = (typeof tabledata)[number]; const columns: ColumnDef[] = [ { accessorKey: "id", cell: () => null, enableHiding: false, header: () => null, }, { 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: "importo", cell: ({ row }) => { return {formatCurrency(row.original.importo / 100)}; }, header: ({ column }) => ( ), enableHiding: false, sortingFn: (a, b, id) => { const aValue = a.getValue(id) as number; const bValue = b.getValue(id) as number; return aValue - bValue; }, }, { accessorKey: "status", cell: ({ row }) => { if (!row.original.status) { return ( Non attivo ); } return ( Attivo ); }, filterFn: (row, id, value) => { return value.includes(row.getValue(id)); }, header: ({ column }) => ( ), }, { accessorKey: "payment_status", cell: ({ row }) => { return {StatusMapping(row.original.payment_status)}; }, filterFn: (row, id, value) => { return value.includes(row.getValue(id)); }, header: ({ column }) => ( ), }, { cell: ({ row }) => { return ( ); }, enableHiding: false, id: "actions", }, ]; const searchFiltro: SearchFiltro = { columnName: "id", placeholder: "Cerca ordine...", }; const pinnedFiltri: PinnedFiltro[] = [ { columnName: "status", options: statusOptions, title: "Stato Ordine", }, { columnName: "tipo", options: type_options, title: "Tipo Ordine", }, ]; return (
{isAdmin ? ( ) : ( selectedOrdine && ( ) )}
); };