import type { ColumnDef } from "@tanstack/react-table"; import { CircleSlash, Cog } from "lucide-react"; 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 { Badge } from "~/components/ui/badge"; import { Button } from "~/components/ui/button"; import { cn, formatCurrency } from "~/lib/utils"; import type { Prezziario } from "~/schemas/public/Prezziario"; export const PrezzarioTable = ({ data, setOpenEdit, setEditData, }: { data: Prezziario[]; setOpenEdit: (status: boolean) => void; setEditData: (data: Prezziario | null) => void; }) => { const tabledata = data.map((row) => { return { actions: "Azioni", categoria: [ row.isAcconto && "acconto", row.isSaldo && "saldo", row.isConsulenza && "consulenza", ].filter(Boolean), desc_en: row.desc_en, desc_it: row.desc_it, id: row.idprezziario, isAcconto: row.isAcconto, isActive: row.isActive, isConsulenza: row.isConsulenza, isSaldo: row.isSaldo, isStabile: row.isStabile, isTransitorio: row.isTransitorio, nome_en: row.nome_en, nome_it: row.nome_it, prezzo_cent: row.prezzo_cent, sconto: row.sconto, testo_condizioni: row.testo_condizioni, }; }); const cat_options = [ { label: "acconto", value: "acconto" }, { label: "saldo", value: "saldo" }, { label: "consulenza", value: "consulenza" }, ]; const columns_titles = { actions: "Azioni", categoria: "Categoria", id: "Codice", nome: "Nome", prezzo: "Prezzo", sconto: "Sconto", tipologia: "Tipo", }; type Column = (typeof tabledata)[number]; const includesAll = (arr: string[], values: string[]) => values.every((v) => arr.includes(v)); const columns: ColumnDef[] = [ { accessorKey: "id", enableHiding: false, header: ({ column }) => ( ), }, { accessorKey: "nome", cell: ({ row }) => { return (
{row.original.nome_it}
); }, header: ({ column }) => ( ), }, { accessorKey: "categoria", filterFn: (row, id, value) => { return includesAll(row.getValue(id), value as string[]); }, header: ({ column }) => ( ), }, { accessorKey: "tipologia", cell: ({ row }) => { return (
{(() => { if (row.original.isTransitorio && row.original.isStabile) return "Transitorio/Stabile"; if (row.original.isTransitorio) return "Transitorio"; if (row.original.isStabile) return "Stabile"; return ""; })()}
); }, filterFn: (row, id, value) => { return includesAll(row.getValue(id), value as string[]); }, header: ({ column }) => ( ), }, { accessorKey: "prezzo", cell: ({ row }) => { return
{formatCurrency(row.original.prezzo_cent / 100)}
; }, header: ({ column }) => ( ), }, { accessorKey: "sconto", cell: ({ row }) => { if (row.original.sconto === 0) { return ( ); } return {row.original.sconto}%; }, header: ({ column }) => ( ), }, { accessorKey: "actions", cell: ({ row }) => { const rowData = row.original; return ( ); }, enableHiding: false, enableSorting: false, header: ({ column }) => ( ), }, ]; const pinnedFiltri: PinnedFiltro[] = [ { columnName: "categoria", options: cat_options, title: "Categoria", }, ]; const searchFiltro: SearchFiltro = { columnName: "id", placeholder: "Filtra codice...", }; return (
); };