Files
outline/shared/editor/extensions/Suggestion.tsx

38 lines
1.2 KiB
TypeScript

import { InputRule } from "prosemirror-inputrules";
import { NodeType, Schema } from "prosemirror-model";
import { Plugin } from "prosemirror-state";
import { isInTable } from "prosemirror-tables";
import Extension from "../lib/Extension";
import { SuggestionsMenuPlugin } from "../plugins/Suggestions";
import isInCode from "../queries/isInCode";
import { EventType } from "../types";
export default class Suggestion extends Extension {
get plugins(): Plugin[] {
return [new SuggestionsMenuPlugin(this.editor, this.options)];
}
inputRules = (_options: { type: NodeType; schema: Schema }) => [
new InputRule(this.options.openRegex, (state, match) => {
if (
match &&
state.selection.$from.parent.type.name === "paragraph" &&
(!isInCode(state) || this.options.enabledInCode) &&
(!isInTable(state) || this.options.enabledInTable)
) {
this.editor.events.emit(EventType.SuggestionsMenuOpen, {
type: this.options.type,
query: match[1],
});
}
return null;
}),
new InputRule(this.options.closeRegex, (state, match) => {
if (match) {
this.editor.events.emit(EventType.SuggestionsMenuClose);
}
return null;
}),
];
}