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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import Editor, { loader } from '@monaco-editor/react';
  2. import { INextOperatorForm } from '../../interface';
  3. import {
  4. Form,
  5. FormControl,
  6. FormField,
  7. FormItem,
  8. FormLabel,
  9. FormMessage,
  10. } from '@/components/ui/form';
  11. import { RAGFlowSelect } from '@/components/ui/select';
  12. import { CodeTemplateStrMap, ProgrammingLanguage } from '@/constants/agent';
  13. import { ICodeForm } from '@/interfaces/database/flow';
  14. import { useEffect } from 'react';
  15. import { DynamicInputVariable } from './next-variable';
  16. loader.config({ paths: { vs: '/vs' } });
  17. const options = [
  18. ProgrammingLanguage.Python,
  19. ProgrammingLanguage.Javascript,
  20. ].map((x) => ({ value: x, label: x }));
  21. const CodeForm = ({ form, node }: INextOperatorForm) => {
  22. const formData = node?.data.form as ICodeForm;
  23. useEffect(() => {
  24. // TODO: Direct operation zustand is more elegant
  25. form?.setValue(
  26. 'script',
  27. CodeTemplateStrMap[formData.lang as ProgrammingLanguage],
  28. );
  29. }, [form, formData.lang]);
  30. return (
  31. <Form {...form}>
  32. <DynamicInputVariable node={node}></DynamicInputVariable>
  33. <FormField
  34. control={form.control}
  35. name="script"
  36. render={({ field }) => (
  37. <FormItem>
  38. <FormLabel>
  39. <FormField
  40. control={form.control}
  41. name="lang"
  42. render={({ field }) => (
  43. <FormItem>
  44. <FormControl>
  45. <RAGFlowSelect {...field} options={options} />
  46. </FormControl>
  47. <FormMessage />
  48. </FormItem>
  49. )}
  50. />
  51. </FormLabel>
  52. <FormControl>
  53. <Editor
  54. height={600}
  55. theme="vs-dark"
  56. language={formData.lang}
  57. options={{
  58. minimap: { enabled: false },
  59. automaticLayout: true,
  60. }}
  61. {...field}
  62. />
  63. </FormControl>
  64. <FormMessage />
  65. </FormItem>
  66. )}
  67. />
  68. </Form>
  69. );
  70. };
  71. export default CodeForm;