2025-08-04 17:45:44 +02:00
|
|
|
import type { ColumnDef } from "@tanstack/react-table";
|
|
|
|
|
import { Cog } from "lucide-react";
|
|
|
|
|
import { DataTable } from "~/components/custom_ui/data-table";
|
2025-08-28 18:27:07 +02:00
|
|
|
import { DataTableColumnHeader } from "~/components/custom_ui/dataTable-header";
|
2025-08-04 17:45:44 +02:00
|
|
|
import type { SearchFiltro } from "~/components/custom_ui/dataTable-toolbar";
|
2025-08-28 18:27:07 +02:00
|
|
|
import { Etichetta } from "~/components/etichette";
|
2025-08-04 17:45:44 +02:00
|
|
|
import { Button } from "~/components/ui/button";
|
|
|
|
|
import type { Etichette } from "~/schemas/public/Etichette";
|
|
|
|
|
export const EtichetteTable = (props: {
|
2025-08-28 18:27:07 +02:00
|
|
|
data: Etichette[];
|
|
|
|
|
setOpenEdit: (status: boolean) => void;
|
|
|
|
|
setEditData: (data: Etichette | null) => void;
|
2025-08-04 17:45:44 +02:00
|
|
|
}) => {
|
2025-08-28 18:27:07 +02:00
|
|
|
const { data, setOpenEdit, setEditData } = props;
|
2025-08-04 17:45:44 +02:00
|
|
|
|
2025-08-28 18:27:07 +02:00
|
|
|
const tabledata = data.map((row) => {
|
|
|
|
|
return {
|
2025-08-29 16:18:32 +02:00
|
|
|
actions: "Azioni",
|
|
|
|
|
colore: row.color_hex,
|
2025-08-28 18:27:07 +02:00
|
|
|
id: row.id_etichetta,
|
|
|
|
|
title: row.title,
|
|
|
|
|
};
|
|
|
|
|
});
|
2025-08-04 17:45:44 +02:00
|
|
|
|
2025-08-28 18:27:07 +02:00
|
|
|
const columns_titles = {
|
|
|
|
|
actions: "Azioni",
|
2025-08-29 16:18:32 +02:00
|
|
|
etichetta: "Etichetta",
|
|
|
|
|
id: "Id",
|
2025-08-28 18:27:07 +02:00
|
|
|
};
|
|
|
|
|
type Column = (typeof tabledata)[number];
|
2025-08-04 17:45:44 +02:00
|
|
|
|
2025-08-28 18:27:07 +02:00
|
|
|
const columns: ColumnDef<Column>[] = [
|
|
|
|
|
{
|
2025-08-29 16:18:32 +02:00
|
|
|
accessorKey: "id",
|
|
|
|
|
enableHiding: false,
|
2025-08-28 18:27:07 +02:00
|
|
|
header: ({ column }) => (
|
|
|
|
|
<DataTableColumnHeader column={column} title={columns_titles.id} />
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
accessorKey: "title",
|
|
|
|
|
cell: ({ row }) => {
|
|
|
|
|
const data = row.original;
|
|
|
|
|
return (
|
|
|
|
|
<Etichetta
|
|
|
|
|
className="text-base"
|
2025-08-29 16:18:32 +02:00
|
|
|
color_hex={data.colore}
|
|
|
|
|
title={data.title}
|
2025-08-28 18:27:07 +02:00
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
},
|
2025-08-04 17:45:44 +02:00
|
|
|
|
2025-08-28 18:27:07 +02:00
|
|
|
enableHiding: false,
|
2025-08-29 16:18:32 +02:00
|
|
|
header: ({ column }) => (
|
|
|
|
|
<DataTableColumnHeader
|
|
|
|
|
column={column}
|
|
|
|
|
title={columns_titles.etichetta}
|
|
|
|
|
/>
|
|
|
|
|
),
|
2025-08-28 18:27:07 +02:00
|
|
|
},
|
2025-08-04 17:45:44 +02:00
|
|
|
|
2025-08-28 18:27:07 +02:00
|
|
|
{
|
2025-08-29 16:18:32 +02:00
|
|
|
accessorKey: "actions",
|
2025-08-28 18:27:07 +02:00
|
|
|
cell: ({ row }) => {
|
|
|
|
|
const data = row.original;
|
|
|
|
|
return (
|
|
|
|
|
<Button
|
|
|
|
|
aria-label="Modifica Etichetta"
|
|
|
|
|
onClick={() => {
|
|
|
|
|
setEditData({
|
2025-08-29 16:18:32 +02:00
|
|
|
color_hex: data.colore,
|
2025-08-28 18:27:07 +02:00
|
|
|
id_etichetta: data.id,
|
|
|
|
|
title: data.title,
|
|
|
|
|
});
|
|
|
|
|
setOpenEdit(true);
|
|
|
|
|
}}
|
2025-08-29 16:18:32 +02:00
|
|
|
variant="outline"
|
2025-08-28 18:27:07 +02:00
|
|
|
>
|
|
|
|
|
<div className="flex items-center gap-2">
|
|
|
|
|
<Cog /> Modifica
|
|
|
|
|
</div>
|
|
|
|
|
</Button>
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
enableHiding: false,
|
|
|
|
|
enableSorting: false,
|
2025-08-29 16:18:32 +02:00
|
|
|
header: ({ column }) => (
|
|
|
|
|
<DataTableColumnHeader column={column} title={columns_titles.actions} />
|
|
|
|
|
),
|
2025-08-28 18:27:07 +02:00
|
|
|
},
|
|
|
|
|
];
|
2025-08-04 17:45:44 +02:00
|
|
|
|
2025-08-28 18:27:07 +02:00
|
|
|
const searchFiltro: SearchFiltro = {
|
|
|
|
|
columnName: "title",
|
|
|
|
|
placeholder: "Filtra codice...",
|
|
|
|
|
};
|
|
|
|
|
return (
|
|
|
|
|
<div className="mx-auto w-full px-2 py-10">
|
|
|
|
|
<DataTable
|
|
|
|
|
columns={columns}
|
2025-08-29 16:18:32 +02:00
|
|
|
columns_titles={columns_titles}
|
2025-08-28 18:27:07 +02:00
|
|
|
data={tabledata}
|
2025-08-29 16:18:32 +02:00
|
|
|
defaultSort={[{ desc: true, id: "id" }]}
|
2025-08-28 18:27:07 +02:00
|
|
|
pinnedFiltri={undefined}
|
|
|
|
|
searchColumn={searchFiltro}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
2025-08-04 17:45:44 +02:00
|
|
|
};
|