diff --git a/web/src/hooks/logic-hooks/navigate-hooks.ts b/web/src/hooks/logic-hooks/navigate-hooks.ts
index 1df861364d..a4cb25bd1d 100644
--- a/web/src/hooks/logic-hooks/navigate-hooks.ts
+++ b/web/src/hooks/logic-hooks/navigate-hooks.ts
@@ -209,7 +209,11 @@ export const useNavigatePage = () => {
const params: string[] = [];
Object.keys(props).forEach((key) => {
if (props[key as keyof typeof props]) {
- params.push(`${key}=${props[key as keyof typeof props]}`);
+ // Values may contain characters like `&`, `=` or `#` (e.g. file
+ // names), which would corrupt the query string without encoding.
+ params.push(
+ `${key}=${encodeURIComponent(props[key as keyof typeof props] as string)}`,
+ );
}
});
navigate(
diff --git a/web/src/pages/agent/pipeline-log-sheet/index.tsx b/web/src/pages/agent/pipeline-log-sheet/index.tsx
index 959a9d1299..1da82eafff 100644
--- a/web/src/pages/agent/pipeline-log-sheet/index.tsx
+++ b/web/src/pages/agent/pipeline-log-sheet/index.tsx
@@ -75,6 +75,12 @@ export function PipelineLogSheet({
uploadedFileData?.created_by,
[PipelineResultSearchParams.DocumentExtension]:
uploadedFileData?.extension,
+ [PipelineResultSearchParams.DocumentName]:
+ uploadedFileData?.name,
+ [PipelineResultSearchParams.DocumentSize]:
+ uploadedFileData?.size,
+ [PipelineResultSearchParams.DocumentCreatedAt]:
+ uploadedFileData?.created_at,
})}
>
{t('flow.viewResult')}
diff --git a/web/src/pages/dataflow-result/constant.ts b/web/src/pages/dataflow-result/constant.ts
index 1033a47506..bdaaf339d4 100644
--- a/web/src/pages/dataflow-result/constant.ts
+++ b/web/src/pages/dataflow-result/constant.ts
@@ -23,4 +23,7 @@ export enum PipelineResultSearchParams {
AgentTitle = 'agent_title',
CreatedBy = 'created_by', // Who uploaded the file
DocumentExtension = 'extension',
+ DocumentName = 'doc_name',
+ DocumentSize = 'doc_size',
+ DocumentCreatedAt = 'doc_created_at',
}
diff --git a/web/src/pages/dataflow-result/hooks.ts b/web/src/pages/dataflow-result/hooks.ts
index 02c16aab3b..1f4fee6423 100644
--- a/web/src/pages/dataflow-result/hooks.ts
+++ b/web/src/pages/dataflow-result/hooks.ts
@@ -289,7 +289,6 @@ export const useGetPipelineResultSearchParams = () => {
const is_read_only = currentQueryParameters.get(
PipelineResultSearchParams.IsReadOnly,
) as 'true' | 'false';
- console.log('is_read_only', is_read_only);
return {
type: currentQueryParameters.get(PipelineResultSearchParams.Type) || '',
documentId:
@@ -307,6 +306,14 @@ export const useGetPipelineResultSearchParams = () => {
) || '',
createdBy:
currentQueryParameters.get(PipelineResultSearchParams.CreatedBy) || '',
+ documentName:
+ currentQueryParameters.get(PipelineResultSearchParams.DocumentName) || '',
+ documentSize:
+ currentQueryParameters.get(PipelineResultSearchParams.DocumentSize) || '',
+ documentCreatedAt:
+ currentQueryParameters.get(
+ PipelineResultSearchParams.DocumentCreatedAt,
+ ) || '',
};
};
diff --git a/web/src/pages/dataflow-result/index.tsx b/web/src/pages/dataflow-result/index.tsx
index f3ed49cc03..1f8fd9eee0 100644
--- a/web/src/pages/dataflow-result/index.tsx
+++ b/web/src/pages/dataflow-result/index.tsx
@@ -24,6 +24,7 @@ import { Modal } from '@/components/ui/modal/modal';
import { AgentCategory, AgentQuery } from '@/constants/agent';
import { Images } from '@/constants/common';
import { useGetKnowledgeSearchParams } from '@/hooks/route-hook';
+import { IKnowledgeFile } from '@/interfaces/database/dataset';
import { Routes } from '@/routes';
import { LucideArrowBigLeft } from 'lucide-react';
import TimelineDataFlow from './components/time-line';
@@ -33,17 +34,45 @@ import { IDslComponent, IPipelineFileLogDetail } from './interface';
import ParserContainer from './parser';
const DataflowResult = () => {
- const { isReadOnly, knowledgeId, agentId, documentExtension } =
- useGetPipelineResultSearchParams();
+ const {
+ isReadOnly,
+ knowledgeId,
+ agentId,
+ documentExtension,
+ documentName,
+ documentSize,
+ documentCreatedAt,
+ } = useGetPipelineResultSearchParams();
const isAgent = !!agentId;
const { pipelineResult } = useFetchPipelineResult({ agentId });
const {
- data: { documentInfo },
+ data: { documentInfo: chunkDocumentInfo },
} = useFetchNextChunkList(!isAgent);
+ // In agent mode the chunk list query is disabled, so the document info
+ // comes from the search params passed by the pipeline log sheet instead.
+ const documentInfo = useMemo(() => {
+ if (!isAgent) {
+ return chunkDocumentInfo;
+ }
+ return {
+ name: documentName,
+ size: Number(documentSize) || 0,
+ create_date: documentCreatedAt
+ ? new Date(Number(documentCreatedAt) * 1000).toISOString()
+ : '',
+ } as IKnowledgeFile;
+ }, [
+ chunkDocumentInfo,
+ documentCreatedAt,
+ documentName,
+ documentSize,
+ isAgent,
+ ]);
+
const { selectedChunk, handleChunkCardClick } = useHandleChunkCardClick();
const [activeStepId, setActiveStepId] = useState(2);
const { data: dataset } = useFetchPipelineFileLogDetail({
diff --git a/web/src/pages/dataflow-result/interface.ts b/web/src/pages/dataflow-result/interface.ts
index 0772b4ceaf..4cdee07e6e 100644
--- a/web/src/pages/dataflow-result/interface.ts
+++ b/web/src/pages/dataflow-result/interface.ts
@@ -150,4 +150,7 @@ export interface NavigateToDataflowResultProps {
[PipelineResultSearchParams.Type]: string;
[PipelineResultSearchParams.CreatedBy]?: string;
[PipelineResultSearchParams.DocumentExtension]?: string;
+ [PipelineResultSearchParams.DocumentName]?: string;
+ [PipelineResultSearchParams.DocumentSize]?: string | number;
+ [PipelineResultSearchParams.DocumentCreatedAt]?: string | number;
}