kitchen-simulator
Version:
It is a kitchen simulator (self-contained micro-frontend).
60 lines (55 loc) • 1.78 kB
JavaScript
import posthog from 'posthog-js';
// ---- session context ----
export function bootSessionContext() {
var url = new URL(window.location.href);
var client_name = sessionStorage.getItem('visualizerName');
var project_entry = sessionStorage.getItem('projectId') ? 'open_existing' : 'new';
var cross_auth = url.searchParams.has('token') || url.searchParams.has('details');
// Persist context on the client/session
posthog.register({
client_name: client_name,
project_entry: project_entry,
cross_auth: cross_auth
});
// First-hit event for qualitative flow
posthog.capture('session_started', {
client_name: client_name,
project_entry: project_entry,
cross_auth: cross_auth
});
}
// Optional: expose session id for replay linkage
export function getSessionId() {
try {
return posthog.get_session_id();
} catch (_unused) {
return null;
}
}
// ---- event wrappers (mirror GA4 conversions) ----
export var PH = {
projectSaved: function projectSaved(project_id) {
posthog.capture('project_saved', {
project_id: project_id,
client_name: sessionStorage.getItem('visualizerName'),
session_id: getSessionId()
});
},
assistanceRequested: function assistanceRequested(method, project_id) {
posthog.capture('assistance_requested', {
method: method,
project_id: project_id,
client_name: sessionStorage.getItem('visualizerName'),
session_id: getSessionId()
});
},
addToCart: function addToCart(project_id, sku_count, price_total) {
posthog.capture('add_to_cart', {
project_id: project_id,
sku_count: sku_count,
price_total: price_total,
client_name: sessionStorage.getItem('visualizerName'),
session_id: getSessionId()
});
}
};