| import { useState, useEffect } from 'react'; |
| import { |
| useGetResourcePermissionsQuery, |
| useUpdateResourcePermissionsMutation, |
| } from 'librechat-data-provider/react-query'; |
| import type { TPrincipal, ResourceType, AccessRoleIds } from 'librechat-data-provider'; |
| import { getResourceConfig } from '~/utils'; |
|
|
| |
| |
| |
| |
| |
| |
| |
| export const useResourcePermissionState = ( |
| resourceType: ResourceType, |
| resourceDbId: string | null | undefined, |
| isModalOpen: boolean = false, |
| ) => { |
| const config = getResourceConfig(resourceType); |
|
|
| |
| const isValidResourceId = !!resourceDbId && resourceDbId.trim() !== ''; |
|
|
| const { |
| data: permissionsData, |
| isLoading: isLoadingPermissions, |
| error: permissionsError, |
| } = useGetResourcePermissionsQuery(resourceType, resourceDbId || '', { |
| enabled: isValidResourceId, |
| }); |
|
|
| const updatePermissionsMutation = useUpdateResourcePermissionsMutation(); |
|
|
| |
| const currentShares: TPrincipal[] = |
| permissionsData?.principals?.map((principal) => ({ |
| type: principal.type, |
| id: principal.id, |
| name: principal.name, |
| email: principal.email, |
| source: principal.source, |
| avatar: principal.avatar, |
| description: principal.description, |
| accessRoleId: principal.accessRoleId, |
| idOnTheSource: principal.idOnTheSource, |
| })) || []; |
|
|
| const currentIsPublic = permissionsData?.public ?? false; |
| const currentPublicRole = permissionsData?.publicAccessRoleId || config?.defaultViewerRoleId; |
|
|
| |
| const [isPublic, setIsPublic] = useState(false); |
| const [publicRole, setPublicRole] = useState<AccessRoleIds | undefined>( |
| config?.defaultViewerRoleId, |
| ); |
|
|
| |
| useEffect(() => { |
| if (permissionsData && isModalOpen) { |
| setIsPublic(currentIsPublic ?? false); |
| setPublicRole(currentPublicRole); |
| } |
| }, [permissionsData, isModalOpen, currentIsPublic, currentPublicRole]); |
|
|
| return { |
| config, |
| permissionsData, |
| isLoadingPermissions, |
| permissionsError, |
| updatePermissionsMutation, |
| currentShares, |
| currentIsPublic, |
| currentPublicRole, |
| isPublic, |
| setIsPublic, |
| publicRole, |
| setPublicRole, |
| }; |
| }; |
|
|