diff --git a/.github/actions/javascript/checkDeployBlockers/checkDeployBlockers.ts b/.github/actions/javascript/checkDeployBlockers/checkDeployBlockers.ts index d319c227a97f..bf94b136ce43 100644 --- a/.github/actions/javascript/checkDeployBlockers/checkDeployBlockers.ts +++ b/.github/actions/javascript/checkDeployBlockers/checkDeployBlockers.ts @@ -4,7 +4,7 @@ import CONST from '@github/libs/CONST'; import GithubUtils from '@github/libs/GithubUtils'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; -const run = function () { +const run = function (): Promise { const issueNumber = Number(core.getInput('ISSUE_NUMBER', {required: true})); console.log(`Fetching issue number ${issueNumber}`); diff --git a/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.ts b/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.ts index fb706240e975..4ef4d565ffd1 100644 --- a/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.ts +++ b/.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.ts @@ -1,4 +1,4 @@ -import core from '@actions/core'; +import * as core from '@actions/core'; import format from 'date-fns/format'; import fs from 'fs'; import CONST from '@github/libs/CONST'; diff --git a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js index 992d6dcd9732..228ae24f4f62 100644 --- a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js +++ b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js @@ -14181,11 +14181,34 @@ function wrappy (fn, cb) { "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -const core_1 = __importDefault(__nccwpck_require__(2186)); +const core = __importStar(__nccwpck_require__(2186)); const format_1 = __importDefault(__nccwpck_require__(2168)); const fs_1 = __importDefault(__nccwpck_require__(7147)); const CONST_1 = __importDefault(__nccwpck_require__(9873)); @@ -14299,7 +14322,7 @@ async function run() { } catch (err) { console.error('An unknown error occurred!', err); - core_1.default.setFailed(err); + core.setFailed(err); } } if (require.main === require.cache[eval('__filename')]) { diff --git a/.github/actions/javascript/getDeployPullRequestList/getDeployPullRequestList.ts b/.github/actions/javascript/getDeployPullRequestList/getDeployPullRequestList.ts index e814a10ca188..2ef789df76da 100644 --- a/.github/actions/javascript/getDeployPullRequestList/getDeployPullRequestList.ts +++ b/.github/actions/javascript/getDeployPullRequestList/getDeployPullRequestList.ts @@ -1,4 +1,4 @@ -import core from '@actions/core'; +import * as core from '@actions/core'; import github from '@actions/github'; import {getJSONInput} from '@github/libs/ActionUtils'; import GithubUtils from '@github/libs/GithubUtils'; diff --git a/.github/actions/javascript/getDeployPullRequestList/index.js b/.github/actions/javascript/getDeployPullRequestList/index.js index bac5ad33270d..3b845b6daa37 100644 --- a/.github/actions/javascript/getDeployPullRequestList/index.js +++ b/.github/actions/javascript/getDeployPullRequestList/index.js @@ -11470,18 +11470,41 @@ function wrappy (fn, cb) { "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -const core_1 = __importDefault(__nccwpck_require__(2186)); +const core = __importStar(__nccwpck_require__(2186)); const github_1 = __importDefault(__nccwpck_require__(5438)); const ActionUtils_1 = __nccwpck_require__(6981); const GithubUtils_1 = __importDefault(__nccwpck_require__(9296)); const GitUtils_1 = __importDefault(__nccwpck_require__(1547)); async function run() { try { - const inputTag = core_1.default.getInput('TAG', { required: true }); + const inputTag = core.getInput('TAG', { required: true }); const isProductionDeploy = (0, ActionUtils_1.getJSONInput)('IS_PRODUCTION_DEPLOY', { required: false }, false); const deployEnv = isProductionDeploy ? 'production' : 'staging'; console.log(`Looking for PRs deployed to ${deployEnv} in ${inputTag}...`); @@ -11497,11 +11520,11 @@ async function run() { console.log(`Looking for PRs deployed to ${deployEnv} between ${priorTag} and ${inputTag}`); const prList = await GitUtils_1.default.getPullRequestsMergedBetween(priorTag ?? '', inputTag); console.log('Found the pull request list: ', prList); - core_1.default.setOutput('PR_LIST', prList); + core.setOutput('PR_LIST', prList); } catch (error) { console.error(error.message); - core_1.default.setFailed(error); + core.setFailed(error); } } if (require.main === require.cache[eval('__filename')]) { diff --git a/android/app/build.gradle b/android/app/build.gradle index 3ce08fd0385b..4cedee3c1aff 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -98,8 +98,8 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion multiDexEnabled rootProject.ext.multiDexEnabled - versionCode 1001045907 - versionName "1.4.59-7" + versionCode 1001045909 + versionName "1.4.59-9" } flavorDimensions "default" diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist index 6c07d1458aa9..5ace0083c85c 100644 --- a/ios/NewExpensify/Info.plist +++ b/ios/NewExpensify/Info.plist @@ -40,7 +40,7 @@ CFBundleVersion - 1.4.59.7 + 1.4.59.9 ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/ios/NewExpensifyTests/Info.plist b/ios/NewExpensifyTests/Info.plist index 294ebd926e75..8b00b2b6ec1e 100644 --- a/ios/NewExpensifyTests/Info.plist +++ b/ios/NewExpensifyTests/Info.plist @@ -19,6 +19,6 @@ CFBundleSignature ???? CFBundleVersion - 1.4.59.7 + 1.4.59.9 diff --git a/ios/NotificationServiceExtension/Info.plist b/ios/NotificationServiceExtension/Info.plist index e778625333fe..bee6ff54676e 100644 --- a/ios/NotificationServiceExtension/Info.plist +++ b/ios/NotificationServiceExtension/Info.plist @@ -13,7 +13,7 @@ CFBundleShortVersionString 1.4.59 CFBundleVersion - 1.4.59.7 + 1.4.59.9 NSExtension NSExtensionPointIdentifier diff --git a/package-lock.json b/package-lock.json index 60984ab13b5a..a426fab95d09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "new.expensify", - "version": "1.4.59-7", + "version": "1.4.59-9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "new.expensify", - "version": "1.4.59-7", + "version": "1.4.59-9", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 7f4507e15ede..bad551b1282f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "new.expensify", - "version": "1.4.59-7", + "version": "1.4.59-9", "author": "Expensify, Inc.", "homepage": "https://new.expensify.com", "description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.", diff --git a/src/CONST.ts b/src/CONST.ts index 286d3556bd74..49019170da66 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -1526,7 +1526,7 @@ const CONST = { }, COLLECTION_KEYS: { DESCRIPTION: 'description', - REIMBURSER_EMAIL: 'reimburserEmail', + REIMBURSER: 'reimburser', REIMBURSEMENT_CHOICE: 'reimbursementChoice', APPROVAL_MODE: 'approvalMode', AUTOREPORTING: 'autoReporting', diff --git a/src/components/AddressForm.tsx b/src/components/AddressForm.tsx index a4d1c2dd6bd6..362ba88440a0 100644 --- a/src/components/AddressForm.tsx +++ b/src/components/AddressForm.tsx @@ -118,9 +118,9 @@ function AddressForm({ ErrorUtils.addErrorMessage(errors, 'firstName', 'bankAccount.error.firstName'); - if (countrySpecificZipRegex && values.zipPostCode) { - if (!countrySpecificZipRegex.test(values.zipPostCode.trim().toUpperCase())) { - if (ValidationUtils.isRequiredFulfilled(values.zipPostCode.trim())) { + if (countrySpecificZipRegex) { + if (!countrySpecificZipRegex.test(values.zipPostCode?.trim().toUpperCase())) { + if (ValidationUtils.isRequiredFulfilled(values.zipPostCode?.trim())) { errors.zipPostCode = ['privatePersonalDetails.error.incorrectZipFormat', countryZipFormat]; } else { errors.zipPostCode = 'common.error.fieldRequired'; diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index c0c90143a67a..98577e73766a 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -1336,8 +1336,8 @@ function isPayer(session: OnyxEntry, iouReport: OnyxEntry) { const isManager = iouReport?.managerID === session?.accountID; if (isPaidGroupPolicy(iouReport)) { if (policy?.reimbursementChoice === CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_YES) { - const isReimburser = session?.email === policy?.reimburserEmail; - return (!policy?.reimburserEmail || isReimburser) && (isApproved || isManager); + const isReimburser = session?.email === policy?.achAccount?.reimburser; + return (!policy?.achAccount?.reimburser || isReimburser) && (isApproved || isManager); } if (policy?.reimbursementChoice === CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_MANUAL) { return isAdmin && (isApproved || isManager); diff --git a/src/libs/actions/Policy.ts b/src/libs/actions/Policy.ts index b64b4d8643f5..08c493e0c0aa 100644 --- a/src/libs/actions/Policy.ts +++ b/src/libs/actions/Policy.ts @@ -675,7 +675,7 @@ function setWorkspaceApprovalMode(policyID: string, approver: string, approvalMo API.write(WRITE_COMMANDS.SET_WORKSPACE_APPROVAL_MODE, params, {optimisticData, failureData, successData}); } -function setWorkspacePayer(policyID: string, reimburserEmail: string, reimburserAccountID: number) { +function setWorkspacePayer(policyID: string, reimburserEmail: string) { const policy = getPolicy(policyID); const optimisticData: OnyxUpdate[] = [ @@ -683,10 +683,9 @@ function setWorkspacePayer(policyID: string, reimburserEmail: string, reimburser onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, value: { - reimburserEmail, - reimburserAccountID, - errorFields: {reimburserEmail: null}, - pendingFields: {reimburserEmail: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE}, + achAccount: {reimburser: reimburserEmail}, + errorFields: {reimburser: null}, + pendingFields: {reimburser: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE}, }, }, ]; @@ -696,8 +695,8 @@ function setWorkspacePayer(policyID: string, reimburserEmail: string, reimburser onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, value: { - errorFields: {reimburserEmail: null}, - pendingFields: {reimburserEmail: null}, + errorFields: {reimburser: null}, + pendingFields: {reimburser: null}, }, }, ]; @@ -707,10 +706,9 @@ function setWorkspacePayer(policyID: string, reimburserEmail: string, reimburser onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, value: { - reimburserEmail: policy.reimburserEmail ?? null, - reimburserAccountID: policy.reimburserAccountID ?? null, - errorFields: {reimburserEmail: ErrorUtils.getMicroSecondOnyxError('workflowsPayerPage.genericErrorMessage')}, - pendingFields: {reimburserEmail: null}, + achAccount: {reimburser: policy.achAccount?.reimburser ?? null}, + errorFields: {reimburser: ErrorUtils.getMicroSecondOnyxError('workflowsPayerPage.genericErrorMessage')}, + pendingFields: {reimburser: null}, }, }, ]; @@ -724,7 +722,7 @@ function clearPolicyErrorField(policyID: string, fieldName: string) { Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {errorFields: {[fieldName]: null}}); } -function setWorkspaceReimbursement(policyID: string, reimbursementChoice: ValueOf, reimburserAccountID: number, reimburserEmail: string) { +function setWorkspaceReimbursement(policyID: string, reimbursementChoice: ValueOf, reimburserEmail: string) { const policy = getPolicy(policyID); const optimisticData: OnyxUpdate[] = [ @@ -733,8 +731,7 @@ function setWorkspaceReimbursement(policyID: string, reimbursementChoice: ValueO key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, value: { reimbursementChoice, - reimburserAccountID, - reimburserEmail, + achAccount: {reimburser: reimburserEmail}, errorFields: {reimbursementChoice: null}, pendingFields: {reimbursementChoice: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE}, }, @@ -758,8 +755,7 @@ function setWorkspaceReimbursement(policyID: string, reimbursementChoice: ValueO key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, value: { reimbursementChoice: policy.reimbursementChoice ?? null, - reimburserAccountID: policy.reimburserAccountID ?? null, - reimburserEmail: policy.reimburserEmail ?? null, + achAccount: {reimburser: policy.achAccount?.reimburser ?? null}, errorFields: {reimbursementChoice: ErrorUtils.getMicroSecondOnyxError('common.genericErrorMessage')}, pendingFields: {reimbursementChoice: null}, }, diff --git a/src/pages/AddPersonalBankAccountPage.tsx b/src/pages/AddPersonalBankAccountPage.tsx index e2d832f672b2..a932bcf627d9 100644 --- a/src/pages/AddPersonalBankAccountPage.tsx +++ b/src/pages/AddPersonalBankAccountPage.tsx @@ -13,7 +13,6 @@ import Navigation from '@libs/Navigation/Navigation'; import * as BankAccounts from '@userActions/BankAccounts'; import * as PaymentMethods from '@userActions/PaymentMethods'; import ONYXKEYS from '@src/ONYXKEYS'; -import ROUTES from '@src/ROUTES'; import type {PersonalBankAccount, PlaidData} from '@src/types/onyx'; type AddPersonalBankAccountPageWithOnyxProps = { @@ -51,7 +50,7 @@ function AddPersonalBankAccountPage({personalBankAccount, plaidData}: AddPersona } else if (shouldContinue && onSuccessFallbackRoute) { PaymentMethods.continueSetup(onSuccessFallbackRoute); } else { - Navigation.goBack(ROUTES.SETTINGS_WALLET); + Navigation.goBack(); } }, [personalBankAccount], diff --git a/src/pages/workspace/WorkspaceInitialPage.tsx b/src/pages/workspace/WorkspaceInitialPage.tsx index 0d3bb027b8e6..512b637f7f46 100644 --- a/src/pages/workspace/WorkspaceInitialPage.tsx +++ b/src/pages/workspace/WorkspaceInitialPage.tsx @@ -165,7 +165,7 @@ function WorkspaceInitialPage({policyDraft, policy: policyProp, policyMembers, r icon: Expensicons.Workflows, action: singleExecution(waitForNavigate(() => Navigation.navigate(ROUTES.WORKSPACE_WORKFLOWS.getRoute(policyID)))), routeName: SCREENS.WORKSPACE.WORKFLOWS, - brickRoadIndicator: !isEmptyObject(policy?.errorFields?.reimburserEmail ?? {}) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, + brickRoadIndicator: !isEmptyObject(policy?.errorFields?.reimburser ?? {}) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, }); } diff --git a/src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx b/src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx index f810020fd733..35412d768bcc 100644 --- a/src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx +++ b/src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx @@ -30,7 +30,7 @@ import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; import type SCREENS from '@src/SCREENS'; -import type {Beta, Session} from '@src/types/onyx'; +import type {Beta} from '@src/types/onyx'; import ToggleSettingOptionRow from './ToggleSettingsOptionRow'; import type {ToggleSettingOptionRowProps} from './ToggleSettingsOptionRow'; import {getAutoReportingFrequencyDisplayNames} from './WorkspaceAutoReportingFrequencyPage'; @@ -39,12 +39,10 @@ import type {AutoReportingFrequencyKey} from './WorkspaceAutoReportingFrequencyP type WorkspaceWorkflowsPageOnyxProps = { /** Beta features list */ betas: OnyxEntry; - /** Policy details */ - session: OnyxEntry; }; type WorkspaceWorkflowsPageProps = WithPolicyProps & WorkspaceWorkflowsPageOnyxProps & StackScreenProps; -function WorkspaceWorkflowsPage({policy, betas, route, session}: WorkspaceWorkflowsPageProps) { +function WorkspaceWorkflowsPage({policy, betas, route}: WorkspaceWorkflowsPageProps) { const {translate, preferredLocale} = useLocalize(); const styles = useThemeStyles(); const {isSmallScreenWidth} = useWindowDimensions(); @@ -55,11 +53,10 @@ function WorkspaceWorkflowsPage({policy, betas, route, session}: WorkspaceWorkfl const canUseDelayedSubmission = Permissions.canUseWorkflowsDelayedSubmission(betas); const [isCurrencyModalOpen, setIsCurrencyModalOpen] = useState(false); - const displayNameForAuthorizedPayer = useMemo(() => { - const personalDetails = PersonalDetailsUtils.getPersonalDetailsByIDs([policy?.reimburserAccountID ?? 0], session?.accountID ?? 0); - const displayNameFromReimburserEmail = PersonalDetailsUtils.getPersonalDetailByEmail(policy?.reimburserEmail ?? '')?.displayName ?? policy?.reimburserEmail; - return displayNameFromReimburserEmail ?? personalDetails?.[0]?.displayName; - }, [policy?.reimburserAccountID, policy?.reimburserEmail, session?.accountID]); + const displayNameForAuthorizedPayer = useMemo( + () => PersonalDetailsUtils.getPersonalDetailByEmail(policy?.achAccount?.reimburser ?? '')?.displayName ?? policy?.achAccount?.reimburser, + [policy?.achAccount?.reimburser], + ); const onPressAutoReportingFrequency = useCallback(() => Navigation.navigate(ROUTES.WORKSPACE_WORKFLOWS_AUTOREPORTING_FREQUENCY.getRoute(policy?.id ?? '')), [policy?.id]); @@ -92,7 +89,7 @@ function WorkspaceWorkflowsPage({policy, betas, route, session}: WorkspaceWorkfl if (accountNumber && bankDisplayName !== accountNumber) { bankDisplayName += ` ${accountNumber.slice(-5)}`; } - const hasReimburserEmailError = !!policy?.errorFields?.reimburserEmail; + const hasReimburserError = !!policy?.errorFields?.reimburser; const hasApprovalError = !!policy?.errorFields?.approvalMode; const hasDelayedSubmissionError = !!policy?.errorFields?.autoReporting; @@ -174,11 +171,8 @@ function WorkspaceWorkflowsPage({policy, betas, route, session}: WorkspaceWorkfl newReimbursementChoice = hasVBA ? CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_YES : CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_MANUAL; } - const newReimburserAccountID = - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - PersonalDetailsUtils.getPersonalDetailByEmail(policy?.reimburserEmail ?? '')?.accountID || policy?.reimburserAccountID || policy?.ownerAccountID; - const newReimburserEmail = PersonalDetailsUtils.getPersonalDetailsByIDs([newReimburserAccountID ?? 0], session?.accountID ?? 0)?.[0]?.login; - Policy.setWorkspaceReimbursement(policy?.id ?? '', newReimbursementChoice, newReimburserAccountID ?? 0, newReimburserEmail ?? ''); + const newReimburserEmail = policy?.achAccount?.reimburser ?? policy?.owner; + Policy.setWorkspaceReimbursement(policy?.id ?? '', newReimbursementChoice, newReimburserEmail ?? ''); }, subMenuItems: ( <> @@ -205,9 +199,9 @@ function WorkspaceWorkflowsPage({policy, betas, route, session}: WorkspaceWorkfl /> {hasVBA && policy?.reimbursementChoice === CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_YES && ( Policy.clearPolicyErrorField(policy?.id ?? '', CONST.POLICY.COLLECTION_KEYS.REIMBURSER_EMAIL)} + pendingAction={policy?.pendingFields?.reimburser} + errors={ErrorUtils.getLatestErrorField(policy ?? {}, CONST.POLICY.COLLECTION_KEYS.REIMBURSER)} + onClose={() => Policy.clearPolicyErrorField(policy?.id ?? '', CONST.POLICY.COLLECTION_KEYS.REIMBURSER)} errorRowStyles={[styles.ml7]} > )} @@ -243,7 +237,6 @@ function WorkspaceWorkflowsPage({policy, betas, route, session}: WorkspaceWorkfl preferredLocale, canUseDelayedSubmission, displayNameForAuthorizedPayer, - session?.accountID, isOffline, isPolicyAdmin, ]); @@ -321,8 +314,5 @@ export default withPolicy( betas: { key: ONYXKEYS.BETAS, }, - session: { - key: ONYXKEYS.SESSION, - }, })(WorkspaceWorkflowsPage), ); diff --git a/src/pages/workspace/workflows/WorkspaceWorkflowsPayerPage.tsx b/src/pages/workspace/workflows/WorkspaceWorkflowsPayerPage.tsx index e96b19ce4442..f2d8cda48ef0 100644 --- a/src/pages/workspace/workflows/WorkspaceWorkflowsPayerPage.tsx +++ b/src/pages/workspace/workflows/WorkspaceWorkflowsPayerPage.tsx @@ -87,7 +87,7 @@ function WorkspaceWorkflowsPayerPage({route, policy, policyMembers, personalDeta /> ); - const isAuthorizedPayer = policy?.reimburserEmail === details?.login ?? policy?.reimburserAccountID === accountID; + const isAuthorizedPayer = policy?.achAccount?.reimburser === details?.login; const formattedMember = { keyForList: accountIDKey, @@ -106,28 +106,17 @@ function WorkspaceWorkflowsPayerPage({route, policy, policyMembers, personalDeta }, ], errors: policyMember.errors, - pendingAction: policyMember.pendingAction ?? isAuthorizedPayer ? policy?.pendingFields?.reimburserEmail : null, + pendingAction: policyMember.pendingAction ?? isAuthorizedPayer ? policy?.pendingFields?.reimburser : null, }; - if (policy?.reimburserEmail === details?.login ?? policy?.reimburserAccountID === accountID) { + if (isAuthorizedPayer) { authorizedPayerDetails.push(formattedMember); } else { policyAdminDetails.push(formattedMember); } }); return [policyAdminDetails, authorizedPayerDetails]; - }, [ - personalDetails, - policyMembers, - translate, - policy?.reimburserEmail, - isDeletedPolicyMember, - policy?.owner, - styles, - StyleUtils, - policy?.reimburserAccountID, - policy?.pendingFields?.reimburserEmail, - ]); + }, [personalDetails, policyMembers, translate, policy?.achAccount?.reimburser, isDeletedPolicyMember, policy?.owner, styles, StyleUtils, policy?.pendingFields?.reimburser]); const sections: MembersSection[] = useMemo(() => { const sectionsArray: MembersSection[] = []; @@ -169,13 +158,12 @@ function WorkspaceWorkflowsPayerPage({route, policy, policyMembers, personalDeta const setPolicyAuthorizedPayer = (member: MemberOption) => { const authorizedPayerEmail = personalDetails?.[member.accountID]?.login ?? ''; - if (policy?.reimburserEmail === authorizedPayerEmail || policy?.reimbursementChoice !== CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_YES) { + if (policy?.achAccount?.reimburser === authorizedPayerEmail || policy?.reimbursementChoice !== CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_YES) { Navigation.goBack(); return; } - const authorizedPayerAccountID = member.accountID; - Policy.setWorkspacePayer(policy?.id ?? '', authorizedPayerEmail, authorizedPayerAccountID); + Policy.setWorkspacePayer(policy?.id ?? '', authorizedPayerEmail); Navigation.goBack(); }; diff --git a/src/types/onyx/Policy.ts b/src/types/onyx/Policy.ts index 247eb64f48e9..a06dd28f85e3 100644 --- a/src/types/onyx/Policy.ts +++ b/src/types/onyx/Policy.ts @@ -190,6 +190,7 @@ type ACHAccount = { routingNumber: string; addressName: string; bankName: string; + reimburser: string; }; type AutoReportingOffset = number | ValueOf; @@ -391,12 +392,6 @@ type Policy = OnyxCommon.OnyxValueWithOfflineFeedback< /** Collection of tax rates attached to a policy */ taxRates?: TaxRatesWithDefault; - /** Email of the reimburser when reimbursement is set direct */ - reimburserEmail?: string; - - /** AccountID of the reimburser when reimbursement is set direct */ - reimburserAccountID?: number; - /** ReportID of the admins room for this workspace */ chatReportIDAdmins?: number; @@ -439,7 +434,7 @@ type Policy = OnyxCommon.OnyxValueWithOfflineFeedback< /** Indicates if the Policy ownership change is failed */ isChangeOwnerFailed?: boolean; } & Partial, - 'generalSettings' | 'addWorkspaceRoom' + 'generalSettings' | 'addWorkspaceRoom' | keyof ACHAccount >; export default Policy;