Skip to content

Commit fcf3f8d

Browse files
authored
Merge pull request Expensify#89914 from callstack-internal/refactor/option-row-onboarding-badge
[No QA] refactor: extract OptionRow.OnboardingBadge leaf
2 parents 0b54313 + f3b15b2 commit fcf3f8d

2 files changed

Lines changed: 32 additions & 8 deletions

File tree

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import React from 'react';
2+
import {useLHNTooltipContext} from '@components/LHNOptionsList/LHNTooltipContext';
3+
import useOnyx from '@hooks/useOnyx';
4+
import useThemeStyles from '@hooks/useThemeStyles';
5+
import type {OptionData} from '@libs/ReportUtils';
6+
import {isChatUsedForOnboarding as isChatUsedForOnboardingReportUtils} from '@libs/ReportUtils';
7+
import FreeTrial from '@pages/settings/Subscription/FreeTrial';
8+
import ONYXKEYS from '@src/ONYXKEYS';
9+
10+
type OnboardingBadgeProps = {
11+
/** The option data for the report row this badge belongs to. Used to determine whether the report is the onboarding chat. */
12+
optionItem: OptionData;
13+
};
14+
15+
function OnboardingBadge({optionItem}: OnboardingBadgeProps) {
16+
const styles = useThemeStyles();
17+
const {onboarding, onboardingPurpose} = useLHNTooltipContext();
18+
const [conciergeReportID] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID);
19+
20+
if (!isChatUsedForOnboardingReportUtils(optionItem, onboarding, conciergeReportID, onboardingPurpose)) {
21+
return null;
22+
}
23+
24+
return <FreeTrial badgeStyles={[styles.mnh0, styles.pl2, styles.pr2, styles.ml1, styles.flexShrink1]} />;
25+
}
26+
27+
OnboardingBadge.displayName = 'OptionRow.OnboardingBadge';
28+
29+
export default OnboardingBadge;

src/components/LHNOptionsList/OptionRowLHN/OptionRowLHNCore.tsx

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,17 @@ import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'
1212
import useEnvironment from '@hooks/useEnvironment';
1313
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
1414
import useLocalize from '@hooks/useLocalize';
15-
import useOnyx from '@hooks/useOnyx';
1615
import useStyleUtils from '@hooks/useStyleUtils';
1716
import useTheme from '@hooks/useTheme';
1817
import useThemeStyles from '@hooks/useThemeStyles';
1918
import DateUtils from '@libs/DateUtils';
2019
import {shouldUseBoldText} from '@libs/OptionsListUtils';
21-
import {isChatUsedForOnboarding as isChatUsedForOnboardingReportUtils} from '@libs/ReportUtils';
22-
import FreeTrial from '@pages/settings/Subscription/FreeTrial';
2320
import variables from '@styles/variables';
2421
import CONST from '@src/CONST';
25-
import ONYXKEYS from '@src/ONYXKEYS';
2622
import DescriptiveText from './OptionRow/DescriptiveText';
2723
import DraftIndicator from './OptionRow/DraftIndicator';
2824
import ErrorBadge from './OptionRow/ErrorBadge';
25+
import OnboardingBadge from './OptionRow/OnboardingBadge';
2926
import Subtitle from './OptionRow/Subtitle';
3027
import Title from './OptionRow/Title';
3128
import OptionRowAvatar from './OptionRowAvatar';
@@ -41,9 +38,7 @@ function OptionRowLHN({isOptionFocused = false, onSelectRow = () => {}, optionIt
4138
const StyleUtils = useStyleUtils();
4239
const expensifyIcons = useMemoizedLazyExpensifyIcons(['Pin']);
4340

44-
const {onboardingPurpose, onboarding, isScreenFocused} = useLHNTooltipContext();
45-
const [conciergeReportID] = useOnyx(ONYXKEYS.CONCIERGE_REPORT_ID);
46-
const isChatUsedForOnboarding = isChatUsedForOnboardingReportUtils(optionItem, onboarding, conciergeReportID, onboardingPurpose);
41+
const {isScreenFocused} = useLHNTooltipContext();
4742

4843
const {translate} = useLocalize();
4944
const currentUserPersonalDetails = useCurrentUserPersonalDetails();
@@ -135,7 +130,7 @@ function OptionRowLHN({isOptionFocused = false, onSelectRow = () => {}, optionIt
135130
displayNameStyle={displayNameStyle}
136131
testID={testID}
137132
/>
138-
{isChatUsedForOnboarding && <FreeTrial badgeStyles={[styles.mnh0, styles.pl2, styles.pr2, styles.ml1, styles.flexShrink1]} />}
133+
<OnboardingBadge optionItem={optionItem} />
139134
{isStatusVisible && (
140135
<Tooltip
141136
text={statusContent}

0 commit comments

Comments
 (0)