@zextras/carbonio-shell-ui
Version:
The Zextras Carbonio web client
68 lines • 2.73 kB
JavaScript
;
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