UNPKG

matrix-react-sdk

Version:
124 lines (120 loc) 16 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.PosthogScreenTracker = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = require("react"); var _PageTypes = _interopRequireDefault(require("./PageTypes")); var _Views = _interopRequireDefault(require("./Views")); var _PosthogAnalytics = require("./PosthogAnalytics"); /* Copyright 2024 New Vector Ltd. Copyright 2022 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const notLoggedInMap = { [_Views.default.LOADING]: "Loading", [_Views.default.CONFIRM_LOCK_THEFT]: "ConfirmStartup", [_Views.default.WELCOME]: "Welcome", [_Views.default.LOGIN]: "Login", [_Views.default.REGISTER]: "Register", [_Views.default.USE_CASE_SELECTION]: "UseCaseSelection", [_Views.default.FORGOT_PASSWORD]: "ForgotPassword", [_Views.default.COMPLETE_SECURITY]: "CompleteSecurity", [_Views.default.E2E_SETUP]: "E2ESetup", [_Views.default.SOFT_LOGOUT]: "SoftLogout", [_Views.default.LOCK_STOLEN]: "SessionLockStolen" }; const loggedInPageTypeMap = { [_PageTypes.default.HomePage]: "Home", [_PageTypes.default.RoomView]: "Room", [_PageTypes.default.UserView]: "User" }; class PosthogTrackers { constructor() { (0, _defineProperty2.default)(this, "view", _Views.default.LOADING); (0, _defineProperty2.default)(this, "pageType", void 0); (0, _defineProperty2.default)(this, "override", void 0); } static get instance() { if (!PosthogTrackers.internalInstance) { PosthogTrackers.internalInstance = new PosthogTrackers(); } return PosthogTrackers.internalInstance; } trackPageChange(view, pageType, durationMs) { this.view = view; this.pageType = pageType; if (this.override) return; this.trackPage(durationMs); } trackPage(durationMs) { const screenName = this.view === _Views.default.LOGGED_IN ? loggedInPageTypeMap[this.pageType] : notLoggedInMap[this.view]; _PosthogAnalytics.PosthogAnalytics.instance.trackEvent({ eventName: "$pageview", $current_url: screenName, durationMs }); } trackOverride(screenName) { if (!screenName) return; this.override = screenName; _PosthogAnalytics.PosthogAnalytics.instance.trackEvent({ eventName: "$pageview", $current_url: screenName }); } clearOverride(screenName) { if (screenName !== this.override) return; this.override = undefined; this.trackPage(); } static trackInteraction(name, ev, index) { let interactionType; if (ev?.type === "click") { interactionType = "Pointer"; } else if (ev?.type.startsWith("key")) { interactionType = "Keyboard"; } _PosthogAnalytics.PosthogAnalytics.instance.trackEvent({ eventName: "Interaction", interactionType, index, name }); } /** * Track a pin or unpin action on a message. * @param kind - Is pin or unpin. * @param from - From where the action is triggered. */ static trackPinUnpinMessage(kind, from) { _PosthogAnalytics.PosthogAnalytics.instance.trackEvent({ eventName: "PinUnpinAction", kind, from }); } } exports.default = PosthogTrackers; (0, _defineProperty2.default)(PosthogTrackers, "internalInstance", void 0); class PosthogScreenTracker extends _react.PureComponent { componentDidMount() { PosthogTrackers.instance.trackOverride(this.props.screenName); } componentDidUpdate() { // We do not clear the old override here so that we do not send the non-override screen as a transition PosthogTrackers.instance.trackOverride(this.props.screenName); } componentWillUnmount() { PosthogTrackers.instance.clearOverride(this.props.screenName); } render() { return null; // no need to render anything, we just need to hook into the React lifecycle } } exports.PosthogScreenTracker = PosthogScreenTracker; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX1BhZ2VUeXBlcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfVmlld3MiLCJfUG9zdGhvZ0FuYWx5dGljcyIsIm5vdExvZ2dlZEluTWFwIiwiVmlld3MiLCJMT0FESU5HIiwiQ09ORklSTV9MT0NLX1RIRUZUIiwiV0VMQ09NRSIsIkxPR0lOIiwiUkVHSVNURVIiLCJVU0VfQ0FTRV9TRUxFQ1RJT04iLCJGT1JHT1RfUEFTU1dPUkQiLCJDT01QTEVURV9TRUNVUklUWSIsIkUyRV9TRVRVUCIsIlNPRlRfTE9HT1VUIiwiTE9DS19TVE9MRU4iLCJsb2dnZWRJblBhZ2VUeXBlTWFwIiwiUGFnZVR5cGUiLCJIb21lUGFnZSIsIlJvb21WaWV3IiwiVXNlclZpZXciLCJQb3N0aG9nVHJhY2tlcnMiLCJjb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiaW5zdGFuY2UiLCJpbnRlcm5hbEluc3RhbmNlIiwidHJhY2tQYWdlQ2hhbmdlIiwidmlldyIsInBhZ2VUeXBlIiwiZHVyYXRpb25NcyIsIm92ZXJyaWRlIiwidHJhY2tQYWdlIiwic2NyZWVuTmFtZSIsIkxPR0dFRF9JTiIsIlBvc3Rob2dBbmFseXRpY3MiLCJ0cmFja0V2ZW50IiwiZXZlbnROYW1lIiwiJGN1cnJlbnRfdXJsIiwidHJhY2tPdmVycmlkZSIsImNsZWFyT3ZlcnJpZGUiLCJ1bmRlZmluZWQiLCJ0cmFja0ludGVyYWN0aW9uIiwibmFtZSIsImV2IiwiaW5kZXgiLCJpbnRlcmFjdGlvblR5cGUiLCJ0eXBlIiwic3RhcnRzV2l0aCIsInRyYWNrUGluVW5waW5NZXNzYWdlIiwia2luZCIsImZyb20iLCJleHBvcnRzIiwiUG9zdGhvZ1NjcmVlblRyYWNrZXIiLCJQdXJlQ29tcG9uZW50IiwiY29tcG9uZW50RGlkTW91bnQiLCJwcm9wcyIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIl0sInNvdXJjZXMiOlsiLi4vc3JjL1Bvc3Rob2dUcmFja2Vycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMiBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBQdXJlQ29tcG9uZW50LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgV2ViU2NyZWVuIGFzIFNjcmVlbkV2ZW50IH0gZnJvbSBcIkBtYXRyaXgtb3JnL2FuYWx5dGljcy1ldmVudHMvdHlwZXMvdHlwZXNjcmlwdC9XZWJTY3JlZW5cIjtcbmltcG9ydCB7IEludGVyYWN0aW9uIGFzIEludGVyYWN0aW9uRXZlbnQgfSBmcm9tIFwiQG1hdHJpeC1vcmcvYW5hbHl0aWNzLWV2ZW50cy90eXBlcy90eXBlc2NyaXB0L0ludGVyYWN0aW9uXCI7XG5pbXBvcnQgeyBQaW5VbnBpbkFjdGlvbiB9IGZyb20gXCJAbWF0cml4LW9yZy9hbmFseXRpY3MtZXZlbnRzL3R5cGVzL3R5cGVzY3JpcHQvUGluVW5waW5BY3Rpb25cIjtcblxuaW1wb3J0IFBhZ2VUeXBlIGZyb20gXCIuL1BhZ2VUeXBlc1wiO1xuaW1wb3J0IFZpZXdzIGZyb20gXCIuL1ZpZXdzXCI7XG5pbXBvcnQgeyBQb3N0aG9nQW5hbHl0aWNzIH0gZnJvbSBcIi4vUG9zdGhvZ0FuYWx5dGljc1wiO1xuXG5leHBvcnQgdHlwZSBTY3JlZW5OYW1lID0gU2NyZWVuRXZlbnRbXCIkY3VycmVudF91cmxcIl07XG5leHBvcnQgdHlwZSBJbnRlcmFjdGlvbk5hbWUgPSBJbnRlcmFjdGlvbkV2ZW50W1wibmFtZVwiXTtcblxuY29uc3Qgbm90TG9nZ2VkSW5NYXA6IFJlY29yZDxFeGNsdWRlPFZpZXdzLCBWaWV3cy5MT0dHRURfSU4+LCBTY3JlZW5OYW1lPiA9IHtcbiAgICBbVmlld3MuTE9BRElOR106IFwiTG9hZGluZ1wiLFxuICAgIFtWaWV3cy5DT05GSVJNX0xPQ0tfVEhFRlRdOiBcIkNvbmZpcm1TdGFydHVwXCIsXG4gICAgW1ZpZXdzLldFTENPTUVdOiBcIldlbGNvbWVcIixcbiAgICBbVmlld3MuTE9HSU5dOiBcIkxvZ2luXCIsXG4gICAgW1ZpZXdzLlJFR0lTVEVSXTogXCJSZWdpc3RlclwiLFxuICAgIFtWaWV3cy5VU0VfQ0FTRV9TRUxFQ1RJT05dOiBcIlVzZUNhc2VTZWxlY3Rpb25cIixcbiAgICBbVmlld3MuRk9SR09UX1BBU1NXT1JEXTogXCJGb3Jnb3RQYXNzd29yZFwiLFxuICAgIFtWaWV3cy5DT01QTEVURV9TRUNVUklUWV06IFwiQ29tcGxldGVTZWN1cml0eVwiLFxuICAgIFtWaWV3cy5FMkVfU0VUVVBdOiBcIkUyRVNldHVwXCIsXG4gICAgW1ZpZXdzLlNPRlRfTE9HT1VUXTogXCJTb2Z0TG9nb3V0XCIsXG4gICAgW1ZpZXdzLkxPQ0tfU1RPTEVOXTogXCJTZXNzaW9uTG9ja1N0b2xlblwiLFxufTtcblxuY29uc3QgbG9nZ2VkSW5QYWdlVHlwZU1hcDogUmVjb3JkPFBhZ2VUeXBlLCBTY3JlZW5OYW1lPiA9IHtcbiAgICBbUGFnZVR5cGUuSG9tZVBhZ2VdOiBcIkhvbWVcIixcbiAgICBbUGFnZVR5cGUuUm9vbVZpZXddOiBcIlJvb21cIixcbiAgICBbUGFnZVR5cGUuVXNlclZpZXddOiBcIlVzZXJcIixcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvc3Rob2dUcmFja2VycyB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgaW50ZXJuYWxJbnN0YW5jZTogUG9zdGhvZ1RyYWNrZXJzO1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgaW5zdGFuY2UoKTogUG9zdGhvZ1RyYWNrZXJzIHtcbiAgICAgICAgaWYgKCFQb3N0aG9nVHJhY2tlcnMuaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgICAgICAgUG9zdGhvZ1RyYWNrZXJzLmludGVybmFsSW5zdGFuY2UgPSBuZXcgUG9zdGhvZ1RyYWNrZXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBvc3Rob2dUcmFja2Vycy5pbnRlcm5hbEluc3RhbmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmlldzogVmlld3MgPSBWaWV3cy5MT0FESU5HO1xuICAgIHByaXZhdGUgcGFnZVR5cGU/OiBQYWdlVHlwZTtcbiAgICBwcml2YXRlIG92ZXJyaWRlPzogU2NyZWVuTmFtZTtcblxuICAgIHB1YmxpYyB0cmFja1BhZ2VDaGFuZ2UodmlldzogVmlld3MsIHBhZ2VUeXBlOiBQYWdlVHlwZSB8IHVuZGVmaW5lZCwgZHVyYXRpb25NczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlldyA9IHZpZXc7XG4gICAgICAgIHRoaXMucGFnZVR5cGUgPSBwYWdlVHlwZTtcbiAgICAgICAgaWYgKHRoaXMub3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgdGhpcy50cmFja1BhZ2UoZHVyYXRpb25Ncyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFja1BhZ2UoZHVyYXRpb25Ncz86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzY3JlZW5OYW1lID1cbiAgICAgICAgICAgIHRoaXMudmlldyA9PT0gVmlld3MuTE9HR0VEX0lOID8gbG9nZ2VkSW5QYWdlVHlwZU1hcFt0aGlzLnBhZ2VUeXBlIV0gOiBub3RMb2dnZWRJbk1hcFt0aGlzLnZpZXddO1xuICAgICAgICBQb3N0aG9nQW5hbHl0aWNzLmluc3RhbmNlLnRyYWNrRXZlbnQ8U2NyZWVuRXZlbnQ+KHtcbiAgICAgICAgICAgIGV2ZW50TmFtZTogXCIkcGFnZXZpZXdcIixcbiAgICAgICAgICAgICRjdXJyZW50X3VybDogc2NyZWVuTmFtZSxcbiAgICAgICAgICAgIGR1cmF0aW9uTXMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmFja092ZXJyaWRlKHNjcmVlbk5hbWU6IFNjcmVlbk5hbWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzY3JlZW5OYW1lKSByZXR1cm47XG4gICAgICAgIHRoaXMub3ZlcnJpZGUgPSBzY3JlZW5OYW1lO1xuICAgICAgICBQb3N0aG9nQW5hbHl0aWNzLmluc3RhbmNlLnRyYWNrRXZlbnQ8U2NyZWVuRXZlbnQ+KHtcbiAgICAgICAgICAgIGV2ZW50TmFtZTogXCIkcGFnZXZpZXdcIixcbiAgICAgICAgICAgICRjdXJyZW50X3VybDogc2NyZWVuTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyT3ZlcnJpZGUoc2NyZWVuTmFtZTogU2NyZWVuTmFtZSk6IHZvaWQge1xuICAgICAgICBpZiAoc2NyZWVuTmFtZSAhPT0gdGhpcy5vdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLm92ZXJyaWRlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnRyYWNrUGFnZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdHJhY2tJbnRlcmFjdGlvbihuYW1lOiBJbnRlcmFjdGlvbk5hbWUsIGV2PzogU3ludGhldGljRXZlbnQgfCBFdmVudCwgaW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IGludGVyYWN0aW9uVHlwZTogSW50ZXJhY3Rpb25FdmVudFtcImludGVyYWN0aW9uVHlwZVwiXTtcbiAgICAgICAgaWYgKGV2Py50eXBlID09PSBcImNsaWNrXCIpIHtcbiAgICAgICAgICAgIGludGVyYWN0aW9uVHlwZSA9IFwiUG9pbnRlclwiO1xuICAgICAgICB9IGVsc2UgaWYgKGV2Py50eXBlLnN0YXJ0c1dpdGgoXCJrZXlcIikpIHtcbiAgICAgICAgICAgIGludGVyYWN0aW9uVHlwZSA9IFwiS2V5Ym9hcmRcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIFBvc3Rob2dBbmFseXRpY3MuaW5zdGFuY2UudHJhY2tFdmVudDxJbnRlcmFjdGlvbkV2ZW50Pih7XG4gICAgICAgICAgICBldmVudE5hbWU6IFwiSW50ZXJhY3Rpb25cIixcbiAgICAgICAgICAgIGludGVyYWN0aW9uVHlwZSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhY2sgYSBwaW4gb3IgdW5waW4gYWN0aW9uIG9uIGEgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0ga2luZCAtIElzIHBpbiBvciB1bnBpbi5cbiAgICAgKiBAcGFyYW0gZnJvbSAtIEZyb20gd2hlcmUgdGhlIGFjdGlvbiBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB0cmFja1BpblVucGluTWVzc2FnZShraW5kOiBQaW5VbnBpbkFjdGlvbltcImtpbmRcIl0sIGZyb206IFBpblVucGluQWN0aW9uW1wiZnJvbVwiXSk6IHZvaWQge1xuICAgICAgICBQb3N0aG9nQW5hbHl0aWNzLmluc3RhbmNlLnRyYWNrRXZlbnQ8UGluVW5waW5BY3Rpb24+KHtcbiAgICAgICAgICAgIGV2ZW50TmFtZTogXCJQaW5VbnBpbkFjdGlvblwiLFxuICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgIGZyb20sXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBvc3Rob2dTY3JlZW5UcmFja2VyIGV4dGVuZHMgUHVyZUNvbXBvbmVudDx7IHNjcmVlbk5hbWU6IFNjcmVlbk5hbWUgfT4ge1xuICAgIHB1YmxpYyBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICAgICAgUG9zdGhvZ1RyYWNrZXJzLmluc3RhbmNlLnRyYWNrT3ZlcnJpZGUodGhpcy5wcm9wcy5zY3JlZW5OYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tcG9uZW50RGlkVXBkYXRlKCk6IHZvaWQge1xuICAgICAgICAvLyBXZSBkbyBub3QgY2xlYXIgdGhlIG9sZCBvdmVycmlkZSBoZXJlIHNvIHRoYXQgd2UgZG8gbm90IHNlbmQgdGhlIG5vbi1vdmVycmlkZSBzY3JlZW4gYXMgYSB0cmFuc2l0aW9uXG4gICAgICAgIFBvc3Rob2dUcmFja2Vycy5pbnN0YW5jZS50cmFja092ZXJyaWRlKHRoaXMucHJvcHMuc2NyZWVuTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbXBvbmVudFdpbGxVbm1vdW50KCk6IHZvaWQge1xuICAgICAgICBQb3N0aG9nVHJhY2tlcnMuaW5zdGFuY2UuY2xlYXJPdmVycmlkZSh0aGlzLnByb3BzLnNjcmVlbk5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7IC8vIG5vIG5lZWQgdG8gcmVuZGVyIGFueXRoaW5nLCB3ZSBqdXN0IG5lZWQgdG8gaG9vayBpbnRvIHRoZSBSZWFjdCBsaWZlY3ljbGVcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBS0EsSUFBQUMsVUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksaUJBQUEsR0FBQUosT0FBQTtBQWZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQWNBLE1BQU1LLGNBQW1FLEdBQUc7RUFDeEUsQ0FBQ0MsY0FBSyxDQUFDQyxPQUFPLEdBQUcsU0FBUztFQUMxQixDQUFDRCxjQUFLLENBQUNFLGtCQUFrQixHQUFHLGdCQUFnQjtFQUM1QyxDQUFDRixjQUFLLENBQUNHLE9BQU8sR0FBRyxTQUFTO0VBQzFCLENBQUNILGNBQUssQ0FBQ0ksS0FBSyxHQUFHLE9BQU87RUFDdEIsQ0FBQ0osY0FBSyxDQUFDSyxRQUFRLEdBQUcsVUFBVTtFQUM1QixDQUFDTCxjQUFLLENBQUNNLGtCQUFrQixHQUFHLGtCQUFrQjtFQUM5QyxDQUFDTixjQUFLLENBQUNPLGVBQWUsR0FBRyxnQkFB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