/** * * Copyright 2023-2025 InspectorRAGet Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **/ 'use client'; import { isEmpty } from 'lodash'; import { Button } from '@carbon/react'; import { ChevronLeft, ChevronRight, Link } from '@carbon/icons-react'; import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; import rehypeRaw from 'rehype-raw'; import { ToolMessageDocument } from '@/src/types'; import classes from './DocumentsViewer.module.scss'; // =================================================================================== // TYPES // =================================================================================== interface Props { id: string; documents: ToolMessageDocument[]; documentIndex: number; setDocumentIndex: Function; onSelection?: Function; } // =================================================================================== // RENDER FUNCTIONS // =================================================================================== function DocumentViewer({ id, document, onSelection, }: { id: string; document: ToolMessageDocument; onSelection?: Function; }) { return (
{document.url ? ( ) : null}
{ if (onSelection) { const [segment, documentIdx] = id.split('__documents--'); onSelection( `messages[${segment.split('message--').slice(-1)[0]}].documents[${documentIdx}].text`, ); } }} onMouseUp={() => { if (onSelection) { const [segment, documentIdx] = id.split('__documents--'); onSelection( `messages[${segment.split('message--').slice(-1)[0]}].documents[${documentIdx}].text`, ); } }} >
{document.text}
); } // =================================================================================== // MAIN FUNCTION // =================================================================================== export default function DocumentsViewer({ id, documents, documentIndex, setDocumentIndex, onSelection, }: Props) { // Step 1: Render if (isEmpty(documents)) { return null; } else { return (
{documents.length > 1 ? (
) : null}
); } }