import React from 'react';
import { Fragment } from 'prosemirror-model';
import { Transaction } from 'prosemirror-state';
import { rule } from '@atlaskit/adf-schema';
import { EditorPlugin } from '../../types';
import { safeInsert } from '../../utils/insert';
import {
ACTION,
ACTION_SUBJECT,
ACTION_SUBJECT_ID,
addAnalytics,
EVENT_TYPE,
INPUT_METHOD,
} from '../analytics';
import { getFeatureFlags } from '../feature-flags-context';
import { messages } from '../insert-block/ui/ToolbarInsertBlock/messages';
import { IconDivider } from '../quick-insert/assets';
import inputRulePlugin from './pm-plugins/input-rule';
import keymapPlugin from './pm-plugins/keymap';
const rulePlugin = (): EditorPlugin => ({
name: 'rule',
nodes() {
return [{ name: 'rule', node: rule }];
},
pmPlugins() {
return [
{
name: 'ruleInputRule',
plugin: ({ schema, featureFlags }) =>
inputRulePlugin(schema, featureFlags),
},
{
name: 'ruleKeymap',
plugin: () => keymapPlugin(),
},
];
},
pluginsOptions: {
quickInsert: ({ formatMessage }) => [
{
id: 'rule',
title: formatMessage(messages.horizontalRule),
description: formatMessage(messages.horizontalRuleDescription),
keywords: ['horizontal', 'rule', 'line', 'hr'],
priority: 1200,
keyshortcut: '---',
icon: () => ,
action(insert, state) {
let tr: Transaction | null = null;
const { newInsertionBehaviour } = getFeatureFlags(state);
if (newInsertionBehaviour) {
/**
* This is a workaround to get rid of the typeahead text when using quick insert
* Once we insert *nothing*, we get a new transaction, so we can use the new selection
* without considering the extra text after the `/` command.
**/
tr = insert(Fragment.empty);
tr = safeInsert(
state.schema.nodes.rule.createChecked(),
tr.selection.from,
)(tr);
}
if (!tr) {
tr = insert(state.schema.nodes.rule.createChecked());
}
return addAnalytics(state, tr, {
action: ACTION.INSERTED,
actionSubject: ACTION_SUBJECT.DOCUMENT,
actionSubjectId: ACTION_SUBJECT_ID.DIVIDER,
attributes: { inputMethod: INPUT_METHOD.QUICK_INSERT },
eventType: EVENT_TYPE.TRACK,
});
},
},
],
},
});
export default rulePlugin;