import * as React from 'react'; import { ListFilter } from 'lucide-react'; import { useSetRecoilState } from 'recoil'; import { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from '@tanstack/react-table'; import type { ColumnDef, SortingState, VisibilityState, ColumnFiltersState, } from '@tanstack/react-table'; import { FileContext } from 'librechat-data-provider'; import type { AugmentedColumnDef } from '~/common'; import type { TFile } from 'librechat-data-provider'; import { Input, Table, Button, TableRow, TableBody, TableCell, TableHead, TableHeader, DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, DropdownMenuCheckboxItem, } from '~/components/ui'; import ActionButton from '~/components/Files/ActionButton'; import { useDeleteFilesFromTable } from '~/hooks/Files'; import { TrashIcon, Spinner } from '~/components/svg'; import UploadFileButton from './UploadFileButton'; import useLocalize from '~/hooks/useLocalize'; import store from '~/store'; interface DataTableProps { columns: ColumnDef[]; data: TData[]; } const contextMap = { [FileContext.filename]: 'com_ui_name', [FileContext.updatedAt]: 'com_ui_date', [FileContext.filterSource]: 'com_ui_storage', [FileContext.context]: 'com_ui_context', [FileContext.bytes]: 'com_ui_size', }; type Style = { width?: number | string; maxWidth?: number | string; minWidth?: number | string }; export default function DataTableFile({ columns, data, }: DataTableProps) { const localize = useLocalize(); const setFiles = useSetRecoilState(store.filesByIndex(0)); const [isDeleting, setIsDeleting] = React.useState(false); const { deleteFiles } = useDeleteFilesFromTable(() => setIsDeleting(false)); const [rowSelection, setRowSelection] = React.useState({}); const [sorting, setSorting] = React.useState([]); const [columnFilters, setColumnFilters] = React.useState([]); const [columnVisibility, setColumnVisibility] = React.useState({}); const table = useReactTable({ data, columns, onSortingChange: setSorting, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), onColumnFiltersChange: setColumnFilters, getFilteredRowModel: getFilteredRowModel(), onColumnVisibilityChange: setColumnVisibility, getPaginationRowModel: getPaginationRowModel(), onRowSelectionChange: setRowSelection, state: { sorting, columnFilters, columnVisibility, rowSelection, }, }); return ( <>

{localize('com_ui_files')}

{ console.log('click'); }} />
{' '} {table .getAllColumns() .filter((column) => column.getCanHide()) .map((column) => { return ( column.toggleVisibility(Boolean(value))} > {localize(contextMap[column.id])} ); })} table.getColumn('filename')?.setFilterValue(event.target.value)} className="max-w-sm border-border-medium placeholder:text-text-secondary" /> console.log('click')} />
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header, index) => { const style: Style = { maxWidth: '32px', minWidth: '125px' }; if (header.id === 'filename') { style.maxWidth = '25%'; style.width = '25%'; style.minWidth = '150px'; } if (header.id === 'icon') { style.width = '25px'; style.maxWidth = '25px'; style.minWidth = '35px'; } if (header.id === 'vectorStores') { style.maxWidth = '50%'; style.width = '50%'; style.minWidth = '300px'; } if (index === 0 && header.id === 'select') { style.width = '25px'; style.maxWidth = '25px'; style.minWidth = '35px'; } return ( {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())} ); })} ))} {table.getRowModel().rows.length ? ( table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell, index) => { const maxWidth = (cell.column.columnDef as AugmentedColumnDef).meta?.size ?? 'auto'; const style: Style = {}; if (cell.column.id === 'filename') { style.maxWidth = maxWidth; } else if (index === 0) { style.maxWidth = '20px'; } return ( {flexRender(cell.column.columnDef.cell, cell.getContext())} ); })} )) ) : ( {localize('com_files_no_results')} )}
{localize('com_files_number_selected', { 0: `${table.getFilteredSelectedRowModel().rows.length}`, 1: `${table.getFilteredRowModel().rows.length}`, })}
); }