/* eslint-disable react-hooks/rules-of-hooks */ import { ArrowUpDown, Database } from 'lucide-react'; import { FileSources, FileContext } from 'librechat-data-provider'; import type { ColumnDef } from '@tanstack/react-table'; import type { TFile } from 'librechat-data-provider'; import ImagePreview from '~/components/Chat/Input/Files/ImagePreview'; import FilePreview from '~/components/Chat/Input/Files/FilePreview'; import { SortFilterHeader } from './SortFilterHeader'; import { OpenAIMinimalIcon } from '~/components/svg'; import { AzureMinimalIcon } from '~/components/svg'; import { Button, Checkbox } from '~/components/ui'; import { formatDate, getFileType } from '~/utils'; import useLocalize from '~/hooks/useLocalize'; const contextMap = { [FileContext.avatar]: 'com_ui_avatar', [FileContext.unknown]: 'com_ui_unknown', [FileContext.assistants]: 'com_ui_assistants', [FileContext.image_generation]: 'com_ui_image_gen', [FileContext.assistants_output]: 'com_ui_assistants_output', [FileContext.message_attachment]: 'com_ui_attachment', }; export const columns: ColumnDef[] = [ { id: 'select', header: ({ table }) => { return ( table.toggleAllPageRowsSelected(!!value)} aria-label="Select all" className="flex" /> ); }, cell: ({ row }) => { return ( row.toggleSelected(!!value)} aria-label="Select row" className="flex" /> ); }, enableSorting: false, enableHiding: false, }, { meta: { size: '150px', }, accessorKey: 'filename', header: ({ column }) => { const localize = useLocalize(); return ( ); }, cell: ({ row }) => { const file = row.original; if (file.type?.startsWith('image')) { return (
{file.filename}
); } const fileType = getFileType(file.type); return (
{fileType && } {file.filename}
); }, }, { accessorKey: 'updatedAt', header: ({ column }) => { const localize = useLocalize(); return ( ); }, cell: ({ row }) => formatDate(row.original.updatedAt), }, { accessorKey: 'filterSource', header: ({ column }) => { const localize = useLocalize(); return ( value === FileSources.local || value === FileSources.openai || value === FileSources.azure, ), }} valueMap={{ [FileSources.azure]: 'Azure', [FileSources.openai]: 'OpenAI', [FileSources.local]: 'com_ui_host', }} /> ); }, cell: ({ row }) => { const localize = useLocalize(); const { source } = row.original; if (source === FileSources.openai) { return (
{'OpenAI'}
); } else if (source === FileSources.azure) { return (
{'Azure'}
); } return (
{localize('com_ui_host')}
); }, }, { accessorKey: 'context', header: ({ column }) => { const localize = useLocalize(); return ( value === FileContext[value ?? ''], ), }} valueMap={contextMap} /> ); }, cell: ({ row }) => { const { context } = row.original; const localize = useLocalize(); return (
{localize(contextMap[context ?? FileContext.unknown] ?? 'com_ui_unknown')}
); }, }, { accessorKey: 'bytes', header: ({ column }) => { const localize = useLocalize(); return ( ); }, cell: ({ row }) => { const suffix = ' MB'; const value = Number((Number(row.original.bytes) / 1024 / 1024).toFixed(2)); if (value < 0.01) { return '< 0.01 MB'; } return `${value}${suffix}`; }, }, ];