您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

next-step-dropdown.tsx 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import {
  2. Accordion,
  3. AccordionContent,
  4. AccordionItem,
  5. AccordionTrigger,
  6. } from '@/components/ui/accordion';
  7. import {
  8. DropdownMenu,
  9. DropdownMenuContent,
  10. DropdownMenuItem,
  11. DropdownMenuLabel,
  12. DropdownMenuTrigger,
  13. } from '@/components/ui/dropdown-menu';
  14. import { IModalProps } from '@/interfaces/common';
  15. import { Operator } from '@/pages/agent/constant';
  16. import { AgentInstanceContext, HandleContext } from '@/pages/agent/context';
  17. import OperatorIcon from '@/pages/agent/operator-icon';
  18. import { PropsWithChildren, createContext, useContext } from 'react';
  19. type OperatorItemProps = { operators: Operator[] };
  20. const HideModalContext = createContext<IModalProps<any>['showModal']>(() => {});
  21. function OperatorItemList({ operators }: OperatorItemProps) {
  22. const { addCanvasNode } = useContext(AgentInstanceContext);
  23. const { nodeId, id, type, position } = useContext(HandleContext);
  24. const hideModal = useContext(HideModalContext);
  25. return (
  26. <ul className="space-y-2">
  27. {operators.map((x) => {
  28. return (
  29. <DropdownMenuItem
  30. key={x}
  31. className="hover:bg-background-card py-1 px-3 cursor-pointer rounded-sm flex gap-2 items-center justify-start"
  32. onClick={addCanvasNode(x, {
  33. nodeId,
  34. id,
  35. position,
  36. })}
  37. onSelect={() => hideModal?.()}
  38. >
  39. <OperatorIcon name={x}></OperatorIcon>
  40. {x}
  41. </DropdownMenuItem>
  42. );
  43. })}
  44. </ul>
  45. );
  46. }
  47. function AccordionOperators() {
  48. return (
  49. <Accordion
  50. type="multiple"
  51. className="px-2 text-text-title"
  52. defaultValue={['item-1', 'item-2', 'item-3', 'item-4', 'item-5']}
  53. >
  54. <AccordionItem value="item-1">
  55. <AccordionTrigger className="text-xl">AI</AccordionTrigger>
  56. <AccordionContent className="flex flex-col gap-4 text-balance">
  57. <OperatorItemList
  58. operators={[Operator.Agent, Operator.Retrieval]}
  59. ></OperatorItemList>
  60. </AccordionContent>
  61. </AccordionItem>
  62. <AccordionItem value="item-2">
  63. <AccordionTrigger className="text-xl">Dialogue </AccordionTrigger>
  64. <AccordionContent className="flex flex-col gap-4 text-balance">
  65. <OperatorItemList
  66. operators={[Operator.Message, Operator.UserFillUp]}
  67. ></OperatorItemList>
  68. </AccordionContent>
  69. </AccordionItem>
  70. <AccordionItem value="item-3">
  71. <AccordionTrigger className="text-xl">Flow</AccordionTrigger>
  72. <AccordionContent className="flex flex-col gap-4 text-balance">
  73. <OperatorItemList
  74. operators={[
  75. Operator.Switch,
  76. Operator.Iteration,
  77. Operator.Categorize,
  78. ]}
  79. ></OperatorItemList>
  80. </AccordionContent>
  81. </AccordionItem>
  82. <AccordionItem value="item-4">
  83. <AccordionTrigger className="text-xl">
  84. Data Manipulation
  85. </AccordionTrigger>
  86. <AccordionContent className="flex flex-col gap-4 text-balance">
  87. <OperatorItemList operators={[Operator.Code]}></OperatorItemList>
  88. </AccordionContent>
  89. </AccordionItem>
  90. <AccordionItem value="item-5">
  91. <AccordionTrigger className="text-xl">Tools</AccordionTrigger>
  92. <AccordionContent className="flex flex-col gap-4 text-balance">
  93. <OperatorItemList
  94. operators={[Operator.TavilySearch]}
  95. ></OperatorItemList>
  96. </AccordionContent>
  97. </AccordionItem>
  98. </Accordion>
  99. );
  100. }
  101. export function NextStepDropdown({
  102. children,
  103. hideModal,
  104. }: PropsWithChildren & IModalProps<any>) {
  105. return (
  106. <DropdownMenu open onOpenChange={hideModal}>
  107. <DropdownMenuTrigger asChild>{children}</DropdownMenuTrigger>
  108. <DropdownMenuContent
  109. onClick={(e) => e.stopPropagation()}
  110. className="w-[300px] font-semibold"
  111. >
  112. <DropdownMenuLabel>Next Step</DropdownMenuLabel>
  113. <HideModalContext.Provider value={hideModal}>
  114. <AccordionOperators></AccordionOperators>
  115. </HideModalContext.Provider>
  116. </DropdownMenuContent>
  117. </DropdownMenu>
  118. );
  119. }