* feat: jumping from the chunk list page to the file list page keeps the original page number. * feat: jump to the file upload page and reset the file list page number to 1tags/v0.1.0
| @@ -1,5 +1,6 @@ | |||
| import { KnowledgeSearchParams } from '@/constants/knowledge'; | |||
| import { useLocation, useSearchParams } from 'umi'; | |||
| import { useCallback } from 'react'; | |||
| import { useLocation, useNavigate, useSearchParams } from 'umi'; | |||
| export enum SegmentIndex { | |||
| Second = '2', | |||
| @@ -31,3 +32,13 @@ export const useGetKnowledgeSearchParams = () => { | |||
| currentQueryParameters.get(KnowledgeSearchParams.KnowledgeId) || '', | |||
| }; | |||
| }; | |||
| export const useNavigateWithFromState = () => { | |||
| const navigate = useNavigate(); | |||
| return useCallback( | |||
| (path: string) => { | |||
| navigate(path, { state: { from: path } }); | |||
| }, | |||
| [navigate], | |||
| ); | |||
| }; | |||
| @@ -6,8 +6,9 @@ import Toolbar from '../right-toolbar'; | |||
| import styles from './index.less'; | |||
| import { useNavigateWithFromState } from '@/hooks/routeHook'; | |||
| import { useCallback, useMemo } from 'react'; | |||
| import { useLocation, useNavigate } from 'umi'; | |||
| import { useLocation } from 'umi'; | |||
| const { Header } = Layout; | |||
| @@ -15,7 +16,7 @@ const RagHeader = () => { | |||
| const { | |||
| token: { colorBgContainer }, | |||
| } = theme.useToken(); | |||
| const navigate = useNavigate(); | |||
| const navigate = useNavigateWithFromState(); | |||
| const { pathname } = useLocation(); | |||
| const tagsData = useMemo( | |||
| @@ -11,7 +11,7 @@ const Circle = ({ children }: React.PropsWithChildren) => { | |||
| }; | |||
| const handleGithubCLick = () => { | |||
| window.open('https://github.com/infiniflow/infinity', 'target'); | |||
| window.open('https://github.com/infiniflow/ragflow', 'target'); | |||
| }; | |||
| const RightToolBar = () => { | |||
| @@ -80,12 +80,13 @@ const ChunkToolBar = ({ | |||
| removeChunk(); | |||
| }, [removeChunk]); | |||
| const handleEnabledClick = () => { | |||
| const handleEnabledClick = useCallback(() => { | |||
| switchChunk(1); | |||
| }; | |||
| const handleDisabledClick = () => { | |||
| }, [switchChunk]); | |||
| const handleDisabledClick = useCallback(() => { | |||
| switchChunk(0); | |||
| }; | |||
| }, [switchChunk]); | |||
| const items: MenuProps['items'] = useMemo(() => { | |||
| return [ | |||
| @@ -129,7 +130,13 @@ const ChunkToolBar = ({ | |||
| ), | |||
| }, | |||
| ]; | |||
| }, [checked, handleSelectAllCheck, handleDelete]); | |||
| }, [ | |||
| checked, | |||
| handleSelectAllCheck, | |||
| handleDelete, | |||
| handleEnabledClick, | |||
| handleDisabledClick, | |||
| ]); | |||
| const content = ( | |||
| <Menu style={{ width: 200 }} items={items} selectable={false} /> | |||
| @@ -74,7 +74,7 @@ export const useGetPagination = (fetchDocumentList: () => void) => { | |||
| showQuickJumper: true, | |||
| total: kFModel.total, | |||
| showSizeChanger: true, | |||
| current: kFModel.pagination.currentPage, | |||
| current: kFModel.pagination.current, | |||
| pageSize: kFModel.pagination.pageSize, | |||
| pageSizeOptions: [1, 2, 10, 20, 50, 100], | |||
| onChange: onPageChange, | |||
| @@ -223,5 +223,24 @@ const model: DvaModel<KFModelState> = { | |||
| return data; | |||
| }, | |||
| }, | |||
| subscriptions: { | |||
| setup({ dispatch, history }) { | |||
| history.listen(({ location }) => { | |||
| const state: { from: string } = (location.state ?? { | |||
| from: '', | |||
| }) as { from: string }; | |||
| if ( | |||
| state.from === '/knowledge' || // TODO: Just directly determine whether the current page is on the knowledge list page. | |||
| location.pathname === '/knowledge/dataset/upload' | |||
| ) { | |||
| dispatch({ | |||
| type: 'kFModel/setPagination', | |||
| payload: { current: 1, pageSize: 10 }, | |||
| }); | |||
| } | |||
| console.info(location); | |||
| }); | |||
| }, | |||
| }, | |||
| }; | |||
| export default model; | |||
| @@ -1,9 +1,13 @@ | |||
| import { useKnowledgeBaseId } from '@/hooks/knowledgeHook'; | |||
| import { useSecondPathName, useThirdPathName } from '@/hooks/routeHook'; | |||
| import { | |||
| useNavigateWithFromState, | |||
| useSecondPathName, | |||
| useThirdPathName, | |||
| } from '@/hooks/routeHook'; | |||
| import { Breadcrumb } from 'antd'; | |||
| import { ItemType } from 'antd/es/breadcrumb/Breadcrumb'; | |||
| import { useCallback, useEffect, useMemo } from 'react'; | |||
| import { Link, Outlet, useDispatch, useLocation, useNavigate } from 'umi'; | |||
| import { useEffect, useMemo } from 'react'; | |||
| import { Link, Outlet, useDispatch, useLocation } from 'umi'; | |||
| import Siderbar from './components/knowledge-sidebar'; | |||
| import { | |||
| KnowledgeDatasetRouteKey, | |||
| @@ -15,7 +19,6 @@ import styles from './index.less'; | |||
| const KnowledgeAdding = () => { | |||
| const dispatch = useDispatch(); | |||
| const navigate = useNavigate(); | |||
| const knowledgeBaseId = useKnowledgeBaseId(); | |||
| const location = useLocation(); | |||
| @@ -25,14 +28,12 @@ const KnowledgeAdding = () => { | |||
| const datasetActiveKey: KnowledgeDatasetRouteKey = | |||
| useThirdPathName() as KnowledgeDatasetRouteKey; | |||
| const gotoList = useCallback(() => { | |||
| navigate('/knowledge'); | |||
| }, [navigate]); | |||
| const gotoList = useNavigateWithFromState(); | |||
| const breadcrumbItems: ItemType[] = useMemo(() => { | |||
| const items: ItemType[] = [ | |||
| { | |||
| title: <a onClick={gotoList}>Knowledge Base</a>, | |||
| title: <a onClick={() => gotoList('/knowledge')}>Knowledge Base</a>, | |||
| }, | |||
| { | |||
| title: datasetActiveKey ? ( | |||
| @@ -56,7 +56,9 @@ const KnowledgeCard = ({ item }: IProps) => { | |||
| }; | |||
| const handleCardClick = () => { | |||
| navigate(`/knowledge/${KnowledgeRouteKey.Dataset}?id=${item.id}`); | |||
| navigate(`/knowledge/${KnowledgeRouteKey.Dataset}?id=${item.id}`, { | |||
| state: { from: 'list' }, | |||
| }); | |||
| }; | |||
| return ( | |||