UNPKG

@atlaskit/editor-core

Version:

A package contains Atlassian editor core functionality

45 lines (33 loc) 1.32 kB
import { Transaction, Plugin, InputRule, inputRules, Schema } from '../../prosemirror'; import { MentionsState } from './'; import pluginKey from './plugin-key'; import { createInputRule, leafNodeReplacementCharacter } from '../utils'; import { analyticsService } from '../../analytics'; export function inputRulePlugin(schema: Schema<any, any>): Plugin | undefined { const rules: Array<InputRule> = []; if (schema.nodes.mention && schema.marks.mentionQuery) { const regex = new RegExp(`(^|[\\s\(${leafNodeReplacementCharacter}])@$`); const mentionQueryRule = createInputRule(regex, (state, match, start, end): Transaction | undefined => { const mentionsState = pluginKey.getState(state) as MentionsState; if (!mentionsState.mentionProvider) { return undefined; } if (!mentionsState.isEnabled()) { return undefined; } const mark = schema.mark('mentionQuery'); const { tr } = state; analyticsService.trackEvent('atlassian.editor.mention.autoformatting'); const mentionText = schema.text( '@', [mark] ); return tr.replaceSelectionWith(mentionText, false); }); rules.push(mentionQueryRule); } if (rules.length !== 0) { return inputRules({ rules }); } } export default inputRulePlugin;