mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
adding capture function for tacking events in posthog
This commit is contained in:
parent
df62c97579
commit
4303658ddb
@ -34,7 +34,6 @@ import {
|
|||||||
} from "constants/fetch-keys";
|
} from "constants/fetch-keys";
|
||||||
// constants
|
// constants
|
||||||
import { INBOX_ISSUE_SOURCE } from "constants/inbox";
|
import { INBOX_ISSUE_SOURCE } from "constants/inbox";
|
||||||
import { usePostHog } from "posthog-js/react";
|
|
||||||
import { ISSUE_CREATE } from "constants/posthog-events";
|
import { ISSUE_CREATE } from "constants/posthog-events";
|
||||||
|
|
||||||
export interface IssuesModalProps {
|
export interface IssuesModalProps {
|
||||||
@ -69,7 +68,6 @@ export const CreateUpdateIssueModal: React.FC<IssuesModalProps> = ({
|
|||||||
fieldsToShow = ["all"],
|
fieldsToShow = ["all"],
|
||||||
onSubmit,
|
onSubmit,
|
||||||
}) => {
|
}) => {
|
||||||
const posthog = usePostHog();
|
|
||||||
// states
|
// states
|
||||||
const [createMore, setCreateMore] = useState(false);
|
const [createMore, setCreateMore] = useState(false);
|
||||||
const [activeProject, setActiveProject] = useState<string | null>(null);
|
const [activeProject, setActiveProject] = useState<string | null>(null);
|
||||||
@ -241,7 +239,6 @@ export const CreateUpdateIssueModal: React.FC<IssuesModalProps> = ({
|
|||||||
await issuesService
|
await issuesService
|
||||||
.createIssues(workspaceSlug as string, activeProject ?? "", payload, user)
|
.createIssues(workspaceSlug as string, activeProject ?? "", payload, user)
|
||||||
.then(async (res) => {
|
.then(async (res) => {
|
||||||
posthog?.capture(ISSUE_CREATE);
|
|
||||||
mutate(PROJECT_ISSUES_LIST_WITH_PARAMS(activeProject ?? "", params));
|
mutate(PROJECT_ISSUES_LIST_WITH_PARAMS(activeProject ?? "", params));
|
||||||
if (payload.cycle && payload.cycle !== "") await addIssueToCycle(res.id, payload.cycle);
|
if (payload.cycle && payload.cycle !== "") await addIssueToCycle(res.id, payload.cycle);
|
||||||
if (payload.module && payload.module !== "")
|
if (payload.module && payload.module !== "")
|
||||||
|
@ -26,8 +26,9 @@ type Props = {
|
|||||||
|
|
||||||
export type TPeekOverviewModes = "side" | "modal" | "full";
|
export type TPeekOverviewModes = "side" | "modal" | "full";
|
||||||
|
|
||||||
export const IssuePeekOverview: React.FC<Props> = observer(
|
export const IssuePeekOverview: React.FC<Props> = observer((props) => {
|
||||||
({ handleMutation, projectId, readOnly, workspaceSlug }) => {
|
const { handleMutation, projectId, readOnly, workspaceSlug } = props;
|
||||||
|
// states
|
||||||
const [isSidePeekOpen, setIsSidePeekOpen] = useState(false);
|
const [isSidePeekOpen, setIsSidePeekOpen] = useState(false);
|
||||||
const [isModalPeekOpen, setIsModalPeekOpen] = useState(false);
|
const [isModalPeekOpen, setIsModalPeekOpen] = useState(false);
|
||||||
const [peekOverviewMode, setPeekOverviewMode] = useState<TPeekOverviewModes>("side");
|
const [peekOverviewMode, setPeekOverviewMode] = useState<TPeekOverviewModes>("side");
|
||||||
@ -63,10 +64,8 @@ export const IssuePeekOverview: React.FC<Props> = observer(
|
|||||||
|
|
||||||
const handleDeleteIssue = async () => {
|
const handleDeleteIssue = async () => {
|
||||||
if (!issue || !user) return;
|
if (!issue || !user) return;
|
||||||
|
|
||||||
await deleteIssue(workspaceSlug, projectId, issue.id, user);
|
await deleteIssue(workspaceSlug, projectId, issue.id, user);
|
||||||
handleMutation();
|
handleMutation();
|
||||||
|
|
||||||
handleClose();
|
handleClose();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -189,5 +188,4 @@ export const IssuePeekOverview: React.FC<Props> = observer(
|
|||||||
</Transition.Root>
|
</Transition.Root>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { useEffect } from "react";
|
import { useEffect } from "react";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter } from "next/router";
|
||||||
import { usePostHog } from "posthog-js/react";
|
|
||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
// services
|
// services
|
||||||
import userService from "services/user.service";
|
import userService from "services/user.service";
|
||||||
@ -11,7 +10,6 @@ import type { ICurrentUserResponse } from "types";
|
|||||||
|
|
||||||
export default function useUser({ redirectTo = "", redirectIfFound = false, options = {} } = {}) {
|
export default function useUser({ redirectTo = "", redirectIfFound = false, options = {} } = {}) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const posthog = usePostHog();
|
|
||||||
// API to fetch user information
|
// API to fetch user information
|
||||||
const { data, isLoading, error, mutate } = useSWR<ICurrentUserResponse>(
|
const { data, isLoading, error, mutate } = useSWR<ICurrentUserResponse>(
|
||||||
CURRENT_USER,
|
CURRENT_USER,
|
||||||
|
@ -11,6 +11,10 @@ import type {
|
|||||||
ISubIssueResponse,
|
ISubIssueResponse,
|
||||||
} from "types";
|
} from "types";
|
||||||
import { API_BASE_URL } from "helpers/common.helper";
|
import { API_BASE_URL } from "helpers/common.helper";
|
||||||
|
import PosthogService from "./posthog.service";
|
||||||
|
import { ISSUE_CREATE } from "constants/posthog-events";
|
||||||
|
|
||||||
|
const posthogService = new PosthogService();
|
||||||
|
|
||||||
class ProjectIssuesServices extends APIService {
|
class ProjectIssuesServices extends APIService {
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -26,6 +30,7 @@ class ProjectIssuesServices extends APIService {
|
|||||||
return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/issues/`, data)
|
return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/issues/`, data)
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
trackEventServices.trackIssueEvent(response.data, "ISSUE_CREATE", user);
|
trackEventServices.trackIssueEvent(response.data, "ISSUE_CREATE", user);
|
||||||
|
posthogService.capture(ISSUE_CREATE, response.data, user);
|
||||||
return response?.data;
|
return response?.data;
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
|
27
web/services/posthog.service.ts
Normal file
27
web/services/posthog.service.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import APIService from "./api.service";
|
||||||
|
|
||||||
|
class PosthogService extends APIService {
|
||||||
|
constructor() {
|
||||||
|
super("");
|
||||||
|
}
|
||||||
|
capture(event: string, data: any = {}, user: any = {}) {
|
||||||
|
this.request({
|
||||||
|
method: "post",
|
||||||
|
url: `${process.env.NEXT_PUBLIC_POSTHOG_HOST || ""}/capture/`,
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
api_key: process.env.NEXT_PUBLIC_POSTHOG_KEY,
|
||||||
|
properties: {
|
||||||
|
user,
|
||||||
|
...data,
|
||||||
|
},
|
||||||
|
distinct_id: user?.email,
|
||||||
|
event,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PosthogService;
|
@ -1,7 +1,4 @@
|
|||||||
// mobx
|
|
||||||
import { ISSUE_CREATE } from "constants/posthog-events";
|
|
||||||
import { action, observable, runInAction, makeAutoObservable } from "mobx";
|
import { action, observable, runInAction, makeAutoObservable } from "mobx";
|
||||||
import { usePostHog } from "posthog-js/react";
|
|
||||||
// services
|
// services
|
||||||
import issueService from "services/issues.service";
|
import issueService from "services/issues.service";
|
||||||
// types
|
// types
|
||||||
|
Loading…
Reference in New Issue
Block a user