import React, { useRef, Dispatch, SetStateAction } from 'react'; import { TConversationTag } from 'librechat-data-provider'; import { OGDialogTemplate, OGDialog, Button, Spinner, useToastContext } from '@librechat/client'; import { useConversationTagMutation } from '~/data-provider'; import { NotificationSeverity } from '~/common'; import BookmarkForm from './BookmarkForm'; import { useLocalize } from '~/hooks'; import { logger } from '~/utils'; type BookmarkEditDialogProps = { open: boolean; setOpen: Dispatch>; tags?: string[]; setTags?: (tags: string[]) => void; context: string; bookmark?: TConversationTag; conversationId?: string; children?: React.ReactNode; triggerRef?: React.RefObject; }; const BookmarkEditDialog = ({ open, setOpen, tags, setTags, context, bookmark, children, triggerRef, conversationId, }: BookmarkEditDialogProps) => { const localize = useLocalize(); const formRef = useRef(null); const { showToast } = useToastContext(); const mutation = useConversationTagMutation({ context, tag: bookmark?.tag, options: { onSuccess: (_data, vars) => { showToast({ message: bookmark ? localize('com_ui_bookmarks_update_success') : localize('com_ui_bookmarks_create_success'), }); setOpen(false); logger.log('tag_mutation', 'tags before setting', tags); if (setTags && vars.addToConversation === true) { const newTags = [...(tags || []), vars.tag].filter( (tag) => tag !== undefined, ) as string[]; setTags(newTags); logger.log('tag_mutation', 'tags after', newTags); if (vars.tag == null || vars.tag === '') { return; } setTimeout(() => { const tagElement = document.getElementById(vars.tag ?? ''); console.log('tagElement', tagElement); if (!tagElement) { return; } tagElement.focus(); }, 5); } }, onError: () => { showToast({ message: bookmark ? localize('com_ui_bookmarks_update_error') : localize('com_ui_bookmarks_create_error'), severity: NotificationSeverity.ERROR, }); }, }, }); const handleSubmitForm = () => { if (formRef.current) { formRef.current.dispatchEvent(new Event('submit', { cancelable: true, bubbles: true })); } }; return ( {children} } buttons={ } /> ); }; export default BookmarkEditDialog;