@atlaskit/editor-plugin-mentions
Version:
Mentions plugin for @atlaskit/editor-core
86 lines (83 loc) • 3.76 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.insertMention = exports.createSingleMentionFragment = void 0;
var _uuid = _interopRequireDefault(require("uuid"));
var _utils = require("@atlaskit/editor-common/utils");
var _model = require("@atlaskit/editor-prosemirror/model");
var _resource = require("@atlaskit/mention/resource");
// eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
var createSingleMentionFragment = exports.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 && (0, _resource.isResolvingMentionProvider)(mentionProvider)) {
// Cache (locally) for later rendering
mentionProvider.cacheMentionName(id, renderName);
}
var annotationMarksForPos = (0, _utils.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 : (0, _uuid.default)()
}, null, annotationMarksForPos);
var space = schema.text(' ', annotationMarksForPos);
return _model.Fragment.from([mentionNode, space]);
};
};
var insertMention = exports.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);
};
};
};