| import React, { useCallback } from 'react'; | |
| import { Trash2 } from 'lucide-react'; | |
| import { useDeletePrompt } from '~/data-provider'; | |
| import { Button, OGDialog, OGDialogTrigger, Label, OGDialogTemplate } from '@librechat/client'; | |
| import { useLocalize } from '~/hooks'; | |
| const DeleteConfirmDialog = ({ | |
| name, | |
| disabled, | |
| selectHandler, | |
| }: { | |
| name: string; | |
| disabled?: boolean; | |
| selectHandler: () => void; | |
| }) => { | |
| const localize = useLocalize(); | |
| return ( | |
| <OGDialog> | |
| <OGDialogTrigger asChild> | |
| <Button | |
| variant="destructive" | |
| size="sm" | |
| aria-label="Delete version" | |
| className="h-10 w-10 p-0.5" | |
| disabled={disabled} | |
| onClick={(e) => { | |
| e.stopPropagation(); | |
| }} | |
| > | |
| <Trash2 className="size-5 cursor-pointer text-white" /> | |
| </Button> | |
| </OGDialogTrigger> | |
| <OGDialogTemplate | |
| showCloseButton={false} | |
| title={localize('com_ui_delete_prompt')} | |
| className="max-w-[450px]" | |
| main={ | |
| <> | |
| <div className="flex w-full flex-col items-center gap-2"> | |
| <div className="grid w-full items-center gap-2"> | |
| <Label | |
| htmlFor="dialog-delete-confirm-prompt" | |
| className="text-left text-sm font-medium" | |
| > | |
| {localize('com_ui_delete_confirm_prompt_version_var', { 0: name })} | |
| </Label> | |
| </div> | |
| </div> | |
| </> | |
| } | |
| selection={{ | |
| selectHandler, | |
| selectClasses: | |
| 'bg-surface-destructive hover:bg-surface-destructive-hover transition-colors duration-200 text-white', | |
| selectText: localize('com_ui_delete'), | |
| }} | |
| /> | |
| </OGDialog> | |
| ); | |
| }; | |
| interface DeletePromptProps { | |
| promptId?: string; | |
| groupId: string; | |
| promptName: string; | |
| disabled: boolean; | |
| } | |
| const DeletePrompt = React.memo( | |
| ({ promptId, groupId, promptName, disabled }: DeletePromptProps) => { | |
| const deletePromptMutation = useDeletePrompt(); | |
| const handleDelete = useCallback(() => { | |
| if (!promptId) { | |
| console.warn('No prompt ID provided for deletion'); | |
| return; | |
| } | |
| deletePromptMutation.mutate({ | |
| _id: promptId, | |
| groupId, | |
| }); | |
| }, [promptId, groupId, deletePromptMutation]); | |
| if (!promptId) { | |
| return null; | |
| } | |
| return ( | |
| <DeleteConfirmDialog | |
| name={promptName} | |
| disabled={disabled || !promptId} | |
| selectHandler={handleDelete} | |
| /> | |
| ); | |
| }, | |
| ); | |
| DeletePrompt.displayName = 'DeletePrompt'; | |
| export default DeletePrompt; | |