From 007a94a068f50bd668e65e66ee5e10072ee761c1 Mon Sep 17 00:00:00 2001 From: Julian Kobrynski Date: Wed, 12 Feb 2025 17:42:29 +0100 Subject: [PATCH 1/2] initialize options on MoneyRequestParticipantsSelector render --- src/components/OptionListContextProvider.tsx | 4 ---- src/libs/OptionsListUtils.ts | 7 ++----- src/libs/ReportUtils.ts | 3 ++- .../iou/request/MoneyRequestParticipantsSelector.tsx | 8 +++++++- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/components/OptionListContextProvider.tsx b/src/components/OptionListContextProvider.tsx index 09b996dc826e..885d70fa836b 100644 --- a/src/components/OptionListContextProvider.tsx +++ b/src/components/OptionListContextProvider.tsx @@ -139,10 +139,6 @@ function OptionsListContextProvider({children}: OptionsListProviderProps) { }, [personalDetails, reports]); const initializeOptions = useCallback(() => { - if (areOptionsInitialized.current) { - return; - } - loadOptions(); areOptionsInitialized.current = true; }, [loadOptions]); diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index 129c44767b18..90806297b85d 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -40,7 +40,7 @@ import Parser from './Parser'; import Performance from './Performance'; import {getDisplayNameOrDefault} from './PersonalDetailsUtils'; import {addSMSDomainIfPhoneNumber, parsePhoneNumber} from './PhoneNumber'; -import {canSendInvoiceFromWorkspace, getSubmitToAccountID} from './PolicyUtils'; +import {canSendInvoiceFromWorkspace} from './PolicyUtils'; import { getCombinedReportActions, getExportIntegrationLastMessageText, @@ -884,10 +884,7 @@ function getReportOption(participant: Participant): OptionData { option.alternateText = translateLocal('workspace.common.workspace'); if (report?.policyID) { - const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${report.policyID}`]; - const submitToAccountID = getSubmitToAccountID(policy, report); - const submitsToAccountDetails = allPersonalDetails?.[submitToAccountID]; - const subtitle = submitsToAccountDetails?.displayName ?? submitsToAccountDetails?.login; + const subtitle = getChatRoomSubtitle(report, {isCreateExpenseFlow: true}); if (subtitle) { option.alternateText = translateLocal('iou.submitsTo', {name: subtitle ?? ''}); diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index c7c92ac79469..ee01f4280307 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -4577,7 +4577,8 @@ function getChatRoomSubtitle(report: OnyxEntry, config: GetChatRoomSubti return report?.reportName?.substring(1) ?? ''; } if ((isPolicyExpenseChat(report) && !!report?.isOwnPolicyExpenseChat) || isExpenseReport(report)) { - const submitToAccountID = getSubmitToAccountID(getPolicy(report?.policyID), report); + const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`]; + const submitToAccountID = getSubmitToAccountID(policy, report); const submitsToAccountDetails = allPersonalDetails?.[submitToAccountID]; const subtitle = submitsToAccountDetails?.displayName ?? submitsToAccountDetails?.login; diff --git a/src/pages/iou/request/MoneyRequestParticipantsSelector.tsx b/src/pages/iou/request/MoneyRequestParticipantsSelector.tsx index 6303155eebbe..2c189ad698df 100644 --- a/src/pages/iou/request/MoneyRequestParticipantsSelector.tsx +++ b/src/pages/iou/request/MoneyRequestParticipantsSelector.tsx @@ -78,7 +78,7 @@ function MoneyRequestParticipantsSelector({participants = CONST.EMPTY_ARRAY, onF const policy = usePolicy(activePolicyID); const [isSearchingForReports] = useOnyx(ONYXKEYS.IS_SEARCHING_FOR_REPORTS, {initWithStoredValues: false}); const [currentUserLogin] = useOnyx(ONYXKEYS.SESSION, {selector: (session) => session?.email}); - const {options, areOptionsInitialized} = useOptionsList({ + const {options, areOptionsInitialized, initializeOptions} = useOptionsList({ shouldInitialize: didScreenTransitionEnd, }); const cleanSearchTerm = useMemo(() => debouncedSearchTerm.trim().toLowerCase(), [debouncedSearchTerm]); @@ -92,6 +92,12 @@ function MoneyRequestParticipantsSelector({participants = CONST.EMPTY_ARRAY, onF searchInServer(debouncedSearchTerm.trim()); }, [debouncedSearchTerm]); + useEffect(() => { + // This is necessary to ensure the options list is always up to date + // e.g. if the approver was changed in the policy, we need to update the options list + initializeOptions(); + }, [initializeOptions]); + const defaultOptions = useMemo(() => { if (!areOptionsInitialized || !didScreenTransitionEnd) { return { From a4f6257108758a64ce819e731977ca3f3c067645 Mon Sep 17 00:00:00 2001 From: Julian Kobrynski Date: Thu, 13 Feb 2025 10:31:00 +0100 Subject: [PATCH 2/2] revert subtitle logic in getReportOption --- src/libs/OptionsListUtils.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index 90806297b85d..129c44767b18 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -40,7 +40,7 @@ import Parser from './Parser'; import Performance from './Performance'; import {getDisplayNameOrDefault} from './PersonalDetailsUtils'; import {addSMSDomainIfPhoneNumber, parsePhoneNumber} from './PhoneNumber'; -import {canSendInvoiceFromWorkspace} from './PolicyUtils'; +import {canSendInvoiceFromWorkspace, getSubmitToAccountID} from './PolicyUtils'; import { getCombinedReportActions, getExportIntegrationLastMessageText, @@ -884,7 +884,10 @@ function getReportOption(participant: Participant): OptionData { option.alternateText = translateLocal('workspace.common.workspace'); if (report?.policyID) { - const subtitle = getChatRoomSubtitle(report, {isCreateExpenseFlow: true}); + const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${report.policyID}`]; + const submitToAccountID = getSubmitToAccountID(policy, report); + const submitsToAccountDetails = allPersonalDetails?.[submitToAccountID]; + const subtitle = submitsToAccountDetails?.displayName ?? submitsToAccountDetails?.login; if (subtitle) { option.alternateText = translateLocal('iou.submitsTo', {name: subtitle ?? ''});