@atlaskit/profilecard
Version:
A React component to display a card with user information.
98 lines • 3.78 kB
JavaScript
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
}));
};