From 3c84df29fba2a67df9dfd9d3f5d20f01f711c946 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Thu, 20 Aug 2020 22:45:51 -0300 Subject: [PATCH] [FIX] MarkdownText usage (#18621) --- .../cloud/ManualWorkspaceRegistrationModal.js | 2 +- client/admin/settings/Setting.js | 2 +- client/components/basic/MarkdownText.js | 13 +++++++------ client/components/basic/UserCard.js | 3 ++- client/views/directory/UserTab.js | 15 +++++++-------- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/client/admin/cloud/ManualWorkspaceRegistrationModal.js b/client/admin/cloud/ManualWorkspaceRegistrationModal.js index b424942a1e7..5e3231e0858 100644 --- a/client/admin/cloud/ManualWorkspaceRegistrationModal.js +++ b/client/admin/cloud/ManualWorkspaceRegistrationModal.js @@ -67,7 +67,7 @@ function CopyStep({ onNextButtonClick }) { {t('Copy')} - + diff --git a/client/admin/settings/Setting.js b/client/admin/settings/Setting.js index fb75c660733..7b78c8253bf 100644 --- a/client/admin/settings/Setting.js +++ b/client/admin/settings/Setting.js @@ -132,7 +132,7 @@ export function Setting({ className, settingId, sectionChanged }) { } = setting; const label = (i18nLabel && t(i18nLabel)) || (_id || t(_id)); - const hint = useMemo(() => t.has(i18nDescription) && , [i18nDescription, t]); + const hint = useMemo(() => t.has(i18nDescription) && , [i18nDescription, t]); const callout = useMemo(() => alert && , [alert, t]); const hasResetButton = !disableReset && !readonly && type !== 'asset' && (JSON.stringify(packageEditor) !== JSON.stringify(editor) || JSON.stringify(value) !== JSON.stringify(packageValue)) && !disabled; diff --git a/client/components/basic/MarkdownText.js b/client/components/basic/MarkdownText.js index aabcd2e1e11..7ac5d141ee8 100644 --- a/client/components/basic/MarkdownText.js +++ b/client/components/basic/MarkdownText.js @@ -1,3 +1,4 @@ +import s from 'underscore.string'; import { Box } from '@rocket.chat/fuselage'; import React, { useMemo } from 'react'; import marked from 'marked'; @@ -5,13 +6,13 @@ import marked from 'marked'; marked.InlineLexer.rules.gfm.strong = /^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/; marked.InlineLexer.rules.gfm.em = /^__(?=\S)([\s\S]*?\S)__(?!_)|^_(?=\S)([\s\S]*?\S)_(?!_)/; -function MarkdownText({ content, ...props }) { - const options = useMemo(() => ({ - gfm: true, - headerIds: false, - }), []); +const options = { + gfm: true, + headerIds: false, +}; - const __html = useMemo(() => content && marked(content, options), [content, options]); +function MarkdownText({ content, preserveHtml = false, ...props }) { + const __html = useMemo(() => content && marked(preserveHtml ? content : s.escapeHTML(content), options), [content, preserveHtml]); return ; } diff --git a/client/components/basic/UserCard.js b/client/components/basic/UserCard.js index 942408d1e22..56377067f4f 100644 --- a/client/components/basic/UserCard.js +++ b/client/components/basic/UserCard.js @@ -4,6 +4,7 @@ import { Box, Tag, Button, Icon, Skeleton } from '@rocket.chat/fuselage'; import { ActionButton } from './Buttons/ActionButton'; import UserAvatar from './avatar/UserAvatar'; import * as Status from './UserStatus'; +import MarkdownText from './MarkdownText'; const clampStyle = { display: '-webkit-box', @@ -84,7 +85,7 @@ const UserCard = forwardRef(({ { customStatus && {customStatus} } {roles} {localTime} - { bio && {bio} } + { bio && } {open && {t('See_full_profile')}} {onClose && } diff --git a/client/views/directory/UserTab.js b/client/views/directory/UserTab.js index 1ed4f2bce39..222c11d040a 100644 --- a/client/views/directory/UserTab.js +++ b/client/views/directory/UserTab.js @@ -11,8 +11,7 @@ import { useEndpointData } from '../../hooks/useEndpointData'; import { useFormatDate } from '../../hooks/useFormatDate'; import UserAvatar from '../../components/basic/avatar/UserAvatar'; import NotAuthorizedPage from '../../components/NotAuthorizedPage'; - -const style = { whiteSpace: 'nowrap', textOverflow: 'ellipsis', overflow: 'hidden' }; +import MarkdownText from '../../components/basic/MarkdownText'; const FilterByText = ({ setFilter, ...props }) => { const t = useTranslation(); @@ -79,24 +78,24 @@ function UserTable({ - + - {name || username}{nickname && ` (${ nickname })`} {username} + {name || username}{nickname && ` (${ nickname })`} {username} - {bio} + {mediaQuery && canViewFullOtherUserInfo - && + && {emails && emails[0].address} } {federation - && + && {domain} } - {mediaQuery && + {mediaQuery && {formatDate(createdAt)} } , [mediaQuery, federation, canViewFullOtherUserInfo, formatDate, onClick]);