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 { id: row.idprezziario, nome_it: row.nome_it, desc_it: row.desc_it, nome_en: row.nome_en, desc_en: row.desc_en, categoria: [ row.isAcconto && "acconto", row.isSaldo && "saldo", row.isConsulenza && "consulenza", ].filter(Boolean), isTransitorio: row.isTransitorio, isStabile: row.isStabile, prezzo_cent: row.prezzo_cent, testo_condizioni: row.testo_condizioni, isAcconto: row.isAcconto, isSaldo: row.isSaldo, isConsulenza: row.isConsulenza, isActive: row.isActive, sconto: row.sconto, actions: "Azioni", }; }); const cat_options = [ { label: "acconto", value: "acconto" }, { label: "saldo", value: "saldo" }, { label: "consulenza", value: "consulenza" }, ]; const columns_titles = { id: "Codice", nome: "Nome", categoria: "Categoria", tipologia: "Tipo", prezzo: "Prezzo", sconto: "Sconto", actions: "Azioni", }; type Column = (typeof tabledata)[number]; const includesAll = (arr: string[], values: string[]) => values.every((v) => arr.includes(v)); const columns: ColumnDef[] = [ { header: ({ column }) => ( ), accessorKey: "id", enableHiding: false, }, { header: ({ column }) => ( ), cell: ({ row }) => { return (
{row.original.nome_it}
); }, accessorKey: "nome", }, { header: ({ column }) => ( ), filterFn: (row, id, value) => { return includesAll(row.getValue(id), value as string[]); }, accessorKey: "categoria", }, { header: ({ column }) => ( ), accessorKey: "tipologia", filterFn: (row, id, value) => { return includesAll(row.getValue(id), value as string[]); }, cell: ({ row }) => { return (
{row.original.isTransitorio ? row.original.isStabile ? "Transitorio/Stabile" : "Transitorio" : row.original.isStabile ? "Stabile" : ""}
); }, }, { header: ({ column }) => ( ), cell: ({ row }) => { return
{formatCurrency(row.original.prezzo_cent / 100)}
; }, accessorKey: "prezzo", }, { header: ({ column }) => ( ), cell: ({ row }) => { if (row.original.sconto === 0) { return ( ); } return {row.original.sconto}%; }, accessorKey: "sconto", }, { header: ({ column }) => ( ), cell: ({ row }) => { const rowData = row.original; return ( ); }, accessorKey: "actions", enableHiding: false, enableSorting: false, }, ]; const pinnedFiltri: PinnedFiltro[] = [ { title: "Categoria", columnName: "categoria", options: cat_options, }, ]; const searchFiltro: SearchFiltro = { columnName: "id", placeholder: "Filtra codice...", }; return (
); };