chore(editor): add track event for latex (#12541)

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **New Features**
  - Enhanced telemetry tracking for LaTeX and equation creation actions, capturing detailed context such as editor mode and location within the app.
- **Chores**
  - Expanded telemetry event types to include LaTeX-specific actions for improved analytics and observability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Flrande
2025-05-26 11:10:32 +00:00
parent 9343e29fea
commit 5d28657d76
5 changed files with 105 additions and 14 deletions
@@ -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];
@@ -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 () => {
+57 -14
View File
@@ -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<AffineTextAttributes>({
const inlinePrefix = match.groups['inlinePrefix'];
const blockPrefix = match.groups['blockPrefix'];
if (!inlineEditor.rootElement) return;
const blockComponent =
inlineEditor.rootElement.closest<BlockComponent>('[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<AffineTextAttributes>({
undoManager.stopCapturing();
if (!inlineEditor.rootElement) return;
const blockComponent =
inlineEditor.rootElement.closest<BlockComponent>('[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<AffineTextAttributes>({
})
.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<AffineTextAttributes>({
})
.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<AffineTextAttributes>({
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',
});
},
});
@@ -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 {
@@ -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';
}