UNPKG

@atlaskit/editor-plugin-emoji

Version:

Emoji plugin for @atlaskit/editor-core

47 lines 1.96 kB
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics'; import { getAnnotationMarksForPos } from '@atlaskit/editor-common/utils'; import { Fragment } from '@atlaskit/editor-prosemirror/model'; import { Selection } from '@atlaskit/editor-prosemirror/state'; import { safeInsert } from '@atlaskit/editor-prosemirror/utils'; export var createEmojiFragment = function createEmojiFragment(doc, pos, emoji) { var _emoji$id = emoji.id, id = _emoji$id === void 0 ? '' : _emoji$id, fallback = emoji.fallback, shortName = emoji.shortName; var annotationMarksForPos = getAnnotationMarksForPos(pos); var emojiNode = doc.type.schema.nodes.emoji.createChecked({ shortName: shortName, id: id, text: fallback || shortName }, null, annotationMarksForPos); var space = doc.type.schema.text(' ', annotationMarksForPos); return Fragment.fromArray([emojiNode, space]); }; export var insertEmoji = function insertEmoji(editorAnalyticsAPI) { return function (emojiId, inputMethod) { return function (_ref) { var tr = _ref.tr; var doc = tr.doc, selection = tr.selection; var emoji = tr.doc.type.schema.nodes.emoji; if (emoji && emojiId) { var fragment = createEmojiFragment(doc, selection.$head, emojiId); var newTr = safeInsert(fragment)(tr); if (inputMethod) { editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({ action: ACTION.INSERTED, actionSubject: ACTION_SUBJECT.DOCUMENT, actionSubjectId: ACTION_SUBJECT_ID.EMOJI, attributes: { inputMethod: inputMethod }, eventType: EVENT_TYPE.TRACK })(newTr); } newTr.setSelection(Selection.near(newTr.doc.resolve(selection.$from.pos + fragment.size))); return newTr; } return null; }; }; };