overleaf/services/web/frontend/js/features/source-editor/extensions/completion-logger.ts
Alf Eaton 48e758a5fe Record each completion selection for analytics (#13665)
GitOrigin-RevId: bc8e92ceca51f6365c4311204a35fc85914969b0
2023-07-17 11:03:43 +00:00

28 lines
900 B
TypeScript

import { ViewPlugin } from '@codemirror/view'
import { pickedCompletion } from '@codemirror/autocomplete'
import { emitCompletionEvent } from './toolbar/utils/analytics'
/**
* A custom view plugin that watches for transactions with the `pickedCompletion` annotation.
* If the completion label starts with a command, log that command for analytics.
*/
export const completionLogger = ViewPlugin.define(view => {
return {
update(update) {
for (const tr of update.transactions) {
const completion = tr.annotation(pickedCompletion)
if (completion) {
const command = completionCommand(completion.label)
if (command) {
emitCompletionEvent(view, command)
}
}
}
},
}
})
const completionCommand = (label: string): string | null => {
const matches = label.match(/^(\\\w+)/)
return matches ? matches[1] : null
}