@selfcommunity/react-ui 0.7.0-alpha.325 → 0.7.0-alpha.326
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/CommentObject/CommentObject.d.ts +1 -1
- package/lib/cjs/components/CommentObject/CommentObject.js +2 -2
- package/lib/cjs/components/Editor/nodes/ImageNode.js +4 -5
- package/lib/cjs/components/Editor/plugins/ImagePlugin.js +10 -15
- package/lib/cjs/components/Editor/plugins/OnChangePlugin.js +0 -54
- package/lib/cjs/components/FeedObject/Activities/Activities.js +1 -1
- package/lib/cjs/components/FeedObject/FeedObject.js +1 -1
- package/lib/esm/components/CommentObject/CommentObject.d.ts +1 -1
- package/lib/esm/components/CommentObject/CommentObject.js +2 -2
- package/lib/esm/components/Editor/nodes/ImageNode.js +4 -5
- package/lib/esm/components/Editor/plugins/ImagePlugin.js +11 -16
- package/lib/esm/components/Editor/plugins/OnChangePlugin.js +0 -54
- package/lib/esm/components/FeedObject/Activities/Activities.js +1 -1
- package/lib/esm/components/FeedObject/FeedObject.js +1 -1
- package/lib/umd/518.js +2 -0
- package/lib/umd/{53.js.LICENSE.txt → 518.js.LICENSE.txt} +0 -9
- package/lib/umd/react-ui.js +1 -1
- package/package.json +2 -2
- package/lib/umd/53.js +0 -2
|
@@ -84,7 +84,7 @@ export interface CommentObjectProps {
|
|
|
84
84
|
* Props to spread to sub comments object
|
|
85
85
|
* @default {elevation: 0, WidgetProps: {variant: 'outlined'} as WidgetProps}
|
|
86
86
|
*/
|
|
87
|
-
|
|
87
|
+
CommentsObjectComponentProps?: CommentsObjectProps;
|
|
88
88
|
/**
|
|
89
89
|
* If datetime is linkable or not
|
|
90
90
|
* @default true
|
|
@@ -95,7 +95,7 @@ function CommentObject(inProps) {
|
|
|
95
95
|
props: inProps,
|
|
96
96
|
name: PREFIX
|
|
97
97
|
});
|
|
98
|
-
const { id = `comment_object_${props.commentObjectId ? props.commentObjectId : props.commentObject ? props.commentObject.id : ''}`, className, commentObjectId, commentObject, feedObjectId, feedObject, feedObjectType = types_1.SCContributionType.POST, commentReply, onOpenReply, onDelete, onVote, elevation = 0, truncateContent = false, CommentObjectSkeletonProps = { elevation, WidgetProps: { variant: 'outlined' } }, CommentObjectReplyProps = { elevation, WidgetProps: { variant: 'outlined' } }, linkableCommentDateTime = true, cacheStrategy = utils_1.CacheStrategies.NETWORK_ONLY,
|
|
98
|
+
const { id = `comment_object_${props.commentObjectId ? props.commentObjectId : props.commentObject ? props.commentObject.id : ''}`, className, commentObjectId, commentObject, feedObjectId, feedObject, feedObjectType = types_1.SCContributionType.POST, commentReply, onOpenReply, onDelete, onVote, elevation = 0, truncateContent = false, CommentObjectSkeletonProps = { elevation, WidgetProps: { variant: 'outlined' } }, CommentObjectReplyProps = { elevation, WidgetProps: { variant: 'outlined' } }, linkableCommentDateTime = true, cacheStrategy = utils_1.CacheStrategies.NETWORK_ONLY, CommentsObjectComponentProps = {} } = props, rest = tslib_1.__rest(props, ["id", "className", "commentObjectId", "commentObject", "feedObjectId", "feedObject", "feedObjectType", "commentReply", "onOpenReply", "onDelete", "onVote", "elevation", "truncateContent", "CommentObjectSkeletonProps", "CommentObjectReplyProps", "linkableCommentDateTime", "cacheStrategy", "CommentsObjectComponentProps"]);
|
|
99
99
|
// CONTEXT
|
|
100
100
|
const scContext = (0, react_core_1.useSCContext)();
|
|
101
101
|
const scUserContext = (0, react_1.useContext)(react_core_1.SCUserContext);
|
|
@@ -366,7 +366,7 @@ function CommentObject(inProps) {
|
|
|
366
366
|
*/
|
|
367
367
|
function renderLatestComment(comment) {
|
|
368
368
|
return (react_1.default.createElement(CommentsObject_1.default, Object.assign({ feedObject: commentsObject.feedObject, feedObjectType: commentsObject.feedObject ? commentsObject.feedObject.type : feedObjectType, hideAdvertising: true, comments: [].concat(commentsObject.comments).reverse(), endComments: comment.latest_comments, previous: comment.comment_count > comment.latest_comments.length ? commentsObject.next : null, isLoadingPrevious: commentsObject.isLoadingNext, handlePrevious: commentsObject.getNextPage, CommentComponentProps: Object.assign(Object.assign({ onOpenReply: reply, CommentObjectSkeletonProps, elevation: elevation, linkableCommentDateTime: linkableCommentDateTime }, rest), { cacheStrategy,
|
|
369
|
-
truncateContent }), CommentsObjectSkeletonProps: { count: 1, CommentObjectSkeletonProps: CommentObjectSkeletonProps }, inPlaceLoadMoreContents: true },
|
|
369
|
+
truncateContent }), CommentsObjectSkeletonProps: { count: 1, CommentObjectSkeletonProps: CommentObjectSkeletonProps }, inPlaceLoadMoreContents: true }, CommentsObjectComponentProps, { cacheStrategy: cacheStrategy })));
|
|
370
370
|
}
|
|
371
371
|
/**
|
|
372
372
|
* Render comments
|
|
@@ -94,9 +94,8 @@ function ImageComponent({ src, altText, nodeKey, maxWidth }) {
|
|
|
94
94
|
unregister();
|
|
95
95
|
};
|
|
96
96
|
}, [clearSelection, editor, isSelected, nodeKey, onDelete, onEnter, onEscape, setSelected]);
|
|
97
|
-
const isFocused = isSelected;
|
|
98
97
|
return (react_1.default.createElement(react_1.Suspense, { fallback: null },
|
|
99
|
-
react_1.default.createElement(LazyImage, { className:
|
|
98
|
+
react_1.default.createElement(LazyImage, { className: isSelected ? `selected` : null, src: src, altText: altText, imageRef: imageRef, maxWidth: maxWidth })));
|
|
100
99
|
}
|
|
101
100
|
function convertImageElement(domNode) {
|
|
102
101
|
if (domNode instanceof HTMLImageElement) {
|
|
@@ -130,13 +129,13 @@ class ImageNode extends lexical_1.DecoratorNode {
|
|
|
130
129
|
}
|
|
131
130
|
// View
|
|
132
131
|
createDOM(config) {
|
|
133
|
-
const
|
|
132
|
+
const div = document.createElement('div');
|
|
134
133
|
const theme = config.theme;
|
|
135
134
|
const className = theme.image;
|
|
136
135
|
if (className !== undefined) {
|
|
137
|
-
|
|
136
|
+
div.className = className;
|
|
138
137
|
}
|
|
139
|
-
return
|
|
138
|
+
return div;
|
|
140
139
|
}
|
|
141
140
|
updateDOM() {
|
|
142
141
|
return false;
|
|
@@ -4,6 +4,7 @@ exports.INSERT_IMAGE_COMMAND = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
6
|
const lexical_1 = require("lexical");
|
|
7
|
+
const utils_1 = require("@lexical/utils");
|
|
7
8
|
const LexicalComposerContext_1 = require("@lexical/react/LexicalComposerContext");
|
|
8
9
|
const material_1 = require("@mui/material");
|
|
9
10
|
const styles_1 = require("@mui/material/styles");
|
|
@@ -40,7 +41,6 @@ function Image({ editor, className = '' }) {
|
|
|
40
41
|
};
|
|
41
42
|
editor.focus();
|
|
42
43
|
editor.dispatchCommand(exports.INSERT_IMAGE_COMMAND, data);
|
|
43
|
-
editor.dispatchCommand(lexical_1.INSERT_PARAGRAPH_COMMAND, undefined);
|
|
44
44
|
};
|
|
45
45
|
const handleUploadProgress = (chunks) => {
|
|
46
46
|
setUploading(Object.assign({}, chunks));
|
|
@@ -84,20 +84,15 @@ function ImagePlugin() {
|
|
|
84
84
|
return;
|
|
85
85
|
}
|
|
86
86
|
return editor.registerCommand(exports.INSERT_IMAGE_COMMAND, (payload) => {
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
width: payload.width,
|
|
97
|
-
height: payload.height
|
|
98
|
-
});
|
|
99
|
-
selection.insertNodes([imageNode]);
|
|
100
|
-
}
|
|
87
|
+
const imageNode = (0, ImageNode_1.$createImageNode)({
|
|
88
|
+
src: payload.src,
|
|
89
|
+
altText: payload.altText,
|
|
90
|
+
maxWidth: '100%',
|
|
91
|
+
width: payload.width,
|
|
92
|
+
height: payload.height
|
|
93
|
+
});
|
|
94
|
+
// The image is not editable so it is better to position it near the root element
|
|
95
|
+
(0, utils_1.$insertNodeToNearestRoot)(imageNode);
|
|
101
96
|
return true;
|
|
102
97
|
}, lexical_1.COMMAND_PRIORITY_EDITOR);
|
|
103
98
|
}, [editor]);
|
|
@@ -3,61 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const react_1 = tslib_1.__importDefault(require("react"));
|
|
5
5
|
const LexicalOnChangePlugin_1 = require("@lexical/react/LexicalOnChangePlugin");
|
|
6
|
-
const ImageNode_1 = require("../nodes/ImageNode");
|
|
7
|
-
const MentionNode_1 = require("../nodes/MentionNode");
|
|
8
|
-
const rich_text_1 = require("@lexical/rich-text");
|
|
9
|
-
const link_1 = require("@lexical/link");
|
|
10
|
-
const code_1 = require("@lexical/code");
|
|
11
6
|
const html_1 = require("@lexical/html");
|
|
12
|
-
const IS_BOLD = 1;
|
|
13
|
-
const IS_ITALIC = 2;
|
|
14
|
-
const convertText = (node) => {
|
|
15
|
-
if (node.getFormat() === IS_BOLD) {
|
|
16
|
-
return `<strong>${node.__text}</strong>`;
|
|
17
|
-
}
|
|
18
|
-
else if (node.getFormat() === IS_ITALIC) {
|
|
19
|
-
return `<em>${node.__text}</em>`;
|
|
20
|
-
}
|
|
21
|
-
return `<span>${node.__text}</span>`;
|
|
22
|
-
};
|
|
23
|
-
const convertNode = (node, children) => {
|
|
24
|
-
switch (node.getType()) {
|
|
25
|
-
case ImageNode_1.ImageNode.getType():
|
|
26
|
-
return `<img src="${node.__src}" alt="${node.__altText}" width="${node.__width}" height="${node.__height}" style="max-width: ${node.__maxWidth}px;" />`;
|
|
27
|
-
case MentionNode_1.MentionNode.getType():
|
|
28
|
-
return `<mention id="${node.__user.id}" ext-id="${node.__user.ext_id}">@${node.__user.username}</mention>`;
|
|
29
|
-
case link_1.AutoLinkNode.getType():
|
|
30
|
-
case link_1.LinkNode.getType():
|
|
31
|
-
return `<a href="${node.__url}">${node.__url}</a>`;
|
|
32
|
-
case 'list':
|
|
33
|
-
return `<${node.__tag}>${children}</${node.__tag}>`;
|
|
34
|
-
case 'listitem':
|
|
35
|
-
return `<li>${node.__value}</li>`;
|
|
36
|
-
case rich_text_1.QuoteNode.getType():
|
|
37
|
-
return `<blockquote>${children}</blockquote>`;
|
|
38
|
-
case code_1.CodeNode.getType():
|
|
39
|
-
return `<pre>${children}</pre>`;
|
|
40
|
-
case 'linebreak':
|
|
41
|
-
return `<br/>`;
|
|
42
|
-
case 'text':
|
|
43
|
-
return convertText(node);
|
|
44
|
-
case rich_text_1.HeadingNode.getType():
|
|
45
|
-
return `<${node.__tag}>${children}</${node.__tag}>`;
|
|
46
|
-
case 'paragraph':
|
|
47
|
-
return `<p>${children ? children : '<br/>'}</p>`;
|
|
48
|
-
case 'root':
|
|
49
|
-
return children;
|
|
50
|
-
default:
|
|
51
|
-
return '';
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
const $toHtml = (node) => {
|
|
55
|
-
let html = '';
|
|
56
|
-
// Create html for child nodes
|
|
57
|
-
node.getChildren && node.getChildren().map((child) => (html += $toHtml(child)));
|
|
58
|
-
// Return new html
|
|
59
|
-
return convertNode(node, html);
|
|
60
|
-
};
|
|
61
7
|
const OnChangePlugin = (props) => {
|
|
62
8
|
// PROPS
|
|
63
9
|
const { onChange } = props;
|
|
@@ -90,7 +90,7 @@ function Activities(inProps) {
|
|
|
90
90
|
* Render comments of feedObject
|
|
91
91
|
*/
|
|
92
92
|
function renderComments() {
|
|
93
|
-
return (react_1.default.createElement(react_1.default.Fragment, null, (commentsObject.feedObject.comment_count > 0 || comments.length > 0) && (react_1.default.createElement(CommentsObject_1.default, Object.assign({ feedObject: commentsObject.feedObject, comments: commentsObject.comments, startComments: comments, next: commentsObject.next, isLoadingNext: commentsObject.isLoadingNext, handleNext: handleNext, totalLoadedComments: commentsObject.comments.length + comments.length, totalComments: commentsObject.feedObject.comment_count, hideAdvertising: true }, CommentsObjectProps, { cacheStrategy: cacheStrategy, CommentsObjectSkeletonProps: { count: skeletonsCount }, CommentComponentProps: Object.assign(Object.assign(Object.assign({
|
|
93
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, (commentsObject.feedObject.comment_count > 0 || comments.length > 0) && (react_1.default.createElement(CommentsObject_1.default, Object.assign({ feedObject: commentsObject.feedObject, comments: commentsObject.comments, startComments: comments, next: commentsObject.next, isLoadingNext: commentsObject.isLoadingNext, handleNext: handleNext, totalLoadedComments: commentsObject.comments.length + comments.length, totalComments: commentsObject.feedObject.comment_count, hideAdvertising: true }, CommentsObjectProps, { cacheStrategy: cacheStrategy, CommentsObjectSkeletonProps: { count: skeletonsCount }, CommentComponentProps: Object.assign(Object.assign(Object.assign(Object.assign({}, (CommentsObjectProps.CommentComponentProps ? CommentsObjectProps.CommentComponentProps : {})), { truncateContent: true }), CommentComponentProps), { cacheStrategy }), inPlaceLoadMoreContents: false })))));
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
96
96
|
* Renders root object
|
|
@@ -461,7 +461,7 @@ function FeedObject(inProps) {
|
|
|
461
461
|
template === feedObject_1.SCFeedObjectTemplateType.PREVIEW && (obj.comment_count > 0 || (feedObjectActivities && feedObjectActivities.length > 0)) && (react_1.default.createElement(material_1.Collapse, { in: expandedActivities, timeout: "auto", classes: { root: classes.activitiesSection } },
|
|
462
462
|
react_1.default.createElement(CardContent_1.default, { className: classes.activitiesContent },
|
|
463
463
|
react_1.default.createElement(Activities_1.default, Object.assign({ feedObject: obj, key: selectedActivities, feedObjectActivities: feedObjectActivities, activitiesType: selectedActivities, onSetSelectedActivities: handleSelectedActivities, comments: comments, CommentsObjectProps: {
|
|
464
|
-
CommentComponentProps: Object.assign({ onDelete: handleDeleteComment, truncateContent: true,
|
|
464
|
+
CommentComponentProps: Object.assign({ onDelete: handleDeleteComment, truncateContent: true, CommentsObjectComponentProps: { inPlaceLoadMoreContents: false } }, CommentComponentProps),
|
|
465
465
|
CommentObjectSkeletonProps: CommentObjectSkeletonProps
|
|
466
466
|
}, cacheStrategy: cacheStrategy }, ActivitiesProps))))),
|
|
467
467
|
composerOpen && (react_1.default.createElement(Composer_1.default, { open: composerOpen, feedObject: obj, onClose: handleToggleEdit, onSuccess: handleEditSuccess, maxWidth: "sm", fullWidth: true, scroll: "body" })))) : (react_1.default.createElement(Skeleton_1.default, Object.assign({ template: template }, FeedObjectSkeletonProps)))));
|
|
@@ -84,7 +84,7 @@ export interface CommentObjectProps {
|
|
|
84
84
|
* Props to spread to sub comments object
|
|
85
85
|
* @default {elevation: 0, WidgetProps: {variant: 'outlined'} as WidgetProps}
|
|
86
86
|
*/
|
|
87
|
-
|
|
87
|
+
CommentsObjectComponentProps?: CommentsObjectProps;
|
|
88
88
|
/**
|
|
89
89
|
* If datetime is linkable or not
|
|
90
90
|
* @default true
|
|
@@ -93,7 +93,7 @@ export default function CommentObject(inProps) {
|
|
|
93
93
|
props: inProps,
|
|
94
94
|
name: PREFIX
|
|
95
95
|
});
|
|
96
|
-
const { id = `comment_object_${props.commentObjectId ? props.commentObjectId : props.commentObject ? props.commentObject.id : ''}`, className, commentObjectId, commentObject, feedObjectId, feedObject, feedObjectType = SCContributionType.POST, commentReply, onOpenReply, onDelete, onVote, elevation = 0, truncateContent = false, CommentObjectSkeletonProps = { elevation, WidgetProps: { variant: 'outlined' } }, CommentObjectReplyProps = { elevation, WidgetProps: { variant: 'outlined' } }, linkableCommentDateTime = true, cacheStrategy = CacheStrategies.NETWORK_ONLY,
|
|
96
|
+
const { id = `comment_object_${props.commentObjectId ? props.commentObjectId : props.commentObject ? props.commentObject.id : ''}`, className, commentObjectId, commentObject, feedObjectId, feedObject, feedObjectType = SCContributionType.POST, commentReply, onOpenReply, onDelete, onVote, elevation = 0, truncateContent = false, CommentObjectSkeletonProps = { elevation, WidgetProps: { variant: 'outlined' } }, CommentObjectReplyProps = { elevation, WidgetProps: { variant: 'outlined' } }, linkableCommentDateTime = true, cacheStrategy = CacheStrategies.NETWORK_ONLY, CommentsObjectComponentProps = {} } = props, rest = __rest(props, ["id", "className", "commentObjectId", "commentObject", "feedObjectId", "feedObject", "feedObjectType", "commentReply", "onOpenReply", "onDelete", "onVote", "elevation", "truncateContent", "CommentObjectSkeletonProps", "CommentObjectReplyProps", "linkableCommentDateTime", "cacheStrategy", "CommentsObjectComponentProps"]);
|
|
97
97
|
// CONTEXT
|
|
98
98
|
const scContext = useSCContext();
|
|
99
99
|
const scUserContext = useContext(SCUserContext);
|
|
@@ -364,7 +364,7 @@ export default function CommentObject(inProps) {
|
|
|
364
364
|
*/
|
|
365
365
|
function renderLatestComment(comment) {
|
|
366
366
|
return (React.createElement(CommentsObject, Object.assign({ feedObject: commentsObject.feedObject, feedObjectType: commentsObject.feedObject ? commentsObject.feedObject.type : feedObjectType, hideAdvertising: true, comments: [].concat(commentsObject.comments).reverse(), endComments: comment.latest_comments, previous: comment.comment_count > comment.latest_comments.length ? commentsObject.next : null, isLoadingPrevious: commentsObject.isLoadingNext, handlePrevious: commentsObject.getNextPage, CommentComponentProps: Object.assign(Object.assign({ onOpenReply: reply, CommentObjectSkeletonProps, elevation: elevation, linkableCommentDateTime: linkableCommentDateTime }, rest), { cacheStrategy,
|
|
367
|
-
truncateContent }), CommentsObjectSkeletonProps: { count: 1, CommentObjectSkeletonProps: CommentObjectSkeletonProps }, inPlaceLoadMoreContents: true },
|
|
367
|
+
truncateContent }), CommentsObjectSkeletonProps: { count: 1, CommentObjectSkeletonProps: CommentObjectSkeletonProps }, inPlaceLoadMoreContents: true }, CommentsObjectComponentProps, { cacheStrategy: cacheStrategy })));
|
|
368
368
|
}
|
|
369
369
|
/**
|
|
370
370
|
* Render comments
|
|
@@ -90,9 +90,8 @@ function ImageComponent({ src, altText, nodeKey, maxWidth }) {
|
|
|
90
90
|
unregister();
|
|
91
91
|
};
|
|
92
92
|
}, [clearSelection, editor, isSelected, nodeKey, onDelete, onEnter, onEscape, setSelected]);
|
|
93
|
-
const isFocused = isSelected;
|
|
94
93
|
return (React.createElement(Suspense, { fallback: null },
|
|
95
|
-
React.createElement(LazyImage, { className:
|
|
94
|
+
React.createElement(LazyImage, { className: isSelected ? `selected` : null, src: src, altText: altText, imageRef: imageRef, maxWidth: maxWidth })));
|
|
96
95
|
}
|
|
97
96
|
function convertImageElement(domNode) {
|
|
98
97
|
if (domNode instanceof HTMLImageElement) {
|
|
@@ -126,13 +125,13 @@ export class ImageNode extends DecoratorNode {
|
|
|
126
125
|
}
|
|
127
126
|
// View
|
|
128
127
|
createDOM(config) {
|
|
129
|
-
const
|
|
128
|
+
const div = document.createElement('div');
|
|
130
129
|
const theme = config.theme;
|
|
131
130
|
const className = theme.image;
|
|
132
131
|
if (className !== undefined) {
|
|
133
|
-
|
|
132
|
+
div.className = className;
|
|
134
133
|
}
|
|
135
|
-
return
|
|
134
|
+
return div;
|
|
136
135
|
}
|
|
137
136
|
updateDOM() {
|
|
138
137
|
return false;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { __rest } from "tslib";
|
|
2
2
|
import React, { forwardRef, useEffect, useState } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { COMMAND_PRIORITY_EDITOR, createCommand, } from 'lexical';
|
|
4
|
+
import { $insertNodeToNearestRoot } from '@lexical/utils';
|
|
4
5
|
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
5
6
|
import { CircularProgress, Icon, IconButton } from '@mui/material';
|
|
6
7
|
import { styled } from '@mui/material/styles';
|
|
@@ -37,7 +38,6 @@ function Image({ editor, className = '' }) {
|
|
|
37
38
|
};
|
|
38
39
|
editor.focus();
|
|
39
40
|
editor.dispatchCommand(INSERT_IMAGE_COMMAND, data);
|
|
40
|
-
editor.dispatchCommand(INSERT_PARAGRAPH_COMMAND, undefined);
|
|
41
41
|
};
|
|
42
42
|
const handleUploadProgress = (chunks) => {
|
|
43
43
|
setUploading(Object.assign({}, chunks));
|
|
@@ -81,20 +81,15 @@ export default function ImagePlugin() {
|
|
|
81
81
|
return;
|
|
82
82
|
}
|
|
83
83
|
return editor.registerCommand(INSERT_IMAGE_COMMAND, (payload) => {
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
width: payload.width,
|
|
94
|
-
height: payload.height
|
|
95
|
-
});
|
|
96
|
-
selection.insertNodes([imageNode]);
|
|
97
|
-
}
|
|
84
|
+
const imageNode = $createImageNode({
|
|
85
|
+
src: payload.src,
|
|
86
|
+
altText: payload.altText,
|
|
87
|
+
maxWidth: '100%',
|
|
88
|
+
width: payload.width,
|
|
89
|
+
height: payload.height
|
|
90
|
+
});
|
|
91
|
+
// The image is not editable so it is better to position it near the root element
|
|
92
|
+
$insertNodeToNearestRoot(imageNode);
|
|
98
93
|
return true;
|
|
99
94
|
}, COMMAND_PRIORITY_EDITOR);
|
|
100
95
|
}, [editor]);
|
|
@@ -1,60 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { OnChangePlugin as LexicalOnChangePlugin } from '@lexical/react/LexicalOnChangePlugin';
|
|
3
|
-
import { ImageNode } from '../nodes/ImageNode';
|
|
4
|
-
import { MentionNode } from '../nodes/MentionNode';
|
|
5
|
-
import { HeadingNode, QuoteNode } from '@lexical/rich-text';
|
|
6
|
-
import { AutoLinkNode, LinkNode } from '@lexical/link';
|
|
7
|
-
import { CodeNode } from '@lexical/code';
|
|
8
3
|
import { $generateHtmlFromNodes } from '@lexical/html';
|
|
9
|
-
const IS_BOLD = 1;
|
|
10
|
-
const IS_ITALIC = 2;
|
|
11
|
-
const convertText = (node) => {
|
|
12
|
-
if (node.getFormat() === IS_BOLD) {
|
|
13
|
-
return `<strong>${node.__text}</strong>`;
|
|
14
|
-
}
|
|
15
|
-
else if (node.getFormat() === IS_ITALIC) {
|
|
16
|
-
return `<em>${node.__text}</em>`;
|
|
17
|
-
}
|
|
18
|
-
return `<span>${node.__text}</span>`;
|
|
19
|
-
};
|
|
20
|
-
const convertNode = (node, children) => {
|
|
21
|
-
switch (node.getType()) {
|
|
22
|
-
case ImageNode.getType():
|
|
23
|
-
return `<img src="${node.__src}" alt="${node.__altText}" width="${node.__width}" height="${node.__height}" style="max-width: ${node.__maxWidth}px;" />`;
|
|
24
|
-
case MentionNode.getType():
|
|
25
|
-
return `<mention id="${node.__user.id}" ext-id="${node.__user.ext_id}">@${node.__user.username}</mention>`;
|
|
26
|
-
case AutoLinkNode.getType():
|
|
27
|
-
case LinkNode.getType():
|
|
28
|
-
return `<a href="${node.__url}">${node.__url}</a>`;
|
|
29
|
-
case 'list':
|
|
30
|
-
return `<${node.__tag}>${children}</${node.__tag}>`;
|
|
31
|
-
case 'listitem':
|
|
32
|
-
return `<li>${node.__value}</li>`;
|
|
33
|
-
case QuoteNode.getType():
|
|
34
|
-
return `<blockquote>${children}</blockquote>`;
|
|
35
|
-
case CodeNode.getType():
|
|
36
|
-
return `<pre>${children}</pre>`;
|
|
37
|
-
case 'linebreak':
|
|
38
|
-
return `<br/>`;
|
|
39
|
-
case 'text':
|
|
40
|
-
return convertText(node);
|
|
41
|
-
case HeadingNode.getType():
|
|
42
|
-
return `<${node.__tag}>${children}</${node.__tag}>`;
|
|
43
|
-
case 'paragraph':
|
|
44
|
-
return `<p>${children ? children : '<br/>'}</p>`;
|
|
45
|
-
case 'root':
|
|
46
|
-
return children;
|
|
47
|
-
default:
|
|
48
|
-
return '';
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
const $toHtml = (node) => {
|
|
52
|
-
let html = '';
|
|
53
|
-
// Create html for child nodes
|
|
54
|
-
node.getChildren && node.getChildren().map((child) => (html += $toHtml(child)));
|
|
55
|
-
// Return new html
|
|
56
|
-
return convertNode(node, html);
|
|
57
|
-
};
|
|
58
4
|
const OnChangePlugin = (props) => {
|
|
59
5
|
// PROPS
|
|
60
6
|
const { onChange } = props;
|
|
@@ -88,7 +88,7 @@ export default function Activities(inProps) {
|
|
|
88
88
|
* Render comments of feedObject
|
|
89
89
|
*/
|
|
90
90
|
function renderComments() {
|
|
91
|
-
return (React.createElement(React.Fragment, null, (commentsObject.feedObject.comment_count > 0 || comments.length > 0) && (React.createElement(CommentsObject, Object.assign({ feedObject: commentsObject.feedObject, comments: commentsObject.comments, startComments: comments, next: commentsObject.next, isLoadingNext: commentsObject.isLoadingNext, handleNext: handleNext, totalLoadedComments: commentsObject.comments.length + comments.length, totalComments: commentsObject.feedObject.comment_count, hideAdvertising: true }, CommentsObjectProps, { cacheStrategy: cacheStrategy, CommentsObjectSkeletonProps: { count: skeletonsCount }, CommentComponentProps: Object.assign(Object.assign(Object.assign({
|
|
91
|
+
return (React.createElement(React.Fragment, null, (commentsObject.feedObject.comment_count > 0 || comments.length > 0) && (React.createElement(CommentsObject, Object.assign({ feedObject: commentsObject.feedObject, comments: commentsObject.comments, startComments: comments, next: commentsObject.next, isLoadingNext: commentsObject.isLoadingNext, handleNext: handleNext, totalLoadedComments: commentsObject.comments.length + comments.length, totalComments: commentsObject.feedObject.comment_count, hideAdvertising: true }, CommentsObjectProps, { cacheStrategy: cacheStrategy, CommentsObjectSkeletonProps: { count: skeletonsCount }, CommentComponentProps: Object.assign(Object.assign(Object.assign(Object.assign({}, (CommentsObjectProps.CommentComponentProps ? CommentsObjectProps.CommentComponentProps : {})), { truncateContent: true }), CommentComponentProps), { cacheStrategy }), inPlaceLoadMoreContents: false })))));
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
94
|
* Renders root object
|
|
@@ -459,7 +459,7 @@ export default function FeedObject(inProps) {
|
|
|
459
459
|
template === SCFeedObjectTemplateType.PREVIEW && (obj.comment_count > 0 || (feedObjectActivities && feedObjectActivities.length > 0)) && (React.createElement(Collapse, { in: expandedActivities, timeout: "auto", classes: { root: classes.activitiesSection } },
|
|
460
460
|
React.createElement(CardContent, { className: classes.activitiesContent },
|
|
461
461
|
React.createElement(Activities, Object.assign({ feedObject: obj, key: selectedActivities, feedObjectActivities: feedObjectActivities, activitiesType: selectedActivities, onSetSelectedActivities: handleSelectedActivities, comments: comments, CommentsObjectProps: {
|
|
462
|
-
CommentComponentProps: Object.assign({ onDelete: handleDeleteComment, truncateContent: true,
|
|
462
|
+
CommentComponentProps: Object.assign({ onDelete: handleDeleteComment, truncateContent: true, CommentsObjectComponentProps: { inPlaceLoadMoreContents: false } }, CommentComponentProps),
|
|
463
463
|
CommentObjectSkeletonProps: CommentObjectSkeletonProps
|
|
464
464
|
}, cacheStrategy: cacheStrategy }, ActivitiesProps))))),
|
|
465
465
|
composerOpen && (React.createElement(Composer, { open: composerOpen, feedObject: obj, onClose: handleToggleEdit, onSuccess: handleEditSuccess, maxWidth: "sm", fullWidth: true, scroll: "body" })))) : (React.createElement(FeedObjectSkeleton, Object.assign({ template: template }, FeedObjectSkeletonProps)))));
|