| import React from 'react'; |
| import { Share2Icon } from 'lucide-react'; |
| import { |
| SystemRoles, |
| Permissions, |
| ResourceType, |
| PermissionBits, |
| PermissionTypes, |
| } from 'librechat-data-provider'; |
| import { Button } from '@librechat/client'; |
| import type { TPromptGroup } from 'librechat-data-provider'; |
| import { useAuthContext, useHasAccess, useResourcePermissions } from '~/hooks'; |
| import { GenericGrantAccessDialog } from '~/components/Sharing'; |
|
|
| const SharePrompt = React.memo( |
| ({ group, disabled }: { group?: TPromptGroup; disabled: boolean }) => { |
| const { user } = useAuthContext(); |
|
|
| |
| const hasAccessToSharePrompts = useHasAccess({ |
| permissionType: PermissionTypes.PROMPTS, |
| permission: Permissions.SHARED_GLOBAL, |
| }); |
|
|
| |
| |
| const groupId = group?._id || ''; |
| const { hasPermission, isLoading: permissionsLoading } = useResourcePermissions( |
| ResourceType.PROMPTGROUP, |
| groupId, |
| ); |
|
|
| |
| if (!group || !groupId) { |
| return null; |
| } |
|
|
| const canShareThisPrompt = hasPermission(PermissionBits.SHARE); |
|
|
| const shouldShowShareButton = |
| (group.author === user?.id || user?.role === SystemRoles.ADMIN || canShareThisPrompt) && |
| hasAccessToSharePrompts && |
| !permissionsLoading; |
|
|
| if (!shouldShowShareButton) { |
| return null; |
| } |
|
|
| return ( |
| <GenericGrantAccessDialog |
| resourceDbId={groupId} |
| resourceName={group.name} |
| resourceType={ResourceType.PROMPTGROUP} |
| disabled={disabled} |
| > |
| <Button |
| variant="default" |
| size="sm" |
| aria-label="Share prompt" |
| className="h-10 w-10 border border-transparent bg-blue-500/90 p-0.5 transition-all hover:bg-blue-600 dark:bg-blue-600 dark:hover:bg-blue-800" |
| disabled={disabled} |
| > |
| <Share2Icon className="size-5 cursor-pointer text-white" /> |
| </Button> |
| </GenericGrantAccessDialog> |
| ); |
| }, |
| ); |
|
|
| SharePrompt.displayName = 'SharePrompt'; |
|
|
| export default SharePrompt; |
|
|