Skip to content

Commit d9d00eb

Browse files
authored
Merge pull request Expensify#89379 from ShridharGoel/cardUI
Update Expensify card UI
2 parents f80369b + 9065df9 commit d9d00eb

19 files changed

Lines changed: 472 additions & 313 deletions

File tree

src/components/CardPreview.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ function CardPreview({overlayImage, overlayContainerStyle}: CardPreviewProps) {
3535
styles.alignSelfCenter,
3636
{
3737
width: variables.cardPreviewWidth,
38+
...(overlayImage ? {height: variables.cardScarfOverlayHeight} : {}),
3839
},
3940
]}
4041
>

src/components/FrozenCardHeader.tsx

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React from 'react';
2+
import type {StyleProp, ViewStyle} from 'react-native';
23
import {View} from 'react-native';
34
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
45
import useLocalize from '@hooks/useLocalize';
@@ -9,16 +10,18 @@ import useThemeStyles from '@hooks/useThemeStyles';
910
import DateUtils from '@libs/DateUtils';
1011
import {getDisplayNameOrDefault} from '@libs/PersonalDetailsUtils';
1112
import Navigation from '@navigation/Navigation';
13+
import variables from '@styles/variables';
1214
import CONST from '@src/CONST';
1315
import ONYXKEYS from '@src/ONYXKEYS';
1416
import ROUTES from '@src/ROUTES';
1517
import Button from './Button';
16-
import Icon from './Icon';
1718
import Text from './Text';
1819
import TextLink from './TextLink';
1920

2021
type FrozenCardHeaderProps = {
2122
cardPreview: React.ReactNode;
23+
children?: React.ReactNode;
24+
style?: StyleProp<ViewStyle>;
2225
onUnfreezePress: () => void;
2326
onAskToUnfreezePress: () => void;
2427
canUnfreezeCard: boolean;
@@ -27,7 +30,7 @@ type FrozenCardHeaderProps = {
2730
frozenDate?: string;
2831
};
2932

30-
function FrozenCardHeader({cardPreview, onUnfreezePress, onAskToUnfreezePress, canUnfreezeCard, isWorkspaceAdmin, frozenByAccountID, frozenDate}: FrozenCardHeaderProps) {
33+
function FrozenCardHeader({cardPreview, children, style, onUnfreezePress, onAskToUnfreezePress, canUnfreezeCard, isWorkspaceAdmin, frozenByAccountID, frozenDate}: FrozenCardHeaderProps) {
3134
const styles = useThemeStyles();
3235
const theme = useTheme();
3336
const {translate} = useLocalize();
@@ -42,6 +45,12 @@ function FrozenCardHeader({cardPreview, onUnfreezePress, onAskToUnfreezePress, c
4245
const adminFrozenTextPrefix = translate('cardPage.frozenByAdminPrefix', {date: formattedDate});
4346
const frozenNeedsUnfreezePrefix = translate('cardPage.frozenByAdminNeedsUnfreezePrefix');
4447
const frozenNeedsUnfreezeSuffix = translate('cardPage.frozenByAdminNeedsUnfreezeSuffix');
48+
const actionButtons = React.Children.toArray(children);
49+
const shouldUseEqualButtonWidths = actionButtons.length > 0;
50+
const equalButtonWrapperStyles = shouldUseEqualButtonWidths
51+
? [styles.flexGrow1, styles.flexShrink1, styles.flexBasis0, {minWidth: variables.cardDetailsActionButtonMinWidth}]
52+
: undefined;
53+
const equalButtonInnerStyles = shouldUseEqualButtonWidths ? styles.ph2 : undefined;
4554

4655
let statusText: React.ReactNode;
4756

@@ -81,23 +90,36 @@ function FrozenCardHeader({cardPreview, onUnfreezePress, onAskToUnfreezePress, c
8190
}
8291

8392
return (
84-
<View style={[styles.ph5, styles.pb5]}>
93+
<View style={[styles.ph5, styles.pb5, style]}>
8594
{cardPreview}
86-
<View style={[styles.flexRow, styles.alignItemsCenter, styles.mt9]}>
87-
<Icon
88-
src={icons.FreezeCard}
89-
fill={theme.icon}
90-
small
91-
/>
92-
<Text style={[styles.textLabel, styles.colorMuted, styles.ml2]}>{statusText}</Text>
95+
<View style={[styles.flexRow, styles.alignItemsCenter, styles.justifyContentCenter, styles.mt2]}>
96+
<Text style={[styles.textLabel, styles.colorMuted]}>{statusText}</Text>
97+
</View>
98+
<View style={[styles.flexRow, styles.flexWrap, styles.alignItemsCenter, styles.justifyContentCenter, styles.gap2, styles.mt6, styles.alignSelfStretch]}>
99+
<View style={equalButtonWrapperStyles}>
100+
<Button
101+
medium
102+
text={translate(canUnfreezeCard ? 'cardPage.unfreezeCard' : 'cardPage.askToUnfreeze')}
103+
icon={icons.FreezeCard}
104+
iconFill={theme.icon}
105+
onPress={canUnfreezeCard ? onUnfreezePress : onAskToUnfreezePress}
106+
isDisabled={canUnfreezeCard && isOffline}
107+
innerStyles={equalButtonInnerStyles}
108+
style={shouldUseEqualButtonWidths ? styles.w100 : styles.alignSelfStart}
109+
/>
110+
</View>
111+
{shouldUseEqualButtonWidths
112+
? actionButtons.map((button, index) => (
113+
<View
114+
// eslint-disable-next-line react/no-array-index-key
115+
key={index}
116+
style={equalButtonWrapperStyles}
117+
>
118+
{button}
119+
</View>
120+
))
121+
: children}
93122
</View>
94-
<Button
95-
medium
96-
text={translate(canUnfreezeCard ? 'cardPage.unfreeze' : 'cardPage.askToUnfreeze')}
97-
onPress={canUnfreezeCard ? onUnfreezePress : onAskToUnfreezePress}
98-
isDisabled={canUnfreezeCard && isOffline}
99-
style={[styles.mt4]}
100-
/>
101123
</View>
102124
);
103125
}

src/languages/de.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2475,6 +2475,7 @@ const translations: TranslationDeepObject<typeof en> = {
24752475
expiration: 'Ablauf',
24762476
cvv: 'CVV',
24772477
address: 'Adresse',
2478+
reveal: 'Anzeigen',
24782479
revealDetails: 'Details anzeigen',
24792480
revealCvv: 'CVV anzeigen',
24802481
copyCardNumber: 'Kartennummer kopieren',

src/languages/en.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2545,6 +2545,7 @@ const translations = {
25452545
expiration: 'Expiration',
25462546
cvv: 'CVV',
25472547
address: 'Address',
2548+
reveal: 'Reveal',
25482549
revealDetails: 'Reveal details',
25492550
revealCvv: 'Reveal CVV',
25502551
copyCardNumber: 'Copy card number',

src/languages/es.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2360,6 +2360,7 @@ const translations: TranslationDeepObject<typeof en> = {
23602360
expiration: 'Expiración',
23612361
cvv: 'CVV',
23622362
address: 'Dirección',
2363+
reveal: 'Revelar',
23632364
revealDetails: 'Revelar detalles',
23642365
revealCvv: 'Revelar CVV',
23652366
copyCardNumber: 'Copiar número de la tarjeta',

src/languages/fr.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2481,6 +2481,7 @@ const translations: TranslationDeepObject<typeof en> = {
24812481
expiration: 'Expiration',
24822482
cvv: 'Cryptogramme visuel (CVV)',
24832483
address: 'Adresse',
2484+
reveal: 'Afficher',
24842485
revealDetails: 'Afficher les détails',
24852486
revealCvv: 'Afficher le cryptogramme',
24862487
copyCardNumber: 'Copier le numéro de carte',

src/languages/it.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2472,6 +2472,7 @@ const translations: TranslationDeepObject<typeof en> = {
24722472
expiration: 'Scadenza',
24732473
cvv: 'CVV',
24742474
address: 'Indirizzo',
2475+
reveal: 'Mostra',
24752476
revealDetails: 'Mostra dettagli',
24762477
revealCvv: 'Mostra CVV',
24772478
copyCardNumber: 'Copia numero carta',

src/languages/ja.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2449,6 +2449,7 @@ const translations: TranslationDeepObject<typeof en> = {
24492449
expiration: '有効期限',
24502450
cvv: 'CVV',
24512451
address: '住所',
2452+
reveal: '表示',
24522453
revealDetails: '詳細を表示',
24532454
revealCvv: 'CVV を表示',
24542455
copyCardNumber: 'カード番号をコピー',

src/languages/nl.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2469,6 +2469,7 @@ const translations: TranslationDeepObject<typeof en> = {
24692469
expiration: 'Vervaldatum',
24702470
cvv: 'CVV',
24712471
address: 'Adres',
2472+
reveal: 'Weergeven',
24722473
revealDetails: 'Details weergeven',
24732474
revealCvv: 'CVV weergeven',
24742475
copyCardNumber: 'Kaartnummer kopiëren',

src/languages/pl.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2467,6 +2467,7 @@ const translations: TranslationDeepObject<typeof en> = {
24672467
expiration: 'Wygaśnięcie',
24682468
cvv: 'CVV',
24692469
address: 'Adres',
2470+
reveal: 'Pokaż',
24702471
revealDetails: 'Pokaż szczegóły',
24712472
revealCvv: 'Pokaż kod CVV',
24722473
copyCardNumber: 'Skopiuj numer karty',

0 commit comments

Comments
 (0)