({
+ queryKey: isDocsChunk
+ ? cacheKeys.documents.byChunk(`doc-${chunkId}`)
+ : cacheKeys.documents.byChunk(chunkId.toString()),
+ queryFn: async () => {
+ if (isDocsChunk) {
+ return documentsApiService.getSurfsenseDocByChunk(chunkId);
+ }
+ return documentsApiService.getDocumentByChunk({ chunk_id: chunkId });
+ },
enabled: !!chunkId && open,
staleTime: 5 * 60 * 1000,
});
@@ -325,7 +340,7 @@ export function SourceDetailPanel({
{documentData?.title || title || "Source Document"}
- {documentData
+ {documentData && "document_type" in documentData
? formatDocumentType(documentData.document_type)
: sourceType && formatDocumentType(sourceType)}
{documentData?.chunks && (
@@ -491,7 +506,8 @@ export function SourceDetailPanel({
{/* Document Metadata */}
- {documentData.document_metadata &&
+ {"document_metadata" in documentData &&
+ documentData.document_metadata &&
Object.keys(documentData.document_metadata).length > 0 && (
;
export type DeleteDocumentRequest = z.infer;
export type DeleteDocumentResponse = z.infer;
export type DocumentTypeEnum = z.infer;
+export type SurfsenseDocsChunk = z.infer;
+export type SurfsenseDocsDocument = z.infer;
+export type SurfsenseDocsDocumentWithChunks = z.infer;
+export type GetSurfsenseDocsByChunkRequest = z.infer;
+export type GetSurfsenseDocsByChunkResponse = z.infer;
diff --git a/surfsense_web/lib/apis/documents-api.service.ts b/surfsense_web/lib/apis/documents-api.service.ts
index cf7a4b778..2e7d18e44 100644
--- a/surfsense_web/lib/apis/documents-api.service.ts
+++ b/surfsense_web/lib/apis/documents-api.service.ts
@@ -17,6 +17,7 @@ import {
getDocumentsResponse,
getDocumentTypeCountsRequest,
getDocumentTypeCountsResponse,
+ getSurfsenseDocsByChunkResponse,
type SearchDocumentsRequest,
searchDocumentsRequest,
searchDocumentsResponse,
@@ -209,6 +210,17 @@ class DocumentsApiService {
);
};
+ /**
+ * Get Surfsense documentation by chunk ID
+ * Used for resolving [citation:doc-XXX] citations
+ */
+ getSurfsenseDocByChunk = async (chunkId: number) => {
+ return baseApiService.get(
+ `/api/v1/surfsense-docs/by-chunk/${chunkId}`,
+ getSurfsenseDocsByChunkResponse
+ );
+ };
+
/**
* Update a document
*/