mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-19 02:51:47 +08:00
5d28657d76
<!-- 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 -->
76 lines
2.1 KiB
TypeScript
76 lines
2.1 KiB
TypeScript
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';
|
|
|
|
import { LatexBlockComponent } from './latex-block.js';
|
|
|
|
export const insertLatexBlockCommand: Command<
|
|
{
|
|
latex?: string;
|
|
place?: 'after' | 'before';
|
|
removeEmptyLine?: boolean;
|
|
selectedModels?: BlockModel[];
|
|
},
|
|
{
|
|
insertedLatexBlockId: Promise<string>;
|
|
}
|
|
> = (ctx, next) => {
|
|
const { selectedModels, latex, place, removeEmptyLine, std } = ctx;
|
|
if (!selectedModels?.length) return;
|
|
|
|
const targetModel =
|
|
place === 'before'
|
|
? selectedModels[0]
|
|
: selectedModels[selectedModels.length - 1];
|
|
|
|
const latexBlockProps: Partial<LatexProps> & {
|
|
flavour: 'affine:latex';
|
|
} = {
|
|
flavour: 'affine:latex',
|
|
latex: latex ?? '',
|
|
};
|
|
|
|
const result = std.store.addSiblingBlocks(
|
|
targetModel,
|
|
[latexBlockProps],
|
|
place
|
|
);
|
|
if (result.length === 0) return;
|
|
|
|
if (removeEmptyLine && targetModel.text?.length === 0) {
|
|
std.store.deleteBlock(targetModel);
|
|
}
|
|
|
|
next({
|
|
insertedLatexBlockId: std.host.updateComplete.then(async () => {
|
|
if (!latex) {
|
|
const blockComponent = std.view.getBlock(result[0]);
|
|
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];
|
|
}),
|
|
});
|
|
};
|