Skip to content

Commit 4e23780

Browse files
committed
Merge remote-tracking branch 'origin/main' into claude-addAbsoluteFillToAttachmentLoading
Co-authored-by: Situ Chandra Shil <situchan@users.noreply.github.com> # Conflicts: # src/components/ReportActionItem/IssueCardMessage.tsx # src/libs/ReportActionsUtils.ts # src/pages/MissingPersonalDetails/subPages/DateOfBirth.tsx # src/pages/MissingPersonalDetails/utils.ts # src/pages/media/AttachmentModalScreen/AttachmentModalBaseContent/index.tsx # tests/unit/ReportActionsUtilsTest.ts
2 parents aff2b9d + 74c3bc5 commit 4e23780

5 files changed

Lines changed: 34 additions & 7 deletions

File tree

src/components/ReportActionItem/IssueCardMessage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ function IssueCardMessage({action, policyID, shouldNavigateToCardDetails}: Issue
3636
const cardList = useNonPersonalCardList();
3737
const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS);
3838
const companyCard = cardList?.[(getOriginalMessage(action) as IssueNewCardOriginalMessage)?.cardID];
39-
const shouldShowAddMissingDetailsButton = !!expensifyCard?.cardID && isAssigneeCurrentUser && shouldShowAddMissingDetails(action?.actionName, privatePersonalDetails);
39+
const shouldShowAddMissingDetailsButton =
40+
!!expensifyCard?.cardID && isAssigneeCurrentUser && shouldShowAddMissingDetails(action?.actionName, privatePersonalDetails, expensifyCard?.state);
4041
const shouldShowActivateButton = isAssigneeCurrentUser && shouldShowActivateCard(action?.actionName, expensifyCard, privatePersonalDetails);
4142

4243
const route = useRoute<PlatformStackRouteProp<ReportsSplitNavigatorParamList, typeof SCREENS.REPORT>>();

src/libs/ReportActionsUtils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4231,9 +4231,9 @@ function isCardIssuedAction(
42314231
);
42324232
}
42334233

4234-
function shouldShowAddMissingDetails(actionName?: ReportActionName, privatePersonalDetail?: PrivatePersonalDetails) {
4234+
function shouldShowAddMissingDetails(actionName?: ReportActionName, privatePersonalDetail?: PrivatePersonalDetails, cardState?: ValueOf<typeof CONST.EXPENSIFY_CARD.STATE>) {
42354235
const missingDetails = arePersonalDetailsMissing(privatePersonalDetail);
4236-
return actionName === CONST.REPORT.ACTIONS.TYPE.CARD_MISSING_ADDRESS && missingDetails;
4236+
return actionName === CONST.REPORT.ACTIONS.TYPE.CARD_MISSING_ADDRESS && (missingDetails || cardState === CONST.EXPENSIFY_CARD.STATE.STATE_NOT_ISSUED);
42374237
}
42384238

42394239
function shouldShowActivateCard(actionName?: ReportActionName, card?: Card, privatePersonalDetail?: PrivatePersonalDetails) {

src/pages/MissingPersonalDetails/subPages/DateOfBirth.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from 'react';
22
import DateOfBirthStep from '@components/SubStepForms/DateOfBirthStep';
33
import useLocalize from '@hooks/useLocalize';
44
import usePersonalDetailsFormSubmit from '@hooks/usePersonalDetailsFormSubmit';
5+
import {isValidPastDate, meetsMaximumAgeRequirement, meetsMinimumAgeRequirement} from '@libs/ValidationUtils';
56
import type {CustomSubPageProps} from '@pages/MissingPersonalDetails/types';
67
import ONYXKEYS from '@src/ONYXKEYS';
78
import INPUT_IDS from '@src/types/form/PersonalDetailsForm';
@@ -17,6 +18,9 @@ function DateOfBirth({isEditing, onNext, onMove, personalDetailsValues}: CustomS
1718
shouldSaveDraft: true,
1819
});
1920

21+
const dobValue = personalDetailsValues[INPUT_IDS.DATE_OF_BIRTH];
22+
const isValidDOB = dobValue !== '' && isValidPastDate(dobValue) && meetsMaximumAgeRequirement(dobValue) && meetsMinimumAgeRequirement(dobValue);
23+
2024
return (
2125
<DateOfBirthStep<typeof ONYXKEYS.FORMS.PERSONAL_DETAILS_FORM>
2226
isEditing={isEditing}
@@ -27,7 +31,7 @@ function DateOfBirth({isEditing, onNext, onMove, personalDetailsValues}: CustomS
2731
onSubmit={handleSubmit}
2832
stepFields={STEP_FIELDS}
2933
dobInputID={INPUT_IDS.DATE_OF_BIRTH}
30-
dobDefaultValue={personalDetailsValues[INPUT_IDS.DATE_OF_BIRTH]}
34+
dobDefaultValue={isValidDOB ? dobValue : ''}
3135
/>
3236
);
3337
}

src/pages/MissingPersonalDetails/utils.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type {OnyxEntry} from 'react-native-onyx';
22
import {getCurrentAddress} from '@libs/PersonalDetailsUtils';
3+
import {isValidPastDate, meetsMaximumAgeRequirement, meetsMinimumAgeRequirement} from '@libs/ValidationUtils';
34
import CONST from '@src/CONST';
45
import type {PersonalDetailsForm} from '@src/types/form';
56
import INPUT_IDS from '@src/types/form/PersonalDetailsForm';
@@ -27,7 +28,8 @@ function getInitialSubPage(values: PersonalDetailsForm, shouldCollectPin = false
2728
if (values[INPUT_IDS.LEGAL_FIRST_NAME] === '' || values[INPUT_IDS.LEGAL_LAST_NAME] === '') {
2829
return CONST.MISSING_PERSONAL_DETAILS.PAGE_NAME.LEGAL_NAME;
2930
}
30-
if (values[INPUT_IDS.DATE_OF_BIRTH] === '') {
31+
const dobValue = values[INPUT_IDS.DATE_OF_BIRTH];
32+
if (dobValue === '' || !isValidPastDate(dobValue) || !meetsMaximumAgeRequirement(dobValue) || !meetsMinimumAgeRequirement(dobValue)) {
3133
return CONST.MISSING_PERSONAL_DETAILS.PAGE_NAME.DATE_OF_BIRTH;
3234
}
3335
if (

tests/unit/ReportActionsUtilsTest.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1485,7 +1485,7 @@ describe('ReportActionsUtils', () => {
14851485
const res = ReportActionsUtils.shouldShowAddMissingDetails(CONST.REPORT.ACTIONS.TYPE.CARD_MISSING_ADDRESS, mockPersonalDetail);
14861486
expect(res).toEqual(true);
14871487
});
1488-
it('should return false if personal detail is completed', () => {
1488+
it('should still return true when personal detail is completed but has not been confirmed yet', () => {
14891489
const mockPersonalDetail = {
14901490
addresses: [
14911491
{
@@ -1500,7 +1500,27 @@ describe('ReportActionsUtils', () => {
15001500
phoneNumber: '+162992973',
15011501
dob: '9-9-2000',
15021502
};
1503-
const res = ReportActionsUtils.shouldShowAddMissingDetails(CONST.REPORT.ACTIONS.TYPE.CARD_MISSING_ADDRESS, mockPersonalDetail);
1503+
const cardState = CONST.EXPENSIFY_CARD.STATE.STATE_NOT_ISSUED;
1504+
const res = ReportActionsUtils.shouldShowAddMissingDetails(CONST.REPORT.ACTIONS.TYPE.CARD_MISSING_ADDRESS, mockPersonalDetail, cardState);
1505+
expect(res).toEqual(true);
1506+
});
1507+
it('should return false if personal detail is completed and has been confirmed by the user', () => {
1508+
const mockPersonalDetail = {
1509+
addresses: [
1510+
{
1511+
street: '123 Main St',
1512+
city: 'New York',
1513+
state: 'NY',
1514+
postalCode: '10001',
1515+
},
1516+
],
1517+
legalFirstName: 'John',
1518+
legalLastName: 'David',
1519+
phoneNumber: '+162992973',
1520+
dob: '9-9-2000',
1521+
};
1522+
const cardState = CONST.EXPENSIFY_CARD.STATE.NOT_ACTIVATED;
1523+
const res = ReportActionsUtils.shouldShowAddMissingDetails(CONST.REPORT.ACTIONS.TYPE.CARD_MISSING_ADDRESS, mockPersonalDetail, cardState);
15041524
expect(res).toEqual(false);
15051525
});
15061526
});

0 commit comments

Comments
 (0)