Skip to content

Commit 88eea0d

Browse files
authored
Merge pull request Expensify#82607 from Expensify/cm-stardate-card-util
Add getCardAssignmentStartDate util
2 parents 61db904 + dc1fd12 commit 88eea0d

3 files changed

Lines changed: 21 additions & 12 deletions

File tree

src/libs/CardUtils.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {fromUnixTime, isBefore} from 'date-fns';
1+
import {format, fromUnixTime, isBefore} from 'date-fns';
22
import groupBy from 'lodash/groupBy';
33
import lodashSortBy from 'lodash/sortBy';
44
import type {OnyxCollection, OnyxEntry} from 'react-native-onyx';
@@ -844,6 +844,19 @@ function getDefaultCardName(cardholder?: string) {
844844
return `${cardholder}'s card`;
845845
}
846846

847+
/**
848+
* Gets the start date for a card assignment.
849+
* When not editing, always returns the current date.
850+
* When editing, returns the existing start date or current date as fallback.
851+
*
852+
* @param isEditing - Whether the card assignment is being edited
853+
* @param existingStartDate - The existing start date from previous assignment
854+
* @returns Formatted start date string in yyyy-MM-dd format
855+
*/
856+
function getCardAssignmentStartDate(isEditing: boolean | undefined, existingStartDate?: string): string {
857+
return isEditing ? (existingStartDate ?? format(new Date(), CONST.DATE.FNS_FORMAT_STRING)) : format(new Date(), CONST.DATE.FNS_FORMAT_STRING);
858+
}
859+
847860
function checkIfNewFeedConnected(prevFeedsData: CompanyFeeds, currentFeedsData: CompanyFeeds, plaidBank?: string) {
848861
const prevFeeds = Object.keys(prevFeedsData);
849862
const currentFeeds = Object.keys(currentFeedsData);
@@ -1272,6 +1285,7 @@ export {
12721285
hasOnlyOneCardToAssign,
12731286
checkIfNewFeedConnected,
12741287
getDefaultCardName,
1288+
getCardAssignmentStartDate,
12751289
getDomainOrWorkspaceAccountID,
12761290
mergeCardListWithWorkspaceFeeds,
12771291
isCard,

src/pages/workspace/companyCards/assignCard/AssigneeStep.tsx

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import {format} from 'date-fns';
21
import {Str} from 'expensify-common';
32
import React, {useEffect, useMemo, useState} from 'react';
43
import {Keyboard} from 'react-native';
@@ -16,7 +15,7 @@ import useSearchSelector from '@hooks/useSearchSelector';
1615
import useThemeStyles from '@hooks/useThemeStyles';
1716
import {setDraftInviteAccountID} from '@libs/actions/Card';
1817
import {searchInServer} from '@libs/actions/Report';
19-
import {getDefaultCardName} from '@libs/CardUtils';
18+
import {getCardAssignmentStartDate, getDefaultCardName} from '@libs/CardUtils';
2019
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
2120
import type {SettingsNavigatorParamList} from '@libs/Navigation/types';
2221
import {getHeaderMessage, getSearchValueForPhoneOrEmail, sortAlphabetically} from '@libs/OptionsListUtils';
@@ -92,9 +91,7 @@ function AssigneeStep({route}: AssigneeStepProps) {
9291
cardToAssign.encryptedCardNumber = assignCard.cardToAssign.encryptedCardNumber;
9392
cardToAssign.cardName = assignCard.cardToAssign.cardName;
9493
cardToAssign.customCardName = assignCard.cardToAssign.customCardName ?? defaultCardName;
95-
cardToAssign.startDate = !isEditing
96-
? format(new Date(), CONST.DATE.FNS_FORMAT_STRING)
97-
: (assignCard?.cardToAssign?.startDate ?? format(new Date(), CONST.DATE.FNS_FORMAT_STRING));
94+
cardToAssign.startDate = getCardAssignmentStartDate(isEditing, assignCard?.cardToAssign?.startDate);
9895
cardToAssign.dateOption = !isEditing
9996
? CONST.COMPANY_CARD.TRANSACTION_START_DATE_OPTIONS.CUSTOM
10097
: (assignCard?.cardToAssign?.dateOption ?? CONST.COMPANY_CARD.TRANSACTION_START_DATE_OPTIONS.CUSTOM);
@@ -129,9 +126,7 @@ function AssigneeStep({route}: AssigneeStepProps) {
129126
cardToAssign.encryptedCardNumber = assignCard.cardToAssign.encryptedCardNumber;
130127
cardToAssign.cardName = assignCard.cardToAssign.cardName;
131128
cardToAssign.customCardName = assignCard.cardToAssign.customCardName ?? defaultCardName;
132-
cardToAssign.startDate = !isEditing
133-
? format(new Date(), CONST.DATE.FNS_FORMAT_STRING)
134-
: (assignCard?.cardToAssign?.startDate ?? format(new Date(), CONST.DATE.FNS_FORMAT_STRING));
129+
cardToAssign.startDate = getCardAssignmentStartDate(isEditing, assignCard?.cardToAssign?.startDate);
135130
cardToAssign.dateOption = !isEditing
136131
? CONST.COMPANY_CARD.TRANSACTION_START_DATE_OPTIONS.CUSTOM
137132
: (assignCard?.cardToAssign?.dateOption ?? CONST.COMPANY_CARD.TRANSACTION_START_DATE_OPTIONS.CUSTOM);

src/pages/workspace/companyCards/assignCard/InviteNewMemberStep.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import useCardsList from '@hooks/useCardsList';
77
import useLocalize from '@hooks/useLocalize';
88
import useOnyx from '@hooks/useOnyx';
99
import {setDraftInviteAccountID} from '@libs/actions/Card';
10-
import {getDefaultCardName, getFilteredCardList, hasOnlyOneCardToAssign} from '@libs/CardUtils';
10+
import {getCardAssignmentStartDate, getDefaultCardName, getFilteredCardList, hasOnlyOneCardToAssign} from '@libs/CardUtils';
1111
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
1212
import type {SettingsNavigatorParamList} from '@libs/Navigation/types';
1313
import Navigation from '@navigation/Navigation';
@@ -63,7 +63,7 @@ function InviteNewMemberStep({route, currentUserPersonalDetails}: InviteeNewMemb
6363
cardToAssign.encryptedCardNumber = assignCard.cardToAssign.encryptedCardNumber;
6464
cardToAssign.cardName = assignCard.cardToAssign.cardName;
6565
cardToAssign.customCardName = assignCard.cardToAssign.customCardName ?? defaultCardName;
66-
cardToAssign.startDate = assignCard?.cardToAssign?.startDate ?? new Date().toISOString().split('T').at(0);
66+
cardToAssign.startDate = getCardAssignmentStartDate(true, assignCard?.cardToAssign?.startDate);
6767
cardToAssign.dateOption = assignCard?.cardToAssign?.dateOption ?? CONST.COMPANY_CARD.TRANSACTION_START_DATE_OPTIONS.CUSTOM;
6868
setAssignCardStepAndData({
6969
currentStep: CONST.COMPANY_CARD.STEP.CONFIRMATION,
@@ -75,7 +75,7 @@ function InviteNewMemberStep({route, currentUserPersonalDetails}: InviteeNewMemb
7575
const onlyCard = filteredCardList.at(0);
7676
cardToAssign.cardName = onlyCard?.cardName;
7777
cardToAssign.encryptedCardNumber = onlyCard?.cardID;
78-
cardToAssign.startDate = assignCard?.cardToAssign?.startDate ?? new Date().toISOString().split('T').at(0);
78+
cardToAssign.startDate = getCardAssignmentStartDate(true, assignCard?.cardToAssign?.startDate);
7979
cardToAssign.dateOption = assignCard?.cardToAssign?.dateOption ?? CONST.COMPANY_CARD.TRANSACTION_START_DATE_OPTIONS.CUSTOM;
8080
setAssignCardStepAndData({
8181
currentStep: CONST.COMPANY_CARD.STEP.CONFIRMATION,

0 commit comments

Comments
 (0)