@atlaskit/rovo-agent-components
Version:
This package host public components related to rovo agents, the components here are needed for other public atlaskit packages
145 lines (144 loc) • 6.8 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import _agentVerificationDropdownItem_AtlaskitRovoAgentComponents_updateAgentVerificationMutation from "./__generated__/agentVerificationDropdownItem_AtlaskitRovoAgentComponents_updateAgentVerificationMutation.graphql";
import _agentVerificationDropdownItem_AtlaskitRovoAgentComponents_userPermissionsRef from "./__generated__/agentVerificationDropdownItem_AtlaskitRovoAgentComponents_userPermissionsRef.graphql";
import _agentVerificationDropdownItem_AtlaskitRovoAgentComponents_agentRef from "./__generated__/agentVerificationDropdownItem_AtlaskitRovoAgentComponents_agentRef.graphql";
import React, { useCallback } from 'react';
import { useIntl } from 'react-intl';
import { graphql, useFragment, useMutation } from 'react-relay';
import { DropdownItem } from '@atlaskit/dropdown-menu';
import { useFlags } from '@atlaskit/flag';
import ErrorIcon from '@atlaskit/icon/core/status-error';
import SuccessIcon from '@atlaskit/icon/core/status-success';
import { useRovoAgentActionAnalytics } from '@atlaskit/rovo-agent-analytics/actions';
import messages from './messages';
/**
* A dropdown item for verifying or unverifying an agent.
* Renders "Verify agent" if the agent is not verified, or "Remove verification" if it is.
* Returns null if the user doesn't have permission to govern agents or the feature flag is off.
*/
export var AgentVerificationDropdownItem = function AgentVerificationDropdownItem(_ref) {
var _userPermissions$isAb, _agentData$isVerified;
var agentRef = _ref.agentRef,
userPermissionsRef = _ref.userPermissionsRef,
onClick = _ref.onClick,
onVerificationSuccess = _ref.onVerificationSuccess,
testId = _ref.testId,
renderItem = _ref.renderItem;
var _useIntl = useIntl(),
formatMessage = _useIntl.formatMessage;
var _useFlags = useFlags(),
showFlag = _useFlags.showFlag;
var agentData = useFragment(_agentVerificationDropdownItem_AtlaskitRovoAgentComponents_agentRef, agentRef);
var userPermissions = useFragment(_agentVerificationDropdownItem_AtlaskitRovoAgentComponents_userPermissionsRef, userPermissionsRef);
var isAbleToGovernAgents = (_userPermissions$isAb = userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.isAbleToGovernAgents) !== null && _userPermissions$isAb !== void 0 ? _userPermissions$isAb : false;
var isVerified = (_agentData$isVerified = agentData === null || agentData === void 0 ? void 0 : agentData.isVerified) !== null && _agentData$isVerified !== void 0 ? _agentData$isVerified : false;
var agentId = agentData === null || agentData === void 0 ? void 0 : agentData.id;
var _useRovoAgentActionAn = useRovoAgentActionAnalytics({
touchPoint: 'agent-verification-dropdown-item',
agentId: agentId,
isAbleToGovernAgents: isAbleToGovernAgents
}),
trackAgentEvent = _useRovoAgentActionAn.trackAgentEvent;
var _useMutation = useMutation(_agentVerificationDropdownItem_AtlaskitRovoAgentComponents_updateAgentVerificationMutation),
_useMutation2 = _slicedToArray(_useMutation, 2),
commitUpdateVerification = _useMutation2[0],
isPending = _useMutation2[1];
var handleError = useCallback(function (verified, errorMessage) {
showFlag({
title: formatMessage(verified ? messages.verifyErrorTitle : messages.unverifyErrorTitle),
description: formatMessage(messages.errorDescription, {
errorMessage: errorMessage
}),
appearance: 'error',
icon: /*#__PURE__*/React.createElement(ErrorIcon, {
spacing: "spacious",
label: ""
})
});
}, [formatMessage, showFlag]);
var handleUpdateVerification = useCallback(function (verified) {
if (!agentId) {
return;
}
onClick === null || onClick === void 0 || onClick();
commitUpdateVerification({
variables: {
id: agentId,
verified: verified
},
onCompleted: function onCompleted(response) {
var payload = response === null || response === void 0 ? void 0 : response.agentStudio_updateAgentVerification;
if (payload !== null && payload !== void 0 && payload.success) {
onVerificationSuccess === null || onVerificationSuccess === void 0 || onVerificationSuccess(verified);
trackAgentEvent({
action: verified ? 'verify' : 'unverify',
actionSubject: 'rovoAgent',
attributes: {}
});
showFlag({
title: formatMessage(verified ? messages.verifySuccessTitle : messages.unverifySuccessTitle),
appearance: 'success',
isAutoDismiss: true,
icon: /*#__PURE__*/React.createElement(SuccessIcon, {
spacing: "spacious",
label: ""
})
});
} else {
var _payload$errors;
var errorMessage = payload === null || payload === void 0 || (_payload$errors = payload.errors) === null || _payload$errors === void 0 || (_payload$errors = _payload$errors[0]) === null || _payload$errors === void 0 ? void 0 : _payload$errors.message;
if (errorMessage) {
trackAgentEvent({
action: verified ? 'verify' : 'unverify',
actionSubject: 'rovoAgentError',
attributes: {
agentId: agentId,
error: {
message: errorMessage
}
}
});
handleError(verified, errorMessage);
}
}
},
onError: function onError(error) {
trackAgentEvent({
action: verified ? 'verify' : 'unverify',
actionSubject: 'rovoAgentError',
attributes: {
agentId: agentId,
error: {
message: error.message
}
}
});
handleError(verified, error.message);
}
});
}, [agentId, commitUpdateVerification, formatMessage, handleError, onClick, onVerificationSuccess, showFlag, trackAgentEvent]);
var labelText = formatMessage(isVerified ? messages.unverifyAgentLabel : messages.verifyAgentLabel);
var handleOnClick = function handleOnClick() {
return handleUpdateVerification(!isVerified);
};
if (
// Don't render if agent ID is not available
!agentId ||
// Don't render if user doesn't have permission
!isAbleToGovernAgents) {
return null;
}
// Use custom render or default to DropdownItem
if (renderItem) {
return /*#__PURE__*/React.createElement(React.Fragment, null, renderItem({
isPending: isPending,
isVerified: isVerified,
labelText: labelText,
onClick: handleOnClick
}));
}
return /*#__PURE__*/React.createElement(DropdownItem, {
testId: testId,
onClick: handleOnClick
}, labelText);
};