From dbcb1d83de32cc46d82589d2be0741908cdece69 Mon Sep 17 00:00:00 2001 From: mlogclub Date: Thu, 28 May 2026 12:40:36 +0800 Subject: [PATCH] feat: add reloadKey prop to various components for improved data fetching control --- .../dashboard/knowledge/_components/document-list.tsx | 1 + .../knowledge/_components/retrieve-log-list.tsx | 1 + web/components/dashboard/crud/dashboard-crud-page.tsx | 3 +++ web/components/dashboard/list/dashboard-list-page.tsx | 3 +++ .../dashboard/list/use-dashboard-paged-list.ts | 10 +++++++--- 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/web/app/dashboard/knowledge/_components/document-list.tsx b/web/app/dashboard/knowledge/_components/document-list.tsx index d4fe960..0a7992e 100644 --- a/web/app/dashboard/knowledge/_components/document-list.tsx +++ b/web/app/dashboard/knowledge/_components/document-list.tsx @@ -196,6 +196,7 @@ export function DocumentList({ knowledgeBaseId, onActionStateChange }: DocumentL filters, fetchList, enabled: Boolean(knowledgeBaseId), + reloadKey: knowledgeBaseId, loadFailed: t("knowledge.loadDocumentsFailed"), }); diff --git a/web/app/dashboard/knowledge/_components/retrieve-log-list.tsx b/web/app/dashboard/knowledge/_components/retrieve-log-list.tsx index 69a7ba5..afae038 100644 --- a/web/app/dashboard/knowledge/_components/retrieve-log-list.tsx +++ b/web/app/dashboard/knowledge/_components/retrieve-log-list.tsx @@ -200,6 +200,7 @@ export function RetrieveLogList({ }, ]} fetchList={(query) => fetchKnowledgeRetrieveLogs({ knowledgeBaseId, ...query })} + reloadKey={knowledgeBaseId} getItemId={(item) => item.id} getRowClassName={() => "cursor-pointer"} onRowClick={(item) => handleOpenDetail(item.id)} diff --git a/web/components/dashboard/crud/dashboard-crud-page.tsx b/web/components/dashboard/crud/dashboard-crud-page.tsx index 5d0be34..4abcc6a 100644 --- a/web/components/dashboard/crud/dashboard-crud-page.tsx +++ b/web/components/dashboard/crud/dashboard-crud-page.tsx @@ -163,6 +163,7 @@ export type DashboardCrudPageProps = { handleLabel: string } pageSize?: number + reloadKey?: string | number | null layout?: "page" | "fragment" showToolbar?: boolean showToolbarActions?: boolean @@ -205,6 +206,7 @@ export function DashboardCrudPage({ renderRowActions, sort, pageSize = 20, + reloadKey, layout = "page", showToolbar = true, showToolbarActions = true, @@ -227,6 +229,7 @@ export function DashboardCrudPage({ filters, fetchList, pageSize, + reloadKey, loadFailed: labels.loadFailed, }) const draftFilters = list.draftFilters diff --git a/web/components/dashboard/list/dashboard-list-page.tsx b/web/components/dashboard/list/dashboard-list-page.tsx index 0d3aa6b..8e79762 100644 --- a/web/components/dashboard/list/dashboard-list-page.tsx +++ b/web/components/dashboard/list/dashboard-list-page.tsx @@ -68,6 +68,7 @@ export type DashboardListPageProps = { onRowClick?: (item: TItem) => void pageSize?: number enabled?: boolean + reloadKey?: string | number | null layout?: "page" | "fragment" tableShellClassName?: string labels: { @@ -90,6 +91,7 @@ export function DashboardListPage({ onRowClick, pageSize, enabled, + reloadKey, layout = "page", tableShellClassName, labels, @@ -99,6 +101,7 @@ export function DashboardListPage({ fetchList, pageSize, enabled, + reloadKey, loadFailed: labels.loadFailed, }) const renderContext: DashboardListRenderContext = { diff --git a/web/components/dashboard/list/use-dashboard-paged-list.ts b/web/components/dashboard/list/use-dashboard-paged-list.ts index 3af6459..47e5d08 100644 --- a/web/components/dashboard/list/use-dashboard-paged-list.ts +++ b/web/components/dashboard/list/use-dashboard-paged-list.ts @@ -1,6 +1,6 @@ "use client" -import { useCallback, useEffect, useState } from "react" +import { useCallback, useEffect, useRef, useState } from "react" import { toast } from "sonner" import { @@ -24,6 +24,7 @@ export type DashboardPagedListOptions = { pageSize?: number loadFailed: string enabled?: boolean + reloadKey?: string | number | null } export function useDashboardPagedList({ @@ -32,7 +33,10 @@ export function useDashboardPagedList({ pageSize = 20, loadFailed, enabled = true, + reloadKey, }: DashboardPagedListOptions) { + const fetchListRef = useRef(fetchList) + fetchListRef.current = fetchList const filtersKey = filters .map( (filter) => @@ -65,7 +69,7 @@ export function useDashboardPagedList({ setLoading(true) try { - const data = await fetchList( + const data = await fetchListRef.current( buildDashboardCrudQuery({ values: appliedFilters, filters, @@ -80,7 +84,7 @@ export function useDashboardPagedList({ setLoading(false) } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [appliedFilters, enabled, fetchList, filtersKey, limit, loadFailed, page]) + }, [appliedFilters, enabled, filtersKey, limit, loadFailed, page, reloadKey]) useEffect(() => { void loadData()