feat(knowledge): add team filtering and improve request handling
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { useState, useEffect, useCallback, useMemo } from 'react';
|
||||
import knowledgeService from '@/services/knowledge_service';
|
||||
import type { IKnowledge, IKnowledgeGraph, IKnowledgeResult } from '@/interfaces/database/knowledge';
|
||||
import type { IFetchKnowledgeListRequestParams } from '@/interfaces/request/knowledge';
|
||||
import type { IFetchKnowledgeListRequestBody, IFetchKnowledgeListRequestParams } from '@/interfaces/request/knowledge';
|
||||
import logger from '@/utils/logger';
|
||||
|
||||
/**
|
||||
{
|
||||
@@ -64,8 +65,9 @@ export interface UseKnowledgeListState {
|
||||
|
||||
// 知识库列表Hook返回值接口
|
||||
export interface UseKnowledgeListReturn extends UseKnowledgeListState {
|
||||
fetchKnowledgeBases: (params?: IFetchKnowledgeListRequestParams) => Promise<void>;
|
||||
fetchKnowledgeBases: (params?: IFetchKnowledgeListRequestParams & IFetchKnowledgeListRequestBody) => Promise<void>;
|
||||
setKeywords: (keywords: string) => void;
|
||||
setTeamFilter: (teamFilter: string[]) => void;
|
||||
setCurrentPage: (page: number) => void;
|
||||
setPageSize: (size: number) => void;
|
||||
refresh: () => Promise<void>;
|
||||
@@ -76,7 +78,7 @@ export interface UseKnowledgeListReturn extends UseKnowledgeListState {
|
||||
* 支持关键词搜索、分页等功能
|
||||
*/
|
||||
export const useKnowledgeList = (
|
||||
initialParams?: IFetchKnowledgeListRequestParams
|
||||
initialParams?: IFetchKnowledgeListRequestParams & IFetchKnowledgeListRequestBody
|
||||
): UseKnowledgeListReturn => {
|
||||
const [knowledgeBases, setKnowledgeBases] = useState<IKnowledge[]>([]);
|
||||
const [total, setTotal] = useState(0);
|
||||
@@ -85,11 +87,12 @@ export const useKnowledgeList = (
|
||||
const [currentPage, setCurrentPage] = useState(initialParams?.page || 1);
|
||||
const [pageSize, setPageSize] = useState(initialParams?.page_size || 10);
|
||||
const [keywords, setKeywords] = useState(initialParams?.keywords || '');
|
||||
const [filterData, setFilterData] = useState<any>({});
|
||||
|
||||
/**
|
||||
* 获取知识库列表
|
||||
*/
|
||||
const fetchKnowledgeBases = useCallback(async (params?: IFetchKnowledgeListRequestParams) => {
|
||||
const fetchKnowledgeBases = useCallback(async (params?: IFetchKnowledgeListRequestParams & IFetchKnowledgeListRequestBody) => {
|
||||
try {
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
@@ -102,13 +105,17 @@ export const useKnowledgeList = (
|
||||
};
|
||||
|
||||
// 构建请求体
|
||||
const requestBody: any = {};
|
||||
if (queryParams.keywords && queryParams.keywords.trim()) {
|
||||
requestBody.keywords = queryParams.keywords.trim();
|
||||
const requestBody: IFetchKnowledgeListRequestBody = {};
|
||||
if (params?.owner_ids && params.owner_ids.length > 0) {
|
||||
requestBody.owner_ids = params.owner_ids;
|
||||
}
|
||||
|
||||
if (filterData.owner_ids && filterData.owner_ids.length > 0) {
|
||||
requestBody.owner_ids = filterData.owner_ids;
|
||||
}
|
||||
|
||||
// 构建查询参数
|
||||
const requestParams: any = {};
|
||||
const requestParams: IFetchKnowledgeListRequestParams = {};
|
||||
if (queryParams.page) {
|
||||
requestParams.page = queryParams.page;
|
||||
}
|
||||
@@ -139,7 +146,7 @@ export const useKnowledgeList = (
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}, [keywords, currentPage, pageSize]);
|
||||
}, [keywords, currentPage, pageSize, filterData]);
|
||||
|
||||
/**
|
||||
* 刷新当前页面数据
|
||||
@@ -156,6 +163,10 @@ export const useKnowledgeList = (
|
||||
setCurrentPage(1);
|
||||
}, []);
|
||||
|
||||
const handleSetTeamFilter = useCallback((newTeamFilter: string[]) => {
|
||||
setFilterData({ ...filterData, owner_ids: newTeamFilter });
|
||||
}, []);
|
||||
|
||||
/**
|
||||
* 设置当前页
|
||||
*/
|
||||
@@ -173,8 +184,10 @@ export const useKnowledgeList = (
|
||||
|
||||
// 当关键词、页码或页面大小变化时重新获取数据
|
||||
useEffect(() => {
|
||||
logger.info('useEffect currentPage:', currentPage);
|
||||
logger.info('useEffect pageSize:', pageSize);
|
||||
fetchKnowledgeBases();
|
||||
}, [keywords, currentPage, pageSize]);
|
||||
}, [currentPage, pageSize, filterData, keywords]);
|
||||
|
||||
return {
|
||||
knowledgeBases,
|
||||
@@ -186,6 +199,7 @@ export const useKnowledgeList = (
|
||||
keywords,
|
||||
fetchKnowledgeBases,
|
||||
setKeywords: handleSetKeywords,
|
||||
setTeamFilter: handleSetTeamFilter,
|
||||
setCurrentPage: handleSetCurrentPage,
|
||||
setPageSize: handleSetPageSize,
|
||||
refresh,
|
||||
|
||||
Reference in New Issue
Block a user