UNPKG

@atlaskit/profilecard

Version:

A React component to display a card with user information.

230 lines 9.2 kB
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' } });