@atlaskit/profilecard
Version:
A React component to display a card with user information.
230 lines • 9.2 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
var _excluded = ["triggerRef"];
import _regeneratorRuntime from "@babel/runtime/regenerator";
import React, { useCallback, useState } from 'react';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl-next';
import Button, { IconButton } from '@atlaskit/button/new';
import DropdownMenu, { DropdownItem, DropdownItemGroup } from '@atlaskit/dropdown-menu';
import MoreIcon from '@atlaskit/icon/core/migration/show-more-horizontal--more';
import { fg } from '@atlaskit/platform-feature-flags';
import { Box, Inline, xcss } from '@atlaskit/primitives';
import { AgentDropdownMenu, ChatPillIcon } from '@atlaskit/rovo-agent-components';
import { AgentDeleteConfirmationModal } from './AgentDeleteConfirmationModal';
var chatToAgentButtonContainer = xcss({
width: '100%'
});
var chatToAgentButtonWrapper = xcss({
display: 'flex',
justifyContent: 'center',
lineHeight: '20px',
fontWeight: 'font.weight.medium'
});
var chatPillButtonInlineStyles = xcss({
paddingInline: 'space.025'
});
var chatPillTextStyles = xcss({
wordBreak: 'break-word',
textAlign: 'left',
whiteSpace: 'pre-wrap'
});
var chatPillIconWrapper = xcss({
minWidth: '20px',
height: '20px'
});
var actionsWrapperStyles = xcss({
borderTop: '1px',
borderTopStyle: 'solid',
borderColor: 'color.border',
padding: 'space.200',
marginBlockStart: 'space.200',
color: 'color.text'
});
var buildAgentActions = function buildAgentActions(_ref) {
var onDuplicateAgent = _ref.onDuplicateAgent,
onCopyAgent = _ref.onCopyAgent,
isForgeAgent = _ref.isForgeAgent;
return isForgeAgent ? [{
text: /*#__PURE__*/React.createElement(FormattedMessage, messages.actionCopyLink),
onClick: onCopyAgent
}] : [{
text: /*#__PURE__*/React.createElement(FormattedMessage, messages.actionDuplicate),
onClick: onDuplicateAgent
}, {
text: /*#__PURE__*/React.createElement(FormattedMessage, messages.actionCopyLink),
onClick: onCopyAgent
}];
};
var buildAgentSettings = function buildAgentSettings(_ref2) {
var onEditAgent = _ref2.onEditAgent,
onDeleteAgent = _ref2.onDeleteAgent;
return [{
text: /*#__PURE__*/React.createElement(FormattedMessage, messages.actionEdit),
onClick: onEditAgent
}, {
text: /*#__PURE__*/React.createElement(FormattedMessage, messages.actionDelete),
onClick: onDeleteAgent
}];
};
export var AgentActions = function AgentActions(_ref3) {
var isAgentCreatedByCurrentUser = _ref3.isAgentCreatedByCurrentUser,
onEditAgent = _ref3.onEditAgent,
onDeleteAgent = _ref3.onDeleteAgent,
onDuplicateAgent = _ref3.onDuplicateAgent,
onCopyAgent = _ref3.onCopyAgent,
onChatClick = _ref3.onChatClick,
onViewFullProfileClick = _ref3.onViewFullProfileClick,
agent = _ref3.agent,
resourceClient = _ref3.resourceClient;
var _useIntl = useIntl(),
formatMessage = _useIntl.formatMessage;
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
isDeleteModalOpen = _useState2[0],
setIsDeleteModalOpen = _useState2[1];
var isForgeAgent = agent.creator_type === 'FORGE' || agent.creator_type === 'THIRD_PARTY';
var loadAgentPermissions = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
var _yield$resourceClient, _yield$resourceClient2, AGENT_UPDATE, AGENT_DEACTIVATE;
return _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return resourceClient.getRovoAgentPermissions(agent.id);
case 2:
_yield$resourceClient = _context.sent;
_yield$resourceClient2 = _yield$resourceClient.permissions;
AGENT_UPDATE = _yield$resourceClient2.AGENT_UPDATE;
AGENT_DEACTIVATE = _yield$resourceClient2.AGENT_DEACTIVATE;
return _context.abrupt("return", {
isEditEnabled: AGENT_UPDATE.permitted,
isDeleteEnabled: AGENT_DEACTIVATE.permitted
});
case 7:
case "end":
return _context.stop();
}
}, _callee);
})), [agent.id, resourceClient]);
var agentActions = buildAgentActions({
onDuplicateAgent: onDuplicateAgent,
onCopyAgent: onCopyAgent,
isForgeAgent: agent.creator_type === 'FORGE' || agent.creator_type === 'THIRD_PARTY'
});
var agentSetting = buildAgentSettings({
onEditAgent: onEditAgent,
onDeleteAgent: function onDeleteAgent() {
setIsDeleteModalOpen(true);
}
});
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Inline, {
space: "space.100",
xcss: actionsWrapperStyles
}, /*#__PURE__*/React.createElement(Box, {
xcss: chatToAgentButtonContainer
}, /*#__PURE__*/React.createElement(Button, {
shouldFitContainer: true,
onClick: function onClick(e) {
e.stopPropagation();
onChatClick();
}
}, /*#__PURE__*/React.createElement(Box, {
xcss: chatToAgentButtonWrapper
}, /*#__PURE__*/React.createElement(Inline, {
space: "space.050",
xcss: chatPillButtonInlineStyles
}, /*#__PURE__*/React.createElement(Box, {
xcss: chatPillIconWrapper
}, /*#__PURE__*/React.createElement(ChatPillIcon, null)), /*#__PURE__*/React.createElement(Box, {
xcss: chatPillTextStyles
}, formatMessage(messages.actionChatToAgent)))))), fg('rovo_use_agent_permissions') ? /*#__PURE__*/React.createElement(AgentDropdownMenu, {
agentId: agent.id,
isAgentCreatedByUser: isAgentCreatedByCurrentUser !== null && isAgentCreatedByCurrentUser !== void 0 ? isAgentCreatedByCurrentUser : false,
onDeleteAgent: function onDeleteAgent() {
return setIsDeleteModalOpen(true);
},
onEditAgent: onEditAgent,
onDuplicateAgent: onDuplicateAgent,
onCopyAgent: onCopyAgent,
isForgeAgent: isForgeAgent,
loadAgentPermissions: loadAgentPermissions,
loadPermissionsOnMount: true,
onViewAgentFullProfileClick: onViewFullProfileClick,
doesAgentHaveIdentityAccountId: !!agent.identity_account_id,
shouldTriggerStopPropagation: true
}) : /*#__PURE__*/React.createElement(DropdownMenu, {
trigger: function trigger(_ref5) {
var triggerRef = _ref5.triggerRef,
props = _objectWithoutProperties(_ref5, _excluded);
return /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(IconButton, _extends({}, props, {
icon: MoreIcon,
label: "more",
ref: triggerRef,
onClick: function onClick(e) {
var _props$onClick;
e.stopPropagation();
(_props$onClick = props.onClick) === null || _props$onClick === void 0 || _props$onClick.call(props, e);
}
})));
},
placement: "bottom-end"
}, /*#__PURE__*/React.createElement(DropdownItemGroup, null, agentActions.map(function (_ref6, idx) {
var text = _ref6.text,
_onClick = _ref6.onClick;
return /*#__PURE__*/React.createElement(DropdownItem, {
key: idx,
onClick: function onClick(e) {
e.stopPropagation();
_onClick === null || _onClick === void 0 || _onClick();
}
}, text);
})), isAgentCreatedByCurrentUser && /*#__PURE__*/React.createElement(DropdownItemGroup, {
hasSeparator: true
}, agentSetting.map(function (_ref7, idx) {
var text = _ref7.text,
_onClick2 = _ref7.onClick;
return /*#__PURE__*/React.createElement(DropdownItem, {
key: idx,
onClick: function onClick(e) {
e.stopPropagation();
_onClick2 === null || _onClick2 === void 0 || _onClick2();
}
}, text);
})))), /*#__PURE__*/React.createElement(AgentDeleteConfirmationModal, {
isOpen: isDeleteModalOpen,
onClose: function onClose() {
setIsDeleteModalOpen(false);
},
onSubmit: onDeleteAgent,
agentId: agent.id,
agentName: agent.name
}));
};
var messages = defineMessages({
actionChatToAgent: {
id: 'ptc-directory.agent-profile.action.dropdown.chat-to-agent.nonfinal',
defaultMessage: 'Chat to Agent',
description: 'Text for the "chat to agent" action to chat to the agent'
},
actionDelete: {
id: 'ptc-directory.agent-profile.action.dropdown.delete.nonfinal',
defaultMessage: 'Delete Agent',
description: 'Text for the "Delete" action to delete an agent'
},
actionEdit: {
id: 'ptc-directory.agent-profile.action.dropdown.edit.nonfinal',
defaultMessage: 'Edit Agent',
description: 'Text for the "Edit" action to edit an agent'
},
actionCopyLink: {
id: 'ptc-directory.agent-profile.action.dropdown.copy-link.nonfinal',
defaultMessage: 'Copy link',
description: 'Text for the Copy link of an agent'
},
actionDuplicate: {
id: 'ptc-directory.agent-profile.action.dropdown.duplicate.nonfinal',
defaultMessage: 'Duplicate Agent',
description: 'Text for the Duplicate Agent action to create a duplicate'
}
});