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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import { Input } from '@/components/ui/input';
  2. import {
  3. Sheet,
  4. SheetContent,
  5. SheetHeader,
  6. SheetTitle,
  7. } from '@/components/ui/sheet';
  8. import { useTranslate } from '@/hooks/common-hooks';
  9. import { IModalProps } from '@/interfaces/common';
  10. import { RAGFlowNodeType } from '@/interfaces/database/flow';
  11. import { cn } from '@/lib/utils';
  12. import { lowerFirst } from 'lodash';
  13. import { Play, X } from 'lucide-react';
  14. import { useMemo } from 'react';
  15. import { BeginId, Operator } from '../constant';
  16. import { AgentFormContext } from '../context';
  17. import { RunTooltip } from '../flow-tooltip';
  18. import { useHandleNodeNameChange } from '../hooks/use-change-node-name';
  19. import OperatorIcon from '../operator-icon';
  20. import useGraphStore from '../store';
  21. import { needsSingleStepDebugging } from '../utils';
  22. import SingleDebugDrawer from './single-debug-drawer';
  23. import { useFormConfigMap } from './use-form-config-map';
  24. interface IProps {
  25. node?: RAGFlowNodeType;
  26. singleDebugDrawerVisible: IModalProps<any>['visible'];
  27. hideSingleDebugDrawer: IModalProps<any>['hideModal'];
  28. showSingleDebugDrawer: IModalProps<any>['showModal'];
  29. chatVisible: boolean;
  30. }
  31. const EmptyContent = () => <div></div>;
  32. const FormSheet = ({
  33. visible,
  34. hideModal,
  35. node,
  36. singleDebugDrawerVisible,
  37. chatVisible,
  38. hideSingleDebugDrawer,
  39. showSingleDebugDrawer,
  40. }: IModalProps<any> & IProps) => {
  41. const operatorName: Operator = node?.data.label as Operator;
  42. const clickedToolId = useGraphStore((state) => state.clickedToolId);
  43. const FormConfigMap = useFormConfigMap();
  44. const currentFormMap = FormConfigMap[operatorName];
  45. const OperatorForm = currentFormMap?.component ?? EmptyContent;
  46. const { name, handleNameBlur, handleNameChange } = useHandleNodeNameChange({
  47. id: node?.id,
  48. data: node?.data,
  49. });
  50. const isMcp = useMemo(() => {
  51. return (
  52. operatorName === Operator.Tool &&
  53. Object.values(Operator).every((x) => x !== clickedToolId)
  54. );
  55. }, [clickedToolId, operatorName]);
  56. const { t } = useTranslate('flow');
  57. return (
  58. <Sheet open={visible} modal={false}>
  59. <SheetContent
  60. className={cn('top-20 p-0 flex flex-col pb-20', {
  61. 'right-[620px]': chatVisible,
  62. })}
  63. closeIcon={false}
  64. >
  65. <SheetHeader>
  66. <SheetTitle className="hidden"></SheetTitle>
  67. <section className="flex-col border-b py-2 px-5">
  68. <div className="flex items-center gap-2 pb-3">
  69. <OperatorIcon name={operatorName}></OperatorIcon>
  70. {isMcp ? (
  71. <div className="flex-1">MCP Config</div>
  72. ) : (
  73. <div className="flex items-center gap-1 flex-1">
  74. <label htmlFor="">{t('title')}</label>
  75. {node?.id === BeginId ? (
  76. <span>{t(BeginId)}</span>
  77. ) : (
  78. <Input
  79. value={name}
  80. onBlur={handleNameBlur}
  81. onChange={handleNameChange}
  82. ></Input>
  83. )}
  84. </div>
  85. )}
  86. {needsSingleStepDebugging(operatorName) && (
  87. <RunTooltip>
  88. <Play
  89. className="size-5 cursor-pointer"
  90. onClick={showSingleDebugDrawer}
  91. />
  92. </RunTooltip>
  93. )}
  94. <X onClick={hideModal} />
  95. </div>
  96. <span>{t(`${lowerFirst(operatorName)}Description`)}</span>
  97. </section>
  98. </SheetHeader>
  99. <section className="pt-4 overflow-auto flex-1">
  100. {visible && (
  101. <AgentFormContext.Provider value={node}>
  102. <OperatorForm node={node} key={node?.id}></OperatorForm>
  103. </AgentFormContext.Provider>
  104. )}
  105. </section>
  106. </SheetContent>
  107. {singleDebugDrawerVisible && (
  108. <SingleDebugDrawer
  109. visible={singleDebugDrawerVisible}
  110. hideModal={hideSingleDebugDrawer}
  111. componentId={node?.id}
  112. ></SingleDebugDrawer>
  113. )}
  114. </Sheet>
  115. );
  116. };
  117. export default FormSheet;