diff --git a/CHANGELOG.md b/CHANGELOG.md index 44d267999..557093bb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added `wa_user_created` PostHog event fired on successful user sign-up. [#933](https://github.com/sourcebot-dev/sourcebot/pull/933) - Added `wa_askgh_login_wall_prompted` PostHog event fired when an unauthenticated user attempts to ask a question on Ask GitHub. [#933](https://github.com/sourcebot-dev/sourcebot/pull/933) - Added Bitbucket Server (Data Center) OAuth 2.0 SSO identity provider support (`provider: "bitbucket-server"`). [#934](https://github.com/sourcebot-dev/sourcebot/pull/934) +- Added `wa_askgh_repo_index_triggered` PostHog event fired when a user triggers a new repo to be indexed in Ask GitHub. [#936](https://github.com/sourcebot-dev/sourcebot/pull/936) ### Changed - Hide version upgrade toast for askgithub deployment (`EXPERIMENT_ASK_GH_ENABLED`). [#931](https://github.com/sourcebot-dev/sourcebot/pull/931) diff --git a/packages/web/src/app/[domain]/askgh/[owner]/[repo]/components/repoIndexedGuard.tsx b/packages/web/src/app/[domain]/askgh/[owner]/[repo]/components/repoIndexedGuard.tsx index 863f9b284..68c7b6b9b 100644 --- a/packages/web/src/app/[domain]/askgh/[owner]/[repo]/components/repoIndexedGuard.tsx +++ b/packages/web/src/app/[domain]/askgh/[owner]/[repo]/components/repoIndexedGuard.tsx @@ -1,11 +1,12 @@ 'use client'; +import { captureEvent } from "@/hooks/useCaptureEvent"; import { ServiceError } from "@/lib/serviceError"; import { unwrapServiceError } from "@/lib/utils"; import { useQuery } from "@tanstack/react-query"; import { Loader2 } from "lucide-react"; import { usePrevious } from "@uidotdev/usehooks"; -import { useEffect } from "react"; +import { useEffect, useRef } from "react"; import { useBrowserNotification } from "@/hooks/useBrowserNotification"; import { RepoInfo } from "../types"; @@ -13,11 +14,25 @@ const REINDEX_INTERVAL_MS = 2000; interface Props { initialRepoInfo: RepoInfo; + isNewlyTriggered: boolean; + repoFullName: string; children: React.ReactNode; } -export function RepoIndexedGuard({ initialRepoInfo, children }: Props) { +export function RepoIndexedGuard({ initialRepoInfo, isNewlyTriggered, repoFullName, children }: Props) { const { requestPermission, showNotification } = useBrowserNotification(); + const hasFiredEvent = useRef(false); + + // Fire event when a new repo index is triggered + useEffect(() => { + if (isNewlyTriggered && !hasFiredEvent.current) { + hasFiredEvent.current = true; + captureEvent('wa_askgh_repo_index_triggered', { + repo: repoFullName, + repoId: initialRepoInfo.id, + }); + } + }, [isNewlyTriggered, repoFullName, initialRepoInfo.id]); const { data: repoInfo, isError } = useQuery({ queryKey: ['repo-status', initialRepoInfo.id], diff --git a/packages/web/src/app/[domain]/askgh/[owner]/[repo]/page.tsx b/packages/web/src/app/[domain]/askgh/[owner]/[repo]/page.tsx index ee1ad7d48..f44f689fe 100644 --- a/packages/web/src/app/[domain]/askgh/[owner]/[repo]/page.tsx +++ b/packages/web/src/app/[domain]/askgh/[owner]/[repo]/page.tsx @@ -20,7 +20,7 @@ export default async function GitHubRepoPage(props: PageProps) { const { owner, repo } = params; const session = await auth(); - const repoId = await (async () => { + const { repoId, isNewlyTriggered } = await (async () => { // 1. Look up repo by owner/repo const displayName = `${owner}/${repo}`; const existingRepo = await prisma.repo.findFirst({ @@ -33,7 +33,7 @@ export default async function GitHubRepoPage(props: PageProps) { }); if (existingRepo) { - return existingRepo.id; + return { repoId: existingRepo.id, isNewlyTriggered: false }; } // 2. If it doesn't exist, attempt to create it @@ -43,7 +43,7 @@ export default async function GitHubRepoPage(props: PageProps) { throw new ServiceErrorException(response); } - return response.repoId; + return { repoId: response.repoId, isNewlyTriggered: true }; })(); const repoInfo = await unwrapServiceError(getRepoInfo(repoId)); @@ -51,7 +51,7 @@ export default async function GitHubRepoPage(props: PageProps) { const providers = getIdentityProviderMetadata(); return ( - +