diff --git a/packages/web/src/ee/features/codeNav/components/exploreMenu/index.tsx b/packages/web/src/ee/features/codeNav/components/exploreMenu/index.tsx index 00cfc8e1..0ac60a73 100644 --- a/packages/web/src/ee/features/codeNav/components/exploreMenu/index.tsx +++ b/packages/web/src/ee/features/codeNav/components/exploreMenu/index.tsx @@ -8,7 +8,7 @@ import { ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable"; import { Toggle } from "@/components/ui/toggle"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { useDomain } from "@/hooks/useDomain"; -import { unwrapServiceError } from "@/lib/utils"; +import { measure, unwrapServiceError } from "@/lib/utils"; import { useQuery } from "@tanstack/react-query"; import clsx from "clsx"; import { GlobeIcon, Loader2 } from "lucide-react"; @@ -17,6 +17,7 @@ import { VscSymbolMisc } from "react-icons/vsc"; import { ReferenceList } from "./referenceList"; import { KeyboardShortcutHint } from "@/app/components/keyboardShortcutHint"; import { useHotkeys } from "react-hotkeys-hook"; +import useCaptureEvent from "@/hooks/useCaptureEvent"; interface ExploreMenuProps { selectedSymbolInfo: { @@ -30,8 +31,8 @@ interface ExploreMenuProps { export const ExploreMenu = ({ selectedSymbolInfo, }: ExploreMenuProps) => { - const domain = useDomain(); + const captureEvent = useCaptureEvent(); const { state: { activeExploreMenuTab }, updateBrowseState, @@ -46,14 +47,23 @@ export const ExploreMenu = ({ isLoading: isReferencesResponseLoading, } = useQuery({ queryKey: ["references", selectedSymbolInfo.symbolName, selectedSymbolInfo.repoName, selectedSymbolInfo.revisionName, selectedSymbolInfo.language, domain, isGlobalSearchEnabled], - queryFn: () => unwrapServiceError( - findSearchBasedSymbolReferences({ - symbolName: selectedSymbolInfo.symbolName, - language: selectedSymbolInfo.language, - revisionName: selectedSymbolInfo.revisionName, - repoName: isGlobalSearchEnabled ? undefined : selectedSymbolInfo.repoName + queryFn: async () => { + const response = await measure(() => unwrapServiceError( + findSearchBasedSymbolReferences({ + symbolName: selectedSymbolInfo.symbolName, + language: selectedSymbolInfo.language, + revisionName: selectedSymbolInfo.revisionName, + repoName: isGlobalSearchEnabled ? undefined : selectedSymbolInfo.repoName + }) + ), 'findSearchBasedSymbolReferences', false); + + captureEvent('wa_explore_menu_references_loaded', { + durationMs: response.durationMs, + isGlobalSearchEnabled, }) - ), + + return response.data; + } }); const { @@ -63,14 +73,23 @@ export const ExploreMenu = ({ isLoading: isDefinitionsResponseLoading, } = useQuery({ queryKey: ["definitions", selectedSymbolInfo.symbolName, selectedSymbolInfo.repoName, selectedSymbolInfo.revisionName, selectedSymbolInfo.language, domain, isGlobalSearchEnabled], - queryFn: () => unwrapServiceError( - findSearchBasedSymbolDefinitions({ - symbolName: selectedSymbolInfo.symbolName, - language: selectedSymbolInfo.language, - revisionName: selectedSymbolInfo.revisionName, - repoName: isGlobalSearchEnabled ? undefined : selectedSymbolInfo.repoName + queryFn: async () => { + const response = await measure(() => unwrapServiceError( + findSearchBasedSymbolDefinitions({ + symbolName: selectedSymbolInfo.symbolName, + language: selectedSymbolInfo.language, + revisionName: selectedSymbolInfo.revisionName, + repoName: isGlobalSearchEnabled ? undefined : selectedSymbolInfo.repoName + }) + ), 'findSearchBasedSymbolDefinitions', false); + + captureEvent('wa_explore_menu_definitions_loaded', { + durationMs: response.durationMs, + isGlobalSearchEnabled, }) - ), + + return response.data; + } }); useHotkeys('shift+a', () => { diff --git a/packages/web/src/ee/features/codeNav/components/symbolHoverPopup/useHoveredOverSymbolInfo.ts b/packages/web/src/ee/features/codeNav/components/symbolHoverPopup/useHoveredOverSymbolInfo.ts index d5ee3c02..bca81316 100644 --- a/packages/web/src/ee/features/codeNav/components/symbolHoverPopup/useHoveredOverSymbolInfo.ts +++ b/packages/web/src/ee/features/codeNav/components/symbolHoverPopup/useHoveredOverSymbolInfo.ts @@ -68,7 +68,7 @@ export const useHoveredOverSymbolInfo = ({ }) ), 'findSearchBasedSymbolDefinitions', false); - captureEvent('wa_find_hovered_over_symbol_definitions', { + captureEvent('wa_symbol_hover_popup_definitions_loaded', { durationMs: response.durationMs, }); diff --git a/packages/web/src/lib/posthogEvents.ts b/packages/web/src/lib/posthogEvents.ts index e7124c1a..6b340fe9 100644 --- a/packages/web/src/lib/posthogEvents.ts +++ b/packages/web/src/lib/posthogEvents.ts @@ -273,15 +273,6 @@ export type PosthogEventMap = { wa_api_key_created: {}, wa_api_key_creation_fail: {}, ////////////////////////////////////////////////////////////////// - wa_goto_definition_pressed: { - source: 'chat' | 'browse' | 'preview', - }, - wa_find_references_pressed: { - source: 'chat' | 'browse' | 'preview', - }, - ////////////////////////////////////////////////////////////////// - wa_explore_menu_reference_clicked: {}, - ////////////////////////////////////////////////////////////////// wa_chat_feedback_submitted: { feedback: 'like' | 'dislike', chatId: string, @@ -303,8 +294,25 @@ export type PosthogEventMap = { wa_github_star_toast_displayed: {}, wa_github_star_toast_clicked: {}, ////////////////////////////////////////////////////////////////// - wa_find_hovered_over_symbol_definitions: { + wa_goto_definition_pressed: { + source: 'chat' | 'browse' | 'preview', + }, + wa_find_references_pressed: { + source: 'chat' | 'browse' | 'preview', + }, + wa_symbol_hover_popup_definitions_loaded: { durationMs: number, + }, + wa_explore_menu_reference_clicked: {}, + wa_explore_menu_references_loaded: { + durationMs: number, + // Whether or not the user is searching all repositories. + isGlobalSearchEnabled: boolean, + }, + wa_explore_menu_definitions_loaded: { + durationMs: number, + // Whether or not the user is searching all repositories. + isGlobalSearchEnabled: boolean, } } export type PosthogEvent = keyof PosthogEventMap; \ No newline at end of file