From f21c9ad31a10bee41adc958d267178b49560e057 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 2 Apr 2026 06:05:13 +0000 Subject: [PATCH] Track diff view mode changes --- .../code-editor/stores/diffViewerStore.ts | 31 ++++++++++++++++--- apps/code/src/shared/types/analytics.ts | 7 +++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/apps/code/src/renderer/features/code-editor/stores/diffViewerStore.ts b/apps/code/src/renderer/features/code-editor/stores/diffViewerStore.ts index bca5e0a2d..ed4cefe45 100644 --- a/apps/code/src/renderer/features/code-editor/stores/diffViewerStore.ts +++ b/apps/code/src/renderer/features/code-editor/stores/diffViewerStore.ts @@ -1,3 +1,5 @@ +import { ANALYTICS_EVENTS } from "@shared/types/analytics"; +import { track } from "@utils/analytics"; import { create } from "zustand"; import { persist } from "zustand/middleware"; @@ -30,11 +32,32 @@ export const useDiffViewerStore = create()( loadFullFiles: false, wordDiffs: true, hideWhitespaceChanges: false, - setViewMode: (mode) => set({ viewMode: mode }), + setViewMode: (mode) => + set((state) => { + if (state.viewMode === mode) { + return state; + } + + track(ANALYTICS_EVENTS.DIFF_VIEW_MODE_CHANGED, { + from_mode: state.viewMode, + to_mode: mode, + }); + + return { viewMode: mode }; + }), toggleViewMode: () => - set((s) => ({ - viewMode: s.viewMode === "split" ? "unified" : "split", - })), + set((state) => { + const nextMode = state.viewMode === "split" ? "unified" : "split"; + + track(ANALYTICS_EVENTS.DIFF_VIEW_MODE_CHANGED, { + from_mode: state.viewMode, + to_mode: nextMode, + }); + + return { + viewMode: nextMode, + }; + }), toggleWordWrap: () => set((s) => ({ wordWrap: !s.wordWrap })), toggleLoadFullFiles: () => set((s) => ({ loadFullFiles: !s.loadFullFiles })), diff --git a/apps/code/src/shared/types/analytics.ts b/apps/code/src/shared/types/analytics.ts index 20e3e15cd..5a7183ae2 100644 --- a/apps/code/src/shared/types/analytics.ts +++ b/apps/code/src/shared/types/analytics.ts @@ -120,6 +120,11 @@ export interface ReviewPanelViewedProperties { task_id: string; } +export interface DiffViewModeChangedProperties { + from_mode: "split" | "unified"; + to_mode: "split" | "unified"; +} + // Workspace events export interface WorkspaceCreatedProperties { task_id: string; @@ -221,6 +226,7 @@ export const ANALYTICS_EVENTS = { FILE_OPENED: "File opened", FILE_DIFF_VIEWED: "File diff viewed", REVIEW_PANEL_VIEWED: "Review panel viewed", + DIFF_VIEW_MODE_CHANGED: "Diff view mode changed", // Workspace events WORKSPACE_CREATED: "Workspace created", @@ -275,6 +281,7 @@ export type EventPropertyMap = { [ANALYTICS_EVENTS.FILE_OPENED]: FileOpenedProperties; [ANALYTICS_EVENTS.FILE_DIFF_VIEWED]: FileDiffViewedProperties; [ANALYTICS_EVENTS.REVIEW_PANEL_VIEWED]: ReviewPanelViewedProperties; + [ANALYTICS_EVENTS.DIFF_VIEW_MODE_CHANGED]: DiffViewModeChangedProperties; // Workspace events [ANALYTICS_EVENTS.WORKSPACE_CREATED]: WorkspaceCreatedProperties;