import { useHandlerConfigManagement } from '@/windows/Preferences/sections/ExternalAPI/useHandlerConfigManagement'; import CloseIcon from '@mui/icons-material/Close'; import EditIcon from '@mui/icons-material/Edit'; import FullscreenIcon from '@mui/icons-material/Fullscreen'; import FullscreenExitIcon from '@mui/icons-material/FullscreenExit'; import ViewSidebarIcon from '@mui/icons-material/ViewSidebar'; import Box from '@mui/material/Box'; import Dialog from '@mui/material/Dialog'; import MuiDialogContent from '@mui/material/DialogContent'; import DialogTitle from '@mui/material/DialogTitle'; import IconButton from '@mui/material/IconButton'; import Tooltip from '@mui/material/Tooltip'; import React, { useCallback, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useShallow } from 'zustand/react/shallow'; import { useAgentChatStore } from '../../../Agent/store/agentChatStore/index'; import { EditView } from './EditView'; import { PreviewProgressBar } from './PreviewProgressBar'; import { PreviewTabsView } from './PreviewTabsView'; interface PromptPreviewDialogProps { open: boolean; onClose: () => void; inputText?: string; } export const PromptPreviewDialog: React.FC = ({ open, onClose, inputText = '', }) => { const { t } = useTranslation('agent'); const agent = useAgentChatStore(state => state.agent); const [isFullScreen, setIsFullScreen] = useState(false); const [isEditMode, setIsEditMode] = useState(false); const { loading: handlerConfigLoading, config: handlerConfig, } = useHandlerConfigManagement({ agentDefId: agent?.agentDefId, agentId: agent?.id, }); const { getPreviewPromptResult, previewLoading, } = useAgentChatStore( useShallow((state) => ({ getPreviewPromptResult: state.getPreviewPromptResult, previewLoading: state.previewLoading, })), ); useEffect(() => { const fetchInitialPreview = async () => { if (!agent?.agentDefId || handlerConfigLoading || !handlerConfig || !open) { return; } try { await getPreviewPromptResult(inputText, handlerConfig); } catch (error) { console.error('PromptPreviewDialog: Error fetching initial preview:', error); } }; void fetchInitialPreview(); }, [agent?.agentDefId, handlerConfig, handlerConfigLoading, inputText, open]); // 移除 getPreviewPromptResult const handleToggleFullScreen = useCallback((): void => { setIsFullScreen(previous => !previous); }, []); const handleToggleEditMode = useCallback((): void => { setIsEditMode(previous => !previous); }, []); // Listen for form field scroll targets to automatically switch to edit mode const { formFieldsToScrollTo } = useAgentChatStore( useShallow((state) => ({ formFieldsToScrollTo: state.formFieldsToScrollTo, })), ); useEffect(() => { if (formFieldsToScrollTo.length > 0) { setIsEditMode(true); } }, [formFieldsToScrollTo]); return ( {t('Prompt.Preview')} {isEditMode ? : } {isFullScreen ? : } {isEditMode ? ( ) : ( )} ); };