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 { Checkbox, Label, TextareaAutosize, Input, useToastContext } from '@librechat/client'; import type { TConversationTag, TConversationTagRequest } from 'librechat-data-provider'; import { useBookmarkContext } from '~/Providers/BookmarkContext'; import { useConversationTagMutation } from '~/data-provider'; import { useLocalize } from '~/hooks'; import { cn, logger } from '~/utils'; type TBookmarkFormProps = { tags?: string[]; bookmark?: TConversationTag; conversationId?: string; formRef: React.RefObject; setOpen: React.Dispatch>; mutation: ReturnType; }; const BookmarkForm = ({ tags, bookmark, mutation, conversationId, setOpen, formRef, }: TBookmarkFormProps) => { const localize = useLocalize(); const queryClient = useQueryClient(); const { showToast } = useToastContext(); const { bookmarks } = useBookmarkContext(); const { register, handleSubmit, setValue, getValues, control, formState: { errors }, } = useForm({ mode: 'onBlur', reValidateMode: 'onChange', defaultValues: { tag: bookmark?.tag ?? '', description: bookmark?.description ?? '', conversationId: conversationId ?? '', addToConversation: conversationId != null && conversationId ? 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 && tag.tag !== bookmark?.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) || localize('com_ui_bookmarks_tag_exists') ); }, })} aria-invalid={!!errors.tag} placeholder={ bookmark ? localize('com_ui_bookmarks_edit') : localize('com_ui_bookmarks_new') } /> {errors.tag && {errors.tag.message}}
{conversationId != null && conversationId && (
( )} />
)}
); }; export default BookmarkForm;