From 614518e107ccee59e3f4b05a2ba9668b0ec0eb9b Mon Sep 17 00:00:00 2001 From: Agata Kosior Date: Wed, 24 Jul 2024 17:34:01 +0200 Subject: [PATCH 01/10] feat: add new card action types --- src/CONST.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/CONST.ts b/src/CONST.ts index 82f6e2e7bb6a..5ae6314815b7 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -682,6 +682,9 @@ const CONST = { ACTIONABLE_TRACK_EXPENSE_WHISPER: 'ACTIONABLETRACKEXPENSEWHISPER', ADD_COMMENT: 'ADDCOMMENT', APPROVED: 'APPROVED', + CARDMISSINGADDRESS: 'CARDMISSINGADDRESS', + CARDISSUED: 'CARDISSUED', + CARDISSUEDVIRTUAL: 'CARDISSUEDVIRTUAL', CHANGE_FIELD: 'CHANGEFIELD', // OldDot Action CHANGE_POLICY: 'CHANGEPOLICY', // OldDot Action CHANGE_TYPE: 'CHANGETYPE', // OldDot Action From 36661fbaa62b2c42894c77c756eeeadf928377e3 Mon Sep 17 00:00:00 2001 From: Agata Kosior Date: Fri, 26 Jul 2024 13:39:30 +0200 Subject: [PATCH 02/10] feat: create IssueCardMessage component --- src/CONST.ts | 6 +- .../ReportActionItem/IssueCardMessage.tsx | 79 +++++++++++++++++++ src/languages/en.ts | 6 ++ src/languages/es.ts | 6 ++ src/languages/types.ts | 6 ++ src/pages/home/report/ReportActionItem.tsx | 12 +++ 6 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 src/components/ReportActionItem/IssueCardMessage.tsx diff --git a/src/CONST.ts b/src/CONST.ts index 5ae6314815b7..15ba47e7d176 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -682,9 +682,9 @@ const CONST = { ACTIONABLE_TRACK_EXPENSE_WHISPER: 'ACTIONABLETRACKEXPENSEWHISPER', ADD_COMMENT: 'ADDCOMMENT', APPROVED: 'APPROVED', - CARDMISSINGADDRESS: 'CARDMISSINGADDRESS', - CARDISSUED: 'CARDISSUED', - CARDISSUEDVIRTUAL: 'CARDISSUEDVIRTUAL', + CARD_MISSING_ADDRESS: 'CARDMISSINGADDRESS', + CARD_ISSUED: 'CARDISSUED', + CARD_ISSUED_VIRTUAL: 'CARDISSUEDVIRTUAL', CHANGE_FIELD: 'CHANGEFIELD', // OldDot Action CHANGE_POLICY: 'CHANGEPOLICY', // OldDot Action CHANGE_TYPE: 'CHANGETYPE', // OldDot Action diff --git a/src/components/ReportActionItem/IssueCardMessage.tsx b/src/components/ReportActionItem/IssueCardMessage.tsx new file mode 100644 index 000000000000..d114ec18aa95 --- /dev/null +++ b/src/components/ReportActionItem/IssueCardMessage.tsx @@ -0,0 +1,79 @@ +import React from 'react'; +import type {OnyxEntry} from 'react-native-onyx'; +import {useOnyx} from 'react-native-onyx'; +import Button from '@components/Button'; +import RenderHTML from '@components/RenderHTML'; +import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; +import useLocalize from '@hooks/useLocalize'; +import useThemeStyles from '@hooks/useThemeStyles'; +import * as Environment from '@libs/Environment/Environment'; +import Navigation from '@libs/Navigation/Navigation'; +import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; +import ROUTES from '@src/ROUTES'; +import type {ReportAction} from '@src/types/onyx'; +import {isEmptyObject} from '@src/types/utils/EmptyObject'; + +let environmentURL: string; +Environment.getEnvironmentURL().then((url: string) => (environmentURL = url)); + +type IssueCardMessageProps = { + action: OnyxEntry; +}; + +function IssueCardMessage({action}: IssueCardMessageProps) { + const {translate} = useLocalize(); + const styles = useThemeStyles(); + // TODO: now mocking accountID with current user accountID instead of action.message.assigneeAccountID + const personalData = useCurrentUserPersonalDetails(); + const [privatePersonalDetails] = useOnyx(ONYXKEYS.PRIVATE_PERSONAL_DETAILS); + + // TODO: now mocking accountID with current user accountID instead of action.message.assigneeAccountID + const assignee = ``; + const link = `${translate('cardPage.expensifyCard')}`; + + // TODO: remove || action?.originalMessage.html === 'NOMAILINGADDRESS' from the condition - added only for testing purposes + const noMailingAddress = + // @ts-expect-error 'action.originalMessage' is of type 'unknown'. + (action?.actionName === CONST.REPORT.ACTIONS.TYPE.CARD_MISSING_ADDRESS && isEmptyObject(privatePersonalDetails?.address)) || action?.originalMessage.html === 'NOMAILINGADDRESS'; + + const getTranslation = () => { + // switch (action?.actionName) { + // TODO: replace with previous line - added only for testing purposes + // @ts-expect-error 'action.originalMessage' is of type 'unknown'. + switch (action?.originalMessage?.html) { + case CONST.REPORT.ACTIONS.TYPE.CARD_ISSUED: + return translate('workspace.expensifyCard.issuedCard', assignee); + case CONST.REPORT.ACTIONS.TYPE.CARD_ISSUED_VIRTUAL: + return translate('workspace.expensifyCard.issuedCardVirtual', {assignee, link}); + case CONST.REPORT.ACTIONS.TYPE.CARD_MISSING_ADDRESS: + return translate(`workspace.expensifyCard.${noMailingAddress ? 'issuedCardNoMailingAddress' : 'addedAddress'}`, assignee); + // TODO: remove two following cases - added only for testing purposes + case 'ADDRESSADDED': + return translate('workspace.expensifyCard.addedAddress', assignee); + case 'NOMAILINGADDRESS': + return translate('workspace.expensifyCard.issuedCardNoMailingAddress', assignee); + default: + return ''; + } + }; + + return ( + <> + ${getTranslation()}`} /> + {noMailingAddress && ( +