import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate, useParams } from 'react-router'; import { LucideArrowLeft, LucideDot } from 'lucide-react'; import { useQuery } from '@tanstack/react-query'; import { createColumnHelper, flexRender, getCoreRowModel, getSortedRowModel, useReactTable, } from '@tanstack/react-table'; import { Routes } from '@/routes'; import { RAGFlowAvatar } from '@/components/ragflow-avatar'; import Spotlight from '@/components/spotlight'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader } from '@/components/ui/card'; import { RAGFlowPagination } from '@/components/ui/ragflow-pagination'; import { ScrollArea } from '@/components/ui/scroll-area'; import { Table, TableBody, TableCell, // TableHead, // TableHeader, TableRow, } from '@/components/ui/table'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { getUserDetails, listUserAgents, listUserDatasets, } from '@/services/admin-service'; import { TableEmpty } from '@/components/table-skeleton'; import EnterpriseFeature from './components/enterprise-feature'; import { // getSortIcon, parseBooleanish, } from './utils'; const ASSET_NAMES = ['dataset', 'flow']; const datasetColumnHelper = createColumnHelper(); const agentColumnHelper = createColumnHelper(); function UserDatasetTable(props: { data?: AdminService.ListUserDatasetItem[]; }) { const { t } = useTranslation(); const columnDefs = useMemo( () => [ datasetColumnHelper.accessor('name', { header: t('admin.name'), cell: ({ row, cell }) => (
{cell.getValue()}
), }), // #region /* datasetColumnHelper.accessor('name', { header: t('admin.name'), enableSorting: false, }), datasetColumnHelper.accessor('status', { header: t('admin.status'), cell: ({ cell }) => { return ( {t( parseBooleanish(cell.getValue()) ? 'admin.active' : 'admin.inactive', )}" ); }, enableSorting: false, }), datasetColumnHelper.accessor('chunk_num', { header: t('admin.chunkNum'), }), datasetColumnHelper.accessor('doc_num', { header: t('admin.docNum'), }), datasetColumnHelper.accessor('token_num', { header: t('admin.tokenNum'), }), datasetColumnHelper.accessor('language', { header: t('admin.language'), enableSorting: false, }), datasetColumnHelper.accessor('create_date', { header: t('admin.createDate'), }), datasetColumnHelper.accessor('update_date', { header: t('admin.updateDate'), }), datasetColumnHelper.accessor('permission', { header: t('admin.permission'), enableSorting: false, }), */ // #endregion ], [t], ); const table = useReactTable({ data: props.data ?? [], columns: columnDefs, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), enableSorting: false, }); return (
{/* {table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( {header.isPlaceholder ? null : header.column.getCanSort() ? ( ) : ( 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())} ))} )) ) : ( )}
{ table.setPagination({ pageIndex: page - 1, pageSize, }); }} />
); } function UserAgentTable(props: { data?: AdminService.ListUserAgentItem[] }) { const { t } = useTranslation(); const columnDefs = useMemo( () => [ agentColumnHelper.accessor('title', { header: t('admin.agentTitle'), cell: ({ row, cell }) => (
{cell.getValue()}
), }), // #region /* agentColumnHelper.accessor('title', { header: t('admin.agentTitle'), }), agentColumnHelper.accessor('permission', { header: t('admin.permission'), }), agentColumnHelper.accessor('canvas_category', { header: t('admin.canvasCategory'), }), */ // #endregion ], [t], ); const table = useReactTable({ data: props.data ?? [], columns: columnDefs, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), enableSorting: false, }); 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())} ))} )) ) : ( )}
{ table.setPagination({ pageIndex: page - 1, pageSize, }); }} />
); } function AdminUserDetail() { const navigate = useNavigate(); const { t } = useTranslation(); const { id } = useParams(); const { data: { detail, datasets, agents } = {} } = useQuery({ queryKey: ['admin/userDetail', id], queryFn: async () => { const [userDetails, userDatasets, userAgents] = await Promise.all([ getUserDetails(id!), listUserDatasets(id!), listUserAgents(id!), ]); return { detail: userDetails.data.data[0], datasets: userDatasets.data.data, agents: userAgents.data.data, }; }, enabled: !!id, retry: false, }); return (
{detail?.email} {t( parseBooleanish(detail?.is_active) ? 'admin.active' : 'admin.inactive', )} {() => detail?.role && ( {detail?.role} ) }
{t('admin.lastLoginTime')}
{detail?.last_login_time}
{t('admin.createTime')}
{detail?.create_date}
{t('admin.lastUpdateTime')}
{detail?.update_date}
{t('admin.language')}
{detail?.language}
{t('admin.isAnonymous')}
{t(detail?.is_anonymous ? 'admin.yes' : 'admin.no')}
{t('admin.isSuperuser')}
{t(detail?.is_superuser ? 'admin.yes' : 'admin.no')}
{ASSET_NAMES.map((name) => ( {t(`header.${name}`)} ))}
); } export default AdminUserDetail;