@selfcommunity/react-ui 0.7.0-alpha.323 → 0.7.0-alpha.325

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.
@@ -3,12 +3,14 @@ import React, { useState } from 'react';
3
3
  import { styled } from '@mui/material/styles';
4
4
  import { Avatar } from '@mui/material';
5
5
  import { Link, SCRoutes, useSCRouting } from '@selfcommunity/react-core';
6
- import { defineMessages, useIntl } from 'react-intl';
6
+ import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
7
7
  import DateTimeAgo from '../../../../../shared/DateTimeAgo';
8
8
  import classNames from 'classnames';
9
9
  import { useThemeProps } from '@mui/system';
10
10
  import BaseItem from '../../../../../shared/BaseItem';
11
11
  import UserDeletedSnackBar from '../../../../../shared/UserDeletedSnackBar';
12
+ import { getContributionHtml, getRouteData } from '../../../../../utils/contribution';
13
+ import { MAX_SUMMARY_LENGTH } from '../../../../../constants/Feed';
12
14
  const messages = defineMessages({
13
15
  comment: {
14
16
  id: 'ui.feedObject.relevantActivities.comment',
@@ -19,7 +21,8 @@ const PREFIX = 'SCCommentRelevantActivity';
19
21
  const classes = {
20
22
  root: `${PREFIX}-root`,
21
23
  avatar: `${PREFIX}-avatar`,
22
- username: `${PREFIX}-username`
24
+ username: `${PREFIX}-username`,
25
+ showMoreContent: `${PREFIX}-show-more-content`
23
26
  };
24
27
  const Root = styled(BaseItem, {
25
28
  name: PREFIX,
@@ -53,11 +56,19 @@ export default function CommentRelevantActivity(inProps) {
53
56
  // INTL
54
57
  const intl = useIntl();
55
58
  // RENDER
59
+ const summaryHtmlTruncated = 'summary_truncated' in activityObject.comment
60
+ ? activityObject.comment.summary_truncated
61
+ : activityObject.comment.html.length >= MAX_SUMMARY_LENGTH;
62
+ const commentHtml = 'summary_html' in activityObject.comment ? activityObject.comment.summary_html : activityObject.comment.summary;
63
+ const summaryHtml = getContributionHtml(commentHtml, scRoutingContext.url);
56
64
  return (React.createElement(React.Fragment, null,
57
65
  React.createElement(Root, Object.assign({}, rest, { className: classNames(classes.root, className), image: React.createElement(Link, Object.assign({}, (!activityObject.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, activityObject.author) }), { onClick: activityObject.author.deleted ? () => setOpenAlert(true) : null }),
58
66
  React.createElement(Avatar, { alt: activityObject.author.username, variant: "circular", src: activityObject.author.avatar, className: classes.avatar })), primary: React.createElement(React.Fragment, null, intl.formatMessage(messages.comment, {
59
67
  username: (React.createElement(Link, Object.assign({}, (!activityObject.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, activityObject.author) }), { onClick: activityObject.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }), activityObject.author.username)),
60
- comment: activityObject.comment.summary
68
+ comment: (React.createElement(React.Fragment, null,
69
+ summaryHtml,
70
+ React.createElement(Link, { to: scRoutingContext.url(SCRoutes.COMMENT_ROUTE_NAME, getRouteData(activityObject.comment)), className: classes.showMoreContent },
71
+ React.createElement(FormattedMessage, { id: "ui.commentObject.showMore", defaultMessage: "ui.commentObject.showMore" }))))
61
72
  })), secondary: React.createElement(DateTimeAgo, { date: activityObject.active_at }) })),
62
73
  openAlert && React.createElement(UserDeletedSnackBar, { open: openAlert, handleClose: () => setOpenAlert(false) })));
63
74
  }
@@ -346,12 +346,15 @@ export default function FeedObject(inProps) {
346
346
  setIsReplying(true);
347
347
  performReply(comment)
348
348
  .then((data) => {
349
+ // if add a comment -> the comment must be untruncated
350
+ const _data = data;
351
+ _data.summary_truncated = false;
349
352
  if (selectedActivities !== SCFeedObjectActivitiesType.RECENT_COMMENTS) {
350
353
  setComments([]);
351
354
  setSelectedActivities(SCFeedObjectActivitiesType.RECENT_COMMENTS);
352
355
  }
353
356
  else {
354
- setComments([...[data], ...comments]);
357
+ setComments([...[_data], ...comments]);
355
358
  }
356
359
  setIsReplying(false);
357
360
  const newObj = Object.assign({}, obj, { comment_count: obj.comment_count + 1 });
@@ -378,8 +381,8 @@ export default function FeedObject(inProps) {
378
381
  * Get contribution summary
379
382
  */
380
383
  const getContributionSummary = useCallback((obj, template) => {
381
- const contributionHtml = obj.summary_html ? obj.summary_html : obj.summary;
382
- const summaryHtmlTruncated = obj.summary_truncated ? obj.summary_truncated : obj.html.length >= MAX_SUMMARY_LENGTH;
384
+ const contributionHtml = 'summary_html' in obj ? obj.summary_html : obj.summary;
385
+ const summaryHtmlTruncated = 'summary_truncated' in obj ? obj.summary_truncated : obj.html.length >= MAX_SUMMARY_LENGTH;
383
386
  const summaryHtml = expanded || template === SCFeedObjectTemplateType.DETAIL
384
387
  ? getContributionHtml(obj.html, scRoutingContext.url)
385
388
  : getContributionHtml(contributionHtml, scRoutingContext.url);
@@ -456,7 +459,7 @@ export default function FeedObject(inProps) {
456
459
  template === SCFeedObjectTemplateType.PREVIEW && (obj.comment_count > 0 || (feedObjectActivities && feedObjectActivities.length > 0)) && (React.createElement(Collapse, { in: expandedActivities, timeout: "auto", classes: { root: classes.activitiesSection } },
457
460
  React.createElement(CardContent, { className: classes.activitiesContent },
458
461
  React.createElement(Activities, Object.assign({ feedObject: obj, key: selectedActivities, feedObjectActivities: feedObjectActivities, activitiesType: selectedActivities, onSetSelectedActivities: handleSelectedActivities, comments: comments, CommentsObjectProps: {
459
- CommentComponentProps: Object.assign({ onDelete: handleDeleteComment, truncateContent: true }, CommentComponentProps),
462
+ CommentComponentProps: Object.assign({ onDelete: handleDeleteComment, truncateContent: true, CommentsObjectProps: { inPlaceLoadMoreContents: false } }, CommentComponentProps),
460
463
  CommentObjectSkeletonProps: CommentObjectSkeletonProps
461
464
  }, cacheStrategy: cacheStrategy }, ActivitiesProps))))),
462
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)))));