Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions assets/images/credit-card-lock.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/images/expensify-card-hourglass.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions src/components/Icon/Expensicons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import ConnectionComplete from '@assets/images/connection-complete.svg';
import Copy from '@assets/images/copy.svg';
import CreditCardExclamation from '@assets/images/credit-card-exclamation.svg';
import CreditCardHourglass from '@assets/images/credit-card-hourglass.svg';
import CreditCardLock from '@assets/images/credit-card-lock.svg';
import CreditCard from '@assets/images/creditcard.svg';
import Crop from '@assets/images/crop.svg';
import DocumentMerge from '@assets/images/document-merge.svg';
Expand All @@ -51,6 +52,7 @@ import EReceiptIcon from '@assets/images/eReceiptIcon.svg';
import Exclamation from '@assets/images/exclamation.svg';
import Exit from '@assets/images/exit.svg';
import ExpenseCopy from '@assets/images/expense-copy.svg';
import ExpensifyCardHourglass from '@assets/images/expensify-card-hourglass.svg';
import Export from '@assets/images/export.svg';
import EyeDisabled from '@assets/images/eye-disabled.svg';
import Eye from '@assets/images/eye.svg';
Expand Down Expand Up @@ -198,6 +200,8 @@ export {
CreditCard,
CreditCardHourglass,
CreditCardExclamation,
CreditCardLock,
ExpensifyCardHourglass,
Crop,
CircleSlash,
Document,
Expand Down
4 changes: 4 additions & 0 deletions src/components/Icon/chunks/expensify-icons.chunk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ import ConnectionComplete from '@assets/images/connection-complete.svg';
import Copy from '@assets/images/copy.svg';
import CreditCardExclamation from '@assets/images/credit-card-exclamation.svg';
import CreditCardHourglass from '@assets/images/credit-card-hourglass.svg';
import CreditCardLock from '@assets/images/credit-card-lock.svg';
import CreditCard from '@assets/images/creditcard.svg';
import Crop from '@assets/images/crop.svg';
import Crosshair from '@assets/images/crosshair.svg';
Expand All @@ -84,6 +85,7 @@ import Exit from '@assets/images/exit.svg';
import Expand from '@assets/images/expand.svg';
import ExpenseCopy from '@assets/images/expense-copy.svg';
import ExpensifyAppIcon from '@assets/images/expensify-app-icon.svg';
import ExpensifyCardHourglass from '@assets/images/expensify-card-hourglass.svg';
import ExpensifyCard from '@assets/images/expensify-card-icon.svg';
import ExpensifyFooterLogoVertical from '@assets/images/expensify-footer-logo-vertical.svg';
import ExpensifyFooterLogo from '@assets/images/expensify-footer-logo.svg';
Expand Down Expand Up @@ -301,6 +303,7 @@ const Expensicons = {
Crop,
CreditCardHourglass,
CreditCardExclamation,
CreditCardLock,
CircleSlash,
Document,
DocumentMerge,
Expand All @@ -318,6 +321,7 @@ const Expensicons = {
Exit,
ExpensifyAppIcon,
ExpensifyCard,
ExpensifyCardHourglass,
ExpensifyWordmark,
ExpensifyFooterLogo,
ExpensifyFooterLogoVertical,
Expand Down
57 changes: 46 additions & 11 deletions src/components/TransactionItemRow/DataCells/TypeCell.tsx
Original file line number Diff line number Diff line change
@@ -1,21 +1,34 @@
import React from 'react';
import {View} from 'react-native';
import Icon from '@components/Icon';
import TextWithTooltip from '@components/TextWithTooltip';
import Tooltip from '@components/Tooltip';
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import useOnyx from '@hooks/useOnyx';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import {getExpenseTypeTranslationKey, getTransactionType, isExpensifyCardTransaction, isPending} from '@libs/TransactionUtils';
import {getExpenseTypeTranslationKey, getTransactionType, isExpensifyCardTransaction, isManagedCardTransaction, isPending} from '@libs/TransactionUtils';
import variables from '@styles/variables';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type IconAsset from '@src/types/utils/IconAsset';
import type TransactionDataCellProps from './TransactionDataCellProps';

const getTypeIcon = (icons: Record<'Car' | 'CreditCard' | 'Cash' | 'Clock' | 'CalendarSolid', IconAsset>, type?: string) => {
const getTypeIcon = (
icons: Record<'Car' | 'CreditCard' | 'CreditCardLock' | 'ExpensifyCard' | 'Cash' | 'Clock' | 'CalendarSolid', IconAsset>,
type?: string,
isExpensifyCard?: boolean,
isManagedCard?: boolean,
) => {
switch (type) {
case CONST.SEARCH.TRANSACTION_TYPE.CARD:
if (isExpensifyCard) {
return icons.ExpensifyCard;
}
if (isManagedCard) {
return icons.CreditCardLock;
}
return icons.CreditCard;
case CONST.SEARCH.TRANSACTION_TYPE.DISTANCE:
return icons.Car;
Expand All @@ -33,26 +46,48 @@ function TypeCell({transactionItem, shouldUseNarrowLayout, shouldShowTooltip}: T
const {translate} = useLocalize();
const [card] = useOnyx(ONYXKEYS.CARD_LIST, {selector: (cardList) => (transactionItem.cardID ? cardList?.[transactionItem.cardID] : undefined)});
const theme = useTheme();
const expensifyIcons = useMemoizedLazyExpensifyIcons(['Car', 'CreditCard', 'CreditCardHourglass', 'Cash', 'Clock', 'CalendarSolid']);
const expensifyIcons = useMemoizedLazyExpensifyIcons(['Car', 'CreditCard', 'CreditCardLock', 'ExpensifyCard', 'ExpensifyCardHourglass', 'Cash', 'Clock', 'CalendarSolid']);
const type = getTransactionType(transactionItem, card);
const isPendingExpensifyCardTransaction = isExpensifyCardTransaction(transactionItem) && isPending(transactionItem);
const typeIcon = isPendingExpensifyCardTransaction ? expensifyIcons.CreditCardHourglass : getTypeIcon(expensifyIcons, type);
const isExpensifyCard = isExpensifyCardTransaction(transactionItem);
const isManagedCard = isManagedCardTransaction(transactionItem);
const isPendingExpensifyCardTransaction = isExpensifyCard && isPending(transactionItem);
const typeIcon = isPendingExpensifyCardTransaction ? expensifyIcons.ExpensifyCardHourglass : getTypeIcon(expensifyIcons, type, isExpensifyCard, isManagedCard);
const typeText = isPendingExpensifyCardTransaction ? 'iou.pending' : getExpenseTypeTranslationKey(type);
const styles = useThemeStyles();

const getTooltipText = () => {
if (isPendingExpensifyCardTransaction) {
return translate('iou.pending');
}
if (isExpensifyCard) {
return translate('cardTransactions.expensifyCard');
}
if (isManagedCard) {
return translate('cardTransactions.companyCard');
}
if (type === CONST.SEARCH.TRANSACTION_TYPE.CARD) {
return translate('cardTransactions.personalCard');
}
return translate(typeText);
};

return shouldUseNarrowLayout ? (
<TextWithTooltip
shouldShowTooltip={shouldShowTooltip}
text={translate(typeText)}
style={[styles.textMicroSupporting, styles.pre, styles.justifyContentCenter]}
/>
) : (
<Icon
src={typeIcon}
fill={theme.icon}
height={variables.iconSizeNormal}
width={variables.iconSizeNormal}
/>
<Tooltip text={getTooltipText()}>
<View>
<Icon
src={typeIcon}
fill={theme.icon}
height={variables.iconSizeNormal}
width={variables.iconSizeNormal}
/>
</View>
</Tooltip>
);
}

Expand Down
3 changes: 3 additions & 0 deletions src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7676,6 +7676,9 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
notActivated: 'Nicht aktiviert',
outOfPocket: 'Erstattungsfähig',
companySpend: 'Nicht erstattungsfähig',
personalCard: 'Private Karte',
companyCard: 'Firmenkarte',
expensifyCard: 'Expensify Karte',
},
distance: {
addStop: 'Stopp hinzufügen',
Expand Down
3 changes: 3 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7636,6 +7636,9 @@ const translations = {
notActivated: 'Not activated',
outOfPocket: 'Reimbursable',
companySpend: 'Non-reimbursable',
personalCard: 'Personal card',
companyCard: 'Company card',
expensifyCard: 'Expensify Card',
},
distance: {
addStop: 'Add stop',
Expand Down
3 changes: 3 additions & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7954,6 +7954,9 @@ ${amount} para ${merchant} - ${date}`,
notActivated: 'No activado',
outOfPocket: 'Reembolsable',
companySpend: 'No reembolsable',
personalCard: 'Tarjeta personal',
companyCard: 'Tarjeta corporativa',
expensifyCard: 'Tarjeta Expensify',
},
distance: {
addStop: 'Añadir parada',
Expand Down
3 changes: 3 additions & 0 deletions src/languages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7698,6 +7698,9 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
notActivated: 'Non activé',
outOfPocket: 'Remboursable',
companySpend: 'Non remboursable',
personalCard: 'Carte personnelle',
companyCard: 'Carte d’entreprise',
expensifyCard: 'Carte Expensify',
},
distance: {
addStop: 'Ajouter un arrêt',
Expand Down
3 changes: 3 additions & 0 deletions src/languages/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7662,6 +7662,9 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
notActivated: 'Non attivato',
outOfPocket: 'Rimborsabile',
companySpend: 'Non rimborsabile',
personalCard: 'Carta personale',
companyCard: 'Carta aziendale',
expensifyCard: 'Carta Expensify',
},
distance: {
addStop: 'Aggiungi fermata',
Expand Down
3 changes: 3 additions & 0 deletions src/languages/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7576,6 +7576,9 @@ ${reportName}
notActivated: '未有効化',
outOfPocket: '返金可能',
companySpend: '返金不可',
personalCard: '個人のカード',
companyCard: '会社カード',
expensifyCard: 'Expensify カード',
},
distance: {
addStop: '経由地を追加',
Expand Down
3 changes: 3 additions & 0 deletions src/languages/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7641,6 +7641,9 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
notActivated: 'Niet geactiveerd',
outOfPocket: 'Vergoedbaar',
companySpend: 'Niet vergoedbaar',
personalCard: 'Persoonlijke kaart',
companyCard: 'Bedrijfskaart',
expensifyCard: 'Expensify Kaart',
},
distance: {
addStop: 'Stop toevoegen',
Expand Down
3 changes: 3 additions & 0 deletions src/languages/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7629,6 +7629,9 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i
notActivated: 'Nieaktywne',
outOfPocket: 'Zwrotne',
companySpend: 'Niezgodne z refundacją',
personalCard: 'Karta osobista',
companyCard: 'Karta firmowa',
expensifyCard: 'Karta Expensify',
},
distance: {
addStop: 'Dodaj przystanek',
Expand Down
3 changes: 3 additions & 0 deletions src/languages/pt-BR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7633,6 +7633,9 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e
notActivated: 'Não ativado',
outOfPocket: 'Reembolsável',
companySpend: 'Não reembolsável',
personalCard: 'Cartão pessoal',
companyCard: 'Cartão corporativo',
expensifyCard: 'Cartão Expensify',
},
distance: {
addStop: 'Adicionar parada',
Expand Down
6 changes: 1 addition & 5 deletions src/languages/zh-hans.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7452,11 +7452,7 @@ ${reportName}
tryDifferentEmail: '请尝试使用其他邮箱',
},
},
cardTransactions: {
notActivated: '未激活',
outOfPocket: '可报销',
companySpend: '不可报销',
},
cardTransactions: {notActivated: '未激活', outOfPocket: '可报销', companySpend: '不可报销', personalCard: '个人银行卡', companyCard: '公司卡', expensifyCard: 'Expensify 卡'},
distance: {
addStop: '添加站点',
address: '地址',
Expand Down
Loading