clarity-js
Version:
An analytics library that uses web page interactions to generate aggregated insights
59 lines (53 loc) • 1.54 kB
text/typescript
import {
Action,
Visibility,
Availability,
VisibilityEvent,
AvailabilityEvent,
NewEvent,
AuthorType,
} from "@clarity-types/agent";
import encode from "./encode";
function visible(event: VisibilityEvent): void {
const visibility = event.visibility;
switch (visibility) {
case Visibility.Maximized:
encode(Action.AgentMaximized);
break;
case Visibility.Minimized:
encode(Action.AgentMinimized);
break;
case Visibility.Hidden:
encode(Action.AgentHidden);
break;
}
}
function avail(event: AvailabilityEvent): void {
const isOnline = event.availability === Availability.Online;
encode(isOnline ? Action.AgentOnline : Action.AgentOffline);
}
function message(event: NewEvent): void {
if (event.author.type === AuthorType.Agent) {
encode(Action.AgentMessage);
} else {
encode(Action.HumanMessage);
}
}
export function start(): void {
if (window.LiveChatWidget) {
window.LiveChatWidget.on("visibility_changed", visible);
window.LiveChatWidget.on("new_event", message);
window.LiveChatWidget.on("availability_changed", avail);
}
// Register stop callback with main Clarity
if (typeof window !== "undefined" && (window as any).clarity) {
(window as any).clarity("register", stop);
}
}
export function stop(): void {
if (window.LiveChatWidget) {
window.LiveChatWidget.off("visibility_changed", visible);
window.LiveChatWidget.off("availability_changed", avail);
window.LiveChatWidget.off("new_event", message);
}
}