'use client'; import { ColumnDef, ColumnFiltersState, SortingState, VisibilityState, flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from '@tanstack/react-table'; import { Pencil, Trash2 } from 'lucide-react'; import * as React from 'react'; import { TableEmpty } from '@/components/table-skeleton'; import { Button } from '@/components/ui/button'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip'; import { cn } from '@/lib/utils'; import { useTranslation } from 'react-i18next'; import { BeginQuery } from '../../interface'; interface IProps { data: BeginQuery[]; deleteRecord(index: number): void; showModal(index: number, record: BeginQuery): void; } export function QueryTable({ data = [], deleteRecord, showModal }: IProps) { const { t } = useTranslation(); const [sorting, setSorting] = React.useState([]); const [columnFilters, setColumnFilters] = React.useState( [], ); const [columnVisibility, setColumnVisibility] = React.useState({}); const columns: ColumnDef[] = [ { accessorKey: 'key', header: t('flow.key'), meta: { cellClassName: 'max-w-30' }, cell: ({ row }) => { const key: string = row.getValue('key'); return (
{key}

{key}

); }, }, { accessorKey: 'name', header: t('flow.name'), meta: { cellClassName: 'max-w-30' }, cell: ({ row }) => { const name: string = row.getValue('name'); return (
{name}

{name}

); }, }, { accessorKey: 'type', header: t('flow.type'), cell: ({ row }) => (
{t(`flow.${(row.getValue('type')?.toString() || '').toLowerCase()}`)}
), }, { accessorKey: 'optional', header: t('flow.optional'), cell: ({ row }) =>
{row.getValue('optional') ? 'Yes' : 'No'}
, }, { id: 'actions', enableHiding: false, header: t('common.action'), cell: ({ row }) => { const record = row.original; const idx = row.index; return (
); }, }, ]; const table = useReactTable({ data, columns, onSortingChange: setSorting, onColumnFiltersChange: setColumnFilters, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), getSortedRowModel: getSortedRowModel(), getFilteredRowModel: getFilteredRowModel(), onColumnVisibilityChange: setColumnVisibility, state: { sorting, columnFilters, columnVisibility, }, }); return (
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => { return ( {header.isPlaceholder ? null : flexRender( header.column.columnDef.header, header.getContext(), )} ); })} ))} {table.getRowModel().rows?.length ? ( table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( {flexRender( cell.column.columnDef.cell, cell.getContext(), )} ))} )) ) : ( )}
); }