From fc402350568cfa38ee467907478ee22821137a48 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 14 Mar 2025 10:33:20 +0700 Subject: [PATCH 1/4] fix: Member's default name and custom name are styled differently in header message --- src/libs/NextStepUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/NextStepUtils.ts b/src/libs/NextStepUtils.ts index ee9d1f92772dc..2e8a6665c55b5 100644 --- a/src/libs/NextStepUtils.ts +++ b/src/libs/NextStepUtils.ts @@ -56,7 +56,7 @@ function parseMessage(messages: Message[] | undefined) { const nextPart = messages.at(index + 1); if (currentUserEmail === part.text || part.clickToCopyText === currentUserEmail) { - tagType = 'strong'; + tagType = 'next-step-email'; content = nextPart?.text === `'s` ? 'your' : 'you'; } else if (part.text === `'s` && (previousPart?.text === currentUserEmail || previousPart?.clickToCopyText === currentUserEmail)) { content = ''; From bfea5b8c292204c86add5fd9384957fc0f7868d2 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Mon, 17 Mar 2025 16:04:17 +0700 Subject: [PATCH 2/4] Add next steps strong renderer --- .../HTMLRenderers/StrongRenderer.tsx | 12 +++++++++++- src/components/HTMLEngineProvider/htmlEngineUtils.ts | 6 +++++- src/libs/NextStepUtils.ts | 4 ++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/components/HTMLEngineProvider/HTMLRenderers/StrongRenderer.tsx b/src/components/HTMLEngineProvider/HTMLRenderers/StrongRenderer.tsx index d21de8e6e1707..68fa94e9695fe 100644 --- a/src/components/HTMLEngineProvider/HTMLRenderers/StrongRenderer.tsx +++ b/src/components/HTMLEngineProvider/HTMLRenderers/StrongRenderer.tsx @@ -8,9 +8,19 @@ import useThemeStyles from '@hooks/useThemeStyles'; function StrongRenderer({tnode}: CustomRendererProps) { const styles = useThemeStyles(); const isChildOfTaskTitle = HTMLEngineUtils.isChildOfTaskTitle(tnode); + const isChildOfNextSteps = HTMLEngineUtils.isChildOfNextSteps(tnode); return 'data' in tnode ? ( - {tnode.data} + + {tnode.data} + ) : ( node.domNode?.name !== undefined && node.domNode.name.toLowerCase() === 'task-title'); } +function isChildOfNextSteps(tnode: TNode): boolean { + return tnode?.parent?.domNode?.name === 'next-step'; +} + /** * Check if the parent node has deleted style. */ @@ -71,4 +75,4 @@ function isDeletedNode(tnode: TNode): boolean { return 'textDecorationLine' in parentStyle && parentStyle.textDecorationLine === 'line-through'; } -export {computeEmbeddedMaxWidth, isChildOfComment, isCommentTag, isChildOfH1, isDeletedNode, isChildOfTaskTitle}; +export {computeEmbeddedMaxWidth, isChildOfComment, isCommentTag, isChildOfH1, isDeletedNode, isChildOfTaskTitle, isChildOfNextSteps}; diff --git a/src/libs/NextStepUtils.ts b/src/libs/NextStepUtils.ts index 2e8a6665c55b5..06b17423a44fc 100644 --- a/src/libs/NextStepUtils.ts +++ b/src/libs/NextStepUtils.ts @@ -56,7 +56,7 @@ function parseMessage(messages: Message[] | undefined) { const nextPart = messages.at(index + 1); if (currentUserEmail === part.text || part.clickToCopyText === currentUserEmail) { - tagType = 'next-step-email'; + tagType = 'strong'; content = nextPart?.text === `'s` ? 'your' : 'you'; } else if (part.text === `'s` && (previousPart?.text === currentUserEmail || previousPart?.clickToCopyText === currentUserEmail)) { content = ''; @@ -64,7 +64,7 @@ function parseMessage(messages: Message[] | undefined) { tagType = 'next-step-email'; content = EmailUtils.prefixMailSeparatorsWithBreakOpportunities(content); } - + nextStepHTML += `<${tagType}>${content}`; }); From c2912bad4e7c3a5a548c8b3a4badcf9c36367c5b Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Mon, 17 Mar 2025 16:30:12 +0700 Subject: [PATCH 3/4] fix prettier --- src/libs/NextStepUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/NextStepUtils.ts b/src/libs/NextStepUtils.ts index 06b17423a44fc..ee9d1f92772dc 100644 --- a/src/libs/NextStepUtils.ts +++ b/src/libs/NextStepUtils.ts @@ -64,7 +64,7 @@ function parseMessage(messages: Message[] | undefined) { tagType = 'next-step-email'; content = EmailUtils.prefixMailSeparatorsWithBreakOpportunities(content); } - + nextStepHTML += `<${tagType}>${content}`; }); From 6eef7901d280acd07518fcbc65a3a8b3e9205488 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Tue, 25 Mar 2025 22:53:18 +0700 Subject: [PATCH 4/4] using TDefaultRenderer to render strong tag --- .../HTMLRenderers/StrongRenderer.tsx | 34 ++++--------------- .../HTMLEngineProvider/htmlEngineUtils.ts | 6 +--- src/styles/index.ts | 6 ++++ 3 files changed, 14 insertions(+), 32 deletions(-) diff --git a/src/components/HTMLEngineProvider/HTMLRenderers/StrongRenderer.tsx b/src/components/HTMLEngineProvider/HTMLRenderers/StrongRenderer.tsx index 68fa94e9695fe..5a9f7ca652554 100644 --- a/src/components/HTMLEngineProvider/HTMLRenderers/StrongRenderer.tsx +++ b/src/components/HTMLEngineProvider/HTMLRenderers/StrongRenderer.tsx @@ -1,39 +1,19 @@ import React from 'react'; +import type {StyleProp, TextStyle} from 'react-native'; import type {CustomRendererProps, TPhrasing, TText} from 'react-native-render-html'; -import {TNodeChildrenRenderer} from 'react-native-render-html'; import * as HTMLEngineUtils from '@components/HTMLEngineProvider/htmlEngineUtils'; -import Text from '@components/Text'; import useThemeStyles from '@hooks/useThemeStyles'; -function StrongRenderer({tnode}: CustomRendererProps) { +function StrongRenderer({tnode, TDefaultRenderer, style, ...props}: CustomRendererProps) { const styles = useThemeStyles(); const isChildOfTaskTitle = HTMLEngineUtils.isChildOfTaskTitle(tnode); - const isChildOfNextSteps = HTMLEngineUtils.isChildOfNextSteps(tnode); - return 'data' in tnode ? ( - - {tnode.data} - - ) : ( - { - return ( - - {props.childElement} - - ); - }} + style={[style as StyleProp, isChildOfTaskTitle && styles.taskTitleMenuItem, {fontStyle: (style.fontStyle as TextStyle['fontStyle']) ?? 'normal'}]} /> ); } diff --git a/src/components/HTMLEngineProvider/htmlEngineUtils.ts b/src/components/HTMLEngineProvider/htmlEngineUtils.ts index 7549e45a6f678..f94339820fbf5 100644 --- a/src/components/HTMLEngineProvider/htmlEngineUtils.ts +++ b/src/components/HTMLEngineProvider/htmlEngineUtils.ts @@ -63,10 +63,6 @@ function isChildOfTaskTitle(tnode: TNode): boolean { return isChildOfNode(tnode, (node) => node.domNode?.name !== undefined && node.domNode.name.toLowerCase() === 'task-title'); } -function isChildOfNextSteps(tnode: TNode): boolean { - return tnode?.parent?.domNode?.name === 'next-step'; -} - /** * Check if the parent node has deleted style. */ @@ -75,4 +71,4 @@ function isDeletedNode(tnode: TNode): boolean { return 'textDecorationLine' in parentStyle && parentStyle.textDecorationLine === 'line-through'; } -export {computeEmbeddedMaxWidth, isChildOfComment, isCommentTag, isChildOfH1, isDeletedNode, isChildOfTaskTitle, isChildOfNextSteps}; +export {computeEmbeddedMaxWidth, isChildOfComment, isCommentTag, isChildOfH1, isDeletedNode, isChildOfTaskTitle}; diff --git a/src/styles/index.ts b/src/styles/index.ts index 28cd35a715c0a..3f49ffc59f796 100644 --- a/src/styles/index.ts +++ b/src/styles/index.ts @@ -156,6 +156,12 @@ const webViewStyles = (theme: ThemeColors) => fontStyle: FontUtils.fontFamily.platform.EXP_NEUE_ITALIC.fontStyle, }, + strong: { + // We set fontFamily and fontWeight directly in order to avoid overriding fontStyle. + fontFamily: FontUtils.fontFamily.platform.EXP_NEUE_BOLD.fontFamily, + fontWeight: FontUtils.fontFamily.platform.EXP_NEUE_BOLD.fontWeight, + }, + del: { textDecorationLine: 'line-through', textDecorationStyle: 'solid',