diff --git a/packages/frontend/core/src/desktop/pages/workspace/index.tsx b/packages/frontend/core/src/desktop/pages/workspace/index.tsx index 7e7da7d543242..a973556d3514a 100644 --- a/packages/frontend/core/src/desktop/pages/workspace/index.tsx +++ b/packages/frontend/core/src/desktop/pages/workspace/index.tsx @@ -10,7 +10,7 @@ import { WorkspacesService, } from '@toeverything/infra'; import type { ReactElement } from 'react'; -import { useEffect, useLayoutEffect, useMemo, useState } from 'react'; +import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; import { matchPath, useLocation, useParams } from 'react-router-dom'; import { AffineErrorBoundary } from '../../../components/affine/affine-error-boundary'; @@ -84,13 +84,19 @@ export const Component = (): ReactElement => { } }, [listLoading, meta, workspacesService]); - // if workspace is not found, we should revalidate in interval + // if workspace is not found, we should retry + const retryTimesRef = useRef(3); + useEffect(() => { + retryTimesRef.current = 3; // reset retry times + }, [params.workspaceId]); useEffect(() => { if (listLoading === false && meta === undefined) { - const timer = setInterval( - () => workspacesService.list.revalidate(), - 5000 - ); + const timer = setInterval(() => { + if (retryTimesRef.current > 0) { + workspacesService.list.revalidate(); + retryTimesRef.current--; + } + }, 5000); return () => clearInterval(timer); } return; diff --git a/packages/frontend/core/src/mobile/pages/workspace/index.tsx b/packages/frontend/core/src/mobile/pages/workspace/index.tsx index 9604627895aed..e172ce9ecb416 100644 --- a/packages/frontend/core/src/mobile/pages/workspace/index.tsx +++ b/packages/frontend/core/src/mobile/pages/workspace/index.tsx @@ -12,6 +12,7 @@ import { Suspense, useEffect, useMemo, + useRef, useState, } from 'react'; import { @@ -113,13 +114,19 @@ export const Component = () => { } }, [listLoading, meta, workspacesService]); - // if workspace is not found, we should revalidate in interval + // if workspace is not found, we should retry + const retryTimesRef = useRef(3); + useEffect(() => { + retryTimesRef.current = 3; // reset retry times + }, [params.workspaceId]); useEffect(() => { if (listLoading === false && meta === undefined) { - const timer = setInterval( - () => workspacesService.list.revalidate(), - 5000 - ); + const timer = setInterval(() => { + if (retryTimesRef.current > 0) { + workspacesService.list.revalidate(); + retryTimesRef.current--; + } + }, 5000); return () => clearInterval(timer); } return;