import { Spinner } from '@librechat/client'; import { useWatch, useFormContext } from 'react-hook-form'; import { SystemRoles, Permissions, ResourceType, PermissionTypes, PermissionBits, } from 'librechat-data-provider'; import type { AgentForm, AgentPanelProps } from '~/common'; import { useLocalize, useAuthContext, useHasAccess, useResourcePermissions } from '~/hooks'; import { GenericGrantAccessDialog } from '~/components/Sharing'; import { useUpdateAgentMutation } from '~/data-provider'; import AdvancedButton from './Advanced/AdvancedButton'; import VersionButton from './Version/VersionButton'; import DuplicateAgent from './DuplicateAgent'; import AdminSettings from './AdminSettings'; import DeleteButton from './DeleteButton'; import { Panel } from '~/common'; export default function AgentFooter({ activePanel, createMutation, updateMutation, setActivePanel, setCurrentAgentId, }: Pick< AgentPanelProps, 'setCurrentAgentId' | 'createMutation' | 'activePanel' | 'setActivePanel' > & { updateMutation: ReturnType; }) { const localize = useLocalize(); const { user } = useAuthContext(); const methods = useFormContext(); const { control } = methods; const agent = useWatch({ control, name: 'agent' }); const agent_id = useWatch({ control, name: 'id' }); const hasAccessToShareAgents = useHasAccess({ permissionType: PermissionTypes.AGENTS, permission: Permissions.SHARED_GLOBAL, }); const { hasPermission, isLoading: permissionsLoading } = useResourcePermissions( 'agent', agent?._id || '', ); const canShareThisAgent = hasPermission(PermissionBits.SHARE); const canDeleteThisAgent = hasPermission(PermissionBits.DELETE); const renderSaveButton = () => { if (createMutation.isLoading || updateMutation.isLoading) { return