import { useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useForm, Controller, FormProvider } from 'react-hook-form'; import { LocalStorageKeys, PermissionTypes, Permissions } from 'librechat-data-provider'; import CategorySelector from '~/components/Prompts/Groups/CategorySelector'; import PromptVariables from '~/components/Prompts/PromptVariables'; import { Button, TextareaAutosize, Input } from '~/components/ui'; import Description from '~/components/Prompts/Description'; import { useLocalize, useHasAccess } from '~/hooks'; import Command from '~/components/Prompts/Command'; import { useCreatePrompt } from '~/data-provider'; import { cn } from '~/utils'; type CreateFormValues = { name: string; prompt: string; type: 'text' | 'chat'; category: string; oneliner?: string; command?: string; }; const defaultPrompt: CreateFormValues = { name: '', prompt: '', type: 'text', category: '', oneliner: undefined, command: undefined, }; const CreatePromptForm = ({ defaultValues = defaultPrompt, }: { defaultValues?: CreateFormValues; }) => { const localize = useLocalize(); const navigate = useNavigate(); const hasAccess = useHasAccess({ permissionType: PermissionTypes.PROMPTS, permission: Permissions.CREATE, }); useEffect(() => { let timeoutId: ReturnType; if (!hasAccess) { timeoutId = setTimeout(() => { navigate('/c/new'); }, 1000); } return () => { clearTimeout(timeoutId); }; }, [hasAccess, navigate]); const methods = useForm({ defaultValues: { ...defaultValues, category: localStorage.getItem(LocalStorageKeys.LAST_PROMPT_CATEGORY) ?? '', }, }); const { watch, control, handleSubmit, formState: { isDirty, isSubmitting, errors, isValid }, } = methods; const createPromptMutation = useCreatePrompt({ onSuccess: (response) => { navigate(`/d/prompts/${response.prompt.groupId}`, { replace: true }); }, }); const promptText = watch('prompt'); const onSubmit = (data: CreateFormValues) => { const { name, category, oneliner, command, ...rest } = data; const groupData = { name, category } as Pick< CreateFormValues, 'name' | 'category' | 'oneliner' | 'command' >; if ((oneliner?.length || 0) > 0) { groupData.oneliner = oneliner; } if ((command?.length || 0) > 0) { groupData.command = command; } createPromptMutation.mutate({ prompt: rest, group: groupData, }); }; if (!hasAccess) { return null; } return (
(
{errors.name ? errors.name.message : ' '}
)} />

{localize('com_ui_prompt_text')}*

(
{errors.prompt ? errors.prompt.message : ' '}
)} />
methods.setValue('oneliner', value)} tabIndex={3} /> methods.setValue('command', value)} tabIndex={4} />
); }; export default CreatePromptForm;