diff --git a/src/discussions/discussions-home/DiscussionSidebar.test.jsx b/src/discussions/discussions-home/DiscussionSidebar.test.jsx index 0fcefc67..5bdf127b 100644 --- a/src/discussions/discussions-home/DiscussionSidebar.test.jsx +++ b/src/discussions/discussions-home/DiscussionSidebar.test.jsx @@ -73,7 +73,10 @@ describe('DiscussionSidebar', () => { test('User will be redirected to "All Posts" by default', async () => { axiosMock.onGet(threadsApiUrl) .reply(({ params }) => [200, Factory.build('threadsResult', {}, { - threadAttrs: { title: `Thread by ${params.author || 'other users'}` }, + threadAttrs: { + title: `Thread by ${params.author || 'other users'}`, + previewBody: 'thread preview body', + }, })]); renderComponent(); await act(async () => expect(await screen.findAllByText('Thread by other users')).toBeTruthy()); @@ -85,7 +88,10 @@ describe('DiscussionSidebar', () => { axiosMock.onGet(threadsApiUrl) .reply(({ params }) => [200, Factory.build('threadsResult', {}, { count: postCount, - threadAttrs: { title: `Thread by ${params.author || 'other users'}` }, + threadAttrs: { + title: `Thread by ${params.author || 'other users'}`, + previewBody: 'thread preview body', + }, })]); renderComponent(); await act(async () => expect(await screen.findAllByText('Thread by other users')).toBeTruthy()); diff --git a/src/discussions/posts/PostsView.test.jsx b/src/discussions/posts/PostsView.test.jsx index accddcc4..d213dbc8 100644 --- a/src/discussions/posts/PostsView.test.jsx +++ b/src/discussions/posts/PostsView.test.jsx @@ -94,7 +94,7 @@ describe('PostsView', () => { axiosMock.onGet(getCohortsApiUrl(courseId)).reply(200, Factory.buildList('cohort', 1)); axiosMock.onGet(threadsApiUrl) .reply((args) => { - const threadAttrs = {}; + const threadAttrs = { previewBody: 'thread preview body' }; if (args.params.author) { threadAttrs.author = args.params.author; } diff --git a/src/discussions/posts/post/PostLink.jsx b/src/discussions/posts/post/PostLink.jsx index 2a73bfd1..6155ccca 100644 --- a/src/discussions/posts/post/PostLink.jsx +++ b/src/discussions/posts/post/PostLink.jsx @@ -7,11 +7,10 @@ import { injectIntl, intlShape } from '@edx/frontend-platform/i18n'; import { Badge, Icon } from '@edx/paragon'; import { Bookmark } from '@edx/paragon/icons'; -import HTMLLoader from '../../../components/HTMLLoader'; import { AvatarBorderAndLabelColors, Routes, ThreadType } from '../../../data/constants'; import AuthorLabel from '../../common/AuthorLabel'; import { DiscussionContext } from '../../common/context'; -import { discussionsPath } from '../../utils'; +import { discussionsPath, isPostPreviewAvailable } from '../../utils'; import messages from './messages'; import PostFooter from './PostFooter'; import { PostAvatar } from './PostHeader'; @@ -84,7 +83,9 @@ function PostLink({
- + {isPostPreviewAvailable(post.previewBody) + ? post.previewBody + : intl.formatMessage(messages.postWithoutPreview)}
diff --git a/src/discussions/posts/post/messages.js b/src/discussions/posts/post/messages.js index adfdbb12..8d8764e5 100644 --- a/src/discussions/posts/post/messages.js +++ b/src/discussions/posts/post/messages.js @@ -111,6 +111,11 @@ const messages = defineMessages({ defaultMessage: 'Reason', description: 'Message shown to user to inform them why a post was edited', }, + postWithoutPreview: { + id: 'discussions.post.postWithoutPreview', + defaultMessage: 'No preview available', + description: 'No preview available', + }, }); export default messages; diff --git a/src/discussions/utils.js b/src/discussions/utils.js index 3f403380..8facdd58 100644 --- a/src/discussions/utils.js +++ b/src/discussions/utils.js @@ -224,3 +224,17 @@ export function postMessageToParent(type, payload = {}) { }); } } + +export const isPostPreviewAvailable = (htmlNode) => { + const containsImage = htmlNode.match(/()/); + const isLatex = htmlNode.match(/(\${1,2})((?:\\.|.)*)/) + || htmlNode.match(/(\[mathjax](.+?))+/) + || htmlNode.match(/(\[mathjaxinline](.+?))+/) + || htmlNode.match(/(\\\[(.+?))+/) + || htmlNode.match(/(\\\((.+?))+/); + + if (containsImage || isLatex || htmlNode === '') { + return false; + } + return true; +};