chore: new analytic events (#699)

* feat: tracking events for issues marked as DONE, issue property update, issue moved to cycle, issue moved to modules

* fix: changed events names

* chore: sync analytic

* chore: new analytic events
This commit is contained in:
Dakshesh Jain 2023-04-06 12:08:52 +05:30 committed by GitHub
parent 65037b5031
commit cf662f6e6c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 428 additions and 31 deletions

View file

@ -9,6 +9,7 @@ import type {
ICycle,
IGptResponse,
IIssue,
IIssueComment,
IModule,
IPage,
IPageBlock,
@ -26,7 +27,11 @@ type WorkspaceEventType =
| "WORKSPACE_USER_INVITE_ACCEPT"
| "WORKSPACE_USER_BULK_INVITE_ACCEPT";
type ProjectEventType = "CREATE_PROJECT" | "UPDATE_PROJECT" | "DELETE_PROJECT";
type ProjectEventType =
| "CREATE_PROJECT"
| "UPDATE_PROJECT"
| "DELETE_PROJECT"
| "PROJECT_MEMBER_INVITE";
type IssueEventType = "ISSUE_CREATE" | "ISSUE_UPDATE" | "ISSUE_DELETE";
@ -40,12 +45,32 @@ type PagesEventType = "PAGE_CREATE" | "PAGE_UPDATE" | "PAGE_DELETE";
type ViewEventType = "VIEW_CREATE" | "VIEW_UPDATE" | "VIEW_DELETE";
type IssueCommentType = "ISSUE_COMMENT_CREATE" | "ISSUE_COMMENT_UPDATE" | "ISSUE_COMMENT_DELETE";
type MiscellaneousEventType =
| "TOGGLE_CYCLE_ON"
| "TOGGLE_CYCLE_OFF"
| "TOGGLE_MODULE_ON"
| "TOGGLE_MODULE_OFF"
| "TOGGLE_VIEW_ON"
| "TOGGLE_VIEW_OFF"
| "TOGGLE_PAGES_ON"
| "TOGGLE_PAGES_OFF"
| "TOGGLE_STATE_ON"
| "TOGGLE_STATE_OFF";
type IntegrationEventType = "ADD_WORKSPACE_INTEGRATION" | "REMOVE_WORKSPACE_INTEGRATION";
type GitHubSyncEventType = "GITHUB_REPO_SYNC";
type PageBlocksEventType =
| "PAGE_BLOCK_CREATE"
| "PAGE_BLOCK_UPDATE"
| "PAGE_BLOCK_DELETE"
| "PAGE_BLOCK_CONVERTED_TO_ISSUE";
type IssueLabelEventType = "ISSUE_LABEL_CREATE" | "ISSUE_LABEL_UPDATE" | "ISSUE_LABEL_DELETE";
type GptEventType = "ASK_GPT" | "USE_GPT_RESPONSE_IN_ISSUE" | "USE_GPT_RESPONSE_IN_PAGE_BLOCK";
class TrackEventServices extends APIService {
@ -85,7 +110,7 @@ class TrackEventServices extends APIService {
eventName: ProjectEventType
): Promise<any> {
let payload: any;
if (eventName !== "DELETE_PROJECT")
if (eventName !== "DELETE_PROJECT" && eventName !== "PROJECT_MEMBER_INVITE")
payload = {
workspaceId: data?.workspace_detail?.id,
workspaceName: data?.workspace_detail?.name,
@ -131,7 +156,6 @@ class TrackEventServices extends APIService {
projectName: data?.project_detail?.name,
projectIdentifier: data?.project_detail?.identifier,
issueId: data?.id,
issueTitle: data?.name,
};
else payload = data;
@ -147,6 +171,89 @@ class TrackEventServices extends APIService {
});
}
async trackIssueMarkedAsDoneEvent(data: any): Promise<any> {
if (!trackEvent) return;
return this.request({
url: "/api/track-event",
method: "POST",
data: {
eventName: "ISSUES_MARKED_AS_DONE",
extra: {
...data,
},
},
});
}
async trackIssuePartialPropertyUpdateEvent(
data: any,
propertyName:
| "ISSUE_PROPERTY_UPDATE_PRIORITY"
| "ISSUE_PROPERTY_UPDATE_STATE"
| "ISSUE_PROPERTY_UPDATE_ASSIGNEE"
| "ISSUE_PROPERTY_UPDATE_DUE_DATE"
): Promise<any> {
if (!trackEvent) return;
return this.request({
url: "/api/track-event",
method: "POST",
data: {
eventName: propertyName,
extra: {
...data,
},
},
});
}
async trackIssueCommentEvent(
data: Partial<IIssueComment> | any,
eventName: IssueCommentType
): Promise<any> {
let payload: any;
if (eventName !== "ISSUE_COMMENT_DELETE")
payload = {
workspaceId: data?.workspace_detail?.id,
workspaceName: data?.workspace_detail?.name,
workspaceSlug: data?.workspace_detail?.slug,
projectId: data?.project_detail?.id,
projectName: data?.project_detail?.name,
projectIdentifier: data?.project_detail?.identifier,
issueId: data?.issue,
};
else payload = data;
return this.request({
url: "/api/track-event",
method: "POST",
data: {
eventName,
extra: {
...payload,
},
},
});
}
async trackIssueMovedToCycleOrModuleEvent(
data: any,
eventName:
| "ISSUE_MOVED_TO_CYCLE"
| "ISSUE_MOVED_TO_MODULE"
| "ISSUE_MOVED_TO_CYCLE_IN_BULK"
| "ISSUE_MOVED_TO_MODULE_IN_BULK"
): Promise<any> {
return this.request({
url: "/api/track-event",
method: "POST",
data: {
eventName,
extra: {
...data,
},
},
});
}
async trackIssueBulkDeleteEvent(data: any): Promise<any> {
return this.request({
url: "/api/track-event",
@ -160,6 +267,19 @@ class TrackEventServices extends APIService {
});
}
async trackIssueLabelEvent(data: any, eventName: IssueLabelEventType): Promise<any> {
return this.request({
url: "/api/track-event",
method: "POST",
data: {
eventName,
extra: {
...data,
},
},
});
}
async trackStateEvent(data: IState | any, eventName: StateEventType): Promise<any> {
let payload: any;
if (eventName !== "STATE_DELETE")
@ -171,7 +291,6 @@ class TrackEventServices extends APIService {
projectName: data?.project_detail?.name,
projectIdentifier: data?.project_detail?.identifier,
stateId: data.id,
stateName: data.name,
};
else payload = data;
@ -198,7 +317,6 @@ class TrackEventServices extends APIService {
projectName: data?.project_detail?.name,
projectIdentifier: data?.project_detail?.identifier,
cycleId: data.id,
cycleName: data.name,
};
else payload = data;
@ -225,7 +343,6 @@ class TrackEventServices extends APIService {
projectName: data.project_detail?.name,
projectIdentifier: data?.project_detail?.identifier,
moduleId: data.id,
moduleName: data.name,
};
else payload = data;
@ -392,6 +509,45 @@ class TrackEventServices extends APIService {
},
});
}
async trackMiscellaneousEvent(data: any, eventName: MiscellaneousEventType): Promise<any> {
return this.request({
url: "/api/track-event",
method: "POST",
data: {
eventName,
extra: {
...data,
},
},
});
}
async trackAppIntegrationEvent(data: any, eventName: IntegrationEventType): Promise<any> {
return this.request({
url: "/api/track-event",
method: "POST",
data: {
eventName,
extra: {
...data,
},
},
});
}
async trackGitHubSyncEvent(data: any, eventName: GitHubSyncEventType): Promise<any> {
return this.request({
url: "/api/track-event",
method: "POST",
data: {
eventName,
extra: {
...data,
},
},
});
}
}
const trackEventServices = new TrackEventServices();