UNPKG

@atlaskit/profilecard

Version:

A React component to display a card with user information.

98 lines 3.78 kB
import React, { Suspense, useCallback, useEffect, useMemo, useState } from 'react'; import { useAnalyticsEvents } from '@atlaskit/analytics-next'; import { fireEvent } from '../../util/analytics'; import { getAAIDFromARI } from '../../util/rovoAgentUtils'; import ErrorMessage from '../Error/ErrorMessage'; import { AgentProfileCardWrapper } from './AgentProfileCardWrapper'; import { AgentProfileCardLazy } from './lazyAgentProfileCard'; export const AgentProfileCardResourced = props => { const [agentData, setAgentData] = useState(); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(); const { createAnalyticsEvent } = useAnalyticsEvents(); const fireAnalytics = useCallback(payload => { if (createAnalyticsEvent) { fireEvent(createAnalyticsEvent, payload); } }, [createAnalyticsEvent]); const creatorUserId = useMemo(() => (agentData === null || agentData === void 0 ? void 0 : agentData.creator_type) === 'CUSTOMER' && agentData.creator ? getAAIDFromARI(agentData.creator) : '', [agentData === null || agentData === void 0 ? void 0 : agentData.creator_type, agentData === null || agentData === void 0 ? void 0 : agentData.creator]); const getCreator = useCallback(async (creator_type, creator) => { if (!creator) { return undefined; } switch (creator_type) { case 'SYSTEM': return { type: 'SYSTEM' }; case 'THIRD_PARTY': return { type: 'THIRD_PARTY', name: creator !== null && creator !== void 0 ? creator : '' }; case 'CUSTOMER': try { if (!creatorUserId || !props.cloudId) { return undefined; } const creatorInfo = await props.resourceClient.getProfile(creatorUserId, props.cloudId, fireAnalytics); return { type: 'CUSTOMER', name: creatorInfo.fullName, profileLink: `/people/${creatorUserId}`, id: creatorUserId }; } catch (error) { return undefined; } default: return undefined; } }, [creatorUserId, fireAnalytics, props.cloudId, props.resourceClient]); const fetchData = useCallback(async () => { setIsLoading(true); try { const profileData = await props.resourceClient.getRovoAgentProfile({ type: 'identity', value: props.accountId }, fireAnalytics); const agentCreatorInfo = await getCreator(profileData === null || profileData === void 0 ? void 0 : profileData.creator_type, (profileData === null || profileData === void 0 ? void 0 : profileData.creator) || undefined); setAgentData({ ...profileData, creatorInfo: agentCreatorInfo }); } catch (err) { setError(err); } finally { setIsLoading(false); } }, [fireAnalytics, getCreator, props.accountId, props.resourceClient]); useEffect(() => { fetchData(); }, [fetchData]); if (error || !isLoading && !agentData) { return /*#__PURE__*/React.createElement(AgentProfileCardWrapper, null, /*#__PURE__*/React.createElement(ErrorMessage, { reload: () => { fetchData(); }, errorType: error || null, fireAnalytics: () => {} })); } return /*#__PURE__*/React.createElement(Suspense, { fallback: null }, /*#__PURE__*/React.createElement(AgentProfileCardLazy, { agent: agentData, isLoading: isLoading, hasError: !!error, isCreatedByViewingUser: creatorUserId === props.viewingUserId, product: props.product, onConversationStartersClick: props.onConversationStartersClick, onChatClick: props.onChatClick, addFlag: props.addFlag, resourceClient: props.resourceClient, cloudId: props.cloudId })); };