@atlaskit/profilecard
Version:
A React component to display a card with user information.
104 lines • 3.4 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import React, { Suspense, useCallback } from 'react';
import { useAnalyticsEvents } from '@atlaskit/analytics-next';
import { fireEvent } from '../../util/analytics';
import { getAAIDFromARI } from '../../util/rovoAgentUtils';
import ProfileCardTrigger from '../common/ProfileCardTrigger';
import { AgentProfileCardLazy } from './lazyAgentProfileCard';
export const AgentProfileCardTrigger = ({
trigger = 'hover',
viewingUserId,
product,
...props
}) => {
const {
resourceClient,
agentId: userId,
cloudId
} = props;
const {
createAnalyticsEvent
} = useAnalyticsEvents();
const fireAnalytics = useCallback(payload => {
if (createAnalyticsEvent) {
fireEvent(createAnalyticsEvent, payload);
}
}, [createAnalyticsEvent]);
const getCreator = 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 'FORGE':
return {
type: 'THIRD_PARTY',
name: creator !== null && creator !== void 0 ? creator : ''
};
case 'CUSTOMER':
const userId = getAAIDFromARI(creator) || '';
try {
if (!userId || !cloudId) {
return undefined;
}
const creatorInfo = await props.resourceClient.getProfile(cloudId, userId, fireAnalytics);
return {
type: 'CUSTOMER',
name: creatorInfo.fullName,
profileLink: `/people/${userId}`,
id: userId
};
} catch (error) {
return undefined;
}
default:
return undefined;
}
};
const fetchAgentProfile = async () => {
const agentInfo = await resourceClient.getRovoAgentProfile({
type: 'agent',
value: userId
}, fireAnalytics);
const agentCreatorInfo = await getCreator(agentInfo.creator_type, agentInfo.creator || undefined);
return {
...agentInfo,
creatorInfo: agentCreatorInfo
};
};
const renderProfileCard = ({
profileData,
error
}) => {
var _profileData$creatorI;
return /*#__PURE__*/React.createElement(Suspense, {
fallback: null
}, /*#__PURE__*/React.createElement(AgentProfileCardLazy, {
agent: profileData,
hasError: !!error,
isCreatedByViewingUser: (profileData === null || profileData === void 0 ? void 0 : profileData.creatorInfo) && (profileData === null || profileData === void 0 ? void 0 : (_profileData$creatorI = profileData.creatorInfo) === null || _profileData$creatorI === void 0 ? void 0 : _profileData$creatorI.id) === viewingUserId,
cloudId: props.cloudId,
product: product,
errorType: error,
onChatClick: props.onChatClick,
onConversationStartersClick: props.onConversationStartersClick,
resourceClient: props.resourceClient,
addFlag: props.addFlag
}));
};
return /*#__PURE__*/React.createElement(ProfileCardTrigger, _extends({}, props, {
trigger: "hover",
renderProfileCard: renderProfileCard,
fetchProfile: fetchAgentProfile,
fireAnalytics: fireAnalytics,
profileCardType: "agent"
}));
};