Skip to content

Commit dfb1020

Browse files
authored
Merge pull request #89912 from callstack-internal/refactor/option-row-title
[No QA] refactor: extract OptionRow.Title leaf
2 parents 0450ac0 + a47fa93 commit dfb1020

2 files changed

Lines changed: 52 additions & 24 deletions

File tree

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import React from 'react';
2+
import type {StyleProp, TextStyle} from 'react-native';
3+
import DisplayNames from '@components/DisplayNames';
4+
import useLocalize from '@hooks/useLocalize';
5+
import type {OptionData} from '@libs/ReportUtils';
6+
import {isGroupChat, isSystemChat} from '@libs/ReportUtils';
7+
import CONST from '@src/CONST';
8+
9+
type TitleProps = {
10+
optionItem: OptionData;
11+
displayNameStyle: StyleProp<TextStyle>;
12+
testID: number;
13+
};
14+
15+
function Title({optionItem, displayNameStyle, testID}: TitleProps) {
16+
const {translate} = useLocalize();
17+
18+
const shouldParseFullTitle = optionItem?.parentReportAction?.actionName !== CONST.REPORT.ACTIONS.TYPE.ADD_COMMENT && !isGroupChat(optionItem);
19+
const shouldUseFullTitle =
20+
!!optionItem.isChatRoom ||
21+
!!optionItem.isPolicyExpenseChat ||
22+
!!optionItem.isTaskReport ||
23+
!!optionItem.isThread ||
24+
!!optionItem.isMoneyRequestReport ||
25+
!!optionItem.isInvoiceReport ||
26+
!!optionItem.private_isArchived ||
27+
isGroupChat(optionItem) ||
28+
isSystemChat(optionItem);
29+
30+
return (
31+
<DisplayNames
32+
accessibilityLabel={translate('accessibilityHints.chatUserDisplayNames')}
33+
fullTitle={optionItem.text ?? ''}
34+
shouldParseFullTitle={shouldParseFullTitle}
35+
displayNamesWithTooltips={optionItem.displayNamesWithTooltips ?? []}
36+
tooltipEnabled
37+
numberOfLines={1}
38+
textStyles={displayNameStyle}
39+
shouldUseFullTitle={shouldUseFullTitle}
40+
testID={testID}
41+
/>
42+
);
43+
}
44+
45+
Title.displayName = 'OptionRow.Title';
46+
47+
export default Title;

src/components/LHNOptionsList/OptionRowLHN/OptionRowLHNCore.tsx

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import React, {useRef} from 'react';
22
import type {ViewStyle} from 'react-native';
33
import {StyleSheet, View} from 'react-native';
4-
import DisplayNames from '@components/DisplayNames';
54
import Icon from '@components/Icon';
65
import {useLHNTooltipContext} from '@components/LHNOptionsList/LHNTooltipContext';
76
import type {OptionRowLHNProps} from '@components/LHNOptionsList/types';
@@ -20,12 +19,13 @@ import useThemeStyles from '@hooks/useThemeStyles';
2019
import DateUtils from '@libs/DateUtils';
2120
import FS from '@libs/Fullstory';
2221
import {shouldUseBoldText} from '@libs/OptionsListUtils';
23-
import {isChatUsedForOnboarding as isChatUsedForOnboardingReportUtils, isGroupChat, isSystemChat} from '@libs/ReportUtils';
22+
import {isChatUsedForOnboarding as isChatUsedForOnboardingReportUtils} from '@libs/ReportUtils';
2423
import FreeTrial from '@pages/settings/Subscription/FreeTrial';
2524
import variables from '@styles/variables';
2625
import CONST from '@src/CONST';
2726
import ONYXKEYS from '@src/ONYXKEYS';
2827
import DraftIndicator from './OptionRow/DraftIndicator';
28+
import Title from './OptionRow/Title';
2929
import OptionRowAlternateText from './OptionRowAlternateText';
3030
import OptionRowAvatar from './OptionRowAvatar';
3131
import OptionRowErrorBadge from './OptionRowErrorBadge';
@@ -82,9 +82,6 @@ function OptionRowLHN({isOptionFocused = false, onSelectRow = () => {}, optionIt
8282

8383
const subscriptAvatarBorderColor = isOptionFocused ? focusedBackgroundColor : theme.sidebar;
8484

85-
// This is used to ensure that we display the text exactly as the user entered it when displaying LHN title, instead of parsing their text to HTML.
86-
const shouldParseFullTitle = optionItem?.parentReportAction?.actionName !== CONST.REPORT.ACTIONS.TYPE.ADD_COMMENT && !isGroupChat(optionItem);
87-
8885
const accessibilityLabel = [
8986
`${translate('accessibilityHints.navigatesToChat')} ${optionItem.text}`,
9087
optionItem.isUnread ? translate('common.unread') : '',
@@ -133,25 +130,9 @@ function OptionRowLHN({isOptionFocused = false, onSelectRow = () => {}, optionIt
133130
/>
134131
<View style={contentContainerStyles}>
135132
<View style={[styles.flexRow, styles.alignItemsCenter, styles.mw100, styles.overflowHidden]}>
136-
<DisplayNames
137-
accessibilityLabel={translate('accessibilityHints.chatUserDisplayNames')}
138-
fullTitle={optionItem.text ?? ''}
139-
shouldParseFullTitle={shouldParseFullTitle}
140-
displayNamesWithTooltips={optionItem.displayNamesWithTooltips ?? []}
141-
tooltipEnabled
142-
numberOfLines={1}
143-
textStyles={displayNameStyle}
144-
shouldUseFullTitle={
145-
!!optionItem.isChatRoom ||
146-
!!optionItem.isPolicyExpenseChat ||
147-
!!optionItem.isTaskReport ||
148-
!!optionItem.isThread ||
149-
!!optionItem.isMoneyRequestReport ||
150-
!!optionItem.isInvoiceReport ||
151-
!!optionItem.private_isArchived ||
152-
isGroupChat(optionItem) ||
153-
isSystemChat(optionItem)
154-
}
133+
<Title
134+
optionItem={optionItem}
135+
displayNameStyle={displayNameStyle}
155136
testID={testID}
156137
/>
157138
{isChatUsedForOnboarding && <FreeTrial badgeStyles={[styles.mnh0, styles.pl2, styles.pr2, styles.ml1, styles.flexShrink1]} />}

0 commit comments

Comments
 (0)