UNPKG

@segment/consent-manager

Version:

Drop-in consent management plugin for analytics.js

151 lines 16.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.openDialog = void 0; var events_1 = __importDefault(require("events")); var react_1 = __importDefault(require("react")); var banner_1 = __importDefault(require("./banner")); var preference_dialog_1 = __importDefault(require("./preference-dialog")); var cancel_dialog_1 = __importDefault(require("./cancel-dialog")); var categories_1 = require("./categories"); var emitter = new events_1.default(); function openDialog() { emitter.emit('openDialog'); } exports.openDialog = openDialog; function normalizeDestinations(destinations) { var marketingDestinations = []; var advertisingDestinations = []; var functionalDestinations = []; var _loop_1 = function (destination) { if (categories_1.ADVERTISING_CATEGORIES.find(function (c) { return c === destination.category; })) { advertisingDestinations.push(destination); } else if (categories_1.FUNCTIONAL_CATEGORIES.find(function (c) { return c === destination.category; })) { functionalDestinations.push(destination); } else { // Fallback to marketing marketingDestinations.push(destination); } }; for (var _i = 0, destinations_1 = destinations; _i < destinations_1.length; _i++) { var destination = destinations_1[_i]; _loop_1(destination); } return { marketingDestinations: marketingDestinations, advertisingDestinations: advertisingDestinations, functionalDestinations: functionalDestinations }; } var Container = function (props) { var _a = react_1.default.useState(false || (props.workspaceAddedNewDestinations && props.defaultDestinationBehavior === 'ask')), isDialogOpen = _a[0], toggleDialog = _a[1]; var _b = react_1.default.useState(true), showBanner = _b[0], toggleBanner = _b[1]; var _c = react_1.default.useState(false), isCancelling = _c[0], toggleCancel = _c[1]; var banner = react_1.default.useRef(null); var preferenceDialog = react_1.default.useRef(null); var cancelDialog = react_1.default.useRef(null); var _d = normalizeDestinations(props.destinations), marketingDestinations = _d.marketingDestinations, advertisingDestinations = _d.advertisingDestinations, functionalDestinations = _d.functionalDestinations; var onAcceptAll = function () { var truePreferences = Object.keys(props.preferences).reduce(function (acc, category) { acc[category] = true; return acc; }, {}); props.setPreferences(truePreferences); return props.saveConsent(); }; var onDenyAll = function () { var falsePreferences = Object.keys(props.preferences).reduce(function (acc, category) { acc[category] = false; return acc; }, {}); props.setPreferences(falsePreferences); return props.saveConsent(); }; var onClose = function () { if (props.closeBehavior === undefined || props.closeBehavior === 'dismiss') { return toggleBanner(false); } if (props.closeBehavior === 'accept') { toggleBanner(false); return onAcceptAll(); } if (props.closeBehavior === 'deny') { toggleBanner(false); return onDenyAll(); } // closeBehavior is a custom function var customClosePreferences = props.closeBehavior(props.preferences); props.setPreferences(customClosePreferences); props.saveConsent(); return toggleBanner(false); }; var showDialog = function () { return toggleDialog(true); }; var handleBodyClick = function (e) { // Do nothing if no new implicit consent needs to be saved if (!props.isConsentRequired || !props.implyConsentOnInteraction || props.newDestinations.length === 0) { return; } // Ignore propogated clicks from inside the consent manager if ((banner.current && banner.current.contains(e.target)) || (preferenceDialog.current && preferenceDialog.current.contains(e.target)) || (cancelDialog.current && cancelDialog.current.contains(e.target)) || 'subContentBtn' === e.target.id) { return; } // Accept all consent on page interaction. if (!isDialogOpen && props.implyConsentOnInteraction) { onAcceptAll(); } }; react_1.default.useEffect(function () { emitter.on('openDialog', showDialog); if (props.isConsentRequired && props.implyConsentOnInteraction) { document.body.addEventListener('click', handleBodyClick, false); } return function () { emitter.removeListener('openDialog', showDialog); document.body.removeEventListener('click', handleBodyClick, false); }; }); react_1.default.useEffect(function () { if (isDialogOpen) { props.resetPreferences(); } }, [isDialogOpen]); var handleCategoryChange = function (category, value) { var _a; props.setPreferences((_a = {}, _a[category] = value, _a)); }; var handleSave = function () { toggleDialog(false); props.saveConsent(undefined, false); }; var handleCancel = function () { // Only show the cancel confirmation if there's unconsented destinations if (props.newDestinations.length > 0) { toggleCancel(true); } else { toggleDialog(false); props.resetPreferences(); } }; var handleCancelBack = function () { toggleCancel(false); }; var handleCancelConfirm = function () { toggleCancel(false); toggleDialog(false); props.resetPreferences(); }; return (react_1.default.createElement(react_1.default.Fragment, null, showBanner && props.isConsentRequired && props.newDestinations.length > 0 && (react_1.default.createElement(banner_1.default, { innerRef: function (current) { return (banner = { current: current }); }, onClose: onClose, onChangePreferences: function () { return toggleDialog(true); }, content: props.bannerContent, subContent: props.bannerSubContent, actionsBlock: props.bannerActionsBlock, textColor: props.bannerTextColor, backgroundColor: props.bannerBackgroundColor, onAcceptAll: onAcceptAll, onDenyAll: onDenyAll, hideCloseButton: props.bannerHideCloseButton, asModal: props.bannerAsModal })), isDialogOpen && (react_1.default.createElement(preference_dialog_1.default, { customCategories: props.customCategories, destinations: props.destinations, preferences: props.preferences, innerRef: function (current) { return (preferenceDialog = { current: current }); }, onCancel: handleCancel, onSave: handleSave, onChange: handleCategoryChange, marketingDestinations: marketingDestinations, advertisingDestinations: advertisingDestinations, functionalDestinations: functionalDestinations, marketingAndAnalytics: props.preferences.marketingAndAnalytics, advertising: props.preferences.advertising, functional: props.preferences.functional, title: props.preferencesDialogTitle, content: props.preferencesDialogContent, preferencesDialogTemplate: props.preferencesDialogTemplate })), isCancelling && (react_1.default.createElement(cancel_dialog_1.default, { innerRef: function (current) { return (cancelDialog = { current: current }); }, onBack: handleCancelBack, onConfirm: handleCancelConfirm, title: props.cancelDialogTitle, content: props.cancelDialogContent, preferencesDialogTemplate: props.preferencesDialogTemplate })))); }; exports.default = Container; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnNlbnQtbWFuYWdlci9jb250YWluZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUFpQztBQUNqQyxnREFBeUI7QUFDekIsb0RBQTZCO0FBQzdCLDBFQUFrRDtBQUNsRCxrRUFBMEM7QUFDMUMsMkNBQTRFO0FBVzVFLElBQU0sT0FBTyxHQUFHLElBQUksZ0JBQVksRUFBRSxDQUFBO0FBQ2xDLFNBQWdCLFVBQVU7SUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQUM1QixDQUFDO0FBRkQsZ0NBRUM7QUFzQ0QsU0FBUyxxQkFBcUIsQ0FBQyxZQUEyQjtJQUN4RCxJQUFNLHFCQUFxQixHQUFrQixFQUFFLENBQUE7SUFDL0MsSUFBTSx1QkFBdUIsR0FBa0IsRUFBRSxDQUFBO0lBQ2pELElBQU0sc0JBQXNCLEdBQWtCLEVBQUUsQ0FBQTs0QkFFckMsV0FBVztRQUNwQixJQUFJLG1DQUFzQixDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsS0FBSyxXQUFXLENBQUMsUUFBUSxFQUExQixDQUEwQixDQUFDLEVBQUU7WUFDaEUsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1NBQzFDO2FBQU0sSUFBSSxrQ0FBcUIsQ0FBQyxJQUFJLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLEtBQUssV0FBVyxDQUFDLFFBQVEsRUFBMUIsQ0FBMEIsQ0FBQyxFQUFFO1lBQ3RFLHNCQUFzQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtTQUN6QzthQUFNO1lBQ0wsd0JBQXdCO1lBQ3hCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtTQUN4Qzs7SUFSSCxLQUEwQixVQUFZLEVBQVosNkJBQVksRUFBWiwwQkFBWSxFQUFaLElBQVk7UUFBakMsSUFBTSxX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