mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
82 lines
2.5 KiB
TypeScript
82 lines
2.5 KiB
TypeScript
import { action, makeObservable, observable } from "mobx";
|
|
import posthog from "posthog-js";
|
|
// stores
|
|
import { RootStore } from "../root.store";
|
|
|
|
export interface IEventTrackerStore {
|
|
trackElement: string;
|
|
setTrackElement: (element: string) => void;
|
|
postHogEventTracker: (
|
|
eventName: string,
|
|
payload: object | [] | null,
|
|
group?: { isGrouping: boolean | null; groupType: string | null; groupId: string | null } | null
|
|
) => void;
|
|
}
|
|
|
|
export class EventTrackerStore implements IEventTrackerStore {
|
|
trackElement: string = "";
|
|
rootStore;
|
|
constructor(_rootStore: RootStore) {
|
|
makeObservable(this, {
|
|
trackElement: observable,
|
|
setTrackElement: action,
|
|
postHogEventTracker: action,
|
|
});
|
|
this.rootStore = _rootStore;
|
|
}
|
|
|
|
setTrackElement = (element: string) => {
|
|
this.trackElement = element;
|
|
};
|
|
|
|
postHogEventTracker = (
|
|
eventName: string,
|
|
payload: object | [] | null,
|
|
group?: { isGrouping: boolean | null; groupType: string | null; groupId: string | null } | null
|
|
) => {
|
|
try {
|
|
const currentWorkspaceDetails = this.rootStore.workspace.currentWorkspace;
|
|
const currentProjectDetails = this.rootStore.project.projects.currentProjectDetails;
|
|
|
|
let extras: any = {
|
|
workspace_name: currentWorkspaceDetails?.name ?? "",
|
|
workspace_id: currentWorkspaceDetails?.id ?? "",
|
|
workspace_slug: currentWorkspaceDetails?.slug ?? "",
|
|
project_name: currentProjectDetails?.name ?? "",
|
|
project_id: currentProjectDetails?.id ?? "",
|
|
project_identifier: currentProjectDetails?.identifier ?? "",
|
|
};
|
|
if (["PROJECT_CREATED", "PROJECT_UPDATED"].includes(eventName)) {
|
|
const project_details: any = payload as object;
|
|
extras = {
|
|
...extras,
|
|
project_name: project_details?.name ?? "",
|
|
project_id: project_details?.id ?? "",
|
|
project_identifier: project_details?.identifier ?? "",
|
|
};
|
|
}
|
|
|
|
if (group && group!.isGrouping === true) {
|
|
posthog?.group(group!.groupType!, group!.groupId!, {
|
|
date: new Date(),
|
|
workspace_id: group!.groupId,
|
|
});
|
|
posthog?.capture(eventName, {
|
|
...payload,
|
|
extras: extras,
|
|
element: this.trackElement ?? "",
|
|
});
|
|
} else {
|
|
posthog?.capture(eventName, {
|
|
...payload,
|
|
extras: extras,
|
|
element: this.trackElement ?? "",
|
|
});
|
|
}
|
|
} catch (error) {
|
|
throw error;
|
|
}
|
|
this.setTrackElement("");
|
|
};
|
|
}
|