diff --git a/src/components/FrozenCardHeader.tsx b/src/components/FrozenCardHeader.tsx index 5b7f1cb752e0..74f4e3306518 100644 --- a/src/components/FrozenCardHeader.tsx +++ b/src/components/FrozenCardHeader.tsx @@ -1,5 +1,4 @@ -import {cardByIdSelector} from '@selectors/Card'; -import React, {useMemo} from 'react'; +import React from 'react'; import {View} from 'react-native'; import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset'; import useLocalize from '@hooks/useLocalize'; @@ -9,19 +8,26 @@ import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import DateUtils from '@libs/DateUtils'; import {getDisplayNameOrDefault} from '@libs/PersonalDetailsUtils'; +import Navigation from '@navigation/Navigation'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; +import ROUTES from '@src/ROUTES'; import Button from './Button'; import Icon from './Icon'; import Text from './Text'; +import TextLink from './TextLink'; type FrozenCardHeaderProps = { - cardID: string; cardPreview: React.ReactNode; onUnfreezePress: () => void; + onAskToUnfreezePress: () => void; + canUnfreezeCard: boolean; + isWorkspaceAdmin: boolean; + frozenByAccountID?: number; + frozenDate?: string; }; -function FrozenCardHeader({cardID, cardPreview, onUnfreezePress}: FrozenCardHeaderProps) { +function FrozenCardHeader({cardPreview, onUnfreezePress, onAskToUnfreezePress, canUnfreezeCard, isWorkspaceAdmin, frozenByAccountID, frozenDate}: FrozenCardHeaderProps) { const styles = useThemeStyles(); const theme = useTheme(); const {translate} = useLocalize(); @@ -29,21 +35,50 @@ function FrozenCardHeader({cardID, cardPreview, onUnfreezePress}: FrozenCardHead const icons = useMemoizedLazyExpensifyIcons(['FreezeCard'] as const); const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST); const [session] = useOnyx(ONYXKEYS.SESSION); - const [card] = useOnyx(ONYXKEYS.CARD_LIST, {selector: cardByIdSelector(cardID)}); - - const frozenByAccountID = card?.nameValuePairs?.frozen?.byAccountID; - const frozenDate = card?.nameValuePairs?.frozen?.date; const isCurrentUser = frozenByAccountID === session?.accountID; const frozenByName = frozenByAccountID ? getDisplayNameOrDefault(personalDetails?.[frozenByAccountID]) : ''; const formattedDate = frozenDate ? DateUtils.formatWithUTCTimeZone(frozenDate, CONST.DATE.MONTH_DAY_YEAR_ABBR_FORMAT) : ''; + const adminFrozenTextPrefix = translate('cardPage.frozenByAdminPrefix', {date: formattedDate}); + const frozenNeedsUnfreezePrefix = translate('cardPage.frozenByAdminNeedsUnfreezePrefix'); + const frozenNeedsUnfreezeSuffix = translate('cardPage.frozenByAdminNeedsUnfreezeSuffix'); + + let statusText: React.ReactNode; - const statusText = useMemo(() => { - if (isCurrentUser) { - return translate('cardPage.youFroze', {date: formattedDate}); + if (isCurrentUser) { + statusText = translate('cardPage.youFroze', {date: formattedDate}); + } else if (isWorkspaceAdmin) { + if (!frozenByAccountID || !frozenByName) { + statusText = `${adminFrozenTextPrefix}${translate('common.someone')}`; + } else { + statusText = ( + <> + {adminFrozenTextPrefix} + Navigation.navigate(ROUTES.PROFILE.getRoute(Number(frozenByAccountID), Navigation.getActiveRoute()))} + style={styles.link} + > + {frozenByName} + + + ); } - return translate('cardPage.frozenBy', {date: formattedDate, person: frozenByName}); - }, [formattedDate, frozenByName, isCurrentUser, translate]); + } else if (!frozenByAccountID || !frozenByName) { + statusText = translate('cardPage.frozenByAdminNeedsUnfreeze', {person: frozenByName || translate('common.someone')}); + } else { + statusText = ( + <> + {frozenNeedsUnfreezePrefix} + Navigation.navigate(ROUTES.PROFILE.getRoute(Number(frozenByAccountID), Navigation.getActiveRoute()))} + style={styles.link} + > + {frozenByName} + + {frozenNeedsUnfreezeSuffix} + + ); + } return ( @@ -58,9 +93,9 @@ function FrozenCardHeader({cardID, cardPreview, onUnfreezePress}: FrozenCardHead