| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- import { PromptEditor } from '@/components/prompt-editor';
- import { BlockButton, Button } from '@/components/ui/button';
- import {
- FormControl,
- FormField,
- FormItem,
- FormLabel,
- FormMessage,
- } from '@/components/ui/form';
- import { RAGFlowSelect } from '@/components/ui/select';
- import { X } from 'lucide-react';
- import { memo } from 'react';
- import { useFieldArray, useFormContext } from 'react-hook-form';
- import { useTranslation } from 'react-i18next';
-
- export enum PromptRole {
- User = 'user',
- Assistant = 'assistant',
- }
-
- const options = [
- { label: 'User', value: PromptRole.User },
- { label: 'Assistant', value: PromptRole.Assistant },
- ];
-
- const DynamicPrompt = () => {
- const { t } = useTranslation();
- const form = useFormContext();
- const name = 'prompts';
-
- const { fields, append, remove } = useFieldArray({
- name: name,
- control: form.control,
- });
-
- return (
- <FormItem>
- <FormLabel tooltip={t('flow.msgTip')}>{t('flow.msg')}</FormLabel>
- <div className="space-y-4">
- {fields.map((field, index) => (
- <div key={field.id} className="flex">
- <div className="space-y-2 flex-1">
- <FormField
- control={form.control}
- name={`${name}.${index}.role`}
- render={({ field }) => (
- <FormItem className="w-1/3">
- <FormLabel />
- <FormControl>
- <RAGFlowSelect
- {...field}
- options={options}
- ></RAGFlowSelect>
- </FormControl>
- <FormMessage />
- </FormItem>
- )}
- />
-
- <FormField
- control={form.control}
- name={`${name}.${index}.content`}
- render={({ field }) => (
- <FormItem className="flex-1">
- <FormControl>
- <section>
- <PromptEditor
- {...field}
- showToolbar={false}
- ></PromptEditor>
- </section>
- </FormControl>
- </FormItem>
- )}
- />
- </div>
- <Button
- type="button"
- variant={'ghost'}
- onClick={() => remove(index)}
- >
- <X />
- </Button>
- </div>
- ))}
- </div>
- <FormMessage />
- <BlockButton
- onClick={() => append({ content: '', role: PromptRole.User })}
- >
- Add
- </BlockButton>
- </FormItem>
- );
- };
-
- export default memo(DynamicPrompt);
|