-
+
+
+ CN
+
{data.name}
- {dataset.files} | {dataset.size}
+ {data.doc_num} files | {data.chunk_num} chunks
+
+
+ Created {formatDate(data.create_time)}
-
Created {dataset.created}
{items.map((item, itemIdx) => {
diff --git a/web/src/pages/datasets/datasets-filter-popover.tsx b/web/src/pages/datasets/datasets-filter-popover.tsx
deleted file mode 100644
index a36b771d1..000000000
--- a/web/src/pages/datasets/datasets-filter-popover.tsx
+++ /dev/null
@@ -1,149 +0,0 @@
-import {
- Popover,
- PopoverContent,
- PopoverTrigger,
-} from '@/components/ui/popover';
-import { zodResolver } from '@hookform/resolvers/zod';
-import { PropsWithChildren, useCallback, useEffect } from 'react';
-import { useForm } from 'react-hook-form';
-import { z } from 'zod';
-
-import { Button } from '@/components/ui/button';
-import { Checkbox } from '@/components/ui/checkbox';
-import {
- Form,
- FormControl,
- FormField,
- FormItem,
- FormLabel,
- FormMessage,
-} from '@/components/ui/form';
-import { useFetchNextKnowledgeListByPage } from '@/hooks/use-knowledge-request';
-import { useSelectOwners } from './use-select-owners';
-
-const FormSchema = z.object({
- items: z.array(z.string()).refine((value) => value.some((item) => item), {
- message: 'You have to select at least one item.',
- }),
-});
-
-type CheckboxReactHookFormMultipleProps = Pick<
- ReturnType
,
- 'setOwnerIds' | 'ownerIds'
->;
-
-function CheckboxReactHookFormMultiple({
- setOwnerIds,
- ownerIds,
-}: CheckboxReactHookFormMultipleProps) {
- const owners = useSelectOwners();
-
- const form = useForm>({
- resolver: zodResolver(FormSchema),
- defaultValues: {
- items: [],
- },
- });
-
- function onSubmit(data: z.infer) {
- setOwnerIds(data.items);
- }
-
- const onReset = useCallback(() => {
- setOwnerIds([]);
- }, [setOwnerIds]);
-
- useEffect(() => {
- form.setValue('items', ownerIds);
- }, [form, ownerIds]);
-
- return (
-
-
- );
-}
-
-export function DatasetsFilterPopover({
- children,
- setOwnerIds,
- ownerIds,
-}: PropsWithChildren & CheckboxReactHookFormMultipleProps) {
- return (
-
- {children}
-
-
-
-
- );
-}
diff --git a/web/src/pages/files/files-table.tsx b/web/src/pages/files/files-table.tsx
index 65f5950cd..7d686437b 100644
--- a/web/src/pages/files/files-table.tsx
+++ b/web/src/pages/files/files-table.tsx
@@ -3,8 +3,6 @@
import {
ColumnDef,
ColumnFiltersState,
- OnChangeFn,
- RowSelectionState,
SortingState,
VisibilityState,
flexRender,
@@ -35,6 +33,7 @@ import {
TooltipContent,
TooltipTrigger,
} from '@/components/ui/tooltip';
+import { UseRowSelectionType } from '@/hooks/logic-hooks/use-row-selection';
import { useFetchFileList } from '@/hooks/use-file-request';
import { IFile } from '@/interfaces/database/file-manager';
import { cn } from '@/lib/utils';
@@ -52,10 +51,9 @@ import { useNavigateToOtherFolder } from './use-navigate-to-folder';
type FilesTableProps = Pick<
ReturnType,
'files' | 'loading' | 'pagination' | 'setPagination' | 'total'
-> & {
- rowSelection: RowSelectionState;
- setRowSelection: OnChangeFn;
-} & UseMoveDocumentShowType;
+> &
+ Pick &
+ UseMoveDocumentShowType;
export function FilesTable({
files,
diff --git a/web/src/pages/files/index.tsx b/web/src/pages/files/index.tsx
index b20b7a607..81bd5ae28 100644
--- a/web/src/pages/files/index.tsx
+++ b/web/src/pages/files/index.tsx
@@ -9,11 +9,9 @@ import {
DropdownMenuSeparator,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';
+import { useRowSelection } from '@/hooks/logic-hooks/use-row-selection';
import { useFetchFileList } from '@/hooks/use-file-request';
-import { RowSelectionState } from '@tanstack/react-table';
-import { isEmpty } from 'lodash';
import { Upload } from 'lucide-react';
-import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { CreateFolderDialog } from './create-folder-dialog';
import { FileBreadcrumb } from './file-breadcrumb';
@@ -60,7 +58,8 @@ export default function Files() {
moveFileLoading,
} = useHandleMoveFile();
- const [rowSelection, setRowSelection] = useState({});
+ const { rowSelection, setRowSelection, rowSelectionIsEmpty } =
+ useRowSelection();
const { list } = useBulkOperateFile({
files,
@@ -101,7 +100,7 @@ export default function Files() {
- {!isEmpty(rowSelection) && }
+ {!rowSelectionIsEmpty && }
{
- const indexes = Object.keys(rowSelection);
- return files
- .filter((x, idx) => indexes.some((y) => Number(y) === idx))
- .map((x) => x.id);
- }, [files, rowSelection]);
+ const { selectedIds } = useSelectedIds(rowSelection, files);
const { handleRemoveFile } = useHandleDeleteFile();