| 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<SetStateAction<boolean>>; | |
| tags?: string[]; | |
| setTags?: (tags: string[]) => void; | |
| context: string; | |
| bookmark?: TConversationTag; | |
| conversationId?: string; | |
| children?: React.ReactNode; | |
| triggerRef?: React.RefObject<HTMLButtonElement>; | |
| }; | |
| const BookmarkEditDialog = ({ | |
| open, | |
| setOpen, | |
| tags, | |
| setTags, | |
| context, | |
| bookmark, | |
| children, | |
| triggerRef, | |
| conversationId, | |
| }: BookmarkEditDialogProps) => { | |
| const localize = useLocalize(); | |
| const formRef = useRef<HTMLFormElement>(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 ( | |
| <OGDialog open={open} onOpenChange={setOpen} triggerRef={triggerRef}> | |
| {children} | |
| <OGDialogTemplate | |
| title={bookmark ? localize('com_ui_bookmarks_edit') : localize('com_ui_bookmarks_new')} | |
| showCloseButton={false} | |
| className="w-11/12 md:max-w-2xl" | |
| main={ | |
| <BookmarkForm | |
| tags={tags} | |
| setOpen={setOpen} | |
| mutation={mutation} | |
| conversationId={conversationId} | |
| bookmark={bookmark} | |
| formRef={formRef} | |
| /> | |
| } | |
| buttons={ | |
| <Button | |
| variant="submit" | |
| type="submit" | |
| disabled={mutation.isLoading} | |
| onClick={handleSubmitForm} | |
| className="text-white" | |
| > | |
| {mutation.isLoading ? <Spinner /> : localize('com_ui_save')} | |
| </Button> | |
| } | |
| /> | |
| </OGDialog> | |
| ); | |
| }; | |
| export default BookmarkEditDialog; | |