@atlaskit/editor-plugin-mentions
Version:
Mentions plugin for @atlaskit/editor-core
78 lines (77 loc) • 3.44 kB
JavaScript
// 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);
};
};
};