UNPKG

@zextras/carbonio-shell-ui

Version:

The Zextras Carbonio web client

68 lines 2.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useTracker = void 0; /* * SPDX-FileCopyrightText: 2024 Zextras <https://www.zextras.com> * * SPDX-License-Identifier: AGPL-3.0-only */ const react_1 = require("react"); const react_2 = require("posthog-js/react"); const account_1 = require("../store/account"); const hooks_1 = require("../store/login/hooks"); const utils_1 = require("../utils/utils"); const hashToSHA256 = async (value) => { const encoder = new TextEncoder(); const data = encoder.encode(value); return window.crypto.subtle.digest('SHA-256', data); }; const arrayBufferToBase64 = (buffer) => { const bytes = new Uint8Array(buffer); const binary = bytes.reduce((res, byte) => res + String.fromCharCode(byte), ''); return window.btoa(binary); }; const useTracker = () => { const postHog = (0, react_2.usePostHog)(); const isCarbonioCE = (0, hooks_1.useIsCarbonioCE)(); const [isOptedIn, setIsOptedIn] = (0, react_1.useState)(postHog.has_opted_in_capturing()); (0, react_1.useEffect)(() => { if (isCarbonioCE !== undefined) { postHog.setPersonProperties({ is_ce: isCarbonioCE }); } }, [isCarbonioCE, postHog]); (0, react_1.useEffect)(() => { const newValue = !isCarbonioCE || !isOptedIn; if (postHog.config.disable_surveys !== newValue && isCarbonioCE !== undefined) { postHog.set_config({ disable_surveys: newValue }); } }, [isCarbonioCE, isOptedIn, postHog]); const enableTracker = (0, react_1.useCallback)((enable) => { if (!(0, utils_1.getCurrentLocationHost)().includes('127.0.0.1') && !(0, utils_1.getCurrentLocationHost)().includes('localhost')) { if (enable) { const { account } = account_1.useAccountStore.getState(); if (account?.id) { hashToSHA256(account.id).then((arrayBuffer) => { const hashUserId = arrayBufferToBase64(arrayBuffer); postHog.identify(hashUserId); }); } postHog.opt_in_capturing(); setIsOptedIn(true); } else { postHog.opt_out_capturing(); setIsOptedIn(false); } } }, [postHog]); const reset = (0, react_1.useCallback)(() => { postHog.reset(); }, [postHog]); const capture = (0, react_1.useCallback)((eventName, properties, options) => { postHog.capture(eventName, properties, options); }, [postHog]); return { enableTracker, reset, capture }; }; exports.useTracker = useTracker; //# sourceMappingURL=tracker.js.map