diff --git a/react/src/App.tsx b/react/src/App.tsx
index 1a74d919d6..80990a0fd3 100644
--- a/react/src/App.tsx
+++ b/react/src/App.tsx
@@ -9,6 +9,7 @@ import MainLayout from './components/MainLayout/MainLayout';
import WebUINavigate from './components/WebUINavigate';
import { useSuspendedBackendaiClient } from './hooks';
import { useBAISettingUserState } from './hooks/useBAISetting';
+import { PageQueryParamAtomProvider } from './hooks/useTransitionSafeQueryParams';
// High priority to import the component
import ComputeSessionListPage from './pages/ComputeSessionListPage';
import ModelStoreListPage from './pages/ModelStoreListPage';
@@ -98,7 +99,9 @@ const router = createBrowserRouter([
errorElement: ,
element: (
-
+
+
+
),
},
@@ -115,12 +118,14 @@ const router = createBrowserRouter([
}
}
>
-
-
-
-
-
-
+
+
+
+
+
+
+
+
),
children: [
diff --git a/react/src/components/AgentSummaryList.tsx b/react/src/components/AgentSummaryList.tsx
index f0abe5a1fa..f8d70050cf 100644
--- a/react/src/components/AgentSummaryList.tsx
+++ b/react/src/components/AgentSummaryList.tsx
@@ -42,7 +42,7 @@ import React, {
import { useTranslation } from 'react-i18next';
import { graphql, FetchPolicy, useLazyLoadQuery } from 'react-relay';
import { useBAISettingUserState } from 'src/hooks/useBAISetting';
-import { useDeferredQueryParams } from 'src/hooks/useDeferredQueryParams';
+import { useTransitionSafeQueryParams } from 'src/hooks/useTransitionSafeQueryParams';
import { StringParam, withDefault } from 'use-query-params';
type AgentSummary = NonNullable<
@@ -74,7 +74,7 @@ const AgentSummaryList: React.FC = ({
pageSize: 20,
});
- const [queryParams, setQuery] = useDeferredQueryParams({
+ const [queryParams, setQuery] = useTransitionSafeQueryParams({
order: withDefault(StringParam, undefined),
filter: withDefault(StringParam, undefined),
status: withDefault(StringParam, 'ALIVE'),
diff --git a/react/src/hooks/reactPaginationQueryOptions.tsx b/react/src/hooks/reactPaginationQueryOptions.tsx
index c2caeeb6c4..13e3fd2d26 100644
--- a/react/src/hooks/reactPaginationQueryOptions.tsx
+++ b/react/src/hooks/reactPaginationQueryOptions.tsx
@@ -1,6 +1,6 @@
// import { offset_to_cursor } from "../helper";
import { LazyLoadQueryOptions } from '../helper/types';
-import { useDeferredQueryParams } from './useDeferredQueryParams';
+import { useTransitionSafeQueryParams } from './useTransitionSafeQueryParams';
import { SorterResult } from 'antd/lib/table/interface';
import _ from 'lodash';
import { useMemo, useState } from 'react';
@@ -342,7 +342,7 @@ export const useBAIPaginationOptionState = (
export const useBAIPaginationOptionStateOnSearchParam = (
initialOptions: InitialPaginationOption,
): BAIPaginationOptionState => {
- const [options, setOptions] = useDeferredQueryParams({
+ const [options, setOptions] = useTransitionSafeQueryParams({
current: NumberParam,
pageSize: NumberParam,
});
diff --git a/react/src/hooks/useDeferredQueryParams.tsx b/react/src/hooks/useDeferredQueryParams.tsx
deleted file mode 100644
index 75adf07cd9..0000000000
--- a/react/src/hooks/useDeferredQueryParams.tsx
+++ /dev/null
@@ -1,162 +0,0 @@
-import { atom, useAtomValue, useSetAtom } from 'jotai';
-import { atomWithDefault } from 'jotai/utils';
-import _ from 'lodash';
-import { useRef, useCallback, useMemo, useEffect } from 'react';
-import {
- useQueryParams,
- QueryParamConfigMap,
- DecodedValueMap,
- UrlUpdateType,
-} from 'use-query-params';
-
-const queryParamsAtom = atom>({});
-
-// Reference counting atom for thread-safe tracking of parameter key usage
-const paramRefCountAtom = atom