mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-08 20:42:30 +08:00
### What problem does this PR solve? Feat: Modify the style of the dataset page #3221 ### Type of change - [x] New Feature (non-breaking change which adds functionality)
175 lines
4.9 KiB
TypeScript
175 lines
4.9 KiB
TypeScript
import { FileIcon } from '@/components/icon-font';
|
|
import { Button } from '@/components/ui/button';
|
|
import { Checkbox } from '@/components/ui/checkbox';
|
|
import { Switch } from '@/components/ui/switch';
|
|
import {
|
|
Tooltip,
|
|
TooltipContent,
|
|
TooltipTrigger,
|
|
} from '@/components/ui/tooltip';
|
|
import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
|
|
import { useSetDocumentStatus } from '@/hooks/use-document-request';
|
|
import { IDocumentInfo } from '@/interfaces/database/document';
|
|
import { cn } from '@/lib/utils';
|
|
import { formatDate } from '@/utils/date';
|
|
import { ColumnDef } from '@tanstack/table-core';
|
|
import { ArrowUpDown } from 'lucide-react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { DatasetActionCell } from './dataset-action-cell';
|
|
import { ParsingStatusCell } from './parsing-status-cell';
|
|
import { UseChangeDocumentParserShowType } from './use-change-document-parser';
|
|
import { UseRenameDocumentShowType } from './use-rename-document';
|
|
import { UseSaveMetaShowType } from './use-save-meta';
|
|
|
|
type UseDatasetTableColumnsType = UseChangeDocumentParserShowType &
|
|
UseRenameDocumentShowType &
|
|
UseSaveMetaShowType;
|
|
|
|
export function useDatasetTableColumns({
|
|
showChangeParserModal,
|
|
showRenameModal,
|
|
showSetMetaModal,
|
|
}: UseDatasetTableColumnsType) {
|
|
const { t } = useTranslation('translation', {
|
|
keyPrefix: 'knowledgeDetails',
|
|
});
|
|
|
|
const { navigateToChunkParsedResult } = useNavigatePage();
|
|
const { setDocumentStatus } = useSetDocumentStatus();
|
|
|
|
const columns: ColumnDef<IDocumentInfo>[] = [
|
|
{
|
|
id: 'select',
|
|
header: ({ table }) => (
|
|
<Checkbox
|
|
checked={
|
|
table.getIsAllPageRowsSelected() ||
|
|
(table.getIsSomePageRowsSelected() && 'indeterminate')
|
|
}
|
|
onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value)}
|
|
aria-label="Select all"
|
|
/>
|
|
),
|
|
cell: ({ row }) => (
|
|
<Checkbox
|
|
checked={row.getIsSelected()}
|
|
onCheckedChange={(value) => row.toggleSelected(!!value)}
|
|
aria-label="Select row"
|
|
/>
|
|
),
|
|
enableSorting: false,
|
|
enableHiding: false,
|
|
},
|
|
{
|
|
accessorKey: 'name',
|
|
header: ({ column }) => {
|
|
return (
|
|
<Button
|
|
variant="ghost"
|
|
onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')}
|
|
>
|
|
{t('name')}
|
|
<ArrowUpDown />
|
|
</Button>
|
|
);
|
|
},
|
|
meta: { cellClassName: 'max-w-[20vw]' },
|
|
cell: ({ row }) => {
|
|
const name: string = row.getValue('name');
|
|
|
|
return (
|
|
<Tooltip>
|
|
<TooltipTrigger asChild>
|
|
<div
|
|
className="flex gap-2 cursor-pointer"
|
|
onClick={navigateToChunkParsedResult(
|
|
row.original.id,
|
|
row.original.kb_id,
|
|
)}
|
|
>
|
|
<FileIcon name={name}></FileIcon>
|
|
<span className={cn('truncate')}>{name}</span>
|
|
</div>
|
|
</TooltipTrigger>
|
|
<TooltipContent>
|
|
<p>{name}</p>
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
accessorKey: 'create_time',
|
|
header: ({ column }) => {
|
|
return (
|
|
<Button
|
|
variant="ghost"
|
|
onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')}
|
|
>
|
|
{t('uploadDate')}
|
|
<ArrowUpDown />
|
|
</Button>
|
|
);
|
|
},
|
|
cell: ({ row }) => (
|
|
<div className="lowercase">
|
|
{formatDate(row.getValue('create_time'))}
|
|
</div>
|
|
),
|
|
},
|
|
{
|
|
accessorKey: 'status',
|
|
header: t('enabled'),
|
|
cell: ({ row }) => {
|
|
const id = row.original.id;
|
|
return (
|
|
<Switch
|
|
checked={row.getValue('status') === '1'}
|
|
onCheckedChange={(e) => {
|
|
setDocumentStatus({ status: e, documentId: id });
|
|
}}
|
|
/>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
accessorKey: 'chunk_num',
|
|
header: t('chunkNumber'),
|
|
cell: ({ row }) => (
|
|
<div className="capitalize">{row.getValue('chunk_num')}</div>
|
|
),
|
|
},
|
|
{
|
|
accessorKey: 'run',
|
|
header: t('parsingStatus'),
|
|
// meta: { cellClassName: 'min-w-[20vw]' },
|
|
cell: ({ row }) => {
|
|
return (
|
|
<ParsingStatusCell
|
|
record={row.original}
|
|
showChangeParserModal={showChangeParserModal}
|
|
showSetMetaModal={showSetMetaModal}
|
|
></ParsingStatusCell>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
id: 'actions',
|
|
header: t('action'),
|
|
enableHiding: false,
|
|
cell: ({ row }) => {
|
|
const record = row.original;
|
|
|
|
return (
|
|
<DatasetActionCell
|
|
record={record}
|
|
showRenameModal={showRenameModal}
|
|
></DatasetActionCell>
|
|
);
|
|
},
|
|
},
|
|
];
|
|
|
|
return columns;
|
|
}
|