diff --git a/blocksuite/affine/blocks/latex/src/commands.ts b/blocksuite/affine/blocks/latex/src/commands.ts index c2bfc2ed27..ac589d9b39 100644 --- a/blocksuite/affine/blocks/latex/src/commands.ts +++ b/blocksuite/affine/blocks/latex/src/commands.ts @@ -1,4 +1,8 @@ import type { LatexProps } from '@blocksuite/affine-model'; +import { + DocModeProvider, + TelemetryProvider, +} from '@blocksuite/affine-shared/services'; import type { Command } from '@blocksuite/std'; import type { BlockModel } from '@blocksuite/store'; @@ -48,6 +52,21 @@ export const insertLatexBlockCommand: Command< if (blockComponent instanceof LatexBlockComponent) { await blockComponent.updateComplete; blockComponent.toggleEditor(); + + const mode = std.get(DocModeProvider).getEditorMode() ?? 'page'; + const ifEdgelessText = blockComponent.closest('affine-edgeless-text'); + std.getOptional(TelemetryProvider)?.track('Latex', { + from: + mode === 'page' + ? 'doc' + : ifEdgelessText + ? 'edgeless text' + : 'edgeless note', + page: mode === 'page' ? 'doc' : 'edgeless', + segment: mode === 'page' ? 'doc' : 'whiteboard', + module: 'equation', + control: 'create equation', + }); } } return result[0]; diff --git a/blocksuite/affine/inlines/latex/src/command.ts b/blocksuite/affine/inlines/latex/src/command.ts index 4a92210f9c..bb486b172c 100644 --- a/blocksuite/affine/inlines/latex/src/command.ts +++ b/blocksuite/affine/inlines/latex/src/command.ts @@ -1,3 +1,7 @@ +import { + DocModeProvider, + TelemetryProvider, +} from '@blocksuite/affine-shared/services'; import type { Command, TextSelection } from '@blocksuite/std'; export const insertInlineLatex: Command<{ @@ -37,6 +41,21 @@ export const insertInlineLatex: Command<{ length: 1, }); + const mode = ctx.std.get(DocModeProvider).getEditorMode() ?? 'page'; + const ifEdgelessText = blockComponent.closest('affine-edgeless-text'); + ctx.std.getOptional(TelemetryProvider)?.track('Latex', { + from: + mode === 'page' + ? 'doc' + : ifEdgelessText + ? 'edgeless text' + : 'edgeless note', + page: mode === 'page' ? 'doc' : 'edgeless', + segment: mode === 'page' ? 'doc' : 'whiteboard', + module: 'inline equation', + control: 'create inline equation', + }); + inlineEditor .waitForUpdate() .then(async () => { diff --git a/blocksuite/affine/inlines/latex/src/markdown.ts b/blocksuite/affine/inlines/latex/src/markdown.ts index d236e1c740..73875781b9 100644 --- a/blocksuite/affine/inlines/latex/src/markdown.ts +++ b/blocksuite/affine/inlines/latex/src/markdown.ts @@ -1,3 +1,7 @@ +import { + DocModeProvider, + TelemetryProvider, +} from '@blocksuite/affine-shared/services'; import type { AffineTextAttributes } from '@blocksuite/affine-shared/types'; import type { BlockComponent } from '@blocksuite/std'; import { InlineMarkdownExtension } from '@blocksuite/std/inline'; @@ -14,6 +18,20 @@ export const LatexExtension = InlineMarkdownExtension({ const inlinePrefix = match.groups['inlinePrefix']; const blockPrefix = match.groups['blockPrefix']; + if (!inlineEditor.rootElement) return; + const blockComponent = + inlineEditor.rootElement.closest('[data-block-id]'); + if (!blockComponent) return; + + const doc = blockComponent.store; + const std = blockComponent.std; + const parentComponent = blockComponent.parentComponent; + if (!parentComponent) return; + const index = parentComponent.model.children.indexOf(blockComponent.model); + if (index === -1) return; + const mode = std.get(DocModeProvider).getEditorMode() ?? 'page'; + const ifEdgelessText = blockComponent.closest('affine-edgeless-text'); + if (blockPrefix === '$$$$') { inlineEditor.insertText( { @@ -29,20 +47,6 @@ export const LatexExtension = InlineMarkdownExtension({ undoManager.stopCapturing(); - if (!inlineEditor.rootElement) return; - const blockComponent = - inlineEditor.rootElement.closest('[data-block-id]'); - if (!blockComponent) return; - - const doc = blockComponent.store; - const parentComponent = blockComponent.parentComponent; - if (!parentComponent) return; - - const index = parentComponent.model.children.indexOf( - blockComponent.model - ); - if (index === -1) return; - inlineEditor.deleteText({ index: inlineRange.index - 4, length: 5, @@ -67,6 +71,19 @@ export const LatexExtension = InlineMarkdownExtension({ }) .catch(console.error); + std.getOptional(TelemetryProvider)?.track('Latex', { + from: + mode === 'page' + ? 'doc' + : ifEdgelessText + ? 'edgeless text' + : 'edgeless note', + page: mode === 'page' ? 'doc' : 'edgeless', + segment: mode === 'page' ? 'doc' : 'whiteboard', + module: 'equation', + control: 'create equation', + }); + return; } @@ -124,6 +141,19 @@ export const LatexExtension = InlineMarkdownExtension({ }) .catch(console.error); + std.getOptional(TelemetryProvider)?.track('Latex', { + from: + mode === 'page' + ? 'doc' + : ifEdgelessText + ? 'edgeless text' + : 'edgeless note', + page: mode === 'page' ? 'doc' : 'edgeless', + segment: mode === 'page' ? 'doc' : 'whiteboard', + module: 'inline equation', + control: 'create inline equation', + }); + return; } @@ -169,5 +199,18 @@ export const LatexExtension = InlineMarkdownExtension({ index: startIndex + 1, length: 0, }); + + std.getOptional(TelemetryProvider)?.track('Latex', { + from: + mode === 'page' + ? 'doc' + : ifEdgelessText + ? 'edgeless text' + : 'edgeless note', + page: mode === 'page' ? 'doc' : 'edgeless', + segment: mode === 'page' ? 'doc' : 'whiteboard', + module: 'inline equation', + control: 'create inline equation', + }); }, }); diff --git a/blocksuite/affine/shared/src/services/telemetry-service/telemetry-service.ts b/blocksuite/affine/shared/src/services/telemetry-service/telemetry-service.ts index dcca0dacbc..e45adec513 100644 --- a/blocksuite/affine/shared/src/services/telemetry-service/telemetry-service.ts +++ b/blocksuite/affine/shared/src/services/telemetry-service/telemetry-service.ts @@ -16,6 +16,7 @@ import type { ElementCreationEvent, ElementLockEvent, ElementUpdatedEvent, + LatexEvent, LinkedDocCreatedEvent, LinkEvent, MindMapCollapseEvent, @@ -42,6 +43,7 @@ export type TelemetryEventMap = OutDatabaseAllEvents & BlockCreated: BlockCreationEvent; EdgelessToolPicked: EdgelessToolPickedEvent; CreateEmbedBlock: LinkEvent; + Latex: LatexEvent; }; export interface TelemetryService { diff --git a/blocksuite/affine/shared/src/services/telemetry-service/types.ts b/blocksuite/affine/shared/src/services/telemetry-service/types.ts index a420b87a47..71141175be 100644 --- a/blocksuite/affine/shared/src/services/telemetry-service/types.ts +++ b/blocksuite/affine/shared/src/services/telemetry-service/types.ts @@ -117,3 +117,11 @@ export interface ElementUpdatedEvent extends TelemetryEvent { export interface LinkEvent extends TelemetryEvent { result?: 'success' | 'failure'; } + +export interface LatexEvent extends TelemetryEvent { + from: 'doc' | 'edgeless text' | 'edgeless note'; + page: 'doc' | 'edgeless'; + segment: 'doc' | 'whiteboard'; + module: 'equation' | 'inline equation'; + control: 'create equation' | 'create inline equation'; +}