mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
29 lines
900 B
TypeScript
29 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
|
||
|
}
|