mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-31 13:03:49 +08:00
feat: add 'Open in new tab' button for agents (#13044)
- Add new button in agent management dropdown to open agent in new tab - Implement token-based authentication for shared agent access - Add translations for 9 languages (en, zh, zh-tw, de, fr, it, ru, pt-br, vi) - Keep existing 'Embed into webpage' functionality intact ### What problem does this PR solve? This allows users to open agents in a separate tab to work in background while continuing to use other parts of the application. <img width="1920" height="1080" alt="image" src="https://github.com/user-attachments/assets/ca1719c8-2f00-4570-a730-1321fa0bfd57" /> <img width="254" height="222" alt="image" src="https://github.com/user-attachments/assets/b3dd6d9f-b7e7-46b0-83e7-f0ea86e7b156" /> <img width="1920" height="1080" alt="image" src="https://github.com/user-attachments/assets/e94e99f9-9039-43f7-b2d9-862b9448630c" /> ### Type of change - [x] New Feature (non-breaking change which adds functionality)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import CopyToClipboard from '@/components/copy-to-clipboard';
|
||||
import HighLightMarkdown from '@/components/highlight-markdown';
|
||||
import { SelectWithSearch } from '@/components/originui/select-with-search';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import {
|
||||
Dialog,
|
||||
DialogContent,
|
||||
@@ -28,6 +29,7 @@ import { useTranslate } from '@/hooks/common-hooks';
|
||||
import { IModalProps } from '@/interfaces/common';
|
||||
import { Routes } from '@/routes';
|
||||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
import { ExternalLink } from 'lucide-react';
|
||||
import { memo, useCallback, useMemo } from 'react';
|
||||
import { useForm, useWatch } from 'react-hook-form';
|
||||
import { z } from 'zod';
|
||||
@@ -146,6 +148,11 @@ function EmbedDialog({
|
||||
}
|
||||
}, [generateIframeSrc, values]);
|
||||
|
||||
const handleOpenInNewTab = useCallback(() => {
|
||||
const iframeSrc = generateIframeSrc();
|
||||
window.open(iframeSrc, '_blank');
|
||||
}, [generateIframeSrc]);
|
||||
|
||||
return (
|
||||
<Dialog open onOpenChange={hideModal}>
|
||||
<DialogContent>
|
||||
@@ -280,6 +287,14 @@ function EmbedDialog({
|
||||
<HighLightMarkdown>{text}</HighLightMarkdown>
|
||||
</div>
|
||||
</div>
|
||||
<Button
|
||||
onClick={handleOpenInNewTab}
|
||||
className="w-full"
|
||||
variant="secondary"
|
||||
>
|
||||
<ExternalLink className="mr-2 h-4 w-4" />
|
||||
{t('openInNewTab', { keyPrefix: 'common' })}
|
||||
</Button>
|
||||
<div className=" font-medium mt-4 mb-1">
|
||||
{t(isAgent ? 'flow' : 'chat', { keyPrefix: 'header' })}
|
||||
<span className="ml-1 inline-block">ID</span>
|
||||
|
||||
Reference in New Issue
Block a user