import React, { useEffect } from 'react'; import { QueryKeys } from 'librechat-data-provider'; import { Controller, useForm } from 'react-hook-form'; import { useQueryClient } from '@tanstack/react-query'; import type { TConversation, TConversationTag, TConversationTagRequest, } from 'librechat-data-provider'; import { cn, removeFocusOutlines, defaultTextProps, logger } from '~/utils'; import { Checkbox, Label, TextareaAutosize, Input } from '~/components'; import { useBookmarkContext } from '~/Providers/BookmarkContext'; import { useConversationTagMutation } from '~/data-provider'; import { useToastContext } from '~/Providers'; import { useLocalize } from '~/hooks'; type TBookmarkFormProps = { tags?: string[]; bookmark?: TConversationTag; conversation?: TConversation; formRef: React.RefObject; setOpen: React.Dispatch>; mutation: ReturnType; }; const BookmarkForm = ({ tags, bookmark, mutation, conversation, setOpen, formRef, }: TBookmarkFormProps) => { const localize = useLocalize(); const queryClient = useQueryClient(); const { showToast } = useToastContext(); const { bookmarks } = useBookmarkContext(); const { register, handleSubmit, setValue, getValues, control, formState: { errors }, } = useForm({ defaultValues: { tag: bookmark?.tag ?? '', description: bookmark?.description ?? '', conversationId: conversation?.conversationId ?? '', addToConversation: conversation ? true : false, }, }); useEffect(() => { if (bookmark && bookmark.tag) { setValue('tag', bookmark.tag); setValue('description', bookmark.description ?? ''); } }, [bookmark, setValue]); const onSubmit = (data: TConversationTagRequest) => { logger.log('tag_mutation', 'BookmarkForm - onSubmit: data', data); if (mutation.isLoading) { return; } if (data.tag === bookmark?.tag && data.description === bookmark?.description) { return; } if (data.tag != null && (tags ?? []).includes(data.tag)) { showToast({ message: localize('com_ui_bookmarks_create_exists'), status: 'warning', }); return; } const allTags = queryClient.getQueryData([QueryKeys.conversationTags]) ?? []; if (allTags.some((tag) => tag.tag === data.tag)) { showToast({ message: localize('com_ui_bookmarks_create_exists'), status: 'warning', }); return; } mutation.mutate(data); setOpen(false); }; return (
{ return ( value === bookmark?.tag || bookmarks.every((bookmark) => bookmark.tag !== value) || 'tag must be unique' ); }, })} aria-invalid={!!errors.tag} placeholder="Bookmark" /> {errors.tag && {errors.tag.message}}
{conversation && (
( )} />
)}
); }; export default BookmarkForm;