diff --git a/web/app/components/app/log/index.tsx b/web/app/components/app/log/index.tsx index cedf2de74d..4fda71bece 100644 --- a/web/app/components/app/log/index.tsx +++ b/web/app/components/app/log/index.tsx @@ -27,24 +27,33 @@ export type QueryParam = { sort_by?: string } +const defaultQueryParams: QueryParam = { + period: '2', + annotation_status: 'all', + sort_by: '-created_at', +} + +const logsStateCache = new Map() + const Logs: FC = ({ appDetail }) => { const { t } = useTranslation() const router = useRouter() const pathname = usePathname() const searchParams = useSearchParams() - const [queryParams, setQueryParams] = useState({ - period: '2', - annotation_status: 'all', - sort_by: '-created_at', - }) const getPageFromParams = useCallback(() => { const pageParam = Number.parseInt(searchParams.get('page') || '1', 10) if (Number.isNaN(pageParam) || pageParam < 1) return 0 return pageParam - 1 }, [searchParams]) - const [currPage, setCurrPage] = React.useState(() => getPageFromParams()) - const [limit, setLimit] = React.useState(APP_PAGE_LIMIT) + const cachedState = logsStateCache.get(appDetail.id) + const [queryParams, setQueryParams] = useState(cachedState?.queryParams ?? defaultQueryParams) + const [currPage, setCurrPage] = React.useState(() => cachedState?.currPage ?? getPageFromParams()) + const [limit, setLimit] = React.useState(cachedState?.limit ?? APP_PAGE_LIMIT) const debouncedQueryParams = useDebounce(queryParams, { wait: 500 }) useEffect(() => { @@ -52,6 +61,14 @@ const Logs: FC = ({ appDetail }) => { setCurrPage(prev => (prev === pageFromParams ? prev : pageFromParams)) }, [getPageFromParams]) + useEffect(() => { + logsStateCache.set(appDetail.id, { + queryParams, + currPage, + limit, + }) + }, [appDetail.id, currPage, limit, queryParams]) + // Get the app type first const isChatMode = appDetail.mode !== AppModeEnum.COMPLETION @@ -85,6 +102,11 @@ const Logs: FC = ({ appDetail }) => { const total = isChatMode ? chatConversations?.total : completionConversations?.total + const handleQueryParamsChange = useCallback((next: QueryParam) => { + setCurrPage(0) + setQueryParams(next) + }, []) + const handlePageChange = useCallback((page: number) => { setCurrPage(page) const params = new URLSearchParams(searchParams.toString()) @@ -101,7 +123,7 @@ const Logs: FC = ({ appDetail }) => {

{t('appLog.description')}

- + {total === undefined ? : total > 0