Skip to content

Commit 3d8024c

Browse files
Show blank status for cards not in a recognized state instead of defaulting to Active
Co-authored-by: Shawn Borton <shawnborton@users.noreply.github.com>
1 parent d7d5b3a commit 3d8024c

4 files changed

Lines changed: 22 additions & 15 deletions

File tree

src/components/Tables/WorkspaceExpensifyCardsTable/WorkspaceExpensifyCardsTableRow.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ export default function WorkspaceExpensifyCardsTableRow({item, rowIndex, shouldU
4646
const narrowLayoutSubtitle = [item.lastFourPAN, item.name].filter(Boolean).join(` ${CONST.DOT_SEPARATOR} `);
4747
const cardType = item.isVirtual ? translate('workspace.expensifyCard.virtual') : translate('workspace.expensifyCard.physical');
4848
const limitTypeLabel = translate(getTranslationKeyForLimitType(item.limitType));
49-
const statusLabel = translate(getTranslationKeyForCardStatus(item.card.state, item.isVirtual));
49+
const statusTranslationKey = getTranslationKeyForCardStatus(item.card.state, item.isVirtual);
50+
const statusLabel = statusTranslationKey ? translate(statusTranslationKey) : '';
5051
const formattedLimit = convertToShortDisplayString(item.limit, item.currency);
5152
const formattedFrozenDate = item.frozenDate ? DateUtils.formatWithUTCTimeZone(item.frozenDate, CONST.DATE.MONTH_DAY_YEAR_ABBR_FORMAT) : '';
5253
let frozenByText: string | undefined;

src/components/Tables/WorkspaceExpensifyCardsTable/index.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,10 @@ export default function WorkspaceExpensifyCardsTable({
174174
}
175175

176176
if (activeSorting.columnKey === 'status') {
177-
const status1 = translate(getTranslationKeyForCardStatus(item1.card.state, item1.isVirtual));
178-
const status2 = translate(getTranslationKeyForCardStatus(item2.card.state, item2.isVirtual));
177+
const status1TranslationKey = getTranslationKeyForCardStatus(item1.card.state, item1.isVirtual);
178+
const status2TranslationKey = getTranslationKeyForCardStatus(item2.card.state, item2.isVirtual);
179+
const status1 = status1TranslationKey ? translate(status1TranslationKey) : '';
180+
const status2 = status2TranslationKey ? translate(status2TranslationKey) : '';
179181
return localeCompare(status1, status2) * orderMultiplier;
180182
}
181183

src/libs/CardUtils.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -473,20 +473,24 @@ function getTranslationKeyForLimitType(limitType: ValueOf<typeof CONST.EXPENSIFY
473473

474474
/**
475475
* Maps an Expensify Card `state` to the translation key for its status label shown in the workspace Expensify Card table.
476-
* `Pending order` and `Shipped` are physical-only states, so a virtual card in one of those states reads as `Active`.
477-
* States `STATE_DEACTIVATED` (5) and `CLOSED` (6) never reach this table (they are dropped by `filterInactiveCardsForWorkspace`),
478-
* so the default safely resolves to `Active` (OPEN).
476+
* `Pending order` and `Shipped` are physical-only states, so a virtual card in one of those states has no status to show.
477+
* Only recognized states map to a label; any other state (bad data, or an unexpected state that slips through
478+
* `filterInactiveCardsForWorkspace`) returns `undefined` so the status renders blank rather than defaulting to `Active`.
479479
*/
480-
function getTranslationKeyForCardStatus(state: ValueOf<typeof CONST.EXPENSIFY_CARD.STATE> | undefined, isVirtual: boolean): TranslationPaths {
480+
function getTranslationKeyForCardStatus(state: ValueOf<typeof CONST.EXPENSIFY_CARD.STATE> | undefined, isVirtual: boolean): TranslationPaths | undefined {
481481
switch (state) {
482+
// Pending order and Shipped are physical-only states, so a virtual card in one of them has no meaningful status to show.
482483
case CONST.EXPENSIFY_CARD.STATE.STATE_NOT_ISSUED:
483-
return isVirtual ? 'workspace.expensifyCard.statusActive' : 'workspace.expensifyCard.statusPendingOrder';
484+
return isVirtual ? undefined : 'workspace.expensifyCard.statusPendingOrder';
484485
case CONST.EXPENSIFY_CARD.STATE.NOT_ACTIVATED:
485-
return isVirtual ? 'workspace.expensifyCard.statusActive' : 'workspace.expensifyCard.statusShipped';
486+
return isVirtual ? undefined : 'workspace.expensifyCard.statusShipped';
487+
case CONST.EXPENSIFY_CARD.STATE.OPEN:
488+
return 'workspace.expensifyCard.statusActive';
486489
case CONST.EXPENSIFY_CARD.STATE.STATE_SUSPENDED:
487490
return 'workspace.expensifyCard.statusInactive';
491+
// Any other state (e.g. bad data) has no status to show, so it's left blank rather than defaulting to Active.
488492
default:
489-
return 'workspace.expensifyCard.statusActive';
493+
return undefined;
490494
}
491495
}
492496

tests/unit/CardUtilsTest.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2099,13 +2099,13 @@ describe('CardUtils', () => {
20992099
expect(getTranslationKeyForCardStatus(CONST.EXPENSIFY_CARD.STATE.STATE_SUSPENDED, false)).toBe('workspace.expensifyCard.statusInactive');
21002100
});
21012101

2102-
it('reports a virtual card in a physical-only state as active', () => {
2103-
expect(getTranslationKeyForCardStatus(CONST.EXPENSIFY_CARD.STATE.STATE_NOT_ISSUED, true)).toBe('workspace.expensifyCard.statusActive');
2104-
expect(getTranslationKeyForCardStatus(CONST.EXPENSIFY_CARD.STATE.NOT_ACTIVATED, true)).toBe('workspace.expensifyCard.statusActive');
2102+
it('reports no status for a virtual card in a physical-only state', () => {
2103+
expect(getTranslationKeyForCardStatus(CONST.EXPENSIFY_CARD.STATE.STATE_NOT_ISSUED, true)).toBeUndefined();
2104+
expect(getTranslationKeyForCardStatus(CONST.EXPENSIFY_CARD.STATE.NOT_ACTIVATED, true)).toBeUndefined();
21052105
});
21062106

2107-
it('falls back to active for an undefined state', () => {
2108-
expect(getTranslationKeyForCardStatus(undefined, false)).toBe('workspace.expensifyCard.statusActive');
2107+
it('reports no status for an undefined or unrecognized state', () => {
2108+
expect(getTranslationKeyForCardStatus(undefined, false)).toBeUndefined();
21092109
});
21102110
});
21112111

0 commit comments

Comments
 (0)