From 8dd2394e9343743245e80d9236a7705823462ed0 Mon Sep 17 00:00:00 2001 From: Jimmy Ben Klieve Date: Mon, 22 Dec 2025 09:36:45 +0800 Subject: [PATCH] feat: add optional cache busting for image (#12055) ### What problem does this PR solve? Add optional cache busting for image #12003 ### Type of change - [x] New Feature (non-breaking change which adds functionality) --- web/src/components/image/index.tsx | 5 +++-- web/src/hooks/use-chunk-request.ts | 8 +++++++- .../knowledge-chunk/components/chunk-card/index.tsx | 9 ++++++++- .../add-knowledge/components/knowledge-chunk/index.tsx | 2 ++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/web/src/components/image/index.tsx b/web/src/components/image/index.tsx index c4853bdf4..c7fef47cb 100644 --- a/web/src/components/image/index.tsx +++ b/web/src/components/image/index.tsx @@ -6,13 +6,14 @@ interface IImage { id: string; className?: string; onClick?(): void; + t?: string | number; } -const Image = ({ id, className, ...props }: IImage) => { +const Image = ({ id, t, className, ...props }: IImage) => { return ( diff --git a/web/src/hooks/use-chunk-request.ts b/web/src/hooks/use-chunk-request.ts index 32c47ca84..670b38894 100644 --- a/web/src/hooks/use-chunk-request.ts +++ b/web/src/hooks/use-chunk-request.ts @@ -22,6 +22,7 @@ export interface IChunkListResult { setPagination?: (pagination: { page: number; pageSize: number }) => void; available: number | undefined; handleSetAvailable: (available: number | undefined) => void; + dataUpdatedAt?: number; // Timestamp when data was last updated - useful for cache busting } export const useSelectChunkList = () => { @@ -118,7 +119,11 @@ export const useFetchNextChunkList = ( const [available, setAvailable] = useState(); const debouncedSearchString = useDebounce(searchString, { wait: 500 }); - const { data, isFetching: loading } = useQuery({ + const { + data, + isFetching: loading, + dataUpdatedAt, + } = useQuery({ queryKey: [ 'fetchChunkList', documentId, @@ -183,6 +188,7 @@ export const useFetchNextChunkList = ( handleInputChange: onInputChange, available, handleSetAvailable, + dataUpdatedAt, // Timestamp when data was last updated - useful for cache busting }; }; diff --git a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-card/index.tsx b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-card/index.tsx index 69859ebfd..98d3d3595 100644 --- a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-card/index.tsx +++ b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/components/chunk-card/index.tsx @@ -25,6 +25,7 @@ interface IProps { selected: boolean; clickChunkCard: (chunkId: string) => void; textMode: ChunkTextMode; + t?: string | number; // Cache-busting key for images } const ChunkCard = ({ @@ -36,6 +37,7 @@ const ChunkCard = ({ selected, clickChunkCard, textMode, + t: imageCacheKey, }: IProps) => { const available = Number(item.available_int); const [enabled, setEnabled] = useState(false); @@ -79,7 +81,11 @@ const ChunkCard = ({ onMouseLeave={() => setOpen(false)} >
- +
diff --git a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/index.tsx b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/index.tsx index afe568d2a..eb0e3fd50 100644 --- a/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/index.tsx +++ b/web/src/pages/chunk/parsed-result/add-knowledge/components/knowledge-chunk/index.tsx @@ -55,6 +55,7 @@ const Chunk = () => { handleInputChange, available, handleSetAvailable, + dataUpdatedAt, } = useFetchNextChunkList(); const { handleChunkCardClick, selectedChunkId } = useHandleChunkCardClick(); const isPdf = documentInfo?.type === 'pdf'; @@ -277,6 +278,7 @@ const Chunk = () => { clickChunkCard={handleChunkCardClick} selected={item.chunk_id === selectedChunkId} textMode={textMode} + t={dataUpdatedAt} > ))}