@boomerang-io/carbon-addons-boomerang-react
Version:
Carbon Addons for Boomerang apps
77 lines (74 loc) • 4.52 kB
JavaScript
import React from 'react';
import { ComposedModal, ModalHeader, ModalBody, Checkbox, ModalFooter, Button } from '@carbon/react';
import { HelpDesk } from '@carbon/react/icons';
import HeaderMenuItem from '../Header/HeaderMenuItem.js';
import { useQueryClient, useMutation } from 'react-query';
import { resolver, serviceUrl } from '../../config/servicesConfig.js';
import { prefix } from '../../internal/settings.js';
/*
IBM Confidential
694970X, 69497O0
© Copyright IBM Corp. 2022, 2024
*/
function SupportCenter({ closeModal, isOpen, supportRedirect, baseServicesUrl, enablePartner, partnerEmailId }) {
const [doNotAskAgain, setDoNotAskAgain] = React.useState(false);
const queryClient = useQueryClient();
const profileUrl = serviceUrl.resourceUserProfile({ baseServicesUrl });
const handleCheckboxChange = (event) => {
const shouldNotAskAgain = event.target.checked;
setDoNotAskAgain(shouldNotAskAgain);
handleSubmit(!shouldNotAskAgain);
};
const { mutateAsync: mutateUserProfile, } = useMutation(resolver.patchUserProfile, {
onSuccess: () => {
queryClient.invalidateQueries(profileUrl);
},
});
async function handleSubmit(showSupport) {
const body = {
showSupport
};
try {
await mutateUserProfile({ baseServicesUrl, body });
}
catch (e) {
// noop
}
}
return (React.createElement(ComposedModal, { "aria-label": "SupportCenter", open: isOpen, className: `${prefix}--support-description-modal`, onClose: closeModal, onKeyDown: (e) => e.stopPropagation(), "data-testid": "composed-modal-supportcenter" },
React.createElement(ModalHeader, { "data-testid": "supportcenter-modal-header", title: "Having an issue?", closeModal: closeModal }),
React.createElement(ModalBody, null, enablePartner ?
React.createElement("div", { className: `${prefix}--bmrg-feedback` },
React.createElement("p", null,
"Please email any issues with a description and images to",
" " /* We need to force a space before the link tag */,
React.createElement("a", { href: "mailto:ica-support@ibm.com" }, partnerEmailId),
"."))
:
React.createElement("div", { className: `${prefix}--bmrg-feedback` },
React.createElement("p", null, "Review your open cases or open a new case at IBM Support Center. For support tickets related to IBM Consulting Advantage, use Product \"Consulting Advantage\"."),
"\u00A0",
React.createElement(Checkbox, { id: "supportCheckboxId", "data-testid": "supportcenter-modal-checkbox", labelText: "Don't show again. Always proceed to IBM Support Center.", invalidText: "Error message goes here", onChange: handleCheckboxChange, checked: doNotAskAgain, warnText: "Warning message goes here" }))),
React.createElement(ModalFooter, null,
enablePartner ? "" : React.createElement(Button, { kind: "secondary", "data-testid": "supportcenter-modal-cancel-button", onClick: closeModal }, "Cancel"),
enablePartner ? React.createElement(Button, { "data-modal-primary-focus": true, kind: "primary", "data-testid": "supportcenter-modal-close-button", onClick: closeModal }, "Close") :
React.createElement(Button, { "data-modal-primary-focus": true, kind: "primary", "data-testid": "supportcenter-modal-continue-button", onClick: supportRedirect }, "Continue to IBM Support Center"))));
}
function SupportCenterMenuItem(props) {
const menuItemRef = React.useRef(null);
const [isOpen, setIsOpen] = React.useState(false);
const handleClose = () => {
setIsOpen(false);
setTimeout(() => {
menuItemRef.current?.focus();
}, 0);
};
const supportHandle = () => {
window.open(props?.supportLink, '_blank', 'noopener,noreferrer');
handleClose();
};
return (React.createElement(React.Fragment, null,
React.createElement(HeaderMenuItem, { icon: React.createElement(HelpDesk, null), onClick: () => setIsOpen(!isOpen), ref: menuItemRef, text: "Support Center", "data-testid": "supportcenter-modal-headermenuitem", type: "button" }),
React.createElement(SupportCenter, { isOpen: isOpen, closeModal: handleClose, supportRedirect: supportHandle, ...props })));
}
export { SupportCenterMenuItem, SupportCenter as default };