From dbb08ef94838391be1effa57ff802fcd15cafe42 Mon Sep 17 00:00:00 2001 From: Subhojit-Dey <66687621+Subhojit-Dey1234@users.noreply.github.com> Date: Wed, 24 Jan 2024 22:36:54 +0530 Subject: [PATCH] feat: Implemented InlineCode handling in Bold, Italic and Strike (#31349) --- .changeset/calm-carrots-judge.md | 12 ++++++++++ apps/meteor/ee/server/services/package.json | 2 +- apps/meteor/package.json | 2 +- .../markup/elements/BoldSpan.tsx | 3 ++- .../markup/elements/ItalicSpan.tsx | 3 ++- .../markup/elements/StrikeSpan.tsx | 3 ++- packages/core-services/package.json | 2 +- packages/core-typings/package.json | 2 +- packages/gazzodown/package.json | 2 +- packages/gazzodown/src/elements/BoldSpan.tsx | 17 ++++++++++++-- .../gazzodown/src/elements/ImageElement.tsx | 11 +++++++++- .../gazzodown/src/elements/ItalicSpan.tsx | 17 ++++++++++++-- .../gazzodown/src/elements/StrikeSpan.tsx | 17 ++++++++++++-- packages/livechat/package.json | 2 +- packages/rest-typings/package.json | 2 +- yarn.lock | 22 +++++++++---------- 16 files changed, 91 insertions(+), 28 deletions(-) create mode 100644 .changeset/calm-carrots-judge.md diff --git a/.changeset/calm-carrots-judge.md b/.changeset/calm-carrots-judge.md new file mode 100644 index 00000000000..3bfced31b30 --- /dev/null +++ b/.changeset/calm-carrots-judge.md @@ -0,0 +1,12 @@ +--- +"@rocket.chat/meteor": patch +"@rocket.chat/core-services": patch +"@rocket.chat/core-typings": patch +"@rocket.chat/gazzodown": patch +"@rocket.chat/livechat": patch +"@rocket.chat/rest-typings": patch +"@rocket.chat/pdf-worker": patch +"rocketchat-services": patch +--- + +feat: Implemented InlineCode handling in Bold, Italic and Strike diff --git a/apps/meteor/ee/server/services/package.json b/apps/meteor/ee/server/services/package.json index cd5f2210f15..15c3f9b9d0f 100644 --- a/apps/meteor/ee/server/services/package.json +++ b/apps/meteor/ee/server/services/package.json @@ -22,7 +22,7 @@ "@rocket.chat/core-services": "workspace:^", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/emitter": "~0.31.25", - "@rocket.chat/message-parser": "~0.31.27", + "@rocket.chat/message-parser": "~0.31.28", "@rocket.chat/model-typings": "workspace:^", "@rocket.chat/models": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", diff --git a/apps/meteor/package.json b/apps/meteor/package.json index 8fcc9eeac06..1062b9d32b2 100644 --- a/apps/meteor/package.json +++ b/apps/meteor/package.json @@ -256,7 +256,7 @@ "@rocket.chat/logger": "workspace:^", "@rocket.chat/logo": "^0.31.29", "@rocket.chat/memo": "~0.31.25", - "@rocket.chat/message-parser": "~0.31.27", + "@rocket.chat/message-parser": "~0.31.28", "@rocket.chat/model-typings": "workspace:^", "@rocket.chat/models": "workspace:^", "@rocket.chat/mp3-encoder": "0.24.0", diff --git a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/BoldSpan.tsx b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/BoldSpan.tsx index b54cb63d5ca..043d05e9ae0 100644 --- a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/BoldSpan.tsx +++ b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/BoldSpan.tsx @@ -17,7 +17,8 @@ type MessageBlock = | MessageParser.ChannelMention | MessageParser.UserMention | MessageParser.Link - | MessageParser.MarkupExcluding; + | MessageParser.MarkupExcluding + | MessageParser.InlineCode; type BoldSpanProps = { children: MessageBlock[]; diff --git a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/ItalicSpan.tsx b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/ItalicSpan.tsx index 590f5c39d93..1b7cc2abe9d 100644 --- a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/ItalicSpan.tsx +++ b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/ItalicSpan.tsx @@ -17,7 +17,8 @@ type MessageBlock = | MessageParser.ChannelMention | MessageParser.UserMention | MessageParser.Link - | MessageParser.MarkupExcluding; + | MessageParser.MarkupExcluding + | MessageParser.InlineCode; type ItalicSpanProps = { children: MessageBlock[]; diff --git a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/StrikeSpan.tsx b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/StrikeSpan.tsx index 623ff0aea73..78f87aaf314 100644 --- a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/StrikeSpan.tsx +++ b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/StrikeSpan.tsx @@ -17,7 +17,8 @@ type MessageBlock = | MessageParser.ChannelMention | MessageParser.UserMention | MessageParser.Link - | MessageParser.MarkupExcluding; + | MessageParser.MarkupExcluding + | MessageParser.InlineCode; type StrikeSpanProps = { children: MessageBlock[]; diff --git a/packages/core-services/package.json b/packages/core-services/package.json index b73d78e6a69..7a837367a71 100644 --- a/packages/core-services/package.json +++ b/packages/core-services/package.json @@ -37,7 +37,7 @@ "@rocket.chat/apps-engine": "1.41.0", "@rocket.chat/core-typings": "workspace:^", "@rocket.chat/icons": "^0.33.0", - "@rocket.chat/message-parser": "~0.31.27", + "@rocket.chat/message-parser": "~0.31.28", "@rocket.chat/models": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", "@rocket.chat/ui-kit": "workspace:~", diff --git a/packages/core-typings/package.json b/packages/core-typings/package.json index 22d7da540c0..c29651b4fc9 100644 --- a/packages/core-typings/package.json +++ b/packages/core-typings/package.json @@ -24,7 +24,7 @@ "dependencies": { "@rocket.chat/apps-engine": "1.41.0", "@rocket.chat/icons": "^0.33.0", - "@rocket.chat/message-parser": "~0.31.27", + "@rocket.chat/message-parser": "~0.31.28", "@rocket.chat/ui-kit": "workspace:~" }, "volta": { diff --git a/packages/gazzodown/package.json b/packages/gazzodown/package.json index 2016266984c..ecbbcbf672f 100644 --- a/packages/gazzodown/package.json +++ b/packages/gazzodown/package.json @@ -8,7 +8,7 @@ "@rocket.chat/css-in-js": "~0.31.25", "@rocket.chat/fuselage": "^0.44.2", "@rocket.chat/fuselage-tokens": "~0.32.0", - "@rocket.chat/message-parser": "~0.31.27", + "@rocket.chat/message-parser": "~0.31.28", "@rocket.chat/styled": "~0.31.25", "@rocket.chat/ui-client": "workspace:^", "@rocket.chat/ui-contexts": "workspace:^", diff --git a/packages/gazzodown/src/elements/BoldSpan.tsx b/packages/gazzodown/src/elements/BoldSpan.tsx index 2cc6c60140c..8ce85f4dccc 100644 --- a/packages/gazzodown/src/elements/BoldSpan.tsx +++ b/packages/gazzodown/src/elements/BoldSpan.tsx @@ -1,5 +1,6 @@ import type * as MessageParser from '@rocket.chat/message-parser'; import type { ReactElement } from 'react'; +import { lazy } from 'react'; import EmojiElement from '../emoji/EmojiElement'; import ChannelMentionElement from '../mentions/ChannelMentionElement'; @@ -9,12 +10,15 @@ import LinkSpan from './LinkSpan'; import PlainSpan from './PlainSpan'; import StrikeSpan from './StrikeSpan'; +const CodeElement = lazy(() => import('../code/CodeElement')); + type MessageBlock = | MessageParser.Emoji | MessageParser.ChannelMention | MessageParser.UserMention | MessageParser.Link - | MessageParser.MarkupExcluding; + | MessageParser.MarkupExcluding + | MessageParser.InlineCode; type BoldSpanProps = { children: MessageBlock[]; @@ -23,7 +27,13 @@ type BoldSpanProps = { const BoldSpan = ({ children }: BoldSpanProps): ReactElement => ( <> {children.map((block, index) => { - if (block.type === 'LINK' || block.type === 'PLAIN_TEXT' || block.type === 'STRIKE' || block.type === 'ITALIC') { + if ( + block.type === 'LINK' || + block.type === 'PLAIN_TEXT' || + block.type === 'STRIKE' || + block.type === 'ITALIC' || + block.type === 'INLINE_CODE' + ) { return {renderBlockComponent(block, index)}; } return renderBlockComponent(block, index); @@ -54,6 +64,9 @@ const renderBlockComponent = (block: MessageBlock, index: number): ReactElement case 'ITALIC': return ; + case 'INLINE_CODE': + return ; + default: return null; } diff --git a/packages/gazzodown/src/elements/ImageElement.tsx b/packages/gazzodown/src/elements/ImageElement.tsx index c42bba91f88..fc685908476 100644 --- a/packages/gazzodown/src/elements/ImageElement.tsx +++ b/packages/gazzodown/src/elements/ImageElement.tsx @@ -2,7 +2,13 @@ import type * as MessageParser from '@rocket.chat/message-parser'; import { ReactElement, useMemo } from 'react'; const flattenMarkup = ( - markup: MessageParser.Markup | MessageParser.Link | MessageParser.Emoji | MessageParser.ChannelMention | MessageParser.UserMention, + markup: + | MessageParser.Markup + | MessageParser.InlineCode + | MessageParser.Link + | MessageParser.Emoji + | MessageParser.ChannelMention + | MessageParser.UserMention, ): string => { switch (markup.type) { case 'PLAIN_TEXT': @@ -13,6 +19,9 @@ const flattenMarkup = ( case 'STRIKE': return markup.value.map(flattenMarkup).join(''); + case 'INLINE_CODE': + return flattenMarkup(markup.value); + case 'LINK': { const label = flattenMarkup(markup.value.label as MessageParser.Markup); const href = markup.value.src.value; diff --git a/packages/gazzodown/src/elements/ItalicSpan.tsx b/packages/gazzodown/src/elements/ItalicSpan.tsx index 82bfddbe0ab..778b37cc2c4 100644 --- a/packages/gazzodown/src/elements/ItalicSpan.tsx +++ b/packages/gazzodown/src/elements/ItalicSpan.tsx @@ -1,5 +1,6 @@ import type * as MessageParser from '@rocket.chat/message-parser'; import type { ReactElement } from 'react'; +import { lazy } from 'react'; import EmojiElement from '../emoji/EmojiElement'; import ChannelMentionElement from '../mentions/ChannelMentionElement'; @@ -9,12 +10,15 @@ import LinkSpan from './LinkSpan'; import PlainSpan from './PlainSpan'; import StrikeSpan from './StrikeSpan'; +const CodeElement = lazy(() => import('../code/CodeElement')); + type MessageBlock = | MessageParser.Emoji | MessageParser.ChannelMention | MessageParser.UserMention | MessageParser.Link - | MessageParser.MarkupExcluding; + | MessageParser.MarkupExcluding + | MessageParser.InlineCode; type ItalicSpanProps = { children: MessageBlock[]; @@ -23,7 +27,13 @@ type ItalicSpanProps = { const ItalicSpan = ({ children }: ItalicSpanProps): ReactElement => ( <> {children.map((block, index) => { - if (block.type === 'LINK' || block.type === 'PLAIN_TEXT' || block.type === 'STRIKE' || block.type === 'BOLD') { + if ( + block.type === 'LINK' || + block.type === 'PLAIN_TEXT' || + block.type === 'STRIKE' || + block.type === 'BOLD' || + block.type === 'INLINE_CODE' + ) { return {renderBlockComponent(block, index)}; } return renderBlockComponent(block, index); @@ -54,6 +64,9 @@ const renderBlockComponent = (block: MessageBlock, index: number): ReactElement case 'BOLD': return ; + case 'INLINE_CODE': + return ; + default: return null; } diff --git a/packages/gazzodown/src/elements/StrikeSpan.tsx b/packages/gazzodown/src/elements/StrikeSpan.tsx index 302b226d7c1..7e67c8b5f66 100644 --- a/packages/gazzodown/src/elements/StrikeSpan.tsx +++ b/packages/gazzodown/src/elements/StrikeSpan.tsx @@ -1,5 +1,6 @@ import type * as MessageParser from '@rocket.chat/message-parser'; import type { ReactElement } from 'react'; +import { lazy } from 'react'; import EmojiElement from '../emoji/EmojiElement'; import ChannelMentionElement from '../mentions/ChannelMentionElement'; @@ -9,12 +10,15 @@ import ItalicSpan from './ItalicSpan'; import LinkSpan from './LinkSpan'; import PlainSpan from './PlainSpan'; +const CodeElement = lazy(() => import('../code/CodeElement')); + type MessageBlock = | MessageParser.Emoji | MessageParser.ChannelMention | MessageParser.UserMention | MessageParser.Link - | MessageParser.MarkupExcluding; + | MessageParser.MarkupExcluding + | MessageParser.InlineCode; type StrikeSpanProps = { children: MessageBlock[]; @@ -23,7 +27,13 @@ type StrikeSpanProps = { const StrikeSpan = ({ children }: StrikeSpanProps): ReactElement => ( <> {children.map((block, index) => { - if (block.type === 'LINK' || block.type === 'PLAIN_TEXT' || block.type === 'ITALIC' || block.type === 'BOLD') { + if ( + block.type === 'LINK' || + block.type === 'PLAIN_TEXT' || + block.type === 'ITALIC' || + block.type === 'BOLD' || + block.type === 'INLINE_CODE' + ) { return {renderBlockComponent(block, index)}; } return renderBlockComponent(block, index); @@ -54,6 +64,9 @@ const renderBlockComponent = (block: MessageBlock, index: number): ReactElement case 'BOLD': return ; + case 'INLINE_CODE': + return ; + default: return null; } diff --git a/packages/livechat/package.json b/packages/livechat/package.json index abc218e0b94..69f4fdc43b6 100644 --- a/packages/livechat/package.json +++ b/packages/livechat/package.json @@ -94,7 +94,7 @@ }, "dependencies": { "@rocket.chat/gazzodown": "workspace:^", - "@rocket.chat/message-parser": "~0.31.27", + "@rocket.chat/message-parser": "~0.31.28", "@rocket.chat/random": "workspace:~", "@rocket.chat/sdk": "^1.0.0-alpha.42", "@rocket.chat/ui-kit": "workspace:~", diff --git a/packages/rest-typings/package.json b/packages/rest-typings/package.json index 5e3708da8d7..cf5fa38050e 100644 --- a/packages/rest-typings/package.json +++ b/packages/rest-typings/package.json @@ -26,7 +26,7 @@ "dependencies": { "@rocket.chat/apps-engine": "1.41.0", "@rocket.chat/core-typings": "workspace:^", - "@rocket.chat/message-parser": "~0.31.27", + "@rocket.chat/message-parser": "~0.31.28", "@rocket.chat/ui-kit": "workspace:~", "ajv": "^8.11.0", "ajv-formats": "^2.1.1" diff --git a/yarn.lock b/yarn.lock index 7565bb974e7..e7cd951241b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9002,7 +9002,7 @@ __metadata: "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/icons": ^0.33.0 - "@rocket.chat/message-parser": ~0.31.27 + "@rocket.chat/message-parser": ~0.31.28 "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" "@rocket.chat/ui-kit": "workspace:~" @@ -9027,7 +9027,7 @@ __metadata: "@rocket.chat/apps-engine": 1.41.0 "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/icons": ^0.33.0 - "@rocket.chat/message-parser": ~0.31.27 + "@rocket.chat/message-parser": ~0.31.28 "@rocket.chat/ui-kit": "workspace:~" eslint: ~8.45.0 mongodb: ^4.17.1 @@ -9383,7 +9383,7 @@ __metadata: "@rocket.chat/css-in-js": ~0.31.25 "@rocket.chat/fuselage": ^0.44.2 "@rocket.chat/fuselage-tokens": ~0.32.0 - "@rocket.chat/message-parser": ~0.31.27 + "@rocket.chat/message-parser": ~0.31.28 "@rocket.chat/styled": ~0.31.25 "@rocket.chat/ui-client": "workspace:^" "@rocket.chat/ui-contexts": "workspace:^" @@ -9533,7 +9533,7 @@ __metadata: "@rocket.chat/fuselage-tokens": ~0.32.0 "@rocket.chat/gazzodown": "workspace:^" "@rocket.chat/logo": ^0.31.29 - "@rocket.chat/message-parser": ~0.31.27 + "@rocket.chat/message-parser": ~0.31.28 "@rocket.chat/random": "workspace:~" "@rocket.chat/sdk": ^1.0.0-alpha.42 "@rocket.chat/ui-kit": "workspace:~" @@ -9662,12 +9662,12 @@ __metadata: languageName: node linkType: hard -"@rocket.chat/message-parser@npm:~0.31.27": - version: 0.31.27 - resolution: "@rocket.chat/message-parser@npm:0.31.27" +"@rocket.chat/message-parser@npm:~0.31.28": + version: 0.31.28 + resolution: "@rocket.chat/message-parser@npm:0.31.28" dependencies: tldts: ~5.7.112 - checksum: 27f206171ce744d66ba727b5329cacafb29b00e9e95ae0109fba839a48d2b3cc4a087f91120e6dbee040a482a8e9738b5063419aaae25ef6c8727bc3d8c007c2 + checksum: 26a1a49318052201c0f4d2807ea740f69ffe741f7d51ea192bf56d2a9e1a19c8317232dff8f0b0f332a63035a3589683d41b1fb64503d76f8cd76122a5f6b0fe languageName: node linkType: hard @@ -9731,7 +9731,7 @@ __metadata: "@rocket.chat/logger": "workspace:^" "@rocket.chat/logo": ^0.31.29 "@rocket.chat/memo": ~0.31.25 - "@rocket.chat/message-parser": ~0.31.27 + "@rocket.chat/message-parser": ~0.31.28 "@rocket.chat/mock-providers": "workspace:^" "@rocket.chat/model-typings": "workspace:^" "@rocket.chat/models": "workspace:^" @@ -10403,7 +10403,7 @@ __metadata: "@rocket.chat/apps-engine": 1.41.0 "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/eslint-config": "workspace:^" - "@rocket.chat/message-parser": ~0.31.27 + "@rocket.chat/message-parser": ~0.31.28 "@rocket.chat/ui-kit": "workspace:~" "@types/jest": ~29.5.7 ajv: ^8.11.0 @@ -36529,7 +36529,7 @@ __metadata: "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/emitter": ~0.31.25 "@rocket.chat/icons": ^0.33.0 - "@rocket.chat/message-parser": ~0.31.27 + "@rocket.chat/message-parser": ~0.31.28 "@rocket.chat/model-typings": "workspace:^" "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^"