| import { PageHeader } from '@/components/page-header'; | |
| import { Button } from '@/components/ui/button'; | |
| import { | |
| DropdownMenu, | |
| DropdownMenuContent, | |
| DropdownMenuItem, | |
| DropdownMenuSeparator, | |
| DropdownMenuTrigger, | |
| } from '@/components/ui/dropdown-menu'; | |
| import { SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar'; | |
| import { useSetModalState } from '@/hooks/common-hooks'; | |
| import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; | |
| import { ReactFlowProvider } from '@xyflow/react'; | |
| import { CodeXml, EllipsisVertical, Forward, Import, Key } from 'lucide-react'; | |
| import { ComponentPropsWithoutRef } from 'react'; | |
| import { useTranslation } from 'react-i18next'; | |
| import { AgentSidebar } from './agent-sidebar'; | |
| import FlowCanvas from './canvas'; | |
| import { useHandleExportOrImportJsonFile } from './hooks/use-export-json'; | |
| import { useFetchDataOnMount } from './hooks/use-fetch-data'; | |
| import { useOpenDocument } from './hooks/use-open-document'; | |
| import { UploadAgentDialog } from './upload-agent-dialog'; | |
| function AgentDropdownMenuItem({ | |
| children, | |
| ...props | |
| }: ComponentPropsWithoutRef<typeof DropdownMenuItem>) { | |
| return ( | |
| <DropdownMenuItem className="flex justify-between items-center" {...props}> | |
| {children} | |
| </DropdownMenuItem> | |
| ); | |
| } | |
| export default function Agent() { | |
| const { navigateToAgentList } = useNavigatePage(); | |
| const { | |
| visible: chatDrawerVisible, | |
| hideModal: hideChatDrawer, | |
| showModal: showChatDrawer, | |
| } = useSetModalState(); | |
| const { t } = useTranslation(); | |
| const openDocument = useOpenDocument(); | |
| const { | |
| handleExportJson, | |
| handleImportJson, | |
| fileUploadVisible, | |
| onFileUploadOk, | |
| hideFileUploadModal, | |
| } = useHandleExportOrImportJsonFile(); | |
| const { flowDetail } = useFetchDataOnMount(); | |
| return ( | |
| <section> | |
| <PageHeader back={navigateToAgentList} title={flowDetail.title}> | |
| <div className="flex items-center gap-2"> | |
| <DropdownMenu> | |
| <DropdownMenuTrigger asChild> | |
| <Button variant={'icon'} size={'icon'}> | |
| <EllipsisVertical /> | |
| </Button> | |
| </DropdownMenuTrigger> | |
| <DropdownMenuContent> | |
| <AgentDropdownMenuItem onClick={openDocument}> | |
| API | |
| <Key /> | |
| </AgentDropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <AgentDropdownMenuItem onClick={handleImportJson}> | |
| Import | |
| <Import /> | |
| </AgentDropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <AgentDropdownMenuItem onClick={handleExportJson}> | |
| Export | |
| <Forward /> | |
| </AgentDropdownMenuItem> | |
| <DropdownMenuSeparator /> | |
| <AgentDropdownMenuItem> | |
| {t('common.embedIntoSite')} | |
| <CodeXml /> | |
| </AgentDropdownMenuItem> | |
| </DropdownMenuContent> | |
| </DropdownMenu> | |
| <Button variant={'outline'} size={'sm'}> | |
| Save | |
| </Button> | |
| <Button variant={'outline'} size={'sm'}> | |
| Run app | |
| </Button> | |
| <Button variant={'tertiary'} size={'sm'}> | |
| Publish | |
| </Button> | |
| </div> | |
| </PageHeader> | |
| <ReactFlowProvider> | |
| <div> | |
| <SidebarProvider> | |
| <AgentSidebar /> | |
| <div className="w-full"> | |
| <SidebarTrigger /> | |
| <div className="w-full h-full"> | |
| <FlowCanvas | |
| drawerVisible={chatDrawerVisible} | |
| hideDrawer={hideChatDrawer} | |
| ></FlowCanvas> | |
| </div> | |
| </div> | |
| </SidebarProvider> | |
| </div> | |
| </ReactFlowProvider> | |
| {fileUploadVisible && ( | |
| <UploadAgentDialog | |
| hideModal={hideFileUploadModal} | |
| onOk={onFileUploadOk} | |
| ></UploadAgentDialog> | |
| )} | |
| </section> | |
| ); | |
| } | |