UNPKG

@boomerang-io/carbon-addons-boomerang-react

Version:
117 lines (110 loc) 8 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var react = require('@carbon/react'); var icons = require('@carbon/react/icons'); var dompurify = require('dompurify'); var ErrorMessage = require('../ErrorMessage/ErrorMessage.js'); var HeaderMenuItem = require('../Header/HeaderMenuItem.js'); var ToastNotification = require('../Notifications/ToastNotification.js'); var Loading = require('../Loading/Loading.js'); var notify = require('../Notifications/notify.js'); var reactQuery = require('react-query'); var servicesConfig = require('../../config/servicesConfig.js'); var settings = require('../../internal/settings.js'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var React__default = /*#__PURE__*/_interopDefault(React); var dompurify__default = /*#__PURE__*/_interopDefault(dompurify); /* IBM Confidential 694970X, 69497O0 © Copyright IBM Corp. 2022, 2024 */ function formatDateTimestamp(timestamp) { return new Date(timestamp).toLocaleDateString("en-us", { year: "numeric", month: "long", day: "numeric", }); } function PrivacyStatement({ baseServicesUrl, closeModal, isOpen, organization = "the platform", platformEmail = "isesupp@us.ibm.com", }) { const [resetKey, setResetKey] = React__default.default.useState(0); const [isConfirmModalOpen, setIsConfirmModalOpen] = React__default.default.useState(false); const statementUrl = servicesConfig.serviceUrl.getStatement({ baseServicesUrl }); const statementQuery = reactQuery.useQuery({ queryKey: statementUrl, queryFn: servicesConfig.resolver.query(statementUrl), }); const { mutateAsync, error: mutateUserConsentError } = reactQuery.useMutation(servicesConfig.resolver.putUserConsent); function closeConfirmModal() { setIsConfirmModalOpen(false); } function handleClose() { closeModal(); closeConfirmModal(); setResetKey(resetKey + 1); } async function handleSubmit() { const body = { hasConsented: false, version: statementQuery.data?.version, }; try { await mutateAsync({ baseServicesUrl, body }); notify.default(React__default.default.createElement(ToastNotification.default, { subtitle: "Successfully requested account deletion", title: "Delete Account", kind: "success" }), { containerId: `${settings.prefix}--bmrg-header-notifications` }); closeConfirmModal(); closeModal(); if (window.location) { window.location.reload(); } } catch (e) { closeConfirmModal(); } } return (React__default.default.createElement(react.ComposedModal, { "aria-label": "Privacy Statement", className: `${settings.prefix}--bmrg-privacy-statement-container ${settings.prefix}--bmrg-header-modal`, onClose: handleClose, open: isOpen, preventCloseOnClickOutside: isConfirmModalOpen }, React__default.default.createElement(react.ModalHeader, { closeModal: handleClose, label: `Effective as of ${statementQuery.data ? formatDateTimestamp(statementQuery.data.effectiveDate) : ""}`, title: "Privacy Statement" }), React__default.default.createElement(react.ModalBody, { key: resetKey }, React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-privacy-statement` }, React__default.default.createElement(React__default.default.Fragment, null, statementQuery.isLoading ? (React__default.default.createElement(Loading.default, null)) : statementQuery.error ? (React__default.default.createElement(ErrorMessage.default, { style: { color: "#F2F4F8" } })) : (statementQuery.data && statementQuery.data.formContent?.sections?.length > 0 && (React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(react.Accordion, null, statementQuery.data.formContent.sections.map((section) => { return (React__default.default.createElement(react.AccordionItem, { title: section.title, key: section.title }, React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement__content`, dangerouslySetInnerHTML: { __html: dompurify__default.default.sanitize(section.content), } }))); })), React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement__message` }, `For any questions or concerns about business and personal information captured on ${organization}, please contact${" "}`, React__default.default.createElement("a", { href: `mailto:${platformEmail}?subject=${organization} Privacy Statement` }, platformEmail), ".")))), mutateUserConsentError && (React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement__error` }, "Failed to receive deletion request. Please try again."))))), React__default.default.createElement(react.ModalFooter, null, React__default.default.createElement(react.Button, { "data-modal-primary-focus": true, kind: "secondary", onClick: handleClose }, "Close"), React__default.default.createElement(react.Button, { kind: "danger", onClick: () => setIsConfirmModalOpen(true) }, "Request account deletion"), React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-privacy-statement-delete` }, React__default.default.createElement(react.ComposedModal, { onClose: closeConfirmModal, open: isConfirmModalOpen }, React__default.default.createElement(react.ModalHeader, { closeModal: closeConfirmModal, label: "Delete Account", title: "Request account deletion" }), React__default.default.createElement(react.ModalBody, null, React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement-delete__desc` }, "By selecting to delete your account, your account will be deleted along with all of your user data from our system and we will notify your team(s) that you are no longer a memeber of the platform. Are you sure you want to delete your account?")), React__default.default.createElement(react.ModalFooter, null, React__default.default.createElement(react.Button, { "data-modal-primary-focus": true, kind: "secondary", onClick: closeConfirmModal }, "No, go back to Privacy Statement"), React__default.default.createElement(react.Button, { kind: "danger", type: "submit", onClick: handleSubmit }, "Yes, delete my account"))))))); } function PrivacyStatementMenuItem(props) { const menuItemRef = React__default.default.useRef(null); const [isOpen, setIsOpen] = React__default.default.useState(false); const handleClose = () => { setIsOpen(false); setTimeout(() => { menuItemRef.current?.focus(); }, 0); }; return (React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(HeaderMenuItem.default, { icon: React__default.default.createElement(icons.Locked, null), onClick: () => setIsOpen(!isOpen), ref: menuItemRef, text: "Privacy Statement", type: "button" }), React__default.default.createElement(PrivacyStatement, { isOpen: isOpen, closeModal: handleClose, ...props }))); } exports.PrivacyStatementMenuItem = PrivacyStatementMenuItem; exports.default = PrivacyStatement;