@atlaskit/profilecard
Version:
A React component to display a card with user information.
118 lines • 3.38 kB
JavaScript
import { useCallback } from 'react';
import { getATLContextUrl } from '@atlaskit/atlassian-context';
import { useRovoPostMessageToPubsub } from '@atlaskit/rovo-triggers';
import { encodeParamsToUrl } from '../../../util/url';
export const firstCharUpper = str => str.charAt(0).toUpperCase() + str.slice(1);
const ROVO_PARAM_PREFIX = 'rovoChat';
const createRovoParams = params => {
const rovoParams = {};
Object.entries(params).forEach(([key, value]) => {
rovoParams[`${ROVO_PARAM_PREFIX}${firstCharUpper(key)}`] = encodeURIComponent(value);
});
return rovoParams;
};
export const useAgentUrlActions = ({
cloudId
}) => {
const {
publishWithPostMessage
} = useRovoPostMessageToPubsub();
const onEditAgent = useCallback(agentId => {
const url = `${getATLContextUrl('home')}/chat/agents/${agentId}/edit`;
const urlWithParams = encodeParamsToUrl(url, {
cloudId,
...createRovoParams({
cloudId
})
});
window.open(urlWithParams, '_blank', 'noopener, noreferrer');
}, [cloudId]);
const onCopyAgent = agentId => {
navigator.clipboard.writeText(`${window.location.origin}/people/agent/${agentId}`);
};
const onDuplicateAgent = useCallback(agentId => {
const baseUrl = `${getATLContextUrl('home')}/chat/agents/new`;
const urlWithParams = encodeParamsToUrl(baseUrl, {
cloudId,
...createRovoParams({
cloudId,
agentId,
pathway: 'agents-create'
})
});
window.open(urlWithParams, '_blank', 'noopener, noreferrer');
}, [cloudId]);
const onConversationStarter = ({
agentId,
prompt
}) => {
const startConversationInNewTab = () => {
const baseUrl = `${getATLContextUrl('home')}/chat`;
const urlWithParams = encodeParamsToUrl(baseUrl, {
cloudId,
...createRovoParams({
cloudId,
agentId,
prompt,
pathway: 'chat'
})
});
window.open(urlWithParams, '_blank', 'noopener, noreferrer');
};
publishWithPostMessage({
targetWindow: window,
payload: {
type: 'chat-new',
source: 'AgentProfileCard',
data: {
name: prompt.slice(0, 50),
prompt,
agentId,
dialogues: []
}
},
onAcknowledgeTimeout: () => {
startConversationInNewTab();
}
});
};
const onOpenChat = (agentId, agentName) => {
const openChatInNewTab = () => {
const baseUrl = `${getATLContextUrl('home')}/chat`;
const urlWithParams = encodeParamsToUrl(baseUrl, {
cloudId,
...createRovoParams({
cloudId,
agentId
})
});
window.open(urlWithParams, '_blank', 'noopener, noreferrer');
};
publishWithPostMessage({
targetWindow: window,
payload: {
type: 'chat-new',
source: 'AgentProfileCard',
data: {
agentId,
dialogues: [],
name: `Chat with ${agentName}`
}
},
onAcknowledgeTimeout: () => {
openChatInNewTab();
}
});
};
const onViewFullProfile = agentId => {
window.open(`${window.location.origin}/people/agent/${agentId}`, '_blank', 'noopener, noreferrer');
};
return {
onEditAgent,
onCopyAgent,
onDuplicateAgent,
onOpenChat,
onConversationStarter,
onViewFullProfile
};
};