@selfcommunity/react-ui
Version:
React UI Components to integrate a Community created with SelfCommunity Platform.
97 lines (96 loc) • 3.17 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.isMentionNode = exports.createMentionNode = exports.MentionNode = void 0;
const lexical_1 = require("lexical");
function convertMentionElement(domNode) {
const mention = domNode;
return {
node: createMentionNode({
avatar: '',
bio: '',
date_joined: undefined,
description: '',
gender: '',
location: '',
real_name: '',
reputation: 0,
role: '',
status: '',
tags: undefined,
website: '',
id: domNode.getAttribute('id'),
ext_id: domNode.getAttribute('ext_id'),
username: domNode.innerText.replace('@', '')
})
};
}
class MentionNode extends lexical_1.TextNode {
static getType() {
return 'mention';
}
static clone(node) {
return new MentionNode(node.__user, node.__text, node.__key);
}
constructor(user, text, key) {
super(text !== null && text !== void 0 ? text : `@${user.username}`, key);
this.__user = user;
}
createDOM(config) {
const tag = 'mention';
const dom = document.createElement(tag);
dom.setAttribute('id', `${this.__user.id}`);
dom.setAttribute('ext-id', `${this.__user.ext_id}`);
dom.innerText = this.__text;
return dom;
}
updateDOM(prevNode, dom, config) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
const inner = dom.firstChild;
if (inner === null) {
return true;
}
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
super.updateDOM(prevNode, inner, config);
return false;
}
static importDOM() {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
const dom = lexical_1.TextNode.importDOM();
return Object.assign({ mention: (node) => ({
conversion: convertMentionElement,
priority: 0
}) }, dom);
}
exportDOM() {
const element = document.createElement('mention');
element.setAttribute('id', `${this.__user.id}`);
element.setAttribute('ext-id', `${this.__user.ext_id}`);
element.textContent = `@${this.__user.username}`;
return { element };
}
isTextEntity() {
return true;
}
static importJSON(serializedNode) {
const { user } = serializedNode;
const node = createMentionNode(user);
return node;
}
exportJSON() {
return Object.assign(Object.assign({}, super.exportJSON()), { user: this.__user, type: 'mention', version: 1 });
}
}
exports.MentionNode = MentionNode;
function createMentionNode(user) {
const mentionNode = new MentionNode(user);
mentionNode.setMode('segmented').toggleDirectionless();
return mentionNode;
}
exports.createMentionNode = createMentionNode;
function isMentionNode(node) {
return node.getType() === 'mention';
}
exports.isMentionNode = isMentionNode;
;