import { ConfirmDeleteDialog, ConfirmDeleteDialogNode, } from '@/components/confirm-delete-dialog'; import { EmptyType } from '@/components/empty/constant'; import Empty from '@/components/empty/empty'; import { Button } from '@/components/ui/button'; import { Modal } from '@/components/ui/modal/modal'; import { RAGFlowPagination } from '@/components/ui/ragflow-pagination'; import { Switch } from '@/components/ui/switch'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Pagination } from '@/interfaces/common'; import { replaceText } from '@/pages/dataset/process-log-modal'; import { ColumnDef, ColumnFiltersState, SortingState, VisibilityState, flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from '@tanstack/react-table'; import { t } from 'i18next'; import { pick } from 'lodash'; import { Copy, Eraser, TextSelect } from 'lucide-react'; import * as React from 'react'; import { useMemo, useState } from 'react'; import { CopyToClipboard } from 'react-copy-to-clipboard'; import { useMessageAction } from './hook'; import { IMessageInfo } from './interface'; export type MemoryTableProps = { messages: Array; total: number; pagination: Pagination; setPagination: (params: { page: number; pageSize: number }) => void; }; export function MemoryTable({ messages, total, pagination, setPagination, }: MemoryTableProps) { const [sorting, setSorting] = React.useState([]); const [columnFilters, setColumnFilters] = React.useState( [], ); const [columnVisibility, setColumnVisibility] = React.useState({}); const [copied, setCopied] = useState(false); const { showDeleteDialog, setShowDeleteDialog, handleClickDeleteMessage, selectedMessage, handleDeleteMessage, handleClickUpdateMessageState, selectedMessageContent, showMessageContentDialog, setShowMessageContentDialog, handleClickMessageContentDialog, } = useMessageAction(); // Define columns for the memory table const columns: ColumnDef[] = useMemo( () => [ { accessorKey: 'session_id', header: () => {t('memory.messages.sessionId')}, cell: ({ row }) => (
{row.getValue('session_id')}
), }, { accessorKey: 'agent_name', header: () => {t('memory.messages.agent')}, cell: ({ row }) => (
{row.getValue('agent_name')}
), }, { accessorKey: 'message_type', header: () => {t('memory.messages.type')}, cell: ({ row }) => (
{row.getValue('message_type')}
), }, { accessorKey: 'valid_at', header: () => {t('memory.messages.validDate')}, cell: ({ row }) => (
{row.getValue('valid_at')}
), }, { accessorKey: 'forget_at', header: () => {t('memory.messages.forgetAt')}, cell: ({ row }) => (
{row.getValue('forget_at')}
), }, { accessorKey: 'source_id', header: () => {t('memory.messages.source')}, cell: ({ row }) => (
{row.getValue('source_id')}
), }, { accessorKey: 'status', header: () => {t('memory.messages.enable')}, cell: ({ row }) => { const isEnabled = row.getValue('status') as boolean; return (
{ handleClickUpdateMessageState(row.original, val); }} />
); }, }, { accessorKey: 'action', header: () => {t('memory.messages.action')}, meta: { cellClassName: 'w-12', }, cell: ({ row }) => (
), }, ], [handleClickDeleteMessage], ); const currentPagination = useMemo(() => { return { pageIndex: (pagination.current || 1) - 1, pageSize: pagination.pageSize || 10, }; }, [pagination]); const table = useReactTable({ data: messages, columns, onSortingChange: setSorting, onColumnFiltersChange: setColumnFilters, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), getSortedRowModel: getSortedRowModel(), getFilteredRowModel: getFilteredRowModel(), onColumnVisibilityChange: setColumnVisibility, manualPagination: true, state: { sorting, columnFilters, columnVisibility, pagination: currentPagination, }, rowCount: total, }); return (
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( {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())} ))} )) ) : ( )}
{showDeleteDialog && ( ), }} /> )} {showMessageContentDialog && (
} >
{t('memory.messages.sessionId')}:   {selectedMessage.session_id}
{selectedMessageContent?.content && (
{replaceText(selectedMessageContent?.content || '')}
)} {selectedMessageContent?.content_embed && (
{ setCopied(true); setTimeout(() => setCopied(false), 1000); }} > {copied && ( {t('memory.messages.copied')} )}
)}
)}
{ setPagination({ page, pageSize }); }} />
); }