UNPKG

@atlaskit/editor-plugin-mentions

Version:

Mentions plugin for @atlaskit/editor-core

78 lines (77 loc) 3.44 kB
// eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead import uuid from 'uuid'; import { getAnnotationMarksForPos } from '@atlaskit/editor-common/utils'; import { Fragment } from '@atlaskit/editor-prosemirror/model'; import { isResolvingMentionProvider } from '@atlaskit/mention/resource'; export var createSingleMentionFragment = function createSingleMentionFragment(_ref) { var mentionInsertDisplayName = _ref.mentionInsertDisplayName, mentionProvider = _ref.mentionProvider, tr = _ref.tr, sanitizePrivateContent = _ref.sanitizePrivateContent; return function (_ref2) { var name = _ref2.name, id = _ref2.id, userType = _ref2.userType, nickname = _ref2.nickname, localId = _ref2.localId, accessLevel = _ref2.accessLevel, isXProductUser = _ref2.isXProductUser; var schema = tr.doc.type.schema; var trimmedNickname = nickname && nickname.startsWith('@') ? nickname.slice(1) : nickname; var renderName = mentionInsertDisplayName || !trimmedNickname ? name : trimmedNickname; if (isXProductUser && mentionProvider && mentionProvider.inviteXProductUser) { mentionProvider.inviteXProductUser(id, name); } // Don't insert into document if document data is sanitized. var text = sanitizePrivateContent ? '' : "@".concat(renderName); if (sanitizePrivateContent && isResolvingMentionProvider(mentionProvider)) { // Cache (locally) for later rendering mentionProvider.cacheMentionName(id, renderName); } var annotationMarksForPos = getAnnotationMarksForPos(tr.selection.$head); var mentionNode = schema.nodes.mention.createChecked({ text: text, id: id, accessLevel: accessLevel, userType: userType === 'DEFAULT' ? null : userType, // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead localId: localId !== null && localId !== void 0 ? localId : uuid() }, null, annotationMarksForPos); var space = schema.text(' ', annotationMarksForPos); return Fragment.from([mentionNode, space]); }; }; export var insertMention = function insertMention(_ref3) { var sanitizePrivateContent = _ref3.sanitizePrivateContent, api = _ref3.api, mentionInsertDisplayName = _ref3.mentionInsertDisplayName; return function (_ref4) { var name = _ref4.name, id = _ref4.id, userType = _ref4.userType, localId = _ref4.localId, nickname = _ref4.nickname, accessLevel = _ref4.accessLevel, isXProductUser = _ref4.isXProductUser; return function (_ref5) { var _api$mention$sharedSt; var tr = _ref5.tr; var mentionProvider = api === null || api === void 0 || (_api$mention$sharedSt = api.mention.sharedState.currentState()) === null || _api$mention$sharedSt === void 0 ? void 0 : _api$mention$sharedSt.mentionProvider; var mentionFragment = createSingleMentionFragment({ sanitizePrivateContent: sanitizePrivateContent, mentionProvider: mentionProvider, mentionInsertDisplayName: mentionInsertDisplayName, tr: tr })({ name: name, id: id, userType: userType, nickname: nickname, localId: localId, accessLevel: accessLevel, isXProductUser: isXProductUser }); return tr.insert(tr.selection.from, mentionFragment); }; }; };