@embrace-io/web-sdk
Version:
78 lines (77 loc) • 3.2 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_utils_generateUUID = require("../../utils/generateUUID.cjs");
const require_utils_PerformanceManager_OTelPerformanceManager = require("../../utils/PerformanceManager/OTelPerformanceManager.cjs");
let _opentelemetry_api = require("@opentelemetry/api");
//#region src/managers/EmbracePageManager/EmbracePageManager.ts
var EmbracePageManager = class {
_currentRoute = null;
_currentPageId = null;
_pageLabel = null;
_titleDocument;
_useDocumentTitleAsPageLabel;
_routeChangedListeners = [];
_diag;
_navigationHost;
_userSessionManager;
_perf;
constructor({ useDocumentTitleAsPageLabel = true, titleDocument = window.document, diag: diagParam, navigationHost = window, userSessionManager, perf = new require_utils_PerformanceManager_OTelPerformanceManager.OTelPerformanceManager() } = {}) {
this._useDocumentTitleAsPageLabel = useDocumentTitleAsPageLabel;
this._titleDocument = titleDocument;
this._diag = diagParam ?? _opentelemetry_api.diag.createComponentLogger({ namespace: "EmbracePageManager" });
this._navigationHost = navigationHost;
this._userSessionManager = userSessionManager;
this._perf = perf;
this._navigationHost.navigation?.addEventListener("currententrychange", this._onSoftNavigation);
this._setInitialRouteFromCurrentLocation();
}
getCurrentPageId = () => this._currentPageId;
getCurrentRoute = () => this._currentRoute;
setPageLabel = (label) => {
this._pageLabel = label;
};
getPageLabel = () => {
return this._pageLabel || (!this._useDocumentTitleAsPageLabel || !this._titleDocument ? null : this._titleDocument.title);
};
setCurrentRoute = (route) => {
if (!this._currentRoute || this._currentRoute.url !== route.url) this._currentPageId = require_utils_generateUUID.generateUUID();
this._currentRoute = route;
if (route.label) this._pageLabel = route.label;
else this._pageLabel = null;
for (const listener of this._routeChangedListeners) try {
listener(route);
} catch (error) {
this._diag.warn("Error while executing route changed listener", error);
}
};
clearCurrentRoute = () => {
this._currentRoute = null;
this._currentPageId = null;
this._pageLabel = null;
};
addRouteChangedListener = (listener) => {
this._routeChangedListeners.push(listener);
return () => {
const index = this._routeChangedListeners.indexOf(listener);
if (index !== -1) this._routeChangedListeners.splice(index, 1);
};
};
_onSoftNavigation = (event) => {
if (event.from.url === this._navigationHost.location.href) return;
require_utils_PerformanceManager_OTelPerformanceManager.updateZeroTimeMillis(this._perf.epochMillisFromOrigin(event.timeStamp));
this._userSessionManager?.rolloverSessionPartInternal({
endReason: "web_soft_navigation",
startReason: "web_soft_navigation"
});
this._setInitialRouteFromCurrentLocation();
};
_setInitialRouteFromCurrentLocation = () => {
const pathname = this._navigationHost.location.pathname;
this.setCurrentRoute({
path: pathname,
url: pathname
});
};
};
//#endregion
exports.EmbracePageManager = EmbracePageManager;
//# sourceMappingURL=EmbracePageManager.cjs.map