From ed96379c47e3835f6348715b52c43eb1b09b0b01 Mon Sep 17 00:00:00 2001
From: chanx <1243304602@qq.com>
Date: Fri, 7 Aug 2026 14:23:40 +0800
Subject: [PATCH] fix(markdown): open non-PDF document references in internal
viewer (#17971)
---
web/src/components/document-preview/txt-preview.tsx | 2 +-
web/src/components/floating-chat-widget-markdown.tsx | 11 ++++++-----
web/src/components/markdown-content/index.tsx | 11 ++++++-----
web/src/components/next-markdown-content/index.tsx | 9 +++++----
4 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/web/src/components/document-preview/txt-preview.tsx b/web/src/components/document-preview/txt-preview.tsx
index cf6649e343..b07ad85c2f 100644
--- a/web/src/components/document-preview/txt-preview.tsx
+++ b/web/src/components/document-preview/txt-preview.tsx
@@ -40,7 +40,7 @@ export const TxtPreviewer = ({ className, url }: TxtPreviewerProps) => {
return (
diff --git a/web/src/components/floating-chat-widget-markdown.tsx b/web/src/components/floating-chat-widget-markdown.tsx
index df61b30951..cbbb7bdc6a 100644
--- a/web/src/components/floating-chat-widget-markdown.tsx
+++ b/web/src/components/floating-chat-widget-markdown.tsx
@@ -86,13 +86,14 @@ const FloatingChatWidgetMarkdown = ({
(
documentId: string,
chunk: IReferenceChunk,
- isPdf: boolean,
+ fileExtension: string,
documentUrl?: string,
) =>
() => {
if (!documentId) return;
- if (!isPdf && documentUrl) {
- window.open(documentUrl, '_blank');
+ if (fileExtension !== 'pdf' && documentUrl) {
+ const nextLink = `/document/${documentId}?ext=${fileExtension}&resource=${'document'}`;
+ window.open(nextLink, '_blank');
} else if (clickDocumentButton) {
clickDocumentButton(documentId, chunk);
}
@@ -215,7 +216,7 @@ const FloatingChatWidgetMarkdown = ({
onClick={handleDocumentButtonClick(
documentId,
chunkItem,
- fileExtension === 'pdf',
+ fileExtension,
documentUrl,
)}
disabled={!documentUrl && fileExtension !== 'pdf'}
@@ -270,7 +271,7 @@ const FloatingChatWidgetMarkdown = ({
onClick={handleDocumentButtonClick(
documentId,
chunkItem,
- fileExtension === 'pdf',
+ fileExtension,
documentUrl,
)}
/>
diff --git a/web/src/components/markdown-content/index.tsx b/web/src/components/markdown-content/index.tsx
index 2f332bc4b5..9789987491 100644
--- a/web/src/components/markdown-content/index.tsx
+++ b/web/src/components/markdown-content/index.tsx
@@ -6,7 +6,7 @@ import { citationMarkerReg } from '@/utils/citation-utils';
import { getExtension } from '@/utils/document-util';
import { getDirAttribute } from '@/utils/text-direction';
import DOMPurify from 'dompurify';
-import { useCallback, useEffect, useMemo } from 'react';
+import { useCallback, useEffect, useMemo, useState } from 'react';
import Markdown from 'react-markdown';
import SyntaxHighlighter from 'react-syntax-highlighter';
import rehypeKatex from 'rehype-katex';
@@ -94,15 +94,16 @@ const MarkdownContent = ({
(
documentId: string,
chunk: IReferenceChunk,
- isPdf: boolean,
+ fileExtension: string,
documentUrl?: string,
) =>
() => {
- if (!isPdf) {
+ if (fileExtension !== 'pdf') {
if (!documentUrl) {
return;
}
- window.open(documentUrl, '_blank');
+ const nextLink = `/document/${documentId}?ext=${fileExtension}&resource=${'document'}`;
+ window.open(nextLink, '_blank');
} else {
clickDocumentButton?.(documentId, chunk);
}
@@ -226,7 +227,7 @@ const MarkdownContent = ({
onClick={handleDocumentButtonClick(
documentId,
chunkItem,
- fileExtension === 'pdf',
+ fileExtension,
documentUrl,
)}
>
diff --git a/web/src/components/next-markdown-content/index.tsx b/web/src/components/next-markdown-content/index.tsx
index 600c89d6f0..62d3ff80a9 100644
--- a/web/src/components/next-markdown-content/index.tsx
+++ b/web/src/components/next-markdown-content/index.tsx
@@ -200,15 +200,16 @@ function MarkdownContent({
(
documentId: string,
chunk: IReferenceChunk,
- isPdf: boolean,
+ fileExtension: string,
documentUrl?: string,
) =>
() => {
- if (!isPdf) {
+ if (fileExtension !== 'pdf') {
if (!documentUrl) {
return;
}
- window.open(documentUrl, '_blank');
+ const nextLink = `/document/${documentId}?ext=${fileExtension}&resource=${'document'}`;
+ window.open(nextLink, '_blank');
} else {
clickDocumentButton?.(documentId, chunk);
}
@@ -318,7 +319,7 @@ function MarkdownContent({
onClick={handleDocumentButtonClick(
documentId,
chunkItem,
- fileExtension === 'pdf',
+ fileExtension,
documentUrl,
)}
className="text-ellipsis text-wrap"