You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { PageHeader } from '@/components/page-header';
  2. import { Button } from '@/components/ui/button';
  3. import {
  4. DropdownMenu,
  5. DropdownMenuContent,
  6. DropdownMenuItem,
  7. DropdownMenuSeparator,
  8. DropdownMenuTrigger,
  9. } from '@/components/ui/dropdown-menu';
  10. import { SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar';
  11. import { useSetModalState } from '@/hooks/common-hooks';
  12. import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
  13. import { CodeXml, EllipsisVertical, Forward, Import, Key } from 'lucide-react';
  14. import { ComponentPropsWithoutRef } from 'react';
  15. import { useTranslation } from 'react-i18next';
  16. import { AgentSidebar } from './agent-sidebar';
  17. import FlowCanvas from './canvas';
  18. import { useHandleExportOrImportJsonFile } from './hooks/use-export-json';
  19. import { useFetchDataOnMount } from './hooks/use-fetch-data';
  20. import { useOpenDocument } from './hooks/use-open-document';
  21. import { UploadAgentDialog } from './upload-agent-dialog';
  22. function AgentDropdownMenuItem({
  23. children,
  24. ...props
  25. }: ComponentPropsWithoutRef<typeof DropdownMenuItem>) {
  26. return (
  27. <DropdownMenuItem className="flex justify-between items-center" {...props}>
  28. {children}
  29. </DropdownMenuItem>
  30. );
  31. }
  32. export default function Agent() {
  33. const { navigateToAgentList } = useNavigatePage();
  34. const {
  35. visible: chatDrawerVisible,
  36. hideModal: hideChatDrawer,
  37. showModal: showChatDrawer,
  38. } = useSetModalState();
  39. const { t } = useTranslation();
  40. const openDocument = useOpenDocument();
  41. const {
  42. handleExportJson,
  43. handleImportJson,
  44. fileUploadVisible,
  45. onFileUploadOk,
  46. hideFileUploadModal,
  47. } = useHandleExportOrImportJsonFile();
  48. useFetchDataOnMount();
  49. return (
  50. <section>
  51. <PageHeader back={navigateToAgentList} title="Agent 01">
  52. <div className="flex items-center gap-2">
  53. <DropdownMenu>
  54. <DropdownMenuTrigger>
  55. <Button variant={'icon'} size={'icon'}>
  56. <EllipsisVertical />
  57. </Button>
  58. </DropdownMenuTrigger>
  59. <DropdownMenuContent>
  60. <AgentDropdownMenuItem onClick={openDocument}>
  61. API
  62. <Key />
  63. </AgentDropdownMenuItem>
  64. <DropdownMenuSeparator />
  65. <AgentDropdownMenuItem onClick={handleImportJson}>
  66. Import
  67. <Import />
  68. </AgentDropdownMenuItem>
  69. <DropdownMenuSeparator />
  70. <AgentDropdownMenuItem onClick={handleExportJson}>
  71. Export
  72. <Forward />
  73. </AgentDropdownMenuItem>
  74. <DropdownMenuSeparator />
  75. <AgentDropdownMenuItem>
  76. {t('common.embedIntoSite')}
  77. <CodeXml />
  78. </AgentDropdownMenuItem>
  79. </DropdownMenuContent>
  80. </DropdownMenu>
  81. <Button variant={'outline'} size={'sm'}>
  82. Save
  83. </Button>
  84. <Button variant={'outline'} size={'sm'}>
  85. Run app
  86. </Button>
  87. <Button variant={'tertiary'} size={'sm'}>
  88. Publish
  89. </Button>
  90. </div>
  91. </PageHeader>
  92. <div>
  93. <SidebarProvider>
  94. <AgentSidebar />
  95. <div className="w-full">
  96. <SidebarTrigger />
  97. <div className="w-full h-full">
  98. <FlowCanvas
  99. drawerVisible={chatDrawerVisible}
  100. hideDrawer={hideChatDrawer}
  101. ></FlowCanvas>
  102. </div>
  103. </div>
  104. </SidebarProvider>
  105. </div>
  106. {fileUploadVisible && (
  107. <UploadAgentDialog
  108. hideModal={hideFileUploadModal}
  109. onOk={onFileUploadOk}
  110. ></UploadAgentDialog>
  111. )}
  112. </section>
  113. );
  114. }